การเปิดตัวโมดูล LKRG 0.8 เพื่อป้องกันการหาประโยชน์จากช่องโหว่ในเคอร์เนล Linux

โครงการโอเพ่นวอลล์ ตีพิมพ์ การเปิดตัวโมดูลเคอร์เนล แอลเคอาร์จี 0.8 (Linux Kernel Runtime Guard) ออกแบบมาเพื่อตรวจจับและบล็อกการโจมตีและการละเมิดความสมบูรณ์ของโครงสร้างเคอร์เนล ตัวอย่างเช่น โมดูลสามารถป้องกันการเปลี่ยนแปลงเคอร์เนลที่ทำงานอยู่โดยไม่ได้รับอนุญาต และความพยายามในการเปลี่ยนแปลงสิทธิ์ของกระบวนการผู้ใช้ (การตรวจจับการใช้ช่องโหว่) โมดูลนี้เหมาะสำหรับทั้งการจัดการการป้องกันช่องโหว่ที่ทราบแล้วสำหรับเคอร์เนล Linux (ตัวอย่างเช่น ในสถานการณ์ที่ยากต่อการอัปเดตเคอร์เนลในระบบ) และสำหรับการตอบโต้การหาช่องโหว่สำหรับช่องโหว่ที่ยังไม่ทราบ รหัสโครงการ จัดจำหน่ายโดย ได้รับอนุญาตภายใต้ GPLv2

ท่ามกลางการเปลี่ยนแปลงในเวอร์ชันใหม่:

  • ตำแหน่งของโครงการ 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 แสดงให้เห็นว่า ผลลัพธ์ที่ดีที่สุด โดยระบุรูทคิทที่ทดสอบแล้ว 8 จาก 9 ตัวที่ทำงานในระดับเคอร์เนลโดยไม่มีผลบวกลวง (รูทคิท Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit และ Sutekh ถูกระบุ แต่ Keysniffer ซึ่งเป็นเคอร์เนล โมดูล พลาดไปพร้อมกับคีย์ล็อกเกอร์ ไม่ใช่รูทคิทในความหมายที่แท้จริง) สำหรับการเปรียบเทียบ แพ็คเกจ AIDE, OSSEC และ Rootkit Hunter ตรวจพบรูทคิท 2 ใน 9 ตัว ในขณะที่ Chkrootkit ตรวจไม่พบเลย ในเวลาเดียวกัน LKRG ไม่รองรับการตรวจจับรูทคิทที่อยู่ในพื้นที่ผู้ใช้ ดังนั้นประสิทธิภาพสูงสุดจะเกิดขึ้นได้เมื่อใช้การรวมกันของ AIDE และ LKRG ซึ่งทำให้สามารถระบุรูทคิท 14 จาก 15 ทุกประเภทได้

นอกจากนี้ยังสังเกตได้ว่าผู้พัฒนาการจัดจำหน่าย Whonix เริ่ม การสร้าง แพ็คเกจสำเร็จรูปพร้อม DKMS สำหรับ Debian, Whonix, Qubes และ Kicksecure และแพ็คเกจสำหรับ Arch ลินุกซ์ อัปเดตเป็นเวอร์ชัน 0.8 แล้ว แพ็คเกจที่มี LKRG นั้นมีให้บริการในภาษารัสเซียด้วย ALT Linux и AstraLinux.

การตรวจสอบความสมบูรณ์ใน LKRG ดำเนินการโดยการเปรียบเทียบโค้ดและข้อมูลจริงของเคอร์เนลและโมดูล โครงสร้างข้อมูลที่สำคัญและการตั้งค่า CPU บางส่วนพร้อมแฮชหรือสำเนาที่จัดเก็บไว้ของพื้นที่หน่วยความจำ โครงสร้างข้อมูล หรือรีจิสเตอร์ที่เกี่ยวข้อง การตรวจสอบจะเปิดใช้งานเป็นระยะโดยตัวจับเวลาและเมื่อเกิดเหตุการณ์ต่างๆ

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

ที่มา: opennet.ru

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