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

Kees Cook อดีตหัวหน้าผู้ดูแลระบบของ kernel.org และผู้นำทีมรักษาความปลอดภัย Ubuntu ซึ่งปัจจุบันทำงานที่ Google เกี่ยวกับการรักษาความปลอดภัย Android และ ChromeOS ได้เผยแพร่ชุดแพทช์เพื่อสุ่มออฟเซ็ตในเคอร์เนลสแต็กเมื่อประมวลผลการเรียกของระบบ แพทช์ปรับปรุงความปลอดภัยของเคอร์เนลโดยการเปลี่ยนตำแหน่งของสแต็ก ทำให้การโจมตีบนสแต็กยากขึ้นมากและประสบความสำเร็จน้อยลง การใช้งานครั้งแรกรองรับโปรเซสเซอร์ ARM64 และ x86/x86_64

แนวคิดดั้งเดิมสำหรับแพตช์เป็นของโปรเจ็กต์ PaX RANDKSTACK ในปี 2019 Elena Reshetova วิศวกรจาก Intel พยายามสร้างการนำแนวคิดนี้ไปใช้ที่เหมาะสมสำหรับการรวมไว้ในเคอร์เนล Linux หลัก ต่อมา Kees Cook เป็นผู้ริเริ่มริเริ่ม ซึ่งนำเสนอการใช้งานที่เหมาะสมกับเคอร์เนลเวอร์ชันหลัก แพตช์นี้มีแผนที่จะรวมเป็นส่วนหนึ่งของการเปิดตัว 5.13 โหมดนี้จะถูกปิดใช้งานตามค่าเริ่มต้น หากต้องการเปิดใช้งาน จะมีการเสนอพารามิเตอร์บรรทัดคำสั่งเคอร์เนล “randomize_kstack_offset=on/off” และการตั้งค่า CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT ค่าใช้จ่ายในการเปิดใช้งานโหมดนี้คาดว่าจะสูญเสียประสิทธิภาพประมาณ 1%

สาระสำคัญของการป้องกันที่เสนอคือการเลือกการชดเชยสแต็กแบบสุ่มสำหรับการเรียกระบบแต่ละครั้ง ซึ่งทำให้ยากต่อการกำหนดโครงร่างสแต็กในหน่วยความจำ แม้ว่าจะได้รับข้อมูลที่อยู่แล้วก็ตาม เนื่องจากการเรียกของระบบครั้งถัดไปจะเปลี่ยนที่อยู่พื้นฐานของสแต็ก ต่างจากการใช้ PaX RANDKSTACK ในแพตช์ที่เสนอเพื่อรวมไว้ในเคอร์เนล การสุ่มไม่ได้ดำเนินการในระยะเริ่มต้น (cpu_current_top_of_stack) แต่หลังจากการตั้งค่าโครงสร้าง pt_regs ซึ่งทำให้ไม่สามารถใช้วิธีที่ใช้ ptrace เพื่อกำหนดออฟเซ็ตแบบสุ่มได้ ระหว่างการเรียกระบบที่ใช้เวลานาน

ที่มา: opennet.ru

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