Microsoft Membawa eBPF ke Windows – Jika Anda ingin menjalankan kode untuk memberikan kemampuan pengamatan, keamanan, atau fungsionalitas jaringan, menjalankannya di kernel sistem operasi Anda memberi Anda banyak kekuatan karena kernel itu dapat melihat dan mengontrol semua yang ada di sistem.
Microsoft Membawa eBPF ke Windows
Baca Juga : 10 Sertifikasi Keamanan Siber Teratas
pythonsprints – Itu kuat, tetapi berpotensi mengganggu atau berbahaya jika Anda salah, apakah itu memperkenalkan kerentanan atau hanya memperlambat sistem.
Jika Anda mencari cara untuk memanfaatkan konteks istimewa semacam itu tanpa potensi bahaya, eBPF muncul sebagai alternatif — dan sekarang hadir di Windows.
Awalnya eBPF adalah singkatan dari “Extended Berkeley Packet Filter”, memperbarui alat jaringan open source yang menempatkan filter paket di kernel Linux untuk pelacakan paket kinerja yang lebih tinggi (sekarang sering disebut cBPF untuk BPF klasik).
Tapi sekarang mekanisme generik untuk menjalankan berbagai jenis kode dengan aman dalam konteks istimewa dengan menggunakan kotak pasir, dengan pemantauan aplikasi, profil dan beban kerja keamanan serta jaringan, jadi itu bukan akronim lagi.
Konteks istimewa itu bahkan tidak harus berupa kernel OS, meskipun masih cenderung demikian, dengan eBPF menjadi alternatif yang lebih stabil dan aman untuk modul kernel (di Linux) dan driver perangkat (di Windows), di mana buggy atau kode kerentanan dapat membahayakan seluruh sistem.
Implementasi yang biasa adalah mesin virtual berbasis kernel untuk pemrosesan paket tingkat rendah; di Linux yang memungkinkan Anda mengubah perilaku kernel tanpa mengkompilasi ulang, untuk memuat kode yang digerakkan oleh peristiwa Anda sendiri yang akan dieksekusi sebagai respons terhadap “kait” — pemicu seperti peristiwa jaringan, panggilan sistem, entri fungsi, dan titik jejak kernel.
Kode tersebut dapat menjalankan berbagai fungsi dengan menggunakan panggilan pembantu, dan dapat mengubah apa yang biasanya dilakukan kernel: program eBPF mungkin berarti paket jaringan dijatuhkan, panggilan sistem ditolak, atau peristiwa direkam untuk dilacak.
Ini masih merupakan teknik khusus, tetapi pengembang mulai bekerja dalam bahasa tingkat yang relatif tinggi seperti C++, Go atau Rust tetapi mendapatkan dampak bekerja langsung dengan kernel.
eBPF digunakan untuk jaringan berkinerja tinggi dan penyeimbangan beban, memberikan perutean khusus aplikasi atau Kualitas Layanan, perlindungan terhadap serangan penolakan layanan dan menegakkan keamanan runtime kontainer. Keamanan jaringan Kubernetes menggunakan Calico atau Cilium sangat populer karena memberikan visibilitas ke lalu lintas HTTP yang tidak dapat dilihat oleh pemantauan keamanan tradisional.
Ada beberapa peluang menarik untuk menggunakan eBPF dalam model jaringan terbuka baru yang sedang dikembangkan di sekitar sumber terbuka, sistem operasi jaringan SONiC berbasis Linux yang dibuat Microsoft (anggota pendiri eBPF Foundation) untuk menyederhanakan pembangunan infrastruktur Azure-nya, yaitu sekarang didukung oleh banyak vendor perangkat keras jaringan untuk penyedia cloud dan perusahaan yang lebih kecil, terutama di vertikal seperti layanan keuangan, serta hyperscaler.
“Salah satu alasan Microsoft telah berinvestasi di eBPF adalah karena kami melihat pentingnya membuat data plane itu sendiri dapat diprogram dan dikontrol oleh perangkat lunak,” pendiri SONiC dan pemimpin teknik Azure Networking Dave Maltz mengatakan kepada New Stack.
Memisahkan tumpukan jaringan berarti arsitek jaringan dapat memilih protokol mana yang ingin mereka jalankan dan hanya menggunakan modul perangkat lunak yang diperlukan untuk itu; tidak menjalankan perangkat lunak yang menyediakan fitur yang tidak Anda perlukan berarti lebih sedikit overhead dan lebih sedikit potensi bug.
Ini juga memungkinkan OS jaringan untuk menggunakan API publik untuk menyediakan fungsionalitas; kode yang menyediakan API itu dapat ditingkatkan tetapi kode yang bergantung padanya tidak perlu diperbarui ketika itu terjadi, yang memungkinkan lebih banyak inovasi dalam tumpukan jaringan.
DASH (Distributed APIs for SONiC Hosts) adalah proyek jaringan untuk melakukan itu untuk bidang data jaringan yang ditentukan perangkat lunak, menggunakan SmartNIC dan perangkat keras lainnya untuk meningkatkan kinerja jaringan untuk layanan cloud dengan melakukan lebih banyak pekerjaan di jaringan itu sendiri — seperti enkripsi atau manajemen kunci — dengan cara yang menggabungkan komputasi dan jaringan.
“Kami perlu mengekspos API tingkat yang lebih tinggi untuk mengontrol jalur data SDN itu dan eBPF adalah cara yang bagus untuk mengimplementasikannya,” kata Maltz.
Di Linux, eBPF adalah evolusi dari kemampuan yang sudah ada sekitar tahun 90-an tetapi sekarang memiliki fitur yang cukup untuk berguna secara luas untuk berbagai aplikasi yang semakin luas.
“Selama bertahun-tahun, ini berkembang dari kami dapat menjalankan beberapa kode arbitrer ketika sebuah paket tiba, hingga kami dapat menjalankan beberapa kode arbitrer ketika beberapa hal lain [terjadi]. Kami melihat semakin banyak tempat di mana Anda dapat terhubung ke kernel,” kata Liz Rice , Chief Open Source Officer dari Isovalent .
eBPF sangat ideal untuk debugging, pelacakan aplikasi dan pemecahan masalah kinerja, mendapatkan data observabilitas tanpa gangguan dan overhead yang biasa — dan untuk membuat solusi dan perbaikan kompatibilitas untuk keterbatasan dalam perangkat lunak yang tidak dapat Anda ubah.
Sebagian besar platform observabilitas Pixie Kubernetes open source New Relic bergantung pada eBPF dan Splunk baru-baru ini menyumbangkan aplikasi kolektor eBPF Flowmill dan telemetri kernelnya ke proyek OpenTelemetry Cloud Native Computing Foundation .
Komponen pengumpulan telemetri tersebut akan membantu pengembang menyatukan data telemetri dari lapisan yang berbeda dan dapat membantu membuat eBPF lebih mudah digunakan, saran Dave Thaler , insinyur perangkat lunak mitra di Microsoft.
“eBPF adalah cara yang sangat efisien dan aman untuk memperoleh informasi tentang proses, dengan fleksibilitas yang baik seputar apa dan bagaimana informasi harus dikumpulkan,” kata Thaler.
Netflix telah menggunakan eBPF untuk mendapatkan metrik yang jauh lebih dalam untuk menganalisis kinerja di Amazon Web Services ‘ daripada yang awalnya diperkirakan oleh AWS sendiri, tetapi ketika pertama kali memulai pekerjaan itu, itu masih merupakan alat untuk para ahli. “Tampaknya sedang menyeberang ke arus utama sekarang,” salah satu pendiri RedMonk James Governor mengatakan kepada The New Stack.
Ini sangat berguna dan mainstream sehingga pengembang dan pelanggan Microsoft mulai bertanya kapan mereka bisa mendapatkan sesuatu yang serupa di Windows.
Mengapa Windows?
“eBPF telah muncul sebagai teknologi revolusioner yang memungkinkan programabilitas, ekstensibilitas, dan kelincahan yang lebih besar,” kata Thaler kepada kami. Itu berguna di Windows atau OS lain seperti di Linux, dan menggunakan perkakas dan kerangka kerja umum di Windows dan platform lain memberikan efisiensi teknik, katanya.
“Untuk [pengembang] yang sudah menggunakan eBPF di Linux, menarik untuk menggunakan eBPF di Windows untuk mengaktifkan jenis solusi yang sama untuk bekerja di kedua platform. Bahkan bagi mereka yang hanya menggunakan Windows, kami percaya bahwa manfaat programabilitas, ekstensibilitas, dan kelincahan dari eBPF akan membuka pengembangan untuk khalayak yang lebih luas.”
Dan dia mengharapkan percepatan yang sama yang dapat dibawa oleh eBPF dengan SmartNICs dengan pendekatan seperti DASH harus dimungkinkan untuk Windows di masa depan.
Windows sudah memiliki cara untuk memperluas fungsionalitas tingkat rendah dengan memanggil API publik, seperti NDIS , Windows Filtering Platform , DTrace , Driver Interception Framework (DIF) dan sebagainya. Tetapi memperluas kernel Windows memerlukan penulisan driver dan mengirimkannya ke Microsoft untuk ditandatangani yang, menurut Thaler, adalah proses yang lambat.
“Karena pemverifikasi eBPF menggunakan analisis berbasis metode formal untuk memeriksa kode berbasis keamanan, eBPF memungkinkan kelincahan ekstensibilitas cepat tanpa harus menunggu proses [persetujuan] yang lama, yang dapat sangat berguna dalam skenario kritis waktu seperti debugging atau Mitigasi DDoS.”
“ eBPF untuk Windows akan memungkinkan pengembang untuk menggunakan kerangka kerja seperti ini dengan aman menggunakan beberapa bahasa pemrograman terkenal yang ada tanpa menulis driver kernel, dan memanfaatkan ekosistem eBPF dari alat dan pengalaman lintas platform.”
Rice setuju: “eBPF memberi kami platform yang sangat kuat ini untuk membangun hal-hal seperti alat observabilitas dan tidak ada alasan mengapa itu tidak berlaku di Windows seperti di Linux.”
Yang penting, eBPF sedang dibangun untuk berjalan di Windows daripada menjadi bagian dari Windows, yang berarti akan berjalan di versi Windows yang ada daripada memerlukan pembaruan ke OS. Proyek eBPF open source untuk Windows mendukung Windows 10, Windows Server 2016 dan yang lebih baru, dengan Microsoft menyumbangkan kode ke proyek eBPF open source yang ada sehingga mereka bekerja dengan Windows serta Linux (dan kemungkinan sistem operasi lain di masa mendatang).
Dan ketika proyek tersebut matang, ia akan beralih ke apa yang digambarkan Microsoft sebagai “fondasi yang diatur oleh komunitas dalam ekosistem eBPF.”
Membangun di Open Source
Windows menggunakan driver sedangkan Linux menggunakan modul kernel dan API daripada panggilan sistem, jadi eBPF perlu diimplementasikan sedikit berbeda. Arsitektur modular yang dipilih Microsoft juga berarti eBPF dapat digunakan dalam lebih banyak skenario.
Sebelum dijalankan, bytecode eBPF diperiksa oleh pemverifikasi statis PREVAIL open source yang berjalan dalam mode pengguna daripada di kernel: jika melewati semua pemeriksaan keamanan, kode dikompilasi ke kode asli oleh kompiler uBPF JIT open source yang juga berjalan dalam mode pengguna atau diteruskan langsung ke juru bahasa uBPF. Interpreter dan kode asli yang dikompilasi keduanya berjalan dalam mode kernel.
Menjalankan verifier dan kompiler just-in-time (JIT) dalam mode pengguna adalah perbedaan besar dari eBPF di Linux, tetapi masuk akal, Thaler memberi tahu kami, dan bukan hanya karena Microsoft ingin membangun proyek komunitas yang sudah ada. membuat keputusan untuk membangun untuk mode pengguna.
Ada kecenderungan yang meningkat untuk memindahkan kode dari kernel, karena jika ada bug di driver yang menyebabkannya crash, itu tidak akan menghapus seluruh OS.
Tetapi itu juga berarti bahwa eBPF dapat digunakan untuk memperluas daemon mode pengguna, bukan hanya kernel. Anda bahkan dapat menjalankan eBPF di satu perangkat dan menyediakan fungsionalitas dan peningkatan kinerja di komputer lain. Thaler menjelaskan:
“Kami percaya bahwa properti penting dari kode untuk blok bangunan eBPF seperti verifier, interpreter, dan kompiler JIT, adalah bahwa kode yang sama harus dapat digunakan kembali tidak hanya di berbagai platform, tetapi dapat digunakan dalam konteks yang berbeda seperti dibangun ke dalam kernel OS. , atau dijalankan di ruang pengguna, atau dijalankan di dalam Lingkungan Eksekusi Tepercaya, atau bahkan dijalankan di mesin terpisah dari OS yang sedang diperluas.”
Itu berarti verifier harus sangat andal, dan perlu dilindungi agar seaman kernel.
Sudah ada rangkaian pengujian untuk pemverifikasi dan akan diuji secara halus sebelum siap diproduksi. Properti keamanan yang disediakan oleh penyedia verifikator untuk kode juga lebih kuat daripada pengujian yang biasanya dijalankan Microsoft pada driver sebelum menandatanganinya.
Baik verifikator dan kompiler berjalan dalam layanan sistem istimewa di Windows , dan API ruang pengguna hanya dapat dipanggil oleh akun admin, Thaler mencatat, “Kami sedang menyelidiki model masa depan di mana verifikator dan kompiler dapat berjalan di dalam VM terpisah, atau bahkan di mesin lain.”
“Sebagian besar pekerjaan pengerasan keamanan untuk eBPF untuk Windows masih ada, itulah sebabnya belum ditandatangani untuk digunakan dalam produksi, hanya lingkungan pengujian,” dia memperingatkan. Meskipun Anda dapat menginstal dan mencobanya hari ini, Anda harus menempatkan PC Windows Anda ke mode pengembang, dengan binari yang ditandatangani uji diaktifkan; itu umum untuk pengembang tetapi tidak cocok untuk sistem produksi karena alasan keamanan.
Anda juga harus tetap menggunakan mode yang ditafsirkan kecuali Anda mematikan fitur virtualisasi perangkat keras HyperVisor-enforced Code Integrity (HVCI) yang digunakan Windows untuk melindungi proses mode kernel seperti layanan masuk dari serangan. Kompiler JIT tidak menandatangani kode dengan tanda tangan yang dipercaya oleh HVCI, sehingga kode tersebut tidak akan berjalan saat ini.
“Mode kompilasi JIT lebih efisien daripada mode yang ditafsirkan, jika semua hal lain sama,” Thaler menunjukkan, jadi Microsoft mencari cara agar kompilasi JIT bekerja dengan HVCI.
Kode Lintas Platform
Pengembang dapat membuat bytecode eBPF untuk Windows dengan alat eBPF yang ada seperti dentang, memasukkannya ke dalam aplikasi Windows atau cukup mengetikkannya ke alat baris perintah netsh Windows (seperti halnya pengguna Linux akan menggunakan Bpftool); mereka semua memanggil pustaka bersama yang mengekspos Libbpf API (dan meneruskan kode ke pemverifikasi).
Microsoft berencana untuk mengaktifkan apa pun yang dapat Anda panggil sebagai API publik dan menulis driver di Windows yang relevan dengan eBPF untuk diekspos ke eBPF. “Runtime eBPF memang menyediakan konstruksi tambahan dari eBPF, seperti menggunakan memori bersama melalui dukungan untuk berbagai macam konstruksi ‘peta’.”
Kode itu mungkin atau mungkin bukan kode eBPF yang sama dengan yang Anda jalankan di Linux karena itu tergantung pada apakah Anda melakukan sesuatu yang didukung di Windows.
“Beberapa API eBPF secara inheren spesifik untuk kernel Linux karena mereka berinteraksi dengan atau memperluas fungsionalitas dengan cara yang bergantung pada pengetahuan tentang detail implementasi internal. API eBPF lainnya memperluas fungsionalitas seperti TCP/IP yang umum di seluruh platform,” jelas Thaler.
Panggil soket jaringan atau ikat ke protokol umum seperti IPv4 atau IPv6 dan Anda dapat mengkompilasi ulang kode eBPF Linux untuk dijalankan di Windows.
“Tujuan kami adalah memiliki sejumlah besar API lintas platform, sekaligus memungkinkan siapa saja untuk dengan mudah menambahkan API tambahan untuk platform pilihan mereka, seperti untuk memperluas fungsionalitas di driver mereka sendiri atau aplikasi ruang pengguna,” kata Thaler.
Itu berarti jika bytecode eBPF memanggil API tersebut, kode yang sama akan berfungsi di Linux dan Windows.
Untuk hook dan fungsi helper yang dapat dipanggil oleh kode eBPF, eBPF untuk Windows telah mendukung dua hook dan lebih dari 10 helper lintas platform yang didokumentasikan dalam bpf_helper_defs.h dan ebpf_nethooks.h .
“Untuk konteks eksekusi eBPF inti, Microsoft harus menambahkan implementasi berbagai jenis peta dan fungsi pembantu karena tidak ada proyek sumber terbuka yang dapat segera dimanfaatkan,” kata Thaler. “Harapan kami adalah seiring waktu implementasi tersebut akan pindah ke proyek lintas platform seperti proyek generik-ebpf, yang kemudian dapat digunakan oleh eBPF untuk Windows.”
Microsoft berfokus pada yang paling umum digunakan terlebih dahulu untuk mengaktifkan aplikasi populer, tetapi setiap pengait dan pembantu yang memanggil API publik dapat disumbangkan dari komunitas, katanya.
Karena eBPF sejauh ini hanya tersedia di Linux, alat eBPF seperti Libbpf, Bpftool atau Inspektor Gadget suite Kinvolk untuk memeriksa klaster Kubernetes (sekarang dimiliki oleh Microsoft) mengasumsikan Anda akan menggunakan Linux dan mengandalkan fungsionalitas dan implementasi khusus Linux bahkan dari hal-hal yang tersedia di platform lain.
“Sejumlah helper dan hook di Linux secara inheren khusus Linux atau mengekspos struktur yang menggunakan detail implementasi Linux. Beberapa dari mereka tidak akan berlaku untuk platform lain, dan beberapa akan berlaku tetapi platform lain menggunakan format asli yang berbeda, ”jelasnya.
Bagi mereka yang menerapkan tetapi hanya menggunakan format asli yang berbeda, beberapa fungsi lintas platform masih dapat ada dengan menyalin data ke dalam format yang diekspos oleh pembantu eBPF yang ada, dengan sedikit biaya kinerja.” Microsoft bekerja dengan komunitas untuk memisahkan fungsionalitas asli dan lintas platform di Libbpf dan Bpftool sehingga keduanya dapat digunakan di Windows juga.
Alat tingkat yang lebih tinggi seperti manajemen siklus hidup L3AF dan proyek orkestrasi untuk aplikasi jaringan eBPF (termasuk penyeimbangan beban, pembatasan kecepatan, pencerminan lalu lintas, pengekspor aliran, manipulasi paket, dan penyetelan kinerja) yang disumbangkan Walmart ke grup Jaringan LF juga saat ini hanya untuk Linux; lagi-lagi Microsoft bekerja sama dengan komunitas L3AF untuk menghadirkan dukungan bagi Windows.
Permintaan nomor satu, bahkan di depan fitur observabilitas dan debugging yang akan disediakan eBPF, adalah penolakan perlindungan layanan yang akan ditawarkan pada Windows.
Peluang besar lainnya untuk eBPF di Windows adalah bagi organisasi untuk mendukung aplikasi bawaan mereka sendiri saat mereka perlu mengubah hal-hal seperti pengalihan port atau penanganan soket. Jika Anda perlu menggunakan port 8080 saat aplikasi mengharapkan port 80, atau Anda perlu bekerja dengan soket dan middleware hanya menampilkan abstraksi http, eBPF mempermudah pembuatan solusi — tanpa perlu menulis driver khusus dan menandatanganinya .
Itu adalah sesuatu yang berguna bagi banyak organisasi dengan server Windows.