ได้มีการเสนอโหมดการสร้างที่ทำซ้ำได้เพื่อรวมไว้ในที่เก็บแพ็กเกจ nixpkgs ที่ใช้ในการแจกจ่าย NixOS ซึ่งช่วยให้สามารถระบุกรณีของแบ็คดอร์ในโค้ดได้ ซึ่งคล้ายกับเหตุการณ์ที่เกิดขึ้นกับโครงการ XZ วิธีการป้องกันที่นำเสนอช่วยให้สามารถตรวจจับการแก้ไขในไฟล์เก็บถาวรด้วยโค้ดต้นฉบับที่ไม่มีอยู่ในที่เก็บพร้อมโค้ด
สาระสำคัญของวิธีการนี้คือต้องประกอบโค้ดต้นฉบับของแอปพลิเคชันเวอร์ชันใหม่สองครั้ง ครั้งแรกจากโค้ดที่ดาวน์โหลดจากที่เก็บ git และครั้งที่สองจากโค้ดที่แจกจ่ายในไฟล์เก็บถาวรสำเร็จรูป หากไฟล์ไบนารีที่ได้มีความแตกต่างกัน ก็มีเหตุผลให้สงสัยว่ามีการปรับเปลี่ยนที่ซ่อนอยู่ในที่เก็บหรือในไฟล์เก็บถาวรพร้อมด้วยโค้ด
จำไว้ว่าในกรณีของโครงการ XZ นั้นที่เก็บที่มีโค้ดไม่มีการเปลี่ยนแปลงที่น่าสงสัยใดๆ ส่วนประกอบของมัลแวร์ที่สร้างแบ็คดอร์ถูกส่งภายในไฟล์ที่ใช้ในชุดการทดสอบเพื่อตรวจสอบการทำงานที่ถูกต้องของโปรแกรมคลายแพ็ก XZ แบ็คดอร์ถูกเปิดใช้งานที่ระดับระบบสร้าง และโค้ดต้นฉบับของ XZ เองก็ตรงกับโค้ดจากที่เก็บ แมโคร m4 ที่เปิดใช้งานแบ็คดอร์สำหรับชุดเครื่องมือ Automake จะถูกรวมไว้ในไฟล์เก็บถาวรโค้ดที่เสร็จสมบูรณ์เท่านั้น และไม่มีอยู่ในที่เก็บ
แบ็คดอร์ใน XZ ถูกสร้างขึ้นโดยผู้โจมตีซึ่งสามารถคว้าสถานะผู้ดูแลระบบในโครงการได้ การแนะนำของแบ็คดอร์ไม่ได้รับการสังเกตทันทีเนื่องจากการแจกจ่ายส่วนใหญ่สร้างแพ็คเกจโดยการดาวน์โหลดโค้ดจากไฟล์เก็บถาวรสำเร็จรูป เนื่องจากเมื่อดาวน์โหลดโค้ดสำหรับแอสเซมบลี คุณสามารถใช้แฮชซัมตรวจสอบความสมบูรณ์ของไฟล์กับไฟล์เก็บถาวรและใช้มิเรอร์ได้ จุดเน้นของการตรวจสอบโค้ดจะอยู่ที่การวิเคราะห์เนื้อหาของที่เก็บข้อมูล ดังนั้นความแตกต่างเพียงเล็กน้อยในไฟล์เก็บถาวรอาจไม่ชัดเจนทันทีเสมอไป
เพื่ออำนวยความสะดวกในการตรวจสอบความสอดคล้องของไฟล์เก็บถาวรและสแน็ปช็อตของที่เก็บข้อมูลที่เกี่ยวข้องกับการเผยแพร่ โปรเจ็กต์โอเพนซอร์สบางโปรเจ็กต์ เช่น PostgreSQL จึงได้นำระบบการสร้างไฟล์เก็บถาวรที่ทำซ้ำได้มาใช้ ในกรณีนี้ มีเครื่องมือที่ช่วยให้คุณประกอบไฟล์เก็บถาวรของคุณเองจากโค้ดได้อย่างอิสระ ซึ่งสอดคล้องกับไฟล์เก็บถาวรสำเร็จรูปที่มีให้ดาวน์โหลดได้ หากไฟล์เก็บถาวรที่สร้างโดยอิสระและไฟล์เก็บถาวรที่จัดทำโดยโครงการหลักแตกต่างกัน แสดงว่าที่เก็บข้อมูลหรือไฟล์เก็บถาวรอ้างอิงได้รับการบุกรุก
ปัญหาคือมีการใช้วิธีนี้เฉพาะในกรณีที่แยกกัน ขณะที่หลายๆ โปรเจ็กต์ยังคงรวมสิ่งประดิษฐ์เพิ่มเติมลงในไฟล์เก็บถาวรซึ่งไม่มีอยู่ในที่เก็บหลัก เช่น หน้าคู่มือ เอกสารประกอบ ตัวอย่าง สคริปต์การจัดแพคเกจการแจกจ่าย และไฟล์สร้างเพิ่มเติม สิ่งนี้เกิดขึ้นส่วนใหญ่เนื่องจากเหตุผลทางประวัติศาสตร์และข้อมูลจำเพาะของกระบวนการก่อตัวของการปล่อย การเปรียบเทียบเนื้อหาของที่เก็บข้อมูลและไฟล์เก็บถาวรแบบง่ายๆ ไม่เหมาะสมในกรณีนี้
วิธีแก้ปัญหาคือ ขอแนะนำให้รวบรวมไฟล์ไบนารีของรุ่นที่วางจำหน่ายทั้งจากที่เก็บ (ตัวอย่างเช่น คุณสามารถใช้ไฟล์เก็บถาวรที่สร้างโดยอัตโนมัติใน GitHub สำหรับแท็กรุ่นที่วางจำหน่าย) และจากไฟล์เก็บถาวรที่จัดเตรียมโดยผู้ดูแลระบบ จากนั้นจึงเปรียบเทียบผลลัพธ์ สำหรับการทดลอง การเปิดใช้การตรวจสอบดังกล่าวปัจจุบันมีการเสนอเฉพาะแพ็คเกจ "xz" เท่านั้น หากการทดสอบประสบความสำเร็จ จะมีการวางแผนทดสอบนำไปใช้ในแพ็คเกจอื่นใน nixpkgs
ที่มา: opennet.ru
