docker build args - build args docker - docker build build arg

Docker Build Args: ช่องโหว่ที่ซ่อนเร้นสำหรับการรั่วไหลของข้อมูลลับในอิมเมจ

การสร้างอาร์กิวเมนต์: ความสะดวกสบายที่อาจบั่นทอนความปลอดภัย

คำสั่ง `build args` ใน Docker ช่วยให้ส่งค่าการกำหนดค่าได้ง่ายในระหว่างการสร้าง แต่ก็มีข้อเสียที่มักถูกมองข้าม นั่นคือ ค่าเหล่านั้นจะยังคงอยู่ในเมตาเดต้าและเลเยอร์ของอิมเมจ นักพัฒนามักคิดว่าค่าเหล่านี้จะหายไปหลังจากสร้างเสร็จ แต่ในความเป็นจริง คำสั่ง `build args` ใน Docker จะฝังค่าเหล่านั้นไว้ในประวัติของอิมเมจ Docker

⚠️ตัวอย่างที่ไม่ปลอดภัย มีไว้เพื่อการศึกษาเท่านั้น ห้ามนำไปใช้ในงานจริง

ใครก็ตามที่กำลังวิ่ง ประวัติ Docker or นักเทียบท่าตรวจสอบ จะพบ API_KEY ค่าที่ฝังอยู่ในเมตาเดตาของรูปภาพ เกิดขึ้นเนื่องจากคำสั่ง build arg ของ Docker build commitแต่ละขั้นตอนการสร้างเปรียบเสมือนชั้นถาวร

เวอร์ชันที่ปลอดภัย:

หมายเหตุให้ความรู้: หลีกเลี่ยงการแทรกข้อมูลลับผ่านอาร์กิวเมนต์การสร้าง Docker ให้ใช้... -ความลับ ตัวเชื่อมต่อที่ BuildKit จัดเตรียมไว้สำหรับข้อมูลที่ละเอียดอ่อน จะไม่ถูกเก็บไว้ในเลเยอร์หรือเมตาเดต้า

ความลับคงอยู่ได้อย่างไรในชั้นข้อมูลและเมตาเดตา

คำสั่งทุกคำสั่งใน Dockerfile จะสร้างเลเยอร์รูปภาพใหม่ แม้ว่าคุณจะเขียนทับหรือลบไฟล์ เลเยอร์ก่อนหน้าก็ยังคงอยู่ในแคช นี่คือเหตุผลที่ข้อมูลลับที่ถูกแทรกเข้าไปด้วยคำสั่ง `Docker build args` หรือ `build args Docker` จะคงอยู่ตลอดไป

⚠️ตัวอย่างที่ไม่ปลอดภัย มีไว้เพื่อการศึกษาเท่านั้น ห้ามนำไปใช้ในงานจริง

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

หมายเหตุให้ความรู้: ในการใช้งาน ข้อมูลสำคัญจะยังคงอยู่ในประวัติการใช้งาน ควรใช้การเชื่อมต่อลับแบบชั่วคราวแทนเพื่อปกป้องโทเค็นและข้อมูลประจำตัว

การตั้งค่าผิดพลาดที่พบบ่อยใน CI/CD Pipelines

In ทันสมัย pipelinesนักพัฒนามักส่งต่อความลับผ่านทางนี้ CI/CD สภาพแวดล้อมที่ใช้ Docker args หรือแคชที่ใช้ร่วมกัน พฤติกรรมนี้ทำให้ข้อมูลลับรั่วไหลไปยังบันทึกการทำงาน ตัวรันเนอร์ และแคชรีจิสทรี โดยมีนักวิ่งร่วมกันใน การกระทำของ GitHubGitLab CI หรือ เจนกิ้นส์ความลับเหล่านี้สามารถแพร่กระจายไปยังงานอื่นที่ไม่เกี่ยวข้องได้อย่างง่ายดาย

⚠️ตัวอย่างที่ไม่ปลอดภัย มีไว้เพื่อการศึกษาเท่านั้น ห้ามนำไปใช้ในงานจริง

ข้อมูลลับจะไปปรากฏอยู่ในบันทึกการสร้างและข้อมูลเมตาของอิมเมจ ซึ่งเป็นการละเมิดหลักการให้สิทธิ์ขั้นต่ำสุด เวอร์ชันที่ปลอดภัย: 

หมายเหตุให้ความรู้: หลีกเลี่ยง –สร้างอาร์กิวเมนต์ เพื่อความลับ ใน CI/CDไม่ควรส่งข้อมูลลับผ่านตัวแปรสภาพแวดล้อมหรือไฟล์บันทึก ควรใช้การจัดเก็บข้อมูลลับแบบชั่วคราวเสมอ

แนวทางปฏิบัติที่ดีที่สุดในการป้องกันการเปิดเผยความลับ

การป้องกันการรั่วไหลของข้อมูลลับเริ่มต้นจากการยอมรับว่าพารามิเตอร์การสร้าง Docker นั้นเป็นสาธารณะตามการออกแบบ มันเหมาะสำหรับการกำหนดค่า (เช่น แท็กเวอร์ชันหรือแฟล็กคุณสมบัติ) แต่ไม่เหมาะสำหรับข้อมูลประจำตัว

