2 puan yazan GN⁺ 2024-04-13 | 1 yorum | WhatsApp'ta paylaş
  • Olayların zaman çizelgesi:

    • 2024.01.19: XZ web sitesi yeni bir maintainer (jiaT75) tarafından GitHub Pages'e taşındı
    • 2024.02.15: build-to-host.m4, .gitignore dosyasına eklendi
    • 2024.02.23: Kötü amaçlı betik aşamalarını içeren iki "test dosyası" eklendi
    • 2024.02.24: XZ 5.6.0 yayımlandı
    • 2024.02.26: CMakeLists.txt içinde Landlock güvenlik özelliğini sabote eden commit
    • 2024.03.04: Arka kapı, Valgrind ile sorunlara yol açtı
    • 2024.03.09: İki "test dosyası" güncellendi, CRC işlevleri değiştirildi, Valgrind sorunu "düzeltildi"
    • 2024.03.09: XZ 5.6.1 yayımlandı
    • 2024.03.28: Hata keşfedildi, Debian ve RedHat bilgilendirildi, Debian XZ'yi geri aldı
    • 2024.03.29: OSS-security posta listesinde e-posta yayımlandı, RedHat arka kapılı XZ'nin dağıtıldığını doğruladı
    • 2024.03.30: Debian derlemeleri durdurdu ve yeniden derleme sürecini başlattı
    • 2024.04.02: XZ'nin ana geliştiricisi arka kapı olayını kabul etti
  • Kötü amaçlı arka kapıyı içeren XZ dağıtımlarının hash değerleri:

    • xz-5.6.0: MD5, SHA1, SHA256 hash değerleri sağlanıyor
    • xz-5.6.1: MD5, SHA1, SHA256 hash değerleri sağlanıyor

İlk bulaşma analizi

  • Stage 1 - değiştirilmiş build-to-host betiği:

    • Release kaynak dosyaları başlangıçta zararsızdı, ancak hacker'ın kontrol ettiği bir URL'den indirildiğinde kötü amaçlı kod çalıştıran build-to-host.m4 dosyasını içeriyordu
    • Bu .m4 dosyası build sırasında çalıştırılıyor ve test klasörüne eklenen ilk dosyayı değiştirip açıyordu
  • Stage 2 - enjekte edilmiş shell betiği:

    • .m4 dosyasıyla enjekte edilen kötü amaçlı betik, Linux üzerinde hedeflenen build süreci içinde çalışıp çalışmadığını doğruluyor
    • Sonraki aşamayı çalıştırmak için good-large_compressed.lzma dosyasını kullanıyor; bu dosya normal biçimde sıkıştırılmış olsa da açılmış verinin içinde çöp veriler bulunuyor
    • head/tail komutlarıyla 33.492 bayt çıkarılıyor ve tr komutuyla temel yerine koymalar uygulanarak obfuscation çözülüyor
  • Stage 3 - arka kapının çıkarılması:

    • Son aşamadaki shell betiği, beklenen ortamda çalışıp çalışmadığını doğrulamak için çeşitli kontroller yapıyor
    • Arka kapının ikili kodunu, aynı good-large_compressed.lzma dosyasındaki farklı bir offset'e gizlenmiş halde çıkarıyor
    • Dosyayı XZ aracıyla çıkarıyor ve bir dizi head çağrısıyla RC4 benzeri bir algoritma kullanarak ikili veriyi çözüyor
    • Sıkıştırılmış dosyayı XZ ile çıkarıyor, baştaki baytları predefined değerlerle kaldırdıktan sonra liblzma_la-crc64-fast.o olarak kaydediyor
    • crc_x86_clmul.h içindeki is_arch_extension_supported işlevini değiştirerek __get_cpuid çağrısını _get_cpuid haline getiriyor

