โครงการโอเพ่นวอลล์
ท่ามกลางการเปลี่ยนแปลงในเวอร์ชันใหม่:
- ตำแหน่งของโครงการ LKRG มีการเปลี่ยนแปลง ซึ่งไม่ได้แบ่งออกเป็นระบบย่อยแยกต่างหากสำหรับการตรวจสอบความสมบูรณ์และการพิจารณาการใช้ช่องโหว่อีกต่อไป แต่ถูกนำเสนอเป็นผลิตภัณฑ์ที่สมบูรณ์สำหรับการระบุการโจมตีและการละเมิดความสมบูรณ์ต่างๆ
- ความเข้ากันได้มีให้กับเคอร์เนล Linux ตั้งแต่ 5.3 ถึง 5.7 เช่นเดียวกับเคอร์เนลที่คอมไพล์ด้วยการเพิ่มประสิทธิภาพ GCC เชิงรุก โดยไม่มีตัวเลือก CONFIG_USB และ CONFIG_STACKTRACE หรือด้วยตัวเลือก CONFIG_UNWINDER_ORC เช่นเดียวกับเคอร์เนลที่ไม่มีฟังก์ชัน hooked LKRG หากสามารถทำได้ ได้รับการจ่ายด้วย;
- เมื่อสร้าง การตั้งค่าเคอร์เนล CONFIG_* ที่จำเป็นบางอย่างจะถูกตรวจสอบเพื่อสร้างข้อความแสดงข้อผิดพลาดที่มีความหมาย แทนที่จะทำให้เกิดข้อขัดข้องที่ไม่ชัดเจน
- เพิ่มการรองรับโหมดสแตนด์บาย (ACPI S3, Suspend to RAM) และ Sleep (S4, Suspend to Disk)
- เพิ่มการรองรับ DKMS ให้กับ Makefile;
- มีการใช้งานการสนับสนุนเชิงทดลองสำหรับแพลตฟอร์ม ARM 32 บิต (ทดสอบบน Raspberry Pi 3 Model B) การรองรับ AArch64 (ARM64) ที่มีอยู่ก่อนหน้านี้ได้รับการขยายเพื่อให้เข้ากันได้กับบอร์ด Raspberry Pi 4
- มีการเพิ่ม hooks ใหม่ รวมถึงตัวจัดการการโทรที่มีความสามารถ () เพื่อระบุช่องโหว่ที่จัดการ "
ความสามารถในการ " ไม่ใช่รหัสกระบวนการ (หนังสือรับรอง ); - มีการเสนอตรรกะใหม่สำหรับการตรวจจับความพยายามในการหลีกเลี่ยงข้อจำกัดของเนมสเปซ (เช่น จากคอนเทนเนอร์ Docker)
- ในระบบ x86-64 บิต SMAP (Supervisor Mode Access Prevention) จะถูกตรวจสอบและใช้ ซึ่งออกแบบมาเพื่อบล็อกการเข้าถึงข้อมูลพื้นที่ผู้ใช้จากโค้ดพิเศษที่ทำงานในระดับเคอร์เนล มีการใช้การป้องกัน SMEP (Supervisor Mode Execution Prevention) ก่อนหน้านี้
- ในระหว่างการดำเนินการ การตั้งค่า LKRG จะถูกวางไว้ในหน้าหน่วยความจำที่โดยปกติจะเป็นแบบอ่านอย่างเดียว
- ข้อมูลการบันทึกที่อาจมีประโยชน์มากที่สุดสำหรับการโจมตี (เช่น ข้อมูลเกี่ยวกับที่อยู่ในเคอร์เนล) จะถูกจำกัดไว้ที่โหมดการแก้ไขข้อบกพร่อง (log_level=4 และสูงกว่า) ซึ่งจะถูกปิดใช้งานตามค่าเริ่มต้น
- ความสามารถในการปรับขนาดของฐานข้อมูลการติดตามกระบวนการเพิ่มขึ้น - แทนที่จะใช้ทรี RB หนึ่งต้นที่ป้องกันโดย spinlock หนึ่งอัน กลับใช้ตารางแฮชของทรี 512 RB ที่ป้องกันโดยล็อคการอ่าน-เขียน 512 อัน
- โหมดได้รับการใช้งานและเปิดใช้งานตามค่าเริ่มต้น ซึ่งมักจะตรวจสอบความสมบูรณ์ของตัวระบุกระบวนการสำหรับงานปัจจุบันเท่านั้น และยังเป็นทางเลือกสำหรับงานที่เปิดใช้งาน (ปลุก) สำหรับงานอื่นๆ ที่อยู่ในสถานะสลีปหรือทำงานโดยไม่ได้เข้าถึง Kernel API ที่ควบคุมโดย LKRG การตรวจสอบจะดำเนินการน้อยลง
- เพิ่มพารามิเตอร์ sysctl และโมดูลใหม่สำหรับการปรับแต่ง LKRG อย่างละเอียด เช่นเดียวกับสอง sysctl สำหรับการกำหนดค่าที่ง่ายขึ้นโดยเลือกจากชุดการตั้งค่าการปรับแต่งอย่างละเอียด (โปรไฟล์) ที่จัดทำโดยนักพัฒนา
- การตั้งค่าเริ่มต้นได้รับการเปลี่ยนแปลงเพื่อให้เกิดความสมดุลมากขึ้นระหว่างความเร็วของการตรวจจับการละเมิดและประสิทธิผลของการตอบสนองในด้านหนึ่ง และผลกระทบต่อประสิทธิภาพการทำงานและความเสี่ยงของผลบวกลวงในอีกด้านหนึ่ง
- ไฟล์ systemd unit ได้รับการออกแบบใหม่เพื่อโหลดโมดูล LKRG ก่อนการบู๊ต (สามารถใช้ตัวเลือกบรรทัดคำสั่งเคอร์เนลเพื่อปิดการใช้งานโมดูล)
เมื่อคำนึงถึงการปรับให้เหมาะสมที่เสนอในรุ่นใหม่ ประสิทธิภาพที่ลดลงเมื่อใช้ LKRG 0.8 คาดว่าจะอยู่ที่ 2.5% ในโหมดเริ่มต้น (“หนัก”) และ 2% ในโหมดเบา (“เบา”)
ในงานที่เพิ่งจัดขึ้น
นอกจากนี้ยังสังเกตได้ว่าผู้พัฒนาการจัดจำหน่าย
การตรวจสอบความสมบูรณ์ใน LKRG ดำเนินการโดยการเปรียบเทียบโค้ดและข้อมูลจริงของเคอร์เนลและโมดูล โครงสร้างข้อมูลที่สำคัญและการตั้งค่า CPU บางส่วนพร้อมแฮชหรือสำเนาที่จัดเก็บไว้ของพื้นที่หน่วยความจำ โครงสร้างข้อมูล หรือรีจิสเตอร์ที่เกี่ยวข้อง การตรวจสอบจะเปิดใช้งานเป็นระยะโดยตัวจับเวลาและเมื่อเกิดเหตุการณ์ต่างๆ
การพิจารณาการใช้ช่องโหว่ที่เป็นไปได้และการบล็อกการโจมตีจะดำเนินการในขั้นตอนก่อนที่เคอร์เนลจะให้การเข้าถึงทรัพยากร (เช่น ก่อนเปิดไฟล์) แต่หลังจากกระบวนการได้รับสิทธิ์ที่ไม่ได้รับอนุญาต (เช่น การเปลี่ยน UID) เมื่อตรวจพบพฤติกรรมที่ไม่ได้รับอนุญาต กระบวนการต่างๆ จะถูกบังคับให้ยุติตามค่าเริ่มต้น ซึ่งเพียงพอที่จะบล็อกช่องโหว่ต่างๆ ได้
ที่มา: opennet.ru