การรักษาความปลอดภัยนักเทียบท่าสำหรับสภาพแวดล้อมการผลิตได้อย่างไร

มาดูวิธีการชุบแข็งและรักษาความปลอดภัยให้กับ Docker สำหรับสภาพแวดล้อมการผลิต.


แม้ว่า นักเทียบท่า ทำให้นักพัฒนาซอฟต์แวร์และวิศวกร DevOps สามารถสร้างและปรับใช้แอปพลิเคชันได้อย่างรวดเร็วและยังมาพร้อมกับพื้นผิวการโจมตีขนาดใหญ่สำหรับแฮกเกอร์ไซเบอร์เพื่อใช้ประโยชน์จาก.

เราจะดูวิธีรักษาความปลอดภัย Docker บนแพลตฟอร์ม Linux จากสิ่งต่อไปนี้.

  • ข้อบกพร่องการกำหนดค่า
  • การเรียกใช้รหัสระยะไกล
  • บัฟเฟอร์โอเวอร์โฟลว์
  • ภาพปลอมและอื่น ๆ.

เราจะใช้เครื่องมือดังต่อไปนี้เช่น เซิร์ฟเวอร์ทนายความของนักเทียบท่า เพื่อลงนามภาพและ ความปลอดภัยม้านั่งนักเทียบท่า เพื่อตรวจสอบโฮสต์การกำหนดค่า daemon และอื่น ๆ.

ก่อนที่เราจะดำเนินการต่อเพื่อความปลอดภัยขอให้เป็นพื้นฐานแบบสัมผัส.

เทคโนโลยีคอนเทนเนอร์คืออะไร?

เทคโนโลยีคอนเทนเนอร์ช่วยให้นักพัฒนาซอฟต์แวร์หรือวิศวกร DevOps จัดทำแพ็คเกจแอปพลิเคชันเพื่อให้สามารถทำงานกับการอ้างอิงที่แยกได้จากกระบวนการอื่น.

มีเทคโนโลยีตู้คอนเทนเนอร์จำนวนมากในตลาดเช่น Apache Mesos, จรวด, LXC, และ นักเทียบท่า. แม้ว่าพวกเขาจะอยู่ในหมวดหมู่ของเทคโนโลยีภาชนะพวกเขาทำงานแตกต่างกัน.

ความแตกต่างระหว่าง VM & VE

โฮสต์เครื่องเสมือนแตกต่างจากโฮสต์สภาพแวดล้อมเสมือนอย่างสิ้นเชิง บนเครื่องเสมือนแต่ละแอปพลิเคชั่นคอนเทนเนอร์จะมาพร้อมกับชุดของไลบรารีและระบบปฏิบัติการในขณะที่แอปพลิเคชันโดยค่าเริ่มต้นบนโฮสต์สภาพแวดล้อมเสมือนเช่น lxc และนักเทียบท่าแบ่งปันเคอร์เนล Linux.

นักเทียบท่าคืออะไร?

นักเทียบท่าเป็นเทคโนโลยีตู้คอนเทนเนอร์ที่คนหลายล้านคนใช้เพื่อสร้างเว็บแอปพลิเคชันและปรับใช้จากการทดสอบกับสภาพแวดล้อมการผลิต.

เครื่องยนต์นักเทียบท่า

Docker Engine ประกอบด้วยสามองค์ประกอบ.

  • เซิร์ฟเวอร์: องค์ประกอบนี้เป็นกระบวนการที่ใช้เวลานานหรือ daemon รับผิดชอบการจัดการอิมเมจและคอนเทนเนอร์.
  • REST API: อินเทอร์เฟซนี้ทำให้เป็นไปได้สำหรับ docker daemon และเครื่องมือไคลเอ็นต์ docker ที่จะสื่อสาร.
  • เครื่องมือไคลเอ็นต์ Docker: เครื่องมือไคลเอนต์ Docker ใช้ประโยชน์จากส่วนประกอบ REST API เพื่อแจ้ง daemon ของนักเทียบเคียงเพื่อใช้งานแอปพลิเคชันแบบคอนเทนเนอร์.

Docker Trusted Registry

Docker Trusted Registry เป็นโซลูชันหน่วยเก็บข้อมูลภาพจาก Docker สำหรับธุรกิจแพลตฟอร์มองค์กร มันแตกต่างจาก ศูนย์กลางนักเทียบท่า.  ในขณะที่ฮับนักเทียบท่าโฮสต์อยู่ในคลาวด์ แต่รีจิสทรีที่เชื่อถือได้ของนักเทียบท่าเป็นโซลูชันการจัดเก็บในสถานที่สำหรับ Docker Enterprise Edition.

เชื่อมั่นในเนื้อหาของนักเทียบท่า

นักเชื่อถือเนื้อหาเชื่อถือได้ให้ความสามารถในการใช้ลายเซ็นข้อมูลสำหรับภาพที่ส่งและรับไปยังและจากการลงทะเบียนนักเทียบระยะไกลเช่นฮับนักเทียบท่า.

Linux Namespaces

Linux namespaces เป็นคุณสมบัติเคอร์เนลของ Linux ที่แยกแอปพลิเคชั่นที่บรรจุแล้วหรือกระบวนการที่ทำงานบนโฮสต์สภาพแวดล้อมเสมือนจากกระบวนการอื่น.

กลุ่มควบคุมลินุกซ์ (กลุ่ม)

กลุ่มควบคุม Linux เป็นคุณลักษณะเคอร์เนล Linux ที่ให้คุณจัดสรรทรัพยากรเช่นเวลา CPU, แบนด์วิดท์เครือข่าย, หน่วยความจำระบบและอื่น ๆ ไปยังกระบวนการที่ทำงานอยู่บนโฮสต์.

ความสามารถในการ

ใน Linux มีคุณลักษณะความปลอดภัยในระบบย่อยของเคอร์เนลซึ่งสามารถตั้งค่าหรือบังคับใช้เพื่อ จำกัด กระบวนการพิเศษเช่นกระบวนการที่ดำเนินการโดยผู้ใช้ที่มี UID 1 แม้ว่ากระบวนการที่มีสิทธิพิเศษหรือผู้ใช้สามารถข้ามการควบคุมการเข้าถึงโดยไม่ได้ตั้งใจ กฎความสามารถ.

ตอนนี้ให้ความสำคัญกับความปลอดภัย.

การรักษาความปลอดภัยโฮสต์ Docker

ในส่วนนี้เราจะดูวิธีการรักษาความปลอดภัยโฮสต์ที่นักเทียบท่าอยู่.

กำลังสแกนเคอร์เนล Linux

ก่อนที่คุณจะโฮสต์นักเทียบท่าบนแพลตฟอร์ม Linux คุณต้องตรวจสอบเคอร์เนลก่อน มีเครื่องมือโอเพนซอร์สหลายอย่างเช่น Lynis และ OpenVAS คุณสามารถใช้เพื่อสแกนเคอร์เนล Linux.

คัดลอกหรือลอกแบบโครงการ Lynis จาก Github โดยใช้คำสั่ง git clone.

git clone https://github.com/CISOfy/lynis.git

จากนั้นใช้คำสั่งด้านล่างเพื่อนำทางไปยังไดเรกทอรี lynis และตรวจสอบระบบ Linux.

cd lynis; ./lynis ระบบตรวจสอบ

เคอร์เนล Harden Linux

หลังจากที่คุณสแกนเคอร์เนล Linux เพื่อหาช่องโหว่ที่ใช้ระบบคุณสามารถเพิ่มการป้องกันอีกชั้นหนึ่งให้กับเคอร์เนลผ่าน grsecurity. มันมีคุณสมบัติด้านความปลอดภัยเช่นต่อไปนี้.

  • การป้องกันการเอารัดเอาเปรียบล้นของบัฟเฟอร์
  • / tmp ช่องโหว่การป้องกันการแข่งขัน
  • / proc ข้อ จำกัด ที่ไม่รั่วไหลข้อมูลเกี่ยวกับเจ้าของกระบวนการ.
  • การป้องกันการใช้รหัสโดยอำเภอใจในเคอร์เนลและอื่น ๆ.

เริ่มแรกคุณสามารถ ดาวน์โหลด แพทช์ฟรีจาก grsecurity และนำไปใช้กับเคอร์เนลปัจจุบันของคุณ แต่มันไม่อนุญาตให้มีการแพตช์ฟรีอีกต่อไป.

ติดตั้ง Docker ใน VM

