CVE-2023-2163: การค้นพบและการแก้ไขช่องโหว่ eBPF Linux kernel
ภูมิหลัง
- eBPF เป็นเทคโนโลยีที่ช่วยขยายความสามารถของ Linux kernel ได้ระหว่างรันไทม์โดยไม่ต้องเขียนเคอร์เนลโมดูลที่ซับซ้อน
- โปรแกรม eBPF จะทำงานเมื่อเกิดเหตุการณ์บางอย่าง และต้องผ่านการตรวจสอบความปลอดภัยก่อนถูกโหลด
- ตัวตรวจสอบ (verifier) ประกอบด้วยโค้ดที่ซับซ้อน และพบช่องโหว่มาแล้วจำนวนมาก
- Google ได้พัฒนา Buzzer ซึ่งเป็น fuzzer สำหรับตรวจสอบตัว verifier ของ eBPF แบบอัตโนมัติ
กลยุทธ์ pointer arithmetic ของ Buzzer
- Buzzer เป็น fuzzer แบบใหม่สำหรับ eBPF ที่ใช้กลยุทธ์เพื่อกระตุ้นให้เกิดบั๊กเชิงตรรกะ
- กลยุทธ์ pointer arithmetic ประกอบด้วยขั้นตอนดังนี้:
- สร้าง header ที่กำหนดค่าเริ่มต้นของรีจิสเตอร์ด้วยค่าแบบสุ่ม
- สร้างคำสั่ง arithmetic และ jump แบบสุ่ม
- เลือกรีจิสเตอร์แบบสุ่ม แล้วทำการบวกกับ pointer ไปยังองค์ประกอบของ eBPF map
- เขียนค่า magic ลงในองค์ประกอบนั้น
การตัดทอนเส้นทางของ eBPF
- ตัว verifier ของ eBPF มีหน้าที่ตรวจสอบว่าโปรแกรมสามารถทำงานได้อย่างปลอดภัยหรือไม่
- เมื่อมีเงื่อนไข ตัว verifier จะจำลองสถานะที่เป็นไปได้ทั้งหมด
- หากมี conditional jump จำนวนมาก จะใช้กลยุทธ์การตัดทอนเส้นทางเพื่อเพิ่มประสิทธิภาพ
บั๊ก
- CVE-2023-2163 ทำให้การตัดทอนเส้นทางมีประสิทธิภาพมากขึ้นด้วยการนำแนวคิดเรื่อง "precise tracking" มาใช้
- บั๊กเกิดจากการมองข้ามว่ารีจิสเตอร์ r9 มีส่วนทำให้ความแม่นยำของ r6 เปลี่ยนแปลง
การโจมตี
- สามารถใช้ประโยชน์จาก CVE-2023-2163 เพื่อให้ได้ความสามารถในการอ่าน/เขียนตามอำเภอใจ และทำ LPE รวมถึงการหลบหนีจากคอนเทนเนอร์
- ขั้นตอนหลัก:
- ทำให้เกิดการอ่าน/เขียนตามอำเภอใจ
- ค้นหาข้อมูลรับรองของโปรเซสและยกระดับสิทธิ์
การแก้ไข
- การแก้ไข CVE-2023-2163 ทำโดยทำเครื่องหมายรีจิสเตอร์ที่ไม่แม่นยำให้เป็นแบบแม่นยำ เมื่อมีการดำเนินการที่ส่งผลต่อรีจิสเตอร์แบบแม่นยำ
- ผลกระทบต่อประสิทธิภาพยังไม่ชัดเจน แต่ไม่พบปัญหาเพิ่มเติม
แนวคิดในอนาคต
- การรับประกันความปลอดภัยของโปรแกรม eBPF เป็นเรื่องยาก เพราะกระบวนการตรวจสอบมีความซับซ้อน
- Google กำลังแก้ปัญหานี้ผ่าน Buzzer และยินดีรับการมีส่วนร่วมจากชุมชนโอเพนซอร์ส
สรุปโดย GN⁺
- บทความนี้อธิบายกระบวนการค้นพบและแก้ไขช่องโหว่ใน eBPF verifier
- eBPF เป็นเทคโนโลยีสำคัญในงานวิจัยด้านความปลอดภัยของเคอร์เนล และการทำให้มันปลอดภัยเป็นเรื่องยาก
- Google ได้พัฒนา fuzzer ชื่อ Buzzer เพื่อทำการตรวจสอบช่องโหว่ของ eBPF verifier แบบอัตโนมัติ
- บทความนี้มีประโยชน์ต่อทั้งนักวิจัยด้านความปลอดภัยและนักพัฒนา และช่วยในการทำให้ระบบที่ซับซ้อนอย่าง eBPF ปลอดภัยยิ่งขึ้น
- โครงการที่มีความสามารถคล้ายกัน ได้แก่ เครื่องมือ fuzzer อื่น ๆ ที่เกี่ยวข้องกับ eBPF
ยังไม่มีความคิดเห็น