Ana Sayfa

Rex: eBPF Yerine Rust ile Güvenli Çekirdek Uzantıları

1 dk okuma

Rex, eBPF yerine Rust çekirdek uzantı programlarını güvenli bir şekilde yüklemeye ve çalıştırmaya olanak tanıyan yenilikçi bir çekirdek uzantı framework'üdür. Aya gibi eBPF tabanlı framework'lerin aksine, Rex programları çekirdek içi doğrulayıcıdan geçmez. Bunun yerine, programlar Rust'ın güvenli alt kümesinde uygulanır ve Rust derleyicisi gerekli güvenlik kontrollerini yaparak doğrudan yerel kod üretir. Bu yaklaşım, eBPF'in aşırı kısıtlayıcı doğrulama gereksinimlerinden (örn. program karmaşıklığı kısıtlamaları) ve bunun sonucunda ortaya çıkan anlaşılması zor doğrulama hatalarından kaçınırken, aynı zamanda yerel derleyici backend'inde (LLVM) eBPF backend + çekirdek içi JIT yaklaşımına göre potansiyel olarak daha iyi optimizasyon fırsatları sunar.

Rex, kprobe, perf_event, tracepoint, xdp ve tc gibi beş farklı eBPF program türünü desteklemektedir. Ayrıca, bu programlar tarafından yaygın olarak kullanılan eBPF yardımcı fonksiyonlarının çağrılmasını, eBPF map'leri ile etkileşimi ve programlar tarafından elde edilebilen çekirdek kaynaklarının RAII tarzı yönetimini de mümkün kılar. Çekirdek içi çalışma zamanı paniklerinin çağrı yığını izleri ile temizlenmesi ve istisna yönetimi, çekirdek yığını güvenliği (CFG statik olarak hesaplanamadığında) ve sonlandırma güvenliği gibi özellikler de Rex'in sunduğu önemli avantajlardandır. Ayrıca, eBPF programları için yaygın olarak ihtiyaç duyulan çekirdek veri türlerinin bağlamalarını ve soyutlamalarını da sağlar.

Mevcut eBPF uzantıları, güvenlik garantileri sağlamak için çekirdek içi eBPF doğrulayıcısına güvenir. Ancak bu durum, güvenli programların doğrulayıcı tarafından reddedilmesi gibi kullanılabilirlik sorunlarına yol açar. Bu sorunlar arasında programların statik doğrulamanın doğasında bulunan karmaşıklık kısıtlamalarını aşması, derleyicilerin doğrulayıcı dostu kod üretememesi ve aynı mantığın doğrulayıcıyı memnun etmek için belirli bir şekilde uygulanması gerekmesi sayılabilir. Rex, bu sorunları doğrudan Rust'ın güvenlik özelliklerini kullanarak çözmeyi hedeflemektedir.

İçgörü

Rex, eBPF'in kısıtlamalarını aşarak Rust'ın güvenlik ve performans avantajlarını çekirdek uzantı geliştirmeye taşıyor ve daha esnek, hatasız çekirdek programları yazma imkanı sunuyor.

Kaynak