Linux çekirdeğindeki güvenlik açıklarından yararlanılmasına karşı koruma sağlamak için LKRG 0.8 modülünün piyasaya sürülmesi

Açık Duvar Projesi опубликовал çekirdek modülü sürümü LKRG 0.8 (Linux Kernel Runtime Guard), çekirdek yapılarının bütünlüğüne yönelik saldırıları ve ihlalleri tespit etmek ve engellemek için tasarlanmıştır. Örneğin, modül, çalışan çekirdekte yapılan yetkisiz değişikliklere karşı koruma sağlayabilir ve kullanıcı işlemlerinin izinlerini değiştirmeye çalışabilir (kötü amaçlı yazılımların kullanımını tespit ederek). Modül, hem Linux çekirdeği için halihazırda bilinen istismarlara karşı korumayı düzenlemek (örneğin, sistemdeki çekirdeği güncellemenin zor olduğu durumlarda) hem de henüz bilinmeyen güvenlik açıklarına yönelik istismarlara karşı koymak için uygundur. Proje kodu tarafından dağıtıldı GPLv2 altında lisanslanmıştır.

Yeni sürümdeki değişiklikler arasında:

  • Artık bütünlüğü kontrol etmek ve açıklardan yararlanma kullanımını belirlemek için ayrı alt sistemlere bölünmeyen, ancak saldırıları ve çeşitli bütünlük ihlallerini tanımlamak için eksiksiz bir ürün olarak sunulan LKRG projesinin konumlandırması değiştirildi;
  • Uyumluluk, 5.3'ten 5.7'ye kadar olan Linux çekirdeklerinin yanı sıra, CONFIG_USB ve CONFIG_STACKTRACE seçenekleri olmadan veya CONFIG_UNWINDER_ORC seçeneği olmadan agresif GCC optimizasyonlarıyla derlenen çekirdeklerin yanı sıra, eğer yapabiliyorlarsa LKRG kancalı işlevlere sahip olmayan çekirdeklerle de sağlanır. vazgeçilebilir;
  • Oluşturma sırasında, belirsiz çökmeler yerine anlamlı hata mesajları oluşturmak için bazı zorunlu CONFIG_* çekirdek ayarları kontrol edilir;
  • Bekleme (ACPI S3, RAM'de askıya alma) ve uyku (S4, diskte askıya alma) modları için destek eklendi;
  • Makefile'a DKMS desteği eklendi;
  • 32 bit ARM platformları için deneysel destek uygulandı (Raspberry Pi 3 Model B'de test edildi). Daha önce mevcut olan AArch64 (ARM64) desteği, Raspberry Pi 4 kartıyla uyumluluk sağlayacak şekilde genişletildi;
  • "'i manipüle eden açıklardan yararlanmaları daha iyi tanımlamak için, yetenekli() çağrı işleyicisi de dahil olmak üzere yeni kancalar eklendi."yetenekleri", işlem kimlikleri değil (Kimlik Bilgileri);
  • Ad alanı kısıtlamalarından (örneğin Docker kapsayıcılarından) kaçma girişimlerini tespit etmek için yeni mantık önerilmiştir;
  • X86-64 sistemlerinde, çekirdek düzeyinde çalışan ayrıcalıklı koddan kullanıcı alanı verilerine erişimi engellemek için tasarlanan SMAP (Denetleyici Modu Erişim Engelleme) biti kontrol edilir ve uygulanır. SMEP (Denetleyici Modu Yürütme Engelleme) koruması daha önce uygulanmıştı;
  • Çalışma sırasında LKRG ayarları genellikle salt okunur olan bir bellek sayfasına yerleştirilir;
  • Saldırılar için en yararlı olabilecek bilgilerin günlüğe kaydedilmesi (örneğin, çekirdekteki adresler hakkındaki bilgiler), varsayılan olarak devre dışı bırakılan hata ayıklama moduyla (log_level=4 ve üstü) sınırlıdır.
  • Süreç izleme veritabanının ölçeklenebilirliği artırıldı; bir spinlock tarafından korunan bir RB ağacı yerine, 512 okuma-yazma kilidiyle korunan 512 RB ağacından oluşan bir karma tablo kullanıldı;
  • Süreç tanımlayıcılarının bütünlüğünün genellikle yalnızca geçerli görev için ve ayrıca isteğe bağlı olarak etkinleştirilen (uyandırma) görevler için kontrol edildiği bir mod varsayılan olarak uygulanmış ve etkinleştirilmiştir. Uyku durumunda olan veya LKRG tarafından kontrol edilen çekirdek API'sine erişmeden çalışan diğer görevler için kontrol daha az sıklıkta gerçekleştirilir.
  • LKRG'de ince ayar yapmak için yeni sysctl ve modül parametrelerinin yanı sıra, geliştiriciler tarafından hazırlanan ince ayar ayarları (profiller) kümeleri arasından seçim yapılarak basitleştirilmiş yapılandırma için iki sysctl eklendi;
  • Bir yanda ihlallerin tespit edilme hızı ve müdahalenin etkinliği, diğer yanda performans üzerindeki etki ve hatalı pozitif sonuç riski arasında daha dengeli bir denge sağlamak için varsayılan ayarlar değiştirildi;
  • Systemd birim dosyası, LKRG modülünü önyüklemede erken yüklemek için yeniden tasarlandı (modülü devre dışı bırakmak için bir çekirdek komut satırı seçeneği kullanılabilir);

Yeni sürümde önerilen optimizasyonlar dikkate alındığında, LKRG 0.8 kullanıldığındaki performans düşüşünün varsayılan modda (“ağır”) %2.5 ve ışık modunda (“hafif”) %2 olduğu tahmin edilmektedir.

Yakın zamanda düzenlenen bir etkinlikte çalışma LKRG rootkit'lerini tespit etmeye yönelik paketlerin etkinliği gösterdi En iyi sonuçlar, yanlış pozitifler olmadan çekirdek seviyesinde çalışan test edilmiş 8 rootkit'ten 9'ini tanımlayarak (Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit ve Sutekh rootkitleri belirlendi, ancak bir çekirdek olan Keysniffer) modül, kelimenin tam anlamıyla bir rootkit değil, bir keylogger tarafından kaçırıldı). Karşılaştırma yapmak gerekirse, AIDE, OSSEC ve Rootkit Hunter paketleri 2 rootkitten 9'sini tespit ederken Chkrootkit hiçbirini tespit edemedi. Aynı zamanda LKRG, kullanıcı alanında bulunan rootkit'lerin tespitini desteklemez, bu nedenle en yüksek verimlilik, her türden 14 rootkit'ten 15'ünün tanımlanmasını mümkün kılan AIDE ve LKRG kombinasyonu kullanıldığında elde edilir.

Ek olarak, dağıtım geliştiricisinin Whonix başladı formasyon Debian, Whonix, Qubes ve Kicksecure için DKMS ile hazır paketler ve Arch Linux zaten 0.8 sürümüne güncellendi. LKRG'li paketler Rusça olarak da mevcuttur ALT Linux и AstraLinux.

LKRG'de bütünlük kontrolü, çekirdeğin ve modüllerin gerçek kodunu ve verilerini, bazı önemli veri yapılarını ve CPU ayarlarını, ilgili bellek alanlarının, veri yapılarının veya kayıtların saklanan karmaları veya kopyalarıyla karşılaştırarak gerçekleştirilir. Kontroller hem zamanlayıcı ile periyodik olarak hem de çeşitli olayların meydana gelmesi üzerine etkinleştirilir.

Açıklardan yararlanmanın olası kullanımının belirlenmesi ve saldırıların engellenmesi, çekirdeğin kaynaklara erişim sağlamasından önceki aşamada (örneğin, bir dosyayı açmadan önce), ancak işlem yetkisiz izinler aldıktan sonra (örneğin, UID'yi değiştirmek) gerçekleştirilir. Yetkisiz davranış tespit edildiğinde, işlemler varsayılan olarak sonlandırılmaya zorlanır ve bu da birçok istismarın engellenmesi için yeterlidir.

Kaynak: opennet.ru

Yorum ekle