CVE-2023-2163: การค้นพบและการแก้ไขช่องโหว่ eBPF Linux kernel

ภูมิหลัง

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

กลยุทธ์ pointer arithmetic ของ Buzzer

  • Buzzer เป็น fuzzer แบบใหม่สำหรับ eBPF ที่ใช้กลยุทธ์เพื่อกระตุ้นให้เกิดบั๊กเชิงตรรกะ
  • กลยุทธ์ pointer arithmetic ประกอบด้วยขั้นตอนดังนี้:
    1. สร้าง header ที่กำหนดค่าเริ่มต้นของรีจิสเตอร์ด้วยค่าแบบสุ่ม
    2. สร้างคำสั่ง arithmetic และ jump แบบสุ่ม
    3. เลือกรีจิสเตอร์แบบสุ่ม แล้วทำการบวกกับ pointer ไปยังองค์ประกอบของ eBPF map
    4. เขียนค่า magic ลงในองค์ประกอบนั้น

การตัดทอนเส้นทางของ eBPF

  • ตัว verifier ของ eBPF มีหน้าที่ตรวจสอบว่าโปรแกรมสามารถทำงานได้อย่างปลอดภัยหรือไม่
  • เมื่อมีเงื่อนไข ตัว verifier จะจำลองสถานะที่เป็นไปได้ทั้งหมด
  • หากมี conditional jump จำนวนมาก จะใช้กลยุทธ์การตัดทอนเส้นทางเพื่อเพิ่มประสิทธิภาพ

บั๊ก

  • CVE-2023-2163 ทำให้การตัดทอนเส้นทางมีประสิทธิภาพมากขึ้นด้วยการนำแนวคิดเรื่อง "precise tracking" มาใช้
  • บั๊กเกิดจากการมองข้ามว่ารีจิสเตอร์ r9 มีส่วนทำให้ความแม่นยำของ r6 เปลี่ยนแปลง

การโจมตี

  • สามารถใช้ประโยชน์จาก CVE-2023-2163 เพื่อให้ได้ความสามารถในการอ่าน/เขียนตามอำเภอใจ และทำ LPE รวมถึงการหลบหนีจากคอนเทนเนอร์
  • ขั้นตอนหลัก:
    1. ทำให้เกิดการอ่าน/เขียนตามอำเภอใจ
    2. ค้นหาข้อมูลรับรองของโปรเซสและยกระดับสิทธิ์

การแก้ไข

  • การแก้ไข CVE-2023-2163 ทำโดยทำเครื่องหมายรีจิสเตอร์ที่ไม่แม่นยำให้เป็นแบบแม่นยำ เมื่อมีการดำเนินการที่ส่งผลต่อรีจิสเตอร์แบบแม่นยำ
  • ผลกระทบต่อประสิทธิภาพยังไม่ชัดเจน แต่ไม่พบปัญหาเพิ่มเติม

แนวคิดในอนาคต

  • การรับประกันความปลอดภัยของโปรแกรม eBPF เป็นเรื่องยาก เพราะกระบวนการตรวจสอบมีความซับซ้อน
  • Google กำลังแก้ปัญหานี้ผ่าน Buzzer และยินดีรับการมีส่วนร่วมจากชุมชนโอเพนซอร์ส

สรุปโดย GN⁺

  • บทความนี้อธิบายกระบวนการค้นพบและแก้ไขช่องโหว่ใน eBPF verifier
  • eBPF เป็นเทคโนโลยีสำคัญในงานวิจัยด้านความปลอดภัยของเคอร์เนล และการทำให้มันปลอดภัยเป็นเรื่องยาก
  • Google ได้พัฒนา fuzzer ชื่อ Buzzer เพื่อทำการตรวจสอบช่องโหว่ของ eBPF verifier แบบอัตโนมัติ
  • บทความนี้มีประโยชน์ต่อทั้งนักวิจัยด้านความปลอดภัยและนักพัฒนา และช่วยในการทำให้ระบบที่ซับซ้อนอย่าง eBPF ปลอดภัยยิ่งขึ้น
  • โครงการที่มีความสามารถคล้ายกัน ได้แก่ เครื่องมือ fuzzer อื่น ๆ ที่เกี่ยวข้องกับ eBPF

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น