แทนที่จะติดตั้ง Docker โดยตรงบนโฮสต์ Linux คุณสามารถเพิ่มการป้องกันอีกชั้นได้โดยติดตั้งไว้ในเครื่องเสมือน การดำเนินการดังกล่าวแม้ว่าจะมีปัญหาช่องโหว่กับเคอร์เนลโฮสต์ แต่จะไม่ส่งผลกระทบต่อคอนเทนเนอร์ของนักเทียบท่า.

การปกป้องสิทธิ์ของรูท

โดยค่าเริ่มต้น Docker ต้องการสิทธิ์พิเศษในการสร้างและจัดการคอนเทนเนอร์ สคริปต์ที่เป็นอันตรายสามารถใช้ประโยชน์จากพื้นผิวการโจมตีนี้เพื่อส่งต่อไปยัง superuser บนโฮสต์ Linux และในที่สุดก็เข้าถึงไฟล์ / โฟลเดอร์ภาพใบรับรอง ฯลฯ.

เพื่อป้องกันมันเราสามารถใช้ประโยชน์จากคำสั่งต่อไปนี้ เราสามารถตัดสินใจที่จะลดความสามารถเช่น setgid และ setuid เพื่อป้องกันโปรแกรมหรือกระบวนการอื่น ๆ จากการเปลี่ยน GID ของพวกเขาเป็น GID อื่นซึ่งอาจส่งผลให้มีสิทธิ์ในการเลื่อนระดับ คุณสามารถตรวจสอบ ที่นี่ สำหรับรายการนิยามความสามารถของ Linux.

คำสั่งด้านล่างใช้ apache webserver container และลดความสามารถ setgid และ setuid ผ่าน –cap-drop เพื่อป้องกันไม่ให้คอนเทนเนอร์ apache เปลี่ยน GID และ UID เป็น UID และ GID อื่น.

GID และ UID ในบริบทนี้หมายถึง ID กลุ่มและ ID ผู้ใช้ตามลำดับ.

นักเทียบท่าวิ่ง -d –cap-drop SETGID –cap-drop apache SETUID

ผู้ใช้ Docker

นอกเหนือจากการป้องกันโปรแกรมหรือกระบวนการอื่น ๆ คุณยังสามารถสร้างผู้ใช้เพื่อจัดการการทำงานของนักเทียบท่าเช่นการทำงานนักเทียบท่าแทนที่จะจัดการมันผ่าน superuser.

คุณสามารถเพิ่มหรือสร้างผู้ใช้นักเทียบท่าผ่านทางต่อไปนี้:

sudo groupadd docker

คำสั่งด้านบนสร้างกลุ่มที่เรียกว่านักเทียบท่า

ถัดไปสร้างผู้ใช้โดยใช้คำสั่งด้านล่าง:

sudo useradd ไมค์

สุดท้ายใช้คำสั่งด้านล่างเพื่อเพิ่มผู้ใช้ไมค์ไปยังกลุ่มนักเทียบท่าเพื่อจัดการการดำเนินงานนักเทียบท่า.

sudo usermod -aG docker mike

ผู้จัดการคอนเทนเนอร์ด้วย Cgroups

ในสภาพแวดล้อมการผลิตคุณอาจมีมากกว่าหนึ่งคอนเทนเนอร์.

หากคุณไม่ได้ติดตั้งกลุ่ม cg บนโฮสต์ของคุณคุณสามารถใช้คำสั่งต่อไปนี้เพื่อติดตั้งแล้วตรวจสอบ ที่นี่ (สำหรับ Ubuntu) เกี่ยวกับวิธีกำหนดค่า.

sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

เราสามารถจัดสรรตู้คอนเทนเนอร์ให้กับทรัพยากร CPU ที่ จำกัด ผ่านทาง –cpu-Shares และ –cpuset-cpus

ตัวอย่างคำสั่งต่อไปนี้แสดงกระบวนการคอนเทนเนอร์ prodnginx จะถูกดำเนินการเฉพาะบนแกนแรกผ่าน –cpuset-cpus และจัดสรร 20 CPU ผ่าน –cpu-share ในขณะที่กระบวนการคอนเทนเนอร์ proxnginx ถูกดำเนินการบนสองแกน CPU แรกและยังจัดสรร 20 ซีพียู.

