out-of-tree v1.0.0 - เครื่องมือสำหรับการพัฒนาและทดสอบช่องโหว่และโมดูลเคอร์เนล Linux


out-of-tree v1.0.0 - เครื่องมือสำหรับการพัฒนาและทดสอบช่องโหว่และโมดูลเคอร์เนล Linux

เวอร์ชันแรก (v1.0.0) ของ out-of-tree ซึ่งเป็นชุดเครื่องมือสำหรับการพัฒนาและทดสอบช่องโหว่และโมดูลเคอร์เนล Linux ได้รับการเผยแพร่

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

โมดูลเคอร์เนลหรือการใช้ประโยชน์แต่ละรายการได้รับการอธิบายโดยไฟล์ .out-of-tree.toml ซึ่งระบุข้อมูลเกี่ยวกับสภาพแวดล้อมที่ต้องการและข้อจำกัด (หากเป็นการใช้ประโยชน์) ในการดำเนินการต่อหน้าการบรรเทาความปลอดภัยบางประการ

ชุดเครื่องมือยังช่วยให้คุณระบุเวอร์ชันเคอร์เนลเฉพาะที่ได้รับผลกระทบจากช่องโหว่ (โดยใช้คำสั่ง --guess) และยังสามารถใช้เพื่อลดความซับซ้อนในการค้นหาแบบไบนารีสำหรับคอมมิตเฉพาะได้อีกด้วย

ด้านล่างนี้คือรายการการเปลี่ยนแปลงตั้งแต่เวอร์ชัน v0.2

เพิ่มโดย

  • ปรับใช้ความสามารถในการจำกัดจำนวนเคอร์เนลที่สร้างขึ้น (ออโตเจนเคอร์เนลนอกแผนผัง) (ตามคำอธิบายใน .out-of-tree.toml) และตรวจสอบการรัน (ม้านั่งนอกแผนผัง) โดยใช้ —max= พารามิเตอร์เอ็กซ์

  • คำสั่ง genall ใหม่ ซึ่งช่วยให้คุณสร้างเคอร์เนลทั้งหมดสำหรับการแจกจ่ายและเวอร์ชันเฉพาะได้

  • ขณะนี้บันทึกทั้งหมดถูกจัดเก็บไว้ในฐานข้อมูล sqlite3 ใช้คำสั่งสำหรับการสืบค้นแบบง่ายๆ ที่จำเป็นบ่อย รวมถึงการส่งออกข้อมูลไปยัง json และ markdown

  • ดำเนินการคำนวณความน่าจะเป็นของการดำเนินการที่ประสบความสำเร็จ (ตามการเปิดตัวครั้งก่อน)

  • ความสามารถในการบันทึกผลลัพธ์บิลด์ (พารามิเตอร์ --dist ใหม่สำหรับคำสั่ง pew นอกแผนผัง)

  • รองรับการสร้างข้อมูลเมตาสำหรับเคอร์เนลที่ติดตั้งบนระบบโฮสต์ รวมถึงการสร้างบนโฮสต์โดยตรง

  • รองรับเคอร์เนลของบุคคลที่สาม

  • ขณะนี้สภาพแวดล้อมการดีบักนอกแผนผังจะค้นหาสัญลักษณ์การดีบักบนระบบโฮสต์โดยอัตโนมัติ

  • เพิ่มความสามารถในการจัดการการบรรเทาความปลอดภัยด้วยการเปิด/ปิดการใช้งานแฟล็ก KASLR, SMEP, SMAP และ KPTI ระหว่างการดีบัก

  • เพิ่มพารามิเตอร์ --threads=N ให้กับคำสั่งการทดสอบ pew นอกแผนผัง ซึ่งสามารถใช้เพื่อระบุจำนวนเธรดที่จะสร้าง/รัน และทดสอบช่องโหว่และโมดูลเคอร์เนล

  • ความสามารถในการตั้งค่าแท็กที่จะบันทึกไว้ในบันทึกแล้วสามารถนำมาใช้ในการคำนวณสถิติได้

  • เพิ่มความสามารถในการระบุเวอร์ชันเคอร์เนลโดยไม่ต้องใช้นิพจน์ทั่วไป

  • คำสั่ง pack ใหม่ใช้สำหรับการทดสอบช่องโหว่และโมดูลเคอร์เนลในไดเร็กทอรีย่อยจำนวนมาก

  • ในการกำหนดค่า (.out-of-tree.toml) สำหรับช่องโหว่และโมดูลเคอร์เนล ได้มีการเพิ่มความสามารถในการปิดใช้งาน KASLR, SMEP, SMAP และ KPTI รวมทั้งระบุจำนวนคอร์และหน่วยความจำที่ต้องการ

  • ตอนนี้รูปภาพ (rootfs) จะถูกโหลดโดยอัตโนมัติในขณะที่เคอร์เนล autogen กำลังทำงานอยู่ ไม่จำเป็นต้องใช้ bootstrap อีกต่อไป

  • รองรับเคอร์เนล CentOS

