ปัญหาด้านความปลอดภัยในแพทช์ที่เสนอโดยพนักงาน Huawei เพื่อปกป้องเคอร์เนล Linux

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

แพทช์ HKSP ได้รับการเผยแพร่โดยพนักงานของ Huawei รวมถึงการกล่าวถึง Huawei ในโปรไฟล์ GitHub และใช้คำว่า Huawei ในชื่อโครงการ (HKSP - Huawei Kernel Self Protection) ในเวลาเดียวกัน ตัวแทนของ Huawei ปฏิเสธความเชื่อมโยงของโครงการ HKSP กับบริษัท และระบุว่ารหัสดังกล่าวได้รับการพัฒนาตามความคิดริเริ่มส่วนบุคคลของพนักงาน ไม่ใช่โครงการอย่างเป็นทางการของ Huawei และไม่ได้ใช้ในผลิตภัณฑ์ของบริษัท บน หน้า GitHub HKSP ย้อนหลัง หลังจากการค้นพบ ช่องโหว่ด้วย ถูกเพิ่ม โปรดทราบว่าโครงการนี้กำลังได้รับการพัฒนาในเวลาว่างเพื่อวัตถุประสงค์ในการวิจัย

HKSP รวมถึงการเปลี่ยนแปลง เช่น การสุ่มออฟเซ็ตในโครงสร้างความน่าเชื่อถือ การป้องกันการโจมตีบนเนมสเปซตัวระบุผู้ใช้ (เนมสเปซ pid) การแยกสแต็กกระบวนการออกจากพื้นที่ mmap การตรวจจับการเรียกสองครั้งไปยังฟังก์ชัน kfree การบล็อกการรั่วไหลผ่านหลอก -FS /proc (/proc/ {โมดูล, คีย์, ผู้ใช้คีย์}, /proc/sys/kernel/* และ /proc/sys/vm/mmap_min_addr, /proc/kallsyms), ปรับปรุงการสุ่มที่อยู่พื้นที่ผู้ใช้, Ptrace เพิ่มเติม การป้องกัน, การป้องกัน smap และ smep ที่ได้รับการปรับปรุง ความสามารถในการห้ามการส่งข้อมูลผ่านซ็อกเก็ตดิบ การบล็อกที่อยู่ที่ไม่ถูกต้องในซ็อกเก็ต UDP และตรวจสอบความสมบูรณ์ของกระบวนการที่ทำงานอยู่ นอกจากนี้ยังมีโมดูลเคอร์เนล Ksguard ซึ่งมีวัตถุประสงค์เพื่อตรวจจับความพยายามที่จะแนะนำรูทคิททั่วไป

พัทจิ เรียกว่า Greg Kroah-Hartman ซึ่งรับผิดชอบในการรักษาสาขาที่มั่นคงของเคอร์เนล Linux เป็นที่สนใจ และขอให้ผู้เขียนแบ่งแพตช์เสาหินออกเป็นส่วนๆ เพื่อทำให้การตรวจสอบและเลื่อนระดับเคอร์เนลหลักง่ายขึ้น คีส์ คุก หัวหน้า โครงการ บน การส่งเสริม เทคโนโลยีการป้องกันแบบแอคทีฟในเคอร์เนล Linux เช่นกัน ในแง่บวก ตอบสนองต่อแพตช์และดึงความสนใจไปที่การเชื่อมโยงกับสถาปัตยกรรม x86 และลักษณะการแจ้งเตือนของหลายโหมดซึ่งบันทึกเฉพาะข้อมูลเกี่ยวกับปัญหาเท่านั้น แต่อย่าพยายามบล็อกมัน

การศึกษาแพตช์โดยนักพัฒนา Grsecurity เผยให้เห็นข้อผิดพลาดและจุดอ่อนมากมายในโค้ด และยังแสดงให้เห็นว่าไม่มีโมเดลภัยคุกคามที่จะช่วยให้พวกเขาสามารถตัดสินความสามารถของโปรเจ็กต์ได้อย่างเพียงพอ เพื่อแสดงให้เห็นอย่างชัดเจนว่าโค้ดถูกเขียนโดยไม่ใช้วิธีการเขียนโปรแกรมที่ปลอดภัย จึงมีการให้ตัวอย่างของช่องโหว่เล็กๆ น้อยๆ ในตัวจัดการ
ไฟล์ /proc/ksguard/state ซึ่งสร้างขึ้นด้วยสิทธิ์ 0777 หมายความว่าทุกคนมีสิทธิ์ในการเขียน ฟังก์ชัน ksg_state_write ใช้เพื่อแยกวิเคราะห์คำสั่งที่เขียนไปยัง /proc/ksguard/state จะสร้างบัฟเฟอร์ tmp[32] ซึ่งข้อมูลจะถูกเขียนตามขนาดของตัวถูกดำเนินการที่ส่งผ่าน โดยไม่คำนึงถึงขนาดของบัฟเฟอร์เป้าหมายและไม่มี ตรวจสอบพารามิเตอร์ด้วยขนาดสตริง เหล่านั้น. หากต้องการเขียนทับเคอร์เนลสแต็กบางส่วน ผู้โจมตีเพียงแค่ต้องเขียนบรรทัดที่มีรูปแบบพิเศษไปที่ /proc/ksguard/state

ssize_t แบบคงที่ ksg_state_write (ไฟล์ struct * ไฟล์, const char __user *buf,
size_t len, loff_t *ชดเชย)
{
ค่า u64;
ถ่าน tmp[32];
ขนาด_tn = 0;

ถ้า (copy_from_user(tmp, buf, len))
กลับ -1;

value = simple_strtoul(tmp, '\0', 10);
...

ใช้ประโยชน์จากต้นแบบ:

ถ่านบุฟ [4096] = { };
int fd = open("/proc/ksguard/state", O_WRONLY);
ถ้า (fd >= 0) {
เขียน (fd, buf, ขนาดของ (buf));
ปิด(fd);
}

ที่มา: opennet.ru

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