นักเทียบท่า run -d – ชื่อ prodnginx –cpuset-cpus = 0 –cpu-Shares = 20 nginx
นักเทียบท่า run -d – ชื่อ testnginx –cpuset-cpus = 2 –cpu-Shares = 20 nginx

จากนั้นพิมพ์สถิติ docker command เพื่อดูการใช้งาน CPU โดย prodnginx และ testnginx container

รหัสคอนเทนเนอร์ชื่อ CPU% MEM การใช้งาน / จำกัด MEM% NET I / O บล็อก I / O
845bea7263fb ผลิตภัณฑ์ prodginx 57.69% 1.258MiB / 985.2MiB 0.13% 578B / 0B 1.33MB / 0B
189ba15e8258 testnginx 55.85% 1.25MiB / 985.2MiB 0.13% 578b / 0B 1.33MB / 0B

เป็นความคิดที่ดีที่จะกำหนด CPU-Shares สำหรับโฮสต์นักเทียบท่าเมื่อคุณมีคอนเทนเนอร์มากกว่าหนึ่งคอนเทนเนอร์ที่รันอยู่.

การจัดการคอนเทนเนอร์ด้วยเนมสเปซ

เนมสเปซสามารถป้องกันไม่ให้คอนเทนเนอร์ทำงานในฐานะผู้ใช้ที่มีสิทธิพิเศษซึ่งสามารถช่วยหลีกเลี่ยงการโจมตีเพิ่มระดับสิทธิ์.

เราสามารถเปิดใช้งาน namespace ในตัวเชื่อมต่อโดยใช้ไฟล์ / etc / subuid และ / etc / subgid ดังที่แสดงด้านล่าง.

  • สร้างผู้ใช้โดยใช้คำสั่ง adduser

sudo adduser dockremap

  • ตั้งค่า subuid สำหรับผู้ใช้ dockremap

sudo sh -c ‘echo dockremap: 400000: 65536 > / etc / subuid’

  • จากนั้นตั้งค่า subgid สำหรับผู้ใช้ dockremap

sudo sh -c ‘echo dockremap: 400000: 65536 > / etc / subgid’

  • เปิดไฟล์ daemon.json และเติมด้วยเนื้อหาต่อไปนี้เพื่อเชื่อมโยงแอตทริบิวต์ userns-remap กับ user dockremap

vi /etc/docker/daemon.json
{

"userns-remap": "dockremap"

}

  • กด: wq เพื่อบันทึกและปิดไฟล์ daemon.json และในที่สุดก็เริ่ม docker ใหม่เพื่อเปิดใช้งานเนมสเปซบนโฮสต์นักเทียบท่า

sudo /etc/init.d/docker ทำการรีสตาร์ท

การรักษาความปลอดภัย Docker Daemon

นอกจากนี้ยังจำเป็นต้องกำหนดค่า Docker daemon เพื่อให้แน่ใจว่าการสื่อสารที่ปลอดภัยระหว่างไคลเอนต์ Docker และ Docker daemon ผ่าน TLS.

ใช้คำสั่งต่อไปนี้เพื่อเปิดไฟล์ daemon.json และคัดลอกและวางเนื้อหาต่อไปนี้ (แทนที่ IP ด้วยตัวจริงของคุณ) ดังที่แสดงด้านล่าง

vi daemon.json
{
"การแก้ปัญหา": false,
"TLS": จริง,
"tlscert": "/var/docker/server.pem",
"tlskey": "/var/docker/serverkey.pem",
"เจ้าภาพ": ["TCP: //192.168.16.5: 2376"]
}

การรักษาความปลอดภัยส่วนประกอบนักเทียบท่า

มาดูวิธีการใช้เครื่องมือต่าง ๆ เช่น CodeNotary และ เซิร์ฟเวอร์ทนายความ เพื่อลงชื่อภาพเพื่อหลีกเลี่ยงการปลอมแปลงภาพ นอกจากนี้ยังจำเป็นต้องสแกนภาพเพื่อให้แน่ใจว่ารูปภาพไม่เต็มไปด้วยช่องโหว่

เราจะใช้เซิร์ฟเวอร์ทนายความของนักเทียบท่าเพื่อลงชื่อและตรวจสอบรูปภาพและการใช้งาน สมอเรือเครื่องยนต์ เพื่อสแกนภาพเพื่อหาช่องโหว่.