การเปลี่ยนแปลง

  • ตอนนี้ หากไม่มีอิมเมจ (rootfs) สำหรับเวอร์ชันที่ต้องการของการแจกจ่าย นอกแผนผังจะพยายามใช้อิมเมจของเวอร์ชันที่ใกล้เคียงที่สุด ตัวอย่างเช่น อิมเมจ Ubuntu 18.04 สำหรับ Ubuntu 18.10

  • ตอนนี้การทดสอบโมดูลเคอร์เนลจะไม่ถือว่าล้มเหลวหากขาดหายไป (ไม่มีการทดสอบ - ไม่มีข้อผิดพลาด!)

  • ตอนนี้อยู่นอกแผนผังจะส่งคืนรหัสข้อผิดพลาดเชิงลบหากอย่างน้อยหนึ่งขั้นตอน (สร้าง เรียกใช้หรือทดสอบ) บนคอร์ใด ๆ ล้มเหลว

  • โปรเจ็กต์ได้เปลี่ยนไปใช้โมดูล Go โดยตอนนี้แนะนำให้ใช้การสร้างด้วย GO111MODULE=on

  • เพิ่มการทดสอบเริ่มต้น

  • ตอนนี้ Test.sh จะถูกใช้เป็นค่าเริ่มต้น หากแอสเซมบลีใน ${TARGET__test ไม่ได้ถูกนำไปใช้ใน Makefile

  • บันทึกเคอร์เนลจะไม่ถูกล้างอีกต่อไปก่อนที่จะรันโมดูลเคอร์เนลหรือการหาประโยชน์ การหาประโยชน์บางส่วนใช้การรั่วไหลของฐานเคอร์เนลใน dmesg เพื่อเลี่ยงผ่าน KASLR ดังนั้นการล้างข้อมูลอาจทำให้ตรรกะที่นำไปใช้ของการหาประโยชน์เสียหาย

  • ขณะนี้ qemu/kvm ใช้ความสามารถทั้งหมดของโปรเซสเซอร์โฮสต์

ลบออก

  • โรงงานเคอร์เนล ถูกลบออกอย่างสมบูรณ์เนื่องจากการใช้งานการสร้างเคอร์เนลโดยยึดตาม Dockerfiles ที่อัปเดตแบบค่อยเป็นค่อยไป

  • bootstrap ไม่ได้ทำอะไรอย่างอื่น คำสั่งจะถูกลบออกในรุ่นถัดไป

แก้ไขแล้ว

  • บน macOS ไม่จำเป็นต้องเรียกใช้ GNU coreutils อีกต่อไป

  • ไฟล์ชั่วคราวถูกย้ายไปยัง ~/.out-of-tree/tmp/ เนื่องจากข้อผิดพลาดในการติดตั้งภายใน docker ในบางระบบ

ที่มา: linux.org.ru

เพิ่มความคิดเห็น