Rehber XZ Utils Backdoor hakkında neler biliyoruz? Nasıl önlem alabiliriz?

Ö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 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ı
Yürütme zinciri de birden fazla aşamadan oluşur:

  • Kötü niyetli betik build-to-host.m4, kütüphanenin derleme sürecinde çalıştırılır ve test 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 nesne liblzma'nın derleme sürecine eklenir,
Bu süreci takip etmek oldukça zordur. Harika bir görsel referans ve derinlemesine analiz için şuradaki X gönderisine (Thomas'a bu harika görsel için teşekkür ederiz.) bakabilirsiniz.

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.

sekil1.webp

Ş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%"

sekil2.webp

Ş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:
Canonical, Ubuntu 24.04 betayı bu yüzden ertelemiş ve tedbir olarak bütün paketleri tekrar derleyeceklermiş.
 

Yeni konular

Geri
Yukarı Alt