Özet:
CVE-2024-3094, XZ Utils açık kaynak kütüphanesinde keşfedilen ve kütüphanenin bakımcılarından biri tarafından kütüphaneye yerleştirilen kötü amaçlı koddan kaynaklanan bir güvenlik açığıdır.
Başlangıçta bir SSH kimlik doğrulama bypass backdoor'u olarak rapor edildi, ancak daha fazla analiz sonucu, backdoor'un aslında uzaktan kod yürütmeyi (RCE) mümkün kıldığını gösteriyor.
Tehdit, neredeyse iki yıl önce XZ projesine katkıda bulunmaya başladı ve kendilerine bakımcı sorumlulukları verilene kadar yavaş yavaş güvenilirlik kazandı. Bu tür uzun vadeli operasyonlar genellikle devlet destekli tehdit aktörlerinin alanıdır, ancak şu anda belirli bir atıf mevcut değildir.
Backdoor en son XZ Utils sürümlerini etkilediği için önerilen hareket, etkilenmemiş bir sürüme geri dönmektir. Bu blog yazısında, saldırının etki alanını sınırlamak için diğer önlemleri sunacağız.
Arka Plan
XZ Utils ve temel kütüphanesi
Yaklaşık iki yıl önce, Jia Tan adlı bir geliştirici proje ekibine katıldı ve çeşitli hata düzeltmeleri veya iyileştirmeler için pull request açmaya başladı. Şu ana kadar her şey normal; bu, açık kaynak dünyasında işlerin böyle yürüdüğünün resmi bir kanıtıdır. Tan, güven ve itibar kazandıktan sonra, Jia Tan repo için izinler almaya başladı. İlk önce, commit izinleri, release manager hakları olmak üzere repo hakkında her türlü izne sahip oldu.
Bu izinleri kazanma çabasının bir parçası olarak, Jia Tan ilginç bir sosyal mühendislik yöntemi kullandı gibi görünmektedir: Sahte hesaplar kullanarak orijinal maintainer'e baskı yapmak için çok sayıda özellik isteği ve hata şikayeti göndererek sonunda deponun başka bir maintainer eklemesine neden oldu.
Yaklaşık iki yıl boyunca kod katkısında bulunduktan sonra, 2023'te Jia Tan XZ'ye birkaç değişiklik getirdi ve bunlar 5.6.0 sürümünün bir parçası olarak dahil edildi. Bu değişiklikler arasında karmaşık bir backdoor da vardı.
Backdoor
Backdoor oldukça karmaşıktır. Yeni başlayanlar için, bu repoyu xz GitHub deposunda bulamazsınız. Tespit edilmekten kaçınmak için, arka kapının bazı kısımlarını genel git deposuna göndermek yerine, kötü niyetli maintaner bunu yalnızca kaynak kodu tarball sürümlerine dahil etmiş gibi görünüyor. Bu, backdoor'un bazı kısımlarının nispeten gizli kalmasına neden olurken, bağımlı projelerin derleme işlemi sırasında kullanılmasını amaçladığını gösteriyor.
Backdoor, birden fazla commit'te ortaya çıkan birçok parçadan oluşmaktadır:
Paylaşılan nesnenin kendisi
Daha sonra bu işlevi kendi kötü niyetli işlevine yönlendirir ve Filippo Valsorda tarafından yayınlanan araştırmaya göre, kimlik doğrulaması yapan istemcinin sertifikasından bir komut çıkarır (tehdit aktörü olduğunu doğruladıktan sonra) ve yürütülmesi için
Şekil 1: liblzma'nın hook süreci
Daha detaylı bir açıklama için, Andres Freund'un Openwall'daki yazısını okuyabilirsiniz.
Tespit Etme
Cybersecurity and Infrastructure Security Agency (CISA), önerilen hareket planı olarak 5.4.6 gibi güvenilir bir sürüme geri dönülmesini tavsiye etti.
Sistemlerinizde mevcut XZ Utils veya
Şekil 2: yüklü liblzma örnekleri için sorgulama
Alternatif olarak, yüklü sürümün paket yöneticisini bulmak için aşağıdaki sorguyu çalıştırabilirsiniz:
Elbette, yalnızca vulnerable kaynakları göstermek için filtreleme de yapabilirsiniz:
Tehdit Kontrolü
Backdoor, aslında sistem komutlarını çalıştırdığından ve sadece kimlik doğrulamaya izin vermediğinden, bu davranışı süreç izleme yoluyla tespit etmek mümkün olabilir.
Genellikle oturum açma sırasında, oturum açan kullanıcı için yeni bir shell oluşturulur ve varsayılan shell sürecini (bash gibi) çalıştırır. Ancak backdoor ile kötü amaçlı komut aslında SSH daemon süreci olan
Kill switch
Backdoor'un bazı analizlerine göre, bir ortam değişkeni Kill switch'e sahip gibi görünmektedir. Sistemin ortam değişkenlerine
Kaynak: Akamai.com
Bilgi için @Hydra'e teşekkürler.
CVE-2024-3094, XZ Utils açık kaynak kütüphanesinde keşfedilen ve kütüphanenin bakımcılarından biri tarafından kütüphaneye yerleştirilen kötü amaçlı koddan kaynaklanan bir güvenlik açığıdır.
Başlangıçta bir SSH kimlik doğrulama bypass backdoor'u olarak rapor edildi, ancak daha fazla analiz sonucu, backdoor'un aslında uzaktan kod yürütmeyi (RCE) mümkün kıldığını gösteriyor.
Tehdit, neredeyse iki yıl önce XZ projesine katkıda bulunmaya başladı ve kendilerine bakımcı sorumlulukları verilene kadar yavaş yavaş güvenilirlik kazandı. Bu tür uzun vadeli operasyonlar genellikle devlet destekli tehdit aktörlerinin alanıdır, ancak şu anda belirli bir atıf mevcut değildir.
Backdoor en son XZ Utils sürümlerini etkilediği için önerilen hareket, etkilenmemiş bir sürüme geri dönmektir. Bu blog yazısında, saldırının etki alanını sınırlamak için diğer önlemleri sunacağız.
Arka Plan
XZ Utils ve temel kütüphanesi
liblzma
, lzma
sıkıştırma ve açma işlemlerini uygulayan açık kaynaklı projelerdir. Birçok Linux dağıtımında varsayılan olarak bulunurlar, geliştiriciler arasında çok popülerdir ve Linux ekosistemi genelinde yaygın olarak kullanılırlar.Yaklaşık iki yıl önce, Jia Tan adlı bir geliştirici proje ekibine katıldı ve çeşitli hata düzeltmeleri veya iyileştirmeler için pull request açmaya başladı. Şu ana kadar her şey normal; bu, açık kaynak dünyasında işlerin böyle yürüdüğünün resmi bir kanıtıdır. Tan, güven ve itibar kazandıktan sonra, Jia Tan repo için izinler almaya başladı. İlk önce, commit izinleri, release manager hakları olmak üzere repo hakkında her türlü izne sahip oldu.
Bu izinleri kazanma çabasının bir parçası olarak, Jia Tan ilginç bir sosyal mühendislik yöntemi kullandı gibi görünmektedir: Sahte hesaplar kullanarak orijinal maintainer'e baskı yapmak için çok sayıda özellik isteği ve hata şikayeti göndererek sonunda deponun başka bir maintainer eklemesine neden oldu.
Yaklaşık iki yıl boyunca kod katkısında bulunduktan sonra, 2023'te Jia Tan XZ'ye birkaç değişiklik getirdi ve bunlar 5.6.0 sürümünün bir parçası olarak dahil edildi. Bu değişiklikler arasında karmaşık bir backdoor da vardı.
Backdoor
Backdoor oldukça karmaşıktır. Yeni başlayanlar için, bu repoyu xz GitHub deposunda bulamazsınız. Tespit edilmekten kaçınmak için, arka kapının bazı kısımlarını genel git deposuna göndermek yerine, kötü niyetli maintaner bunu yalnızca kaynak kodu tarball sürümlerine dahil etmiş gibi görünüyor. Bu, backdoor'un bazı kısımlarının nispeten gizli kalmasına neden olurken, bağımlı projelerin derleme işlemi sırasında kullanılmasını amaçladığını gösteriyor.
Backdoor, birden fazla commit'te ortaya çıkan birçok parçadan oluşmaktadır:
- Kötü amaçlı yazılım tarafından sembol çözümleme işlevlerini ele geçirmek için kullanılacak olan IFUNC'lerin derleme sürecinde kullanılması,
- Test dosyalarına gizlenmiş bir paylaşılan nesne ekleme,
- Paylaşılan nesneyi çıkaran kütüphanenin derleme işlemi sırasında bir betik setinin çalıştırılması (depoda yer almaz, yalnızca sürümlerde bulunur, ancak .gitignore'a eklenir.),
- Process haklarını kısıtlamak için bir güvenlik özelliği olan
landlocking
'in devre dışı bırakılması
- Kötü niyetli betik
build-to-host.m4
, kütüphanenin derleme sürecinde çalıştırılır vetest
dosyasıbad-3-corrupt_lzma2.xz
'yi bir bash betiğine çözer, - Bash betiği daha sonra başka bir
test
dosyası üzerinde daha karmaşık bir çözme işlemi gerçekleştirir, bu da onu başka bir betiğe çözer, - O betik daha sonra derleme sürecine
liblzma_la-crc64-fast.o
adlı bir paylaşılan nesne çıkarır ve bu nesneliblzma
'nın derleme sürecine eklenir,
Paylaşılan nesnenin kendisi
liblzma
'da derlenir ve normal işlev adı çözümleme işleminin yerini alır. Herhangi bir işlem yüklemesi sırasında, işlev adları, ikili kodu işaret eden işlem belleğine gerçek pointere çözümlenir. Kötü amaçlı kütüphane işlev çözümleme sürecine müdahale eder, böylece OpenSSH işlevi RSA_public_decrypt
için işlev pointerini değiştirebilir (Şekil 1).Daha sonra bu işlevi kendi kötü niyetli işlevine yönlendirir ve Filippo Valsorda tarafından yayınlanan araştırmaya göre, kimlik doğrulaması yapan istemcinin sertifikasından bir komut çıkarır (tehdit aktörü olduğunu doğruladıktan sonra) ve yürütülmesi için
system()
işlevine aktarır, böylece kimlik doğrulamasından önce RCE elde edilir.Şekil 1: liblzma'nın hook süreci
Daha detaylı bir açıklama için, Andres Freund'un Openwall'daki yazısını okuyabilirsiniz.
Tespit Etme
Cybersecurity and Infrastructure Security Agency (CISA), önerilen hareket planı olarak 5.4.6 gibi güvenilir bir sürüme geri dönülmesini tavsiye etti.
Sistemlerinizde mevcut XZ Utils veya
liblzma
sürümünü öğrenmek için, Akamai Guardicore Segmentation Insight'ta yüklü liblzma
kütüphanesi örneklerini arayan aşağıdaki sorguyu çalıştırabilirsiniz (Şekil 2).
SQL:
SELECT DISTINCT path AS liblzma_path
FROM process_memory_map
WHERE LOWER(path) LIKE "%liblzma%"
Şekil 2: yüklü liblzma örnekleri için sorgulama
Alternatif olarak, yüklü sürümün paket yöneticisini bulmak için aşağıdaki sorguyu çalıştırabilirsiniz:
SQL:
SELECT name AS vulnerable_item, 'DEB' AS type, version
FROM deb_packages
WHERE (LOWER(name) LIKE '%xz-utils%' OR LOWER(name) LIKE '%liblzma%')
UNION
SELECT name AS vulnerable_item, 'RPM' AS type, version
FROM rpm_packages
WHERE (LOWER(name) LIKE '%xz-utils%' OR LOWER(name) LIKE '%liblzma%')
Elbette, yalnızca vulnerable kaynakları göstermek için filtreleme de yapabilirsiniz:
SQL:
SELECT path AS vulnerable_item, "Loaded Library" AS type, '5.6%' AS version
FROM process_memory_map
WHERE LOWER(path) LIKE "%liblzma%5.6%"
SQL:
SELECT name AS vulnerable_item, 'DEB' AS type, version
FROM deb_packages
WHERE (LOWER(name) LIKE '%xz-utils%' OR LOWER(name) LIKE '%liblzma%')
AND version LIKE '5.6.%'
UNION
SELECT name AS vulnerable_item, 'RPM' AS type, version
FROM rpm_packages
WHERE (LOWER(name) LIKE '%xz-utils%' OR LOWER(name) LIKE '%liblzma%')
AND version LIKE '5.6.%'
Tehdit Kontrolü
Backdoor, aslında sistem komutlarını çalıştırdığından ve sadece kimlik doğrulamaya izin vermediğinden, bu davranışı süreç izleme yoluyla tespit etmek mümkün olabilir.
Genellikle oturum açma sırasında, oturum açan kullanıcı için yeni bir shell oluşturulur ve varsayılan shell sürecini (bash gibi) çalıştırır. Ancak backdoor ile kötü amaçlı komut aslında SSH daemon süreci olan
sshd
tarafından yürütülür ve bu da bir anormalliği tetikleyebilir.Kill switch
Backdoor'un bazı analizlerine göre, bir ortam değişkeni Kill switch'e sahip gibi görünmektedir. Sistemin ortam değişkenlerine
yolAbejyiejuvnup=Evjtgvsh5okmkAvj
anahtarını eklemek arka kapıyı devre dışı bırakabilir.Kaynak: Akamai.com
Bilgi için @Hydra'e teşekkürler.
Son düzenleme: