XZ arka kapı olayı - ilk analiz sonuçları
(securelist.com)-
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,.gitignoredosyası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.txtiç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-hostbetiğ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.m4dosyasını içeriyordu - Bu
.m4dosyası build sırasında çalıştırılıyor ve test klasörüne eklenen ilk dosyayı değiştirip açıyordu
- 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
-
Stage 2 - enjekte edilmiş shell betiği:
.m4dosyası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.lzmadosyasını kullanıyor; bu dosya normal biçimde sıkıştırılmış olsa da açılmış verinin içinde çöp veriler bulunuyor head/tailkomutlarıyla 33.492 bayt çıkarılıyor vetrkomutuyla 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.lzmadosyası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.oolarak kaydediyor crc_x86_clmul.hiçindekiis_arch_extension_supportedişlevini değiştirerek__get_cpuidçağrısını_get_cpuidhaline getiriyor
İkili arka kapı analizi
-
Gizli yükleme senaryosu:
- XZ, CRC hesaplaması için
lzma_crc32,lzma_crc64iş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_cpuidsembolü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
- XZ, CRC hesaplaması için
-
Arka kapı kodu analizi:
- İlk arka kapı kodu iki kez çağrılıyor ve gerçek kötü amaçlı etkinlik,
lzma_crc64IFUNC_get_cpuidçağırdığında başlıyor - GOT adreslerini bularak
cpuidiş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
- İlk arka kapı kodu iki kez çağrılıyor ve gerçek kötü amaçlı etkinlik,
-
Temel davranışlar:
RSA_public_decrypt,EVP_PKEY_set1_RSA,RSA_get0_keygibilibcryptoiş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_audithook 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
Hacker News görüşü
Özet: