การแทรกตัวแปรสภาพแวดล้อมเข้าไปในกระบวนการสร้างคือ... standard การปฏิบัติในยุคสมัยใหม่ CI/CD pipelineทีมต่างๆ ใช้วิธีการแทรกตัวแปรสภาพแวดล้อมเข้าไปในกระบวนการสร้าง เพื่อส่งผ่านข้อมูลลับ โทเค็น และการกำหนดค่ารันไทม์เข้าไปในบิลด์โดยไม่ต้องเขียนค่าแบบตายตัว ในแง่ผิวเผิน วิธีนี้ดูเหมือนจะเป็นรูปแบบที่เรียบง่ายและปลอดภัย
อย่างไรก็ตาม ในทางปฏิบัติแล้ว ความเสี่ยงนี้มักกลายเป็นหนึ่งในความเสี่ยงที่ถูกประเมินต่ำเกินไปมากที่สุดในห่วงโซ่อุปทานซอฟต์แวร์
เพราะเมื่อทีมต่างๆ แทรกตัวแปรสภาพแวดล้อมเข้าไปในกระบวนการสร้างแล้ว ค่าเหล่านั้นจะไม่ถูกแยกออกจากกันอีกต่อไป แต่จะสามารถเข้าถึงได้จากทุกสิ่งที่ทำงานอยู่ภายในนั้น pipelineสคริปต์การสร้าง, เครื่องมือ CLI, การกระทำของบุคคลที่สาม และแม้แต่ส่วนประกอบต่างๆ สามารถอ่านไฟล์เหล่านี้ได้
นี่แหละคือจุดที่ทุกอย่างเริ่มพังทลาย
ในคู่มือนี้ เราจะอธิบายวิธีการที่ทีมต่างๆ แทรกตัวแปรสภาพแวดล้อมเข้าไปในกระบวนการสร้างในสถานการณ์จริง pipelineรวมถึงจุดที่การรั่วไหลเกิดขึ้นจริง และวิธีการรักษาความปลอดภัยของกระบวนการสร้างโดยไม่ทำให้การพัฒนาช้าลง
การแทรกตัวแปรสภาพแวดล้อมเข้าไปในกระบวนการสร้างหมายความว่าอย่างไร
โดยหลักการแล้ว การแทรกตัวแปรสภาพแวดล้อมหมายถึงการส่งค่าเข้าไปในตัวแปรเหล่านั้น pipeline ในระหว่างการทำงาน เพื่อให้งานต่างๆ สามารถเข้าถึงข้อมูลเหล่านั้นได้ในระหว่างการดำเนินการ
ค่าเหล่านี้โดยทั่วไปประกอบด้วยคีย์ API, ข้อมูลประจำตัวฐานข้อมูล, โทเค็น หรือการกำหนดค่าเฉพาะสภาพแวดล้อม แทนที่จะจัดเก็บค่าเหล่านี้โดยตรงในโค้ด CI/CD ระบบจะโหลดข้อมูลเหล่านั้นแบบไดนามิกเมื่อเริ่มการสร้าง
นี่เป็นการแก้ปัญหาที่แท้จริง มันทำให้โค้ดสะอาด หลีกเลี่ยงการทำซ้ำ และช่วยให้ทำสิ่งเดียวกันได้ pipeline สามารถใช้งานได้ในสภาพแวดล้อมการทดสอบ การพัฒนา และการใช้งานจริง
อย่างไรก็ตาม โมเดลนี้อาศัยสมมติฐานที่ไม่เป็นจริงอีกต่อไปแล้ว นั่นคือ สภาพแวดล้อมในการสร้างนั้นสามารถควบคุมและคาดการณ์ได้
ทันสมัย pipelineไม่ใช่ทั้งสองอย่าง มันประกอบด้วยหลายขั้นตอน การบูรณาการภายนอก และการพึ่งพาที่เรียกใช้โค้ดแบบไดนามิก ดังนั้น เมื่อมีการแทรกตัวแปรแล้ว มันจะไม่ใช่แค่การกำหนดค่าอีกต่อไป มันจะกลายเป็นส่วนหนึ่งของบริบทการทำงาน
จุดที่ตัวแปรสภาพแวดล้อมรั่วไหลในกระบวนการสร้างโปรแกรม
การรั่วไหลของข้อมูลส่วนใหญ่ไม่ได้เกิดขึ้นเพราะมีคนเปิดเผยความลับโดยเจตนา แต่เกิดขึ้นเพราะ... pipelineตัวแปร s มีพฤติกรรมที่นักพัฒนาซอฟต์แวร์คาดไม่ถึงอย่างเต็มที่
ตัวอย่างเช่น นักพัฒนาอาจเปิดใช้งานการบันทึกแบบละเอียดเพื่อแก้ไขข้อผิดพลาดในการสร้างโปรแกรม เครื่องมือ CLI อาจพิมพ์ตัวแปรสภาพแวดล้อมเป็นส่วนหนึ่งของผลลัพธ์ และไลบรารีที่พึ่งพาอาจเข้าถึงตัวแปรของกระบวนการโดยไม่แจ้งให้ทราบล่วงหน้าในระหว่างการทำงาน
การกระทำแต่ละอย่างดูไม่น่าสงสัยเมื่อพิจารณาแยกกัน แต่เมื่อรวมกันแล้วจะสร้างช่องโหว่หลายช่องทาง
ความลับอาจจบลงที่:
- บันทึกการสร้างที่ถูกจัดเก็บและจัดทำดัชนี
- ข้อมูลการแก้ไขข้อผิดพลาดที่แชร์ระหว่างทีม
- การดำเนินการ CI ของบุคคลที่สามที่เรียกใช้โค้ดภายนอก
- ส่วนประกอบที่จำเป็นซึ่งทำงานระหว่างการติดตั้งหรือขณะใช้งาน
- สิ่งตกค้างชั่วคราวที่เกิดขึ้นระหว่างการสร้าง
เมื่อความลับปรากฏในบันทึกแล้ว มักจะไม่ถูกจำกัดอยู่แค่ในบันทึกเท่านั้น บันทึกจะถูกคัดลอก จัดเก็บ และเก็บรักษาไว้ในหลายระบบ ณ จุดนั้น การรั่วไหลของข้อมูลจะขยายวงกว้างออกไปไกลเกินกว่าที่เดิมจะรับรู้ได้ pipeline.
นี่จึงเป็นเหตุผลว่าทำไมการรั่วไหลของตัวแปรสภาพแวดล้อมจึงมักถูกค้นพบช้า และหลังจากที่ความเสียหายเกิดขึ้นแล้ว
เหตุใดทีมจึงแทรกตัวแปรสภาพแวดล้อมเข้าไปในกระบวนการสร้างโปรแกรม
ถึงแม้จะมีความเสี่ยงเหล่านี้ ทีมต่างๆ ก็ยังพึ่งพาการฉีดตัวแปรสภาพแวดล้อมอย่างมาก และก็มีเหตุผลที่ดีด้วย
มันเปิดใช้งาน pipelineเพื่อให้มีความยืดหยุ่น เวิร์กโฟลว์เดียวสามารถปรับให้เข้ากับสภาพแวดล้อมต่างๆ ยืนยันตัวตนกับบริการหลายอย่าง และเปลี่ยนแปลงพฤติกรรมแบบไดนามิกโดยไม่ต้องแก้ไขโค้ด
ในสภาพแวดล้อม DevOps ที่เปลี่ยนแปลงอย่างรวดเร็ว ความยืดหยุ่นนี้เป็นสิ่งสำคัญ อย่างไรก็ตาม ความยืดหยุ่นมักมาพร้อมกับข้อแลกเปลี่ยน ยิ่งมีความเปลี่ยนแปลงมากเท่าไหร่ ความยืดหยุ่นก็ยิ่งมากขึ้นเท่านั้น pipeline ยิ่งซับซ้อนมากเท่าไหร่ การควบคุมสิ่งที่เกิดขึ้นภายในก็ยิ่งยากขึ้นเท่านั้น ทุกขั้นตอน การบูรณาการ หรือการพึ่งพาที่เพิ่มเข้ามา จะเพิ่มจำนวนสถานที่ที่สามารถเข้าถึงข้อมูลที่ละเอียดอ่อนได้
ด้วยเหตุนี้ การแทรกตัวแปรสภาพแวดล้อมจึงเปลี่ยนจากรายละเอียดการกำหนดค่าไปเป็นปัญหาด้านความปลอดภัย
ความเสี่ยงทั่วไปเมื่อคุณแทรกตัวแปรสภาพแวดล้อมเข้าไปในกระบวนการสร้างโปรแกรม
ความเสี่ยงเหล่านี้ไม่ใช่เรื่องสมมติ แต่ปรากฏให้เห็นในความเป็นจริง pipelineทุกวัน
ข้อมูลลับรั่วไหลเข้าไปในไฟล์บันทึก
บันทึกข้อมูลเป็นหนึ่งใน แหล่งที่มาของการสัมผัสที่พบได้บ่อยที่สุดแฟล็กการดีบัก เครื่องมือ CLI และข้อมูลการติดตามการทำงานของโปรแกรม มักเปิดเผยค่าที่สำคัญโดยที่นักพัฒนาไม่ทันสังเกต
เมื่อค่าเหล่านั้นถูกเปิดเผยออกมา ก็จะแพร่กระจายไปทั่วระบบอย่างรวดเร็ว
การเข้าถึงที่มากเกินไป
หลาย pipelineการเปิดเผยตัวแปรทั้งหมดให้กับทุกงานนั้นก่อให้เกิดความเสี่ยงที่ไม่จำเป็น
หากขั้นตอนใดขั้นตอนหนึ่งถูกบุกรุก ระบบอาจเข้าถึงข้อมูลประจำตัวที่ไม่จำเป็นต้องใช้ได้
การพึ่งพาและการกระทำในทางที่ผิด
ทันสมัย pipelineระบบเหล่านี้พึ่งพาเครื่องมือและการผสานรวมจากภายนอกเป็นอย่างมาก ส่วนประกอบเหล่านี้ทำงานอยู่ภายในสภาพแวดล้อมเดียวกับข้อมูลลับของคุณ
หากตัวใดตัวหนึ่งมีพฤติกรรมที่เป็นอันตราย มันสามารถเข้าถึงตัวแปรที่ถูกแทรกเข้าไปได้อย่างเงียบๆ
ตามที่ OWASPการโจมตีห่วงโซ่อุปทานมักใช้ประโยชน์จากส่วนประกอบที่เชื่อถือได้ในกระบวนการสร้าง โดยตัวแปรสภาพแวดล้อมมักกลายเป็นเป้าหมายที่ง่ายที่สุด
ความลับสำรองในโค้ด
เมื่อการสร้างล้มเหลวเนื่องจากตัวแปรหายไป ทีมงานบางครั้งจะเพิ่มค่าสำรองเพื่อแก้ไขปัญหา pipelineกำลังวิ่งอยู่
เมื่อเวลาผ่านไป ค่าเหล่านี้จะ... commitถูกนำไปใช้งานหรือประจำการ ทำให้เกิดการสัมผัสในระยะยาว
แนวทางปฏิบัติที่ดีที่สุดในการแทรกตัวแปรสภาพแวดล้อมเข้าสู่กระบวนการสร้างอย่างปลอดภัย
| Category | ปฏิบัติที่ดีที่สุด | ทำไมมันสำคัญ |
|---|---|---|
| การเก็บรักษาความลับ | ใช้ระบบรักษาความปลอดภัยข้อมูลหรือตัวจัดการความลับ CI | ป้องกันการเปิดเผยข้อมูลในโค้ด |
| การควบคุมการเข้าถึง | จำกัดการเข้าถึงต่องาน | ลดพื้นที่เสี่ยงต่อการโจมตี |
| เข้าสู่ระบบ | ค่าที่ไวต่อหน้ากาก | ป้องกันการรั่วไหล |
| ขอบเขตและอายุการใช้งาน | ใช้ข้อมูลประจำตัวที่มีอายุสั้น | จำกัดรัศมีของการระเบิด |
| การตรวจสอบ | สร้างโปรแกรมไม่สำเร็จหากตัวแปรบางตัวหายไป | หลีกเลี่ยงการสำรองข้อมูลที่ไม่ปลอดภัย |
ทำไมหลายคน CI/CD เครื่องมือรักษาความปลอดภัย ตรวจจับการรั่วไหลของตัวแปรสภาพแวดล้อม
เครื่องมือรักษาความปลอดภัยส่วนใหญ่จะเน้นการสแกนโค้ดหรือส่วนประกอบต่างๆ หลังจากที่การสร้างเสร็จสมบูรณ์แล้ว
อย่างไรก็ตาม การรั่วไหลของตัวแปรสภาพแวดล้อมเกิดขึ้นระหว่างการดำเนินการ
A pipeline สามารถแทรกข้อมูลลับได้อย่างถูกต้อง แต่ก็ยังสามารถเปิดเผยข้อมูลเหล่านั้นผ่านบันทึกหรือพฤติกรรมขณะทำงานได้ กว่าที่โปรแกรมสแกนจะตรวจพบปัญหา ข้อมูลลับอาจถูกเปิดเผยไปแล้วก็ได้
สิ่งนี้ทำให้เกิดช่องว่างระหว่างการตรวจจับและการป้องกัน
ทีมต่างๆ จำเป็นต้องมีระบบควบคุมที่ทำงานได้ในขณะที่... pipeline กำลังดำเนินการ ไม่ใช่หลังจากที่ดำเนินการเสร็จสิ้นแล้ว
เราแนะนำวิธีการรักษาความปลอดภัยในการฉีดตัวแปรสภาพแวดล้อมอย่างไร
ในทางปฏิบัติ การป้องกันที่มีประสิทธิภาพนั้นขึ้นอยู่กับหลักการพื้นฐานไม่กี่ข้อที่สอดคล้องกัน
เก็บความลับไว้ข้างนอก pipelineแทรกข้อมูลเหล่านี้เฉพาะในระหว่างการทำงานเท่านั้น จำกัดการเข้าถึงให้อยู่ในขอบเขตที่จำเป็นขั้นต่ำ ใช้ข้อมูลรับรองที่มีอายุสั้นทุกครั้งที่เป็นไปได้
ในขณะเดียวกัน ให้ติดตามดูว่า... pipelineการเข้าถึงข้อมูลที่มีค่าละเอียดอ่อน รูปแบบการเข้าถึงที่ไม่คาดคิดมักบ่งชี้ถึงความเสี่ยงก่อนที่การรั่วไหลจะปรากฏให้เห็น
แนวทางนี้เปลี่ยนระบบรักษาความปลอดภัยจากการตรวจจับเชิงรับไปเป็นการควบคุมเชิงรุก
Xygeni ช่วยปกป้องคุณได้อย่างไร CI/CD การฉีดลับ
แทนที่จะพึ่งพาการสแกนหลังการสร้างเพียงอย่างเดียว Xygeni วิเคราะห์ว่า... pipelineโปรแกรมเหล่านี้ใช้ตัวแปรสภาพแวดล้อมขณะทำงาน ซึ่งรวมถึงวิธีการที่ข้อมูลลับเคลื่อนย้ายระหว่างงานต่างๆ วิธีที่ขั้นตอนการสร้างเข้าถึงข้อมูลลับเหล่านั้น และวิธีที่ส่วนประกอบต่างๆ โต้ตอบกับสภาพแวดล้อมการทำงาน
ตัวอย่างเช่น Xygeni สามารถตรวจจับได้เมื่อ... pipeline เปิดเผยตัวแปรในวงกว้างเกินไป เมื่อขั้นตอนหนึ่งเสี่ยงต่อการพิมพ์ค่าที่ละเอียดอ่อนลงในบันทึก หรือเมื่อส่วนประกอบที่เกี่ยวข้องพยายามเข้าถึงข้อมูลประจำตัวโดยไม่คาดคิด
ในเวลาเดียวกัน, guardrails บังคับใช้นโยบายโดยตรงใน pipelineทีมสามารถบล็อกการสร้างที่ไม่ปลอดภัย จำกัดการเข้าถึงข้อมูลลับเฉพาะงานที่กำหนด และป้องกันการกำหนดค่าที่มีความเสี่ยงก่อนที่จะนำไปใช้งานจริงได้
เนื่องจากเหตุการณ์นี้เกิดขึ้นภายใน CI/CD เมื่อเวิร์กโฟลว์เสร็จสมบูรณ์ นักพัฒนาไม่จำเป็นต้องเปลี่ยนวิธีการทำงาน ความปลอดภัยจะกลายเป็นส่วนหนึ่งของเวิร์กโฟลว์ pipelineไม่ใช่ขั้นตอนแยกต่างหาก
ด้วยเหตุนี้ ทีมงานจึงสามารถมองเห็นภาพรวมของการนำความลับไปใช้ ควบคุมวิธีการเปิดเผยความลับ และลดความเสี่ยงของการรั่วไหลโดยไม่ทำให้การส่งมอบงานล่าช้าลง
ข้อสรุป
อย่างไรก็ตาม มันยังก่อให้เกิดความเสี่ยงอีกชั้นหนึ่งซึ่งมักถูกมองข้ามไป
ความท้าทายไม่ได้อยู่ที่ว่าจะใช้ตัวแปรสภาพแวดล้อมหรือไม่ แต่เป็นวิธีการควบคุมการเข้าถึงตัวแปรเหล่านั้นในระหว่างการประมวลผลต่างหาก
ในสภาพแวดล้อม DevOps สมัยใหม่ การป้องกันการรั่วไหลระหว่างกระบวนการสร้างมีความสำคัญมากกว่าการตรวจจับการรั่วไหลหลังจากนั้นมาก