ตรวจสอบรูปภาพด้วย Notary Server

ก่อนที่เราจะสามารถใช้ประโยชน์จากเซิร์ฟเวอร์ Notary เพื่อลงนามภาพเราจำเป็นต้องดาวน์โหลดและติดตั้งส่วนประกอบของนักเทียบท่า เราจะใช้ Docker Compose เพื่อตั้งค่าเซิร์ฟเวอร์ทนายความ.

  • เรียกใช้คำสั่งด้านล่างเพื่อดาวน์โหลด Docker Compose เวอร์ชั่นล่าสุด

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s) – $ (uname -m)" -o / usr / local / bin / docker-compose

  • ใช้การอนุญาตที่อนุญาตให้ดำเนินการกับนักเขียนที่แสดงด้านล่าง

sudo chmod 700 / usr / local / bin / docker-compose

  • คุณสามารถทดสอบว่าคุณได้ติดตั้งนักเทียบท่าสำเร็จด้วยคำสั่งต่อไปนี้หรือไม่

นักเทียบท่าเขียน – รุ่น

  • ตอนนี้เราสามารถติดตั้งเซิร์ฟเวอร์ทนายความผ่านนักเทียบท่าเขียน

git clone https://github.com/theupdateframework/notary.git

  • คำสั่งดังกล่าวข้างต้นโคลนหรือคัดลอกเซิร์ฟเวอร์ทนายความจาก ที่เก็บทนายความ
  • เริ่มเซิร์ฟเวอร์ทนายความและผู้เซ็นชื่อด้วยคำสั่งด้านล่าง:

ประกอบสร้างนักเทียบท่า
นักเทียบท่าเขียนขึ้น -d

  • จากนั้นคัดลอกการกำหนดค่าและใบรับรองการทดสอบไปยังไดเรกทอรีทนายความท้องถิ่นของคุณโดยใช้คำสั่งด้านล่าง

mkdir -p ~ / .notary && cp cmd / notary / config.json cmd / notary / root-ca.crt ~ / .notary

  • ตอนนี้รันคำสั่งต่อไปนี้เพื่อเชื่อมต่อเซิร์ฟเวอร์ทนายความกับไคลเอนต์นักเทียบท่า

ส่งออก DOCKER_CONTENT_TRUST = 1
ส่งออก DOCKER_CONTENT_TRUST_SERVER = https: // notaryserver: 4443

  • สร้างคู่คีย์การมอบหมายผ่านคำสั่งด้านล่าง

คีย์ความไว้วางใจนักเทียบท่าสร้างไมค์ –dir ~. / นักเทียบท่า / ความไว้วางใจ

  • ตอนนี้ให้สร้างคีย์ใหม่เป้าหมายในกรณีที่ที่เก็บไม่มีอยู่

นักเทียบท่าที่เชื่อถือได้ผู้ลงนามเพิ่ม –key ~ / .docker / trust / mike.pub mike mikedem0 / whalesay

  • จากนั้นคุณสามารถลงนามภาพนักเทียบท่าของคุณโดยใช้คำสั่งไว้วางใจนักเทียบท่าคำสั่ง คุณต้องดึงภาพนักเทียบท่าจากฮับนักเทียบท่าและติดแท็กใหม่โดยใช้คำสั่งตัวดึงและนักเทียบท่าแท็กตามลำดับ.

นักเทียบท่าที่เชื่อถือได้ลงชื่อ mikedem0 / nginx: ล่าสุด

นอกจากนี้คุณยังสามารถสแกนภาพนักเทียบท่าเพื่อหาช่องโหว่และข้อบกพร่องในการกำหนดค่า คุณสามารถตรวจสอบที่นี่เพื่อค้นหาวิธีใช้ Anchor Engine เพื่อสแกนหาช่องโหว่และ ความปลอดภัยของ Docker Bench เพื่อตรวจสอบข้อบกพร่องของการกำหนดค่า.

ฉันหวังว่าข้างต้นจะช่วยให้คุณมีความคิดเกี่ยวกับการรักษาความปลอดภัย Docker สำหรับสภาพแวดล้อมการผลิต คุณอาจต้องการดูหลักสูตร Udemy นี้เกี่ยวกับ แฮ็คและการรักษาความปลอดภัยภาชนะ Docker.

Tags:

  • นักเทียบท่า

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map