ฉันทำงานด้านไอทีมามากกว่า 20 ปี แต่ฉันไม่เคยสนใจเรื่องคอนเทนเนอร์เลย ตามทฤษฎีแล้ว ฉันเข้าใจว่าพวกมันมีโครงสร้างอย่างไรและทำงานอย่างไร แต่เนื่องจากฉันไม่เคยพบพวกเขาในทางปฏิบัติ ฉันจึงไม่แน่ใจว่าเกียร์ใต้ฝากระโปรงของพวกเขาหมุนและหมุนได้อย่างไร
นอกจากนี้ฉันไม่รู้ว่าความปลอดภัยของพวกเขาเป็นอย่างไร แต่ขอย้ำอีกครั้งว่า ทฤษฎีนี้ฟังดูดี และเพลงเก่าๆ “เมื่อความปลอดภัยเพิ่มขึ้น การใช้งานก็ลดลง” ติดอยู่ในหัวของฉัน ดังนั้นฉันจึงคิดว่าเนื่องจากทุกอย่างทำได้ง่ายมากด้วยคอนเทนเนอร์ ดังนั้นความปลอดภัยจึงต่ำกว่ามาตรฐาน เมื่อปรากฎว่าฉันพูดถูก
เพื่อเริ่มต้นอย่างรวดเร็ว ฉันสมัครเรียนหลักสูตรต่างๆ
หลักสูตรนี้สอนโดย Sheila A. Berta และ Sol Ozzan โดยเริ่มต้นด้วยการอธิบายวิธีการทำงานของคอนเทนเนอร์ Docker และการเดินทางที่คอนเทนเนอร์ใช้เมื่อปรับใช้กับ Kubernetes ชั้นเรียนนี้เป็นชั้นเรียนแบบลงมือปฏิบัติจริง โดยนักเรียนต้องติดตั้ง Docker และ microk8s บนเครื่องก่อนเริ่มชั้นเรียน ซึ่งเป็นวิธีที่ยอดเยี่ยมในการดูว่าเครื่องมือโต้ตอบกันอย่างไร ค้นหาจุดอ่อน และที่สำคัญที่สุดคือพยายามบล็อกพวกมัน
น่าเสียดายที่แม้ว่าหลักสูตรต่างๆ สัญญาว่าจะกลายเป็น "เจ้าชาย" หลังจากผ่านไปสองวัน แต่ฉันรู้สึกว่าทุกอย่างเพิ่งเริ่มต้น และฉันยังมีอีกมากที่ต้องเรียนรู้
ก่อนที่จะดำดิ่งลงสู่การสังเกตอันสูงส่งของฉัน สิ่งสำคัญคือต้องอธิบายว่าคอนเทนเนอร์คืออะไร ในโลกของการพัฒนา เป็นเรื่องปกติที่โค้ดที่เขียนบนเครื่องส่วนบุคคลของคุณจะทำงานได้อย่างสมบูรณ์ แต่เมื่อคุณพยายามเรียกใช้บนเซิร์ฟเวอร์ที่ไหนสักแห่ง มันก็ไม่ทำงาน คอนเทนเนอร์พยายามแก้ไขปัญหานี้ด้วยการจัดหาเครื่องจักรที่มีในตัวเองซึ่งคุณสามารถย้ายจากเซิร์ฟเวอร์หนึ่งไปยังอีกเซิร์ฟเวอร์หนึ่งได้อย่างง่ายดาย โดยรู้ว่าพวกเขาจะทำงานอยู่เสมอ ตามชื่อเลย พวกมันประกอบด้วยโค้ด ไลบรารี และซอฟต์แวร์อื่น ๆ ที่จำเป็นในการทำงานให้สำเร็จ ในทางกลับกัน Kubernetes คือ
ด้านล่างนี้คือสิ่งที่ฉันค้นพบบางส่วนจากมุมมองของทีมสีแดงและสีน้ำเงิน
ทีมสีแดง
เนื้อหาคอนเทนเนอร์ส่วนใหญ่ทำงานเป็นรูท: ซึ่งหมายความว่าหากคอนเทนเนอร์ถูกบุกรุก คุณจะสามารถเข้าถึงคอนเทนเนอร์ได้อย่างเต็มที่ ทำให้ขั้นตอนต่อไปง่ายขึ้นมาก
การติดตั้ง docker.sock ภายในคอนเทนเนอร์เป็นสิ่งที่อันตราย: หากคุณมีรูทภายในคอนเทนเนอร์และติดตั้ง Docker ไว้ในคอนเทนเนอร์ที่มีซ็อกเก็ต Docker (/var/run/docker.sock) คุณมีศักยภาพที่จะสำรวจคลัสเตอร์ทั้งหมด รวมถึงการเข้าถึงคอนเทนเนอร์อื่น ๆ การเข้าถึงดังกล่าวไม่สามารถป้องกันได้โดยการแยกเครือข่ายหรือวิธีการอื่น
ตัวแปรสภาพแวดล้อมมักจะมีข้อมูลที่เป็นความลับ: ในกรณีส่วนใหญ่ ผู้คนจะส่งรหัสผ่านไปยังคอนเทนเนอร์โดยใช้ตัวแปรสภาพแวดล้อมปกติ ดังนั้นหากคุณมีสิทธิ์เข้าถึงบัญชี คุณสามารถสอดแนมตัวแปรสภาพแวดล้อมเหล่านี้เพื่อขยายอำนาจของคุณในภายหลัง
Docker API สามารถให้ข้อมูลได้มากมาย: เมื่อกำหนดค่า Docker API ตามค่าเริ่มต้นแล้ว จะทำงานโดยไม่ได้รับอนุญาตและสามารถสร้างข้อมูลได้มากมาย เมื่อใช้ Shodan คุณสามารถค้นหารายการพอร์ตที่เปิดอยู่ จากนั้นรับข้อมูลโดยละเอียดเกี่ยวกับคลัสเตอร์ และดำเนินการจับภาพแบบเต็มต่อไป TrendMicro เขียนเกี่ยวกับเรื่องนี้
ทีมสีฟ้า
อย่ารันเนื้อหาคอนเทนเนอร์ในฐานะรูท: แม้ว่าการรันในฐานะรูทจะง่ายกว่า แต่คุณก็ไม่ควรทำ ให้เรียกใช้แอปพลิเคชันที่มีสิทธิ์รีเซ็ตโดยแสดง uid แทน โดยใช้ตัวเลือก --user เมื่อเรียกใช้จาก CLI หรือโดยระบุ USER ใน Dockerfile
ไม่อนุญาตให้ติดตั้งซอฟต์แวร์ในคอนเทนเนอร์: เกือบทุกการโจมตีเริ่มต้นด้วยการปลูกอะไรบางอย่าง ตั้งแต่ nmap ถึง ifconfig ไปจนถึง Docker (ภายในคอนเทนเนอร์) การติดตั้งทุกอย่างในคอนเทนเนอร์ถือเป็นเรื่องปกติ ด้วยเหตุผลเดียวกัน คุณควรบล็อกพอร์ตที่ไม่ได้ใช้ทั้งหมดเสมอ นอกจากนี้ยังช่วยป้องกันไม่ให้คำสั่งควบคุมถูกส่งเมื่อเครื่องของคุณติดไวรัส นอกจากการป้องกันการติดตั้งโปรแกรมแล้ว ยังควรตรวจสอบให้แน่ใจว่าจำนวนแอปพลิเคชันขั้นต่ำที่จำเป็นในการทำงานให้สำเร็จนั้นได้รับการติดตั้งในคอนเทนเนอร์ด้วย
ปกป้อง docker.sock: จะต้องได้รับการป้องกันเนื่องจากมีการประมวลผลการสื่อสารระหว่างคอนเทนเนอร์และคลัสเตอร์ผ่านซ็อกเก็ตนี้ เนื่องจากฉันไม่ต้องการลงรายละเอียดในบทความนี้อ่าน
ใช้ความลับของนักเทียบท่าแทนตัวแปรสภาพแวดล้อม: มีความลับอยู่
หากบทความนี้ทำให้คุณสนใจคอนเทนเนอร์ คุณสามารถติดตั้ง Docker หรือ microk8s (Kubernetes เวอร์ชันเล็ก) ได้อย่างง่ายดาย
หลังจากติดตั้งแล้วคุณสามารถไปได้
หากคุณต้องการหรือจำเป็นต้องเรียนหลักสูตรที่ครอบคลุมเกี่ยวกับ Docker ซึ่งวิทยากรภาคปฏิบัติจะตรวจสอบเครื่องมือทั้งหมดตั้งแต่บทคัดย่อพื้นฐานไปจนถึงพารามิเตอร์เครือข่าย ความแตกต่างของการทำงานกับระบบปฏิบัติการและภาษาการเขียนโปรแกรมต่างๆ จากนั้นลอง "
ที่มา: will.com