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

ฉันขอนำเสนอคำแนะนำเพื่อความปลอดภัยของนักเทียบท่า ยินดีรับคำติชม เนื่องจากนี่เป็นการรวบรวมข้อความที่ตัดตอนมาจากแหล่งข้อมูลต่างๆ มากกว่า และไม่ใช่ทั้งหมดที่ได้รับการตรวจสอบอย่างละเอียด คำแนะนำแบ่งออกเป็นสามประเภท:
- มาตรการที่จำเป็นภายในระบบปฏิบัติการโฮสต์เมื่อทำงานกับ Docker
- คำแนะนำที่เกี่ยวข้องกับไฟล์การกำหนดค่าบิลด์และการสร้างคอนเทนเนอร์
- เครื่องมือรักษาความปลอดภัยที่สามารถรวมเข้ากับคุณสมบัติเฉพาะของ Docker Enterprise
คู่มือนี้อิงจากแหล่งข้อมูลที่หลากหลาย ซึ่งหลายแหล่งมีรายการอยู่ด้านล่างนี้ ไม่ครอบคลุมแต่ครอบคลุมทุกฐาน สามารถดูข้อมูลเพิ่มเติมได้ในคำอธิบายการทดสอบ CIS (ลิงก์ท้ายคู่มือนี้) รวมถึงในเอกสารประกอบของ Docker
เกณฑ์มาตรฐานความปลอดภัยของนักเทียบท่า
จะตรวจสอบ Docker ของคุณโดยอัตโนมัติกับแนวทางปฏิบัติที่ดีที่สุดทั่วไป สคริปต์นี้เป็นการทดสอบความปลอดภัยแบบฮิวริสติกที่ดี แต่ไม่ควรถือเป็นเครื่องมือวิเคราะห์ที่ครอบคลุม
ระบบปฏิบัติการโฮสต์
แน่นอนว่าคอนเทนเนอร์ Docker ไม่สามารถรักษาความปลอดภัยได้ เว้นแต่ระบบโฮสต์จะปลอดภัย ดังนั้นจึงจำเป็นต้องปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดในการรักษาความปลอดภัยของระบบปฏิบัติการ นอกจากนี้ ควรทำการวิเคราะห์ช่องโหว่เพิ่มเติมจากคำแนะนำต่อไปนี้
กฎการตรวจสอบ
สร้างและใช้กฎการตรวจสอบสำหรับไฟล์ที่เกี่ยวข้องกับ Docker โดยใช้ auditctl- ตัวอย่างเช่น คุณสามารถเพิ่ม -w /usr/bin/dockerd -k docker к /etc/audit.rules และรีสตาร์ทบริการตรวจสอบ
โหมด FIPS
การเปิดใช้งานโหมด FIPS จะบังคับให้เครื่องมือเข้ารหัสลับเปลี่ยนไปใช้อัลกอริธึมที่อยู่ในรายการ FIPS (อเมริกัน - ประมาณ แปล.)จึงเป็นไปตามกฎระเบียบและข้อกำหนดของรัฐบาลกลางและอุตสาหกรรม หากระบบปฏิบัติการโฮสต์รองรับโหมด FIPS คุณสามารถเปิดใช้งานได้โดยการรันคำสั่งต่อไปนี้:
sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg && rebootคุณต้องเปิดใช้งาน FIPS ใน Docker Engine ด้วย:
mkdir -p /etc/systemd/system/docker.service.d 2>&1; echo -e "[Service]n Environment="DOCKER_FIPS=1"" > /etc/systemd/system/docker.service.d/fips-module.conf; systemctl daemon-reload; systemctl restart dockerสำหรับข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบ и .
ความลับของนักเทียบท่า
ข้อมูลที่เป็นความลับจะต้องเก็บเป็นความลับ คุณสามารถเริ่มบริการที่เกี่ยวข้องได้โดยใช้คำสั่งสร้างบริการนักเทียบท่า:
docker service create --label com.docker.ucp.access.label=/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginxสำหรับรายละเอียด โปรดดู .
ไฟล์คอนฟิกูเรชันนักเทียบท่า
สามารถเพิ่มการตั้งค่าต่อไปนี้ลงในไฟล์กำหนดค่าได้ /etc/docker/daemon.json:
-
"icc":false— ปิดการใช้งานการแลกเปลี่ยนข้อมูลระหว่างคอนเทนเนอร์เพื่อหลีกเลี่ยงการรั่วไหลของข้อมูลที่ไม่จำเป็น -
log-level: "info"— รวบรวมบันทึกทั้งหมด ยกเว้นบันทึกการแก้ไขข้อบกพร่อง { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } }— เปิดใช้งานการบันทึกระยะไกลและส่งต่อไปยังที่อยู่ที่ระบุ ใช้งานได้เฉพาะในกรณีที่ syslog daemon กำลังทำงานอยู่ TCP และ UDP ได้รับการยอมรับเป็นตัวเลือก นอกจากนี้ยังสามารถเชื่อมต่อสำหรับแต่ละคอนเทนเนอร์เฉพาะได้อีกด้วย เพื่อจุดประสงค์นี้ แฟล็กพิเศษจะถูกตั้งค่าเมื่อเปิดใช้งาน Docker (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Your_User"— ป้องกันการเพิ่มระดับสิทธิ์โดยการแยกเนมสเปซสำหรับผู้ใช้เฉพาะ
ความปลอดภัยของเลเยอร์การขนส่ง
เฉพาะผู้ใช้ที่มีสิทธิ์เข้าถึงข้อมูลรับรองไคลเอ็นต์ TLS เท่านั้นจึงจะสามารถเชื่อมต่อกับ Docker daemon ได้ (หากจำเป็นต้องมีการเข้าถึงระยะไกล)
ปลั๊กอินการอนุญาต
ตัดสินใจว่าผู้ใช้รายใดได้รับอนุญาตให้ดำเนินการคำสั่งใด และสร้างปลั๊กอินการอนุญาตที่เหมาะสมสำหรับ Docker จากนั้นเริ่ม Docker daemon และเพิ่มปลั๊กอินเข้าไป:
dockerd --authorization-plugin=PLUGIN_IDหากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการสร้างปลั๊กอินการอนุญาต โปรดดูที่ .
ตัวเลือกเดมอน
Docker daemon ทำงานด้วยชุดพารามิเตอร์เริ่มต้น
-
--live-restore— พารามิเตอร์นี้ช่วยลดเวลาหยุดทำงานของคอนเทนเนอร์เมื่อระบบถูกปิดหรือรีบูต การแพตช์หรืออัปเดตจะง่ายขึ้นโดยมีเวลาหยุดทำงานน้อยที่สุด -
--userland-proxy=false— เมื่อมีหรือใช้ Hairpin NAT พร็อกซีในพื้นที่ผู้ใช้จะกลายเป็นบริการสำรอง ซึ่งจะเพิ่มจำนวนเวกเตอร์การโจมตีที่เป็นไปได้เท่านั้น -
--no-new-privileges- ป้องกันไม่ให้คอนเทนเนอร์ได้รับสิทธิพิเศษเพิ่มเติมโดยใช้ suid หรือ sguid -
--seccomp-profile /path/to/profile- หากคุณมีโปรไฟล์ seccomp ของคุณเอง คุณสามารถนำไปใช้ได้โดยใช้แฟล็กนี้ คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Seccomp และ Docker .
การกำหนดค่าไฟล์คอนเทนเนอร์และบิลด์
การสร้างผู้ใช้
ตรวจสอบให้แน่ใจว่าผู้ใช้ถูกสร้างขึ้นสำหรับคอนเทนเนอร์และรันภายใต้ผู้ใช้นั้น (อย่าเรียกใช้คอนเทนเนอร์ในฐานะรูท)
การเข้าถึงระยะไกล
ปิดการใช้งานการเข้าถึง daemon จากระยะไกล หากคุณยังคงจำเป็นต้องใช้ ให้ปกป้องด้วยใบรับรอง
แยกเนมสเปซของผู้ใช้
สิ่งสำคัญอย่างยิ่งคือต้องแน่ใจว่าเนมสเปซผู้ใช้ใน Docker ถูกแยกออก เนื่องจากโดยค่าเริ่มต้นจะถูกแชร์กับเนมสเปซของโฮสต์ ในบางกรณี สามารถใช้เพื่อขยายสิทธิ์หรือแม้กระทั่งหลบหนีออกนอกคอนเทนเนอร์ได้ คุณสามารถแยกเนมสเปซผู้ใช้ได้โดยการแก้ไขไฟล์การกำหนดค่า (ตามที่อธิบายไว้ข้างต้นในส่วนไฟล์การกำหนดค่านักเทียบท่า) การกล่าวถึงปัญหานี้เพิ่มเติมที่นี่เนื่องมาจากความสำคัญ
ตรวจสุขภาพ
Healthcheck เป็นเครื่องมืออันทรงพลังที่ช่วยให้คุณสามารถตรวจสอบความสมบูรณ์ของคอนเทนเนอร์ได้ มันถูกกำหนดค่าใน Dockerfile โดยใช้คำแนะนำ HEALTHCHECK- การตรวจสุขภาพช่วยให้คุณมั่นใจได้ว่าคอนเทนเนอร์ทำงานอย่างถูกต้อง ในตัวอย่างด้านล่าง การตรวจสอบสภาพจะคืนค่า 0 หากเซิร์ฟเวอร์กำลังทำงานอยู่ และ 1 หากเซิร์ฟเวอร์ไม่ทำงาน:
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
ถ้า SELinux รองรับโดยระบบปฏิบัติการโฮสต์ สร้างหรือนำเข้านโยบาย SELinux และเรียกใช้ Docker ในโหมด daemon โดยเปิดใช้งาน SELinux:
docker daemon --selinux-enableในกรณีนี้ คุณสามารถเปิดใช้คอนเทนเนอร์ Docker ได้ด้วยการตั้งค่าความปลอดภัย เช่น:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashอินเตอร์เฟสเครือข่าย
ตามค่าเริ่มต้น Docker จะรับฟังอินเทอร์เฟซเครือข่ายทั้งหมด เนื่องจากในกรณีส่วนใหญ่คาดว่าจะมีการรับส่งข้อมูลเพียงแห่งเดียว วิธีการนี้จึงเพิ่มความเสี่ยงที่จะถูกโจมตีโดยไม่จำเป็น ดังนั้น เมื่อเริ่มต้นคอนเทนเนอร์ คุณสามารถผูกพอร์ตเข้ากับอินเทอร์เฟซเฉพาะบนโฮสต์ได้:
docker run --detach --publish 10.2.3.4:49153:80 nginxรูปภาพเวอร์ชันแคช
เมื่อดาวน์โหลดรูปภาพ ตรวจสอบให้แน่ใจว่าแคชในเครื่องตรงกับเนื้อหาของที่เก็บ มิฉะนั้น คุณอาจได้รูปภาพเวอร์ชันล้าสมัยหรือรูปภาพที่มีช่องโหว่
สะพานเครือข่าย
โมเดลเครือข่ายเริ่มต้น docker0มีความเสี่ยงที่จะถูกโจมตี เช่น การปลอมแปลง ARP และน้ำท่วม MAC เมื่อต้องการแก้ไขปัญหานี้ ให้สร้างบริดจ์เครือข่ายตามข้อกำหนดเฉพาะของคุณตามที่อธิบายไว้ .
คำเตือนซ็อกเก็ตนักเทียบท่า
ห้ามส่งต่อซ็อกเก็ต Docker ภายในคอนเทนเนอร์ มิฉะนั้นคอนเทนเนอร์จะสามารถดำเนินการคำสั่ง Docker ได้ ดังนั้นจึงสื่อสารกับและควบคุมระบบปฏิบัติการของโฮสต์ อย่าทำอย่างนั้น.
การกำหนดค่านักเทียบท่าองค์กร
นักเทียบท่าเชื่อถือ
Docker Trust ช่วยให้คุณสร้างคีย์ที่สามารถใช้เพื่อตรวจสอบความสมบูรณ์ของการเข้ารหัสของรูปภาพ สามารถใช้คีย์ Docker Trust เพื่อลงนามอิมเมจ Docker ด้วยคีย์ส่วนตัว ซึ่งได้รับการตรวจสอบโดยคีย์สาธารณะบน Notary Server ข้อมูลเพิ่มเติม - - การเปิดใช้งาน Docker Trust ใน Enterprise Engine มีรายละเอียดอยู่ใน .
การสแกนช่องโหว่
Docker Enterprise มีเครื่องสแกนช่องโหว่ในตัวที่ให้คุณดาวน์โหลดฐานข้อมูล CVE สำหรับการสแกนช่องโหว่ในรูปภาพแบบออฟไลน์ การสแกนรูปภาพเป็นประจำช่วยเพิ่มความปลอดภัย: ผู้ใช้จะได้รับคำเตือนเกี่ยวกับช่องโหว่ที่พบทันที สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการดำเนินการดังกล่าว โปรดดูที่ .
บันทึก. แปล: นอกจากนี้ยังมีเครื่องสแกนโอเพ่นซอร์สสำหรับช่องโหว่ในอิมเมจ Docker ซึ่งสามารถดูตัวอย่างได้ที่ส่วนท้ายของเนื้อหา
การบูรณาการ LDAP และ UCP
Universal Control Plane สามารถรวมเข้ากับ LDAP ได้ ผลลัพธ์ที่ได้คือระบบการตรวจสอบความถูกต้องที่เรียบง่ายซึ่งหลีกเลี่ยงการทำซ้ำโดยไม่จำเป็น คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในบทความ .
วัสดุอื่นๆ
ข้อมูลเพิ่มเติมเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยของ Docker สามารถดูได้ที่ - เราขอแนะนำให้ดาวน์โหลดด้วย .
โบนัสนักแปล
เพื่อเป็นการเพิ่มตรรกะให้กับบทความนี้ เราได้เผยแพร่รายการ 10 ยูทิลิตี้โอเพ่นซอร์สยอดนิยมสำหรับ Docker Security- มันถูกยืมมาจาก (โดย Bill Doerrfeld จาก Doerrfeld.io)
NB: อ่านเพิ่มเติมเกี่ยวกับหลายโครงการที่กล่าวถึงในบทความ “'
- เป็นสคริปต์ที่กล่าวถึงแล้วในตอนต้นของบทความที่จะตรวจสอบคอนเทนเนอร์ Docker ว่าสอดคล้องกับหลักปฏิบัติด้านความปลอดภัยทั่วไปหรือไม่

- — เป็นยูทิลิตี้ที่ได้รับความนิยมมากที่สุดสำหรับการวิเคราะห์ช่องโหว่แบบคงที่ในคอนเทนเนอร์ มันใช้ฐานข้อมูลช่องโหว่ CVE จำนวนมาก (รวมถึงตัวติดตามช่องโหว่ชั้นนำ) Linux- ระบบปฏิบัติการต่างๆ เช่น Red Hat, Debian, Ubuntu(มี API สำหรับนักพัฒนาและฟังก์ชันการขยายที่ง่าย (โดยการเพิ่ม "ไดรเวอร์") มีการใช้งานในแหล่งรวมอิมเมจคอนเทนเนอร์สาธารณะยอดนิยม (คล้ายกับ Docker Hub) อย่าง Quay.io
- เป็นโซลูชั่นสำหรับการรับรองความปลอดภัยของเครือข่ายในระดับเคอร์เนล โดยใช้เทคโนโลยีการกรองแพ็กเก็ตเครือข่าย BPF
- — ยูทิลิตี้สำหรับการวิเคราะห์เนื้อหาของรูปภาพเพื่อดูช่องโหว่ด้านความปลอดภัยตาม CVE นอกจากนี้ยังช่วยให้คุณใช้นโยบายที่กำหนดเอง (ตามข้อมูลต่างๆ รวมถึงรายการขาว/ดำ เนื้อหาไฟล์ ฯลฯ) เพื่อประเมินความปลอดภัยของคอนเทนเนอร์
- — ระบบนิเวศทั้งหมดสำหรับการสร้างและรักษานโยบายความปลอดภัยบนแพลตฟอร์มต่างๆ เสนอยูทิลิตี้ในการตรวจสอบภาชนะบรรจุ
oscap-docker. - — ยูทิลิตี้สำหรับการสแกนคอนเทนเนอร์ Docker เพื่อหาช่องโหว่ โทรจัน ไวรัส และมัลแวร์ ฐานข้อมูล CVE ประกอบด้วยการตรวจสอบการขึ้นต่อกันจาก OWASP, ฐานข้อมูล Red Hat Oval และพื้นที่เก็บข้อมูล Exploit Database Exploit
- เป็นเฟรมเวิร์กสำหรับการลงนามอิมเมจ Docker ซึ่งเดิมสร้างขึ้นที่ Docker Inc (จากนั้นถ่ายโอนเพื่อการพัฒนาไปยัง CNCF) การใช้งานทำให้คุณสามารถมอบหมายบทบาทและกระจายความรับผิดชอบระหว่างคอนเทนเนอร์ รวมถึงตรวจสอบความสมบูรณ์ของการเข้ารหัสของรูปภาพ
- — API สำหรับข้อมูลเมตา ออกแบบมาเพื่อจัดการนโยบายความปลอดภัยภายใน ตัวอย่างเช่น ช่วยให้คุณปรับปรุงประสิทธิภาพของเครื่องสแกนความปลอดภัยของคอนเทนเนอร์ได้ Shopify ใช้ API นี้เพื่อจัดการข้อมูลเมตาของรูปภาพจำนวน 500 รูป
- — ยูทิลิตี้ของ Kubernetes ที่ตรวจสอบพฤติกรรมของระบบ: กิจกรรมในคอนเทนเนอร์ บนโฮสต์ และบนเครือข่าย ช่วยให้คุณสามารถกำหนดค่าการตรวจสอบโครงสร้างพื้นฐานอย่างต่อเนื่อง การตรวจจับความผิดปกติ และการแจ้งเตือนสำหรับการเรียกใช้ระบบใดๆ Linux.
- - อีกเครื่องมือหนึ่งสำหรับการวิเคราะห์แบบคงที่ของอิมเมจคอนเทนเนอร์ Docker ช่วยให้คุณ “ดู” ไฟล์รูปภาพ รวบรวมข้อมูลที่จำเป็น ใช้นโยบายที่จำเป็น ฯลฯ
อีกหนึ่งคำแนะนำที่เป็นประโยชน์ที่ดี เกี่ยวกับวิธีการทำให้ Docker ปลอดภัยยิ่งขึ้นสามารถพบได้ใน บริษัทรักษาความปลอดภัย อควา เคล็ดลับของเธอหลายข้อทับซ้อนกับคำแนะนำที่กล่าวไปแล้วข้างต้น แต่ก็มีคำแนะนำอื่นๆ อีก ตัวอย่างเช่น ผู้เขียนแนะนำให้จัดระเบียบการติดตามกิจกรรมในคอนเทนเนอร์และระบุสิ่งที่ควรใส่ใจเมื่อใช้ Docker Swarm
สำหรับผู้ที่ต้องการเจาะลึกหัวข้อนี้โดยละเอียดยิ่งขึ้น ได้รับการเผยแพร่เมื่อปีที่แล้ว หนังสือ "»ชิ้นส่วนที่มีให้ใช้อย่างอิสระ .
สุดท้ายนี้ สำหรับการแนะนำเชิงปฏิบัติเกี่ยวกับแง่มุมบางประการของความปลอดภัยของ Docker ได้แก่ โปรไฟล์ Seccomp และการใช้ความสามารถ (capabilities) Linux-คอร์ในคอนเทนเนอร์ - คุณสามารถตรวจสอบรายละเอียดที่เกี่ยวข้องได้ ทำงานในห้องปฏิบัติการ * - ดูส่วน "ความปลอดภัย"

* เกี่ยวกับแหล่งข้อมูลนี้เองเรา เมื่อสองปีที่แล้วและในเดือนพฤศจิกายน 2018 เรื่องราวที่น่าสนใจมาก (จากมุมมองด้านความปลอดภัย) เกิดขึ้นกับเขา กล่าวโดยย่อคือผู้เชี่ยวชาญจาก CyberArk Software Ltd. จัดการเพื่อแฮ็กมัน: เพื่อให้บรรลุความสามารถในการรันคำสั่งนอกคอนเทนเนอร์เช่น บนระบบโฮสต์ ภาพประกอบที่สมบูรณ์แบบของปัญหาด้านความปลอดภัยใน Docker ใช่ไหม อ่านรายละเอียดทั้งหมดของสิ่งที่เกิดขึ้น .
ปล.จากผู้แปล
อ่านเพิ่มเติมในบล็อกของเรา:
- «";
- «";
- «";
- «";
- «";
- «'
ที่มา: will.com