İkili arka kapı analizi

  • Gizli yükleme senaryosu:

    • XZ, CRC hesaplaması için lzma_crc32, lzma_crc64 işlevlerini kullanıyor ve bunlar ELF sembol tablosunda IFUNC türünde saklanıyor
    • IFUNC, optimize edilmiş sürümün kullanılıp kullanılmayacağını dinamik olarak belirlemek için kullanılıyor
    • Arka kapı bir object file olarak saklanıyor ve temel amacı derleme sırasında ana çalıştırılabilir dosyaya linklenmek
    • Object file, _get_cpuid sembolünü içeriyor; özgün kaynakta tek bir alt çizgi kaldırılarak kod _get_cpuid çağırdığında gerçekte arka kapılı sürüm çağrılmış oluyor
  • Arka kapı kodu analizi:

    • İlk arka kapı kodu iki kez çağrılıyor ve gerçek kötü amaçlı etkinlik, lzma_crc64 IFUNC _get_cpuid çağırdığında başlıyor
    • GOT adreslerini bularak cpuid işaretçisinin konumunu tespit ediyor ve bunu ana kötü amaçlı işlev işaretçisiyle değiştiriyor
    • Temel amaç, bulaşmış sisteme yapılan tüm bağlantıları izleyebilmek için belirli işlevleri hook etmek
  • Temel davranışlar:

    • RSA_public_decrypt, EVP_PKEY_set1_RSA, RSA_get0_key gibi libcrypto işlevleri hook hedefleri arasında
    • Mevcut sürecin çalıştırma ölçütlerini karşılayıp karşılamadığını denetliyor ve bir kill switch olup olmadığını kontrol ediyor
    • String işlemleri için Trie yapısını kullanıyor
    • ELF Symbol yapısının konumunu bulmak için 3 veya daha fazla symbol resolver rutini kullanıyor
    • rtdl-audit özelliğini kötüye kullanarak symbol resolving rutinlerini ele geçiriyor ve böylece işlev hook etmeyi başarıyor

GN⁺ görüşü

  • Bu yazı, açık kaynak yazılıma zararlı kod enjekte edilen son derece sofistike bir saldırı örneğini net biçimde gösteriyor. Açık kaynağın güçlü yanlarının tersine kullanılabileceğini hatırlatıyor.

  • Linux sistemlerini hedef alan siber saldırılar ve arka kapılar giderek daha sofistike hale geliyor. Özellikle SSH sunucuları üzerinden yapılan saldırılar ciddi bir güvenlik tehdidi olabilir.

  • Öte yandan bu olay, açık kaynak ekosisteminin kendi kendini düzeltme kapasitesini de gösteriyor. Sonuçta arka kapı topluluk tarafından keşfedildi ve hızla karşılık verildi. Şeffaflık kilit unsur.

  • Gelişmiş Trie veri yapıları, Symbol Resolver ve dl_audit hook etme gibi tekniklerin kullanılması, Linux zararlı yazılımlarındaki teknik evrimi gösteriyor. Linux sistem güvenliğine de özel dikkat göstermek gerekiyor.

  • Şirketlerin açık kaynak yazılım benimserken yalnızca lisans değil, güvenlik açısından da doğrulama yapması şart. Dağıtım kaynağının güvenilir olup olmadığı ve kodun sürekli izlenip izlenmediği mutlaka değerlendirilmeli.

1 yorum

 
GN⁺ 2024-04-13
Hacker News görüşü

Özet:

  • Saldırganın tespitten kaçınmak için script’lere ve koda büyük emek vermiş olması, tüm bu projenin bir geçişin ya da eşzamanlı yürütülen birden fazla çabanın alternatifi olarak işlev görebileceğini gösteriyor
  • SSHD’ye odaklanmanın, sistemin diğer bölümlerini veya teknik ve toplumsal yönleri etkileyebileceği göz önünde bulundurulmalı
  • Her dinamik bağlantı kütüphanesinin kendi GOT’sine sahip olması ve dinamik bağlantı tamamlandığında tablonun salt okunur olarak işaretlenmesi yararlı bir güçlendirme adımı olabilir
  • Kaynak kodu, disassembler çalıştırılıp kodun ne yaptığının anlaşılmasının ardından her şeyin açıklayıcı adlarla yeniden adlandırılması yoluyla üretilmiş gibi görünüyor
  • Sonunda ortaya çıkmasına neden olan şey, backdoor’daki bir hatanın SSH’de gecikme ve yavaşlamaya yol açmasıydı; bununla ilgili bir analiz yapılıp yapılmadığını merak ediyorum
  • xz deposu GitHub’da yeniden ortaya çıktı ve bakımcılar ifunc desteğini kaldırıp test dosyaları üreten kodu commit ederek temizlik çalışmaları yapıyor
  • İnsanların fark etmediği daha çok sayıda backdoor olabileceğini düşünmek ve bunun gibi gözden kaçmış başka bir şey olmamasını ummak