· kaynak dev.to (home feed)
eBPF ve Rust eğitimi, dosya açma ani yükselişlerinde fidye yazılımını öldüren bir dedektör inşa ediyor
Bartosz Osiej'in dev.to'da yayımladığı eğitim, eBPF ve Rust ile imzasız bir fidye yazılımı dedektörünün nasıl inşa edileceğini gösteriyor: bir saniyelik pencerede PID başına openat çağrılarını say, uyar ve isteğe bağlı olarak SIGKILL gönder.

Çekirdekte davranışsal bir tetik sistemi
Bartosz Osiej'in dev.to'da yayımladığı bir eğitim, eBPF ve Rust ile çalışan bir fidye yazılımı dedektörünün inşasını adım adım anlatıyor; kod, yazarın GitHub'daki MIT lisanslı talus-process-monitor projesinden geliyor. Temel gözlem basit: meşru bir program saniyede birkaç dosya açar, oysa bir dosya sistemini şifrelemek için tarayan fidye yazılımı yüzlerce ya da binlerce dosya açar. Dedektör, imza eşleştirmesi yapmadan ya da bir model çalıştırmadan, süreç başına tek bir sayıyı izliyor — bir PID'nin bir saniye içinde kaç openat çağrısı yaptığı — ve bu sayı ani yükseldiğinde tepki veriyor.
Sayma işlemi çekirdek tracepoint'lerine bağlanan eBPF programlarında gerçekleştiği için dedektör, şifreleme hâlâ sürerken etkinliği görüyor ve eğitime göre yalnızca olaylar sayıldığı, dosya içerikleri kopyalanmadığı için ek yük neredeyse sıfır. Hiçbir çekirdek modülü kullanılmıyor.
Çekirdek tarafı: tracepoint'ler ve CPU başına tamponlar
Çekirdek tarafındaki kod aya-ebpf crate'ini kullanıyor. Paylaşımlı bir ProcessEvent yapısı; olay türünü, PID'yi, UID'yi, 16 baytlık komut adını ve 64 baytlık dosya adını taşıyor. Olaylar bir PerfEventArray üzerinden iletiliyor; eğitim, bunun CPU başına bir tampon sağladığını ve bu sayede eşzamanlı süreçlerin birbirini bekletmediğini belirtiyor.
İşi iki tracepoint yapıyor: sys_enter_execve ve sys_enter_openat. Handler, BPF helper'larıyla geçerli PID ve UID'yi okur, tracepoint argümanlarından dosya adı işaretçisini çıkarır, string'i bir probe-read helper'ıyla kopyalar ve olayı tampona yazar.
Bir eBPF kısıtı kodu şekillendiriyor: çekirdek tarafında Rust standart kütüphanesi yok. memcpy ve string biçimlendirme bulunmadığından, eğitim, doğrulayıcıdan geçmeyecek LLVM built-in'lerinden kaçınmak için manuel, bayt bayt bir kopyalama döngüsü yazıyor.
Kullanıcı alanı: kayan pencere ve öldürme anahtarı
aya kütüphanesi üzerine kurulu kullanıcı alanı yarısı, perf tamponunu PID başına zaman damgası kuyruklarına boşaltıyor. Bir saniyeden eski her şey atılıyor ve kalan kuyruk uzunluğu geçerli açık oranı veriyor. Bu sayı eşiğe — varsayılan olarak 50'ye — ulaştığında monitör bir uyarı yükseltiyor ve auto-kill bayrağı açıksa suçlu sürece SIGKILL gönderiyor; hedef sürecin yakalayamayacağı veya engelleyemeyeceği bir sinyal bu.
Gereksinimler mütevazı: Linux çekirdeği 5.8 veya daha yenisi, root, Rust nightly ve clang. Eğitim hızlı bir öz test de içeriyor — monitörü üç eşiği ve auto-kill etkin olarak çalıştırın, sonra başka bir terminalden bir döngüyle yüz dosya oluşturun; döngü birkaç açmadan sonra sonlandırılıyor.
Bilinen sınırlar ve sonraki sinyaller
Yanlış pozitifler konusunda yazar açık sözlü: bir yedekleme işi de hızlıca çok sayıda dosyaya dokunur ve saf bir oran sezgisi onu işaretler. Daha geniş proje bunun üzerine ek sinyaller katmanlaştırıyor: şifrelenmiş ya da rastgeleleştirilmiş adlar yüksek puan aldığı için dosya adlarının Shannon entropi puanlaması; .enc veya .locked gibi toplu uzantı değişikliklerinin izlenmesi; ve şifrelemenin yanında makineden veri çıkışını yakalamak için connect ve sendto çağrılarının izlenmesi. Proje ayrıca on davranışsal özelliği benign, şüpheli veya fidye yazılımı kararına eşleyen, çevrimiçi eğitilmiş bir MLP modeli de içeriyor; model, harici makine öğrenmesi bağımlılığı olmadan birkaç kilobaytlık Rust koduyla uygulanmış.
Neden önemli
İmza tabanlı araçlar yapısal olarak yeni fidye yazılımı ailelerinin gerisinde kalıyor ve bu eğitim, modern uç nokta tespitinin bel bağladığı alternatifi gösteriyor: kötü niyetli işin asıl gerçekleştiği yerde, çekirdeğin içinde gözlemlenen davranışsal sinyaller. eBPF yaklaşımı yüklenebilir çekirdek modüllerinden kaçınıyor; bu da çökme ve uyumluluk riskini azaltıyor. Rust ve aya ile yapmak ise tüm hattı çekirdek sınırının iki tarafında tip denetimli tutuyor.
Yazarın da kabul ettiği gibi, açık oranı sezgisi tek başına üretim için fazla kaba — yedekleme yazılımı onu tetikler. Ama mimari genellenebilir: entropi puanlaması, uzantı izleme veya ağ izleme eklemek aynı gözle, say ve tepki ver hattına uyuyor ve birkaç düzine satır, pasif bir monitörü etkin bir ajana dönüştürüyor. Sunucu güvenliği seçeneklerini değerlendiren mühendislik ekipleri için bu, eBPF gözlemlenebilirliğinin artık metriklerin ve izlemenin ne kadar ötesine uzandığının da kompakt bir örneği.
- #ebpf
- #rust
- #linux
- #security
- #ransomware
- #open-source