ปฏิบัติที่ดีที่สุด

  1. ใช้ BuildKit - ความลับ สำหรับข้อมูลที่ละเอียดอ่อน
  2. ห้ามกำหนดความลับผ่าน ARG หรือ ENV เด็ดขาด
  3. เพิ่ม .env, ความลับ/และ กำหนดค่า/ ไดเร็กทอรีไปยัง .ด็อกเกอร์เพิกเฉย.
  4. ใช้การสร้างแบบหลายขั้นตอน เพื่อแยกเวทีส่วนตัวออกจากเวทีอื่น
  5. ล้างแคช หลังจากขั้นตอนการสร้างที่ละเอียดอ่อน
  6. ตรวจสอบความถูกต้องของข้อมูลเมตาของภาพ ตรวจสอบประวัติการใช้งาน Docker ก่อนเผยแพร่

รายการตรวจสอบการป้องกันฉบับย่อ

  • ตรวจสอบไฟล์ Dockerfile ทั้งหมดสำหรับ อาร์กิวเมนต์การสร้าง Docker การใช้
  • แทนที่ข้อมูลประจำตัวด้วย BuildKit -ความลับ.
  • ทำให้มั่นใจ .ด็อกเกอร์เพิกเฉย ไม่รวมไฟล์ที่มีข้อมูลอ่อนไหว
  • sanitize CI/CD ตัวแปรสภาพแวดล้อม
  • ทำการสแกนข้อมูลลับโดยอัตโนมัติก่อนที่จะส่งภาพ

หมายเหตุให้ความรู้: หากค่าใด ๆ ถูกส่งผ่านอาร์กิวเมนต์การสร้าง Docker ค่าดังกล่าวจะกลายเป็นค่าถาวร ควรใช้การเมานต์แบบลับและขั้นตอนการสร้างที่แยกต่างหากเพื่อปกป้องข้อมูลที่ละเอียดอ่อน

ตรวจจับการใช้งาน Build Args ที่ไม่ปลอดภัยก่อนการปรับใช้

การสแกนอัตโนมัติมีความสำคัญอย่างยิ่งในการระบุรูปแบบ build args ของ Docker ที่มีความเสี่ยง ก่อนที่จะนำอิมเมจไปใช้งานจริง เครื่องมือต่างๆ เช่น เรื่องไม่สำคัญ, ฮาโดลินท์และ ไซเกนี สามารถตรวจจับข้อมูลประจำตัวที่ฝังอยู่ใน Dockerfile หรือเลเยอร์ของอิมเมจได้

ตัวอย่างโค้ดที่ใช้งานได้จริง พร้อมบริบทและกลไกควบคุม

ขั้นตอนนี้เป็นการควบคุมเชิงป้องกัน โดยจะบล็อกคำสั่ง build args ของ Docker ที่ไม่ปลอดภัยก่อนการปรับใช้

หมายเหตุให้ความรู้: กำหนดให้การสแกน Dockerfile เป็นสิ่งที่จำเป็น CI/CD ขั้นตอนต่างๆ เครื่องมืออัตโนมัติช่วยบังคับใช้มาตรฐานความสม่ำเสมอและความปลอดภัยของกระบวนการสร้างโปรแกรม

Xygeni ป้องกันการรั่วไหลของข้อมูลลับระหว่างการสร้างซอฟต์แวร์ได้อย่างไร

ไซเกนี ความลับด้านความปลอดภัย มีระบบตรวจจับเฉพาะทางสำหรับการใช้ Docker args ในทางที่ผิด เครื่องมือนี้ระบุคำจำกัดความ ARG ที่ไม่ปลอดภัย ติดตามค่าลับในขั้นตอนการสร้าง และทำเครื่องหมายข้อมูลประจำตัวที่หลงเหลืออยู่ในเมตาเดตาของรูปภาพหรือเลเยอร์ที่แคชไว้ โดยการผสานรวมเข้ากับของคุณ CI/CD pipelineโดยจะบังคับใช้นโยบายความปลอดภัยของ Docker build build arg ก่อนที่จะรวมหรือเผยแพร่เวอร์ชันใหม่

ตัวอย่างโค้ดการทำงานและการบังคับใช้ตามบริบท

เพิ่มงานนี้ลงในรายการของคุณ pipelineขั้นตอนการตรวจสอบความถูกต้องสำหรับการป้องกันอย่างต่อเนื่อง

หมายเหตุให้ความรู้: Xygeni บังคับใช้แนวทางปฏิบัติที่ปลอดภัยของ Docker โดยอัตโนมัติ ป้องกันการกำหนดค่าที่ไม่เหมาะสมระหว่างการสร้างระบบที่อาจทำให้ข้อมูลลับรั่วไหลข้ามสภาพแวดล้อมต่างๆ

สรุป: Docker ไม่ควรจัดการกับข้อมูลลับโดยใช้ Build Args

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

  • การใช้ BuildKit -ความลับ เพื่อตรวจสอบคุณสมบัติ
  • การแยกข้อมูลที่ละเอียดอ่อนในกระบวนการสร้างหลายขั้นตอน
  • ตรวจสอบหาค่าที่รั่วไหลก่อนการใช้งานจริง
  • การบังคับใช้นโยบายความปลอดภัยผ่าน Xygeni Code Security.

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

sca-tools-software-composition-analysis-tools
จัดลำดับความสำคัญ แก้ไข และรักษาความปลอดภัยความเสี่ยงด้านซอฟต์แวร์ของคุณ
สมัครบัญชีฟรีได้เลย
ไม่ต้องใช้บัตรเครดิต

รักษาความปลอดภัยให้กับการพัฒนาและส่งมอบซอฟต์แวร์ของคุณ

ด้วยชุดผลิตภัณฑ์ Xygeni