Microsoft ได้เตรียมการใช้งาน eBPF สำหรับ Windows

Microsoft ได้เผยแพร่การใช้งานระบบย่อย eBPF สำหรับ Windows ซึ่งช่วยให้คุณสามารถเปิดตัวจัดการโดยพลการที่ทำงานในระดับเคอร์เนลของระบบปฏิบัติการ eBPF มีตัวแปลไบต์โค้ดที่สร้างไว้ในเคอร์เนล ซึ่งทำให้สามารถสร้างตัวจัดการการดำเนินการเครือข่ายที่โหลดจากพื้นที่ผู้ใช้ ควบคุมการเข้าถึง และตรวจสอบการทำงานของระบบได้ eBPF ถูกรวมไว้ในเคอร์เนล Linux ตั้งแต่รีลีส 3.18 และอนุญาตให้คุณจัดการแพ็กเก็ตเครือข่ายขาเข้า/ขาออก การส่งต่อแพ็กเก็ต การจัดการแบนด์วิธ การสกัดกั้นการโทรของระบบ การควบคุมการเข้าถึง และการติดตาม ด้วยการใช้การคอมไพล์ JIT รหัสไบต์จึงถูกแปลทันทีเป็นคำสั่งของเครื่องและดำเนินการด้วยประสิทธิภาพของโค้ดที่คอมไพล์แล้ว eBPF สำหรับ Windows เป็นโอเพ่นซอร์สภายใต้ใบอนุญาต MIT

eBPF สำหรับ Windows สามารถใช้กับเครื่องมือ eBPF ที่มีอยู่ และจัดเตรียม API ทั่วไปที่ใช้สำหรับแอปพลิเคชัน eBPF บน Linux เหนือสิ่งอื่นใด โปรเจ็กต์อนุญาตให้คุณคอมไพล์โค้ดที่เขียนด้วยภาษา C ลงในโค้ดไบต์ eBPF โดยใช้คอมไพเลอร์ eBPF ที่ใช้ Clang มาตรฐาน และเรียกใช้ตัวจัดการ eBPF ที่สร้างไว้แล้วสำหรับ Linux บนเคอร์เนล Windows โดยให้เลเยอร์ความเข้ากันได้พิเศษและรองรับ Libbpf มาตรฐาน API เพื่อความเข้ากันได้กับแอปพลิเคชันที่โต้ตอบกับโปรแกรม eBPF ซึ่งรวมถึงเลเยอร์ที่ให้ hooks เหมือน Linux สำหรับ XDP (eXpress Data Path) และการผูกซ็อกเก็ต การเข้าถึงสแต็กเครือข่ายและไดรเวอร์เครือข่าย Windows แบบนามธรรม แผนต่างๆ รวมถึงการจัดเตรียมความเข้ากันได้ระดับซอร์สโค้ดเต็มรูปแบบกับโปรเซสเซอร์ Linux eBPF มาตรฐาน

Microsoft ได้เตรียมการใช้งาน eBPF สำหรับ Windows

ข้อแตกต่างที่สำคัญระหว่างการใช้งาน eBPF สำหรับ Windows คือการใช้ตัวตรวจสอบ bytecode ทางเลือก ซึ่งเดิมเสนอโดยพนักงาน VMware และนักวิจัยจากมหาวิทยาลัยในแคนาดาและอิสราเอล ตัวตรวจสอบทำงานในกระบวนการที่แยกจากกันในพื้นที่ผู้ใช้ และใช้ก่อนรันโปรแกรม BPF เพื่อระบุข้อผิดพลาดและบล็อกกิจกรรมที่เป็นอันตรายที่อาจเกิดขึ้น

สำหรับการตรวจสอบ eBPF สำหรับ Windows จะใช้วิธีการวิเคราะห์แบบคงที่ตามการตีความเชิงนามธรรม ซึ่งเมื่อเปรียบเทียบกับตัวตรวจสอบ eBPF สำหรับ Linux แล้ว แสดงให้เห็นอัตราผลบวกลวงที่ต่ำกว่า รองรับการวิเคราะห์แบบวนซ้ำ และให้ความสามารถในการปรับขนาดที่ดี วิธีการนี้คำนึงถึงรูปแบบการดำเนินการทั่วไปหลายประการที่ได้รับจากการวิเคราะห์โปรแกรม eBPF ที่มีอยู่

หลังจากการตรวจสอบความถูกต้อง รหัสไบต์จะถูกถ่ายโอนไปยังล่ามที่ทำงานในระดับเคอร์เนล หรือส่งผ่านคอมไพเลอร์ JIT ตามด้วยการดำเนินการรหัสเครื่องผลลัพธ์ที่มีสิทธิ์เคอร์เนล ในการแยกตัวจัดการ eBPF ในระดับเคอร์เนล จะใช้กลไก HVCI (HyperVisor-enforced Code Integrity) ซึ่งใช้เครื่องมือการจำลองเสมือนเพื่อปกป้องกระบวนการในเคอร์เนล และให้การยืนยันความสมบูรณ์ของโค้ดที่เรียกใช้งานโดยใช้ลายเซ็นดิจิทัล ข้อจำกัดของ HVCI คือสามารถตรวจสอบได้เฉพาะโปรแกรม eBPF ที่ตีความแล้ว และไม่สามารถใช้ร่วมกับ JIT ได้ (คุณสามารถเลือกระหว่างประสิทธิภาพหรือความปลอดภัยเพิ่มเติม)

ที่มา: opennet.ru

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