Neredeyse tüm dünyayı enfekte edecek olan xz Utils arka kapısı hakkında bilinenler
(arstechnica.com)- Microsoft’tan Andres Freund, Debian sistemlerinde SSH performansındaki anormalliği izlerken, neredeyse tüm Linux/Unix türevi ortamlarda kullanılan xz Utils içine yerleştirilmiş bir arka kapı keşfetti
- Kötü amaçlı kod xz Utils 5.6.0 ve 5.6.1 sürümlerine eklendi ve belirli bir özel anahtara sahip saldırganın SSH oturum açma sertifikasında kod gizleyerek bunu arka kapılı cihazda çalıştırabilmesi için tasarlandı
- Saldırgan, GitHub kaynağı yerine release tarball’ı, test dosyalarını, build script’lerini ve glibc IFUNC’u kullanarak liblzma üzerinden sshd kimlik doğrulama rutinine kanca atmayı hedefledi
- Arka kapı amd64/x86_64, glibc, Debian veya Red Hat tabanlı paket build koşullarını kontrol etti; Fedora Rawhide, Fedora 41, Debian testing/unstable/experimental, openSUSE Tumbleweed/MicroOS ve Kali Linux’un belirli dönem sürümlerine dahil edildi
- Jia Tan adlı geliştirici personası, yıllar boyunca xz Utils bakım sürecine dahil oldu; olay CVE-2024-3094 olarak izleniyor ve Binarly tarama sayfası ile xzbot gibi tespit ve analiz araçları ortaya çıktı
Keşif ve etki alanı
- Andres Freund, Microsoft’ta PostgreSQL ile ilgili işler yapan bir geliştirici ve mühendisti; Debian sistemlerinde SSH oturum açma sırasında CPU’nun aşırı kullanılması ve valgrind hataları görülmesini araştırırken anormalliği fark etti
- Sebep xz Utils güncellemesiydi ve Freund, Open Source Security List’te bu güncellemenin sıkıştırma yazılımına kasıtlı olarak yerleştirilmiş bir arka kapı olduğunu açıkladı
- xz Utils, Linux dahil neredeyse tüm Unix türevi işletim sistemlerinde kayıpsız veri sıkıştırma ve açma sağlar, ayrıca eski .lzma biçimini de destekler
- Filippo Valsorda bunu, “kamuya açık şekilde açıklanmış tedarik zinciri saldırıları arasında en iyi uygulanmış örnek olabilir; yaygın kullanılan bir kütüphanenin kötü niyetli, yetkin ve yetkili upstream’i gibi kâbus senaryosu” diye değerlendirdi
Arka kapının hedeflediği davranış
- Kötü amaçlı kod xz Utils 5.6.0 ve 5.6.1 sürümlerine eklenerek yazılımın çalışma biçimini değiştirdi
- Arka kapı, uzak SSH bağlantılarında kullanılan yürütülebilir dosya sshd’yi manipüle ediyor
- Önceden belirlenmiş bir kriptografik anahtara sahip biri, SSH oturum açma sertifikasında istediği kodu gizleyip bunu yükledikten sonra arka kapılı cihazda çalıştırabiliyor
- Gerçekte yüklenen kod doğrulanmadığı için saldırganın hangi kodu çalıştırmayı amaçladığı bilinmiyor
- Teorik olarak kriptografik anahtarların çalınmasından kötü amaçlı yazılım kurulmasına kadar neredeyse her şey mümkün olabilir
Sıkıştırma kütüphanesinin SSH’ye ulaşma yolu
- Bir kütüphane, kendisine bağlanan yürütülebilir dosyanın iç işleyişini manipüle edebilir
- OpenSSH’nin tipik sshd uygulaması varsayılan olarak liblzma ile linklenmez
- Debian ve çeşitli Linux dağıtımları, sshd’yi systemd ile bağlayan yamalar ekledi
- systemd, açılış sırasında çeşitli servisleri yükleyen programdır
- systemd, liblzma ile linklidir
- Bu bağlantı yolu nedeniyle xz Utils sshd’yi etkileyebildi
Yıllara yayılan hazırlık işaretleri
- 2021’de JiaT75 adlı kullanıcı, bir açık kaynak projede bilinen ilk commit’ini bıraktı
- Bu, libarchive projesinde safe_fprint işlevini uzun süredir daha az güvenli olduğu bilinen bir varyantla değiştiren bir değişiklikti ve o sırada kimse bunu fark etmedi
- 2022’de JiaT75, xz Utils e-posta listesine bir yama gönderdi
- Kısa süre sonra Jigar Kumar adlı yeni bir katılımcı, Lasse Collin’e xz Utils’i yeterince sık veya hızlı güncellemediği yönünde baskı yaptı
- Dennis Ens ve başka yeni katılımcılar da Collin’e ek bakımcılar alması için baskı yaptı
- 2023 Ocak’ta JiaT75, xz Utils’e ilk commit’ini bıraktı ve Jia Tan adıyla xz Utils işlerine daha derin biçimde dahil oldu
- oss-fuzz’daki Collin iletişim bilgisini kendi bilgisiyle değiştirdi
- oss-fuzz testlerinde IFUNC özelliğini devre dışı bırakarak, daha sonra xz Utils’e girecek kötü amaçlı değişikliklerin tespit edilmesini engelleyen bir değişikliği talep etti
- 2024 Şubat’ta Tan, xz Utils 5.6.0 ve 5.6.1 commit’lerini yaptı; bu güncelleme arka kapıyı uyguluyordu
- Ardından Tan veya başkaları, Ubuntu, Red Hat ve Debian geliştiricilerinden ilgili güncellemeyi işletim sistemlerine birleştirmelerini istedi
Dahil edilen dağıtımlar ve çalıştırma koşulları
- Tenable’a göre arka kapılı sürümler veya ilgili güncellemeler şu sürümlere girdi
- Fedora Rawhide: Fedora Linux’un geliştirme dağıtımı
- Fedora 41
- Debian testing, unstable, experimental: 5.5.1alpha-0.1’den 5.6.1-1’e kadar
- openSUSE Tumbleweed ve openSUSE MicroOS: 7 Mart ile 28 Mart arasında arka kapılı xz sürümleri içerdi
- Kali Linux: 26 Mart ile 28 Mart arasında xz-utils 5.6.0-0.2 içerdi
- Sam James’in analizine göre kötü amaçlı script, build hedefinin amd64/x86_64 olup olmadığını,
linux-gnuadını kullanıp kullanmadığını ve GCC ile GNU ld kullanılıp kullanılmadığını kontrol ediyor - Ayrıca bunun Debian paket build’i olup olmadığını veya RPM_ARCH’nin x86_64 olup olmadığını da denetliyor
- Saldırının, amd64 sistemlerde glibc kullanan ve Debian ya da Red Hat türevi dağıtımlar build eden ortamları hedeflediği anlaşılıyor
- Diğer sistemlerin savunmasız olup olmadığı o sırada bilinmiyordu
Uygulama yöntemi ve gizleme teknikleri
- Sam James, arka kapının birden fazla bileşenden oluştuğunu özetledi
- upstream tarafından dağıtılan release tarball, GitHub’daki kodla aynı değil
- release tarball içindeki build-to-host.m4, GitHub upstream’dekinden büyük ölçüde farklı
- git deposunun tests/ klasöründe manipüle edilmiş test dosyaları var
tests/files/bad-3-corrupt_lzma2.xztests/files/good-large_compressed.lzma
- build-to-host.m4 tarafından çağrılan script, kötü amaçlı test verisini açıyor ve build sürecini değiştiriyor
- glibc’nin IFUNC’u, OpenSSH kimlik doğrulama rutinini çalışma zamanında kancalamak veya yeniden yönlendirmek için kullanılıyor
- HD Moore, nihai arka kapı aşamasının yalnızca amd64 üzerinde kütüphane build edilirken ve Debian ya da RPM paketi oluşturulurken çalıştığını doğruladı
- Araştırmacıların analizine göre SSH açık anahtar doğrulama sürecinde, belirli bir fingerprint işlevi ve açık anahtar eşleşirse, açık anahtar gerçekten doğrulanmadan önce anahtar içeriği önceden paylaşılan bir anahtarla çözülüyor
- Çözülen içerik belirli bir biçime uyduğunda doğrudan
system’e aktarılıyor - Fingerprint eşleşmezse veya çözülen içerik biçime uymazsa normal anahtar doğrulamasına geri dönülüyor; kullanıcıların farkı anlaması zor
Akamai’nin özetlediği yürütme zinciri
- Akamai araştırmacılarına göre arka kapı, tespitten kaçmak için xz GitHub deposuna değil yalnızca kaynak kodu tarball release’lerine dahil edildi
- Arka kapı birden fazla commit’e yayılarak oluşturuldu
- Build sürecinde IFUNC kullanılarak kötü amaçlı kodun sembol çözümleme işlevlerini ele geçirmesi sağlandı
- Obfuscation uygulanmış bir paylaşımlı nesne test dosyalarının içine gizlendi
- Kütüphane build sürecinde bu paylaşımlı nesneyi çıkaran bir script çalıştırıldı
- Süreç yetkilerini sınırlayan bir güvenlik özelliği olan landlocking devre dışı bırakıldı
- Yürütme zinciri birden fazla aşamadan oluşuyor
build-to-host.m4, kütüphane build’i sırasında çalışarakbad-3-corrupt_lzma2.xzdosyasını bir bash script’i olarak decode ediyor- Bu bash script’i,
good-large_compressed.lzmadosyasını daha karmaşık bir yöntemle decode ederek başka bir script oluşturuyor - Bu script,
liblzma_la-crc64-fast.opaylaşımlı nesnesini çıkarıyor ve bunu liblzma derleme sürecine ekliyor
- Bu paylaşımlı nesne liblzma içine derlenerek normal işlev adı çözümleme sürecinin yerini alıyor
- Kötü amaçlı kütüphane, OpenSSH’nin
RSA_public_decryptişlev işaretçisini kendi oluşturduğu kötü amaçlı işleve çevirebiliyor - Filippo Valsorda’nın analizine göre bu kötü amaçlı işlev, kimlik doğrulama istemcisinin sertifikasından komutları çıkarıyor, tehdit aktörü olduğunu doğruluyor ve ardından
system()fonksiyonuna vererek kimlik doğrulama öncesi uzaktan kod çalıştırma sağlıyor
Jia Tan ve kalan sorular
- Jia Tan hakkında bilinenler çok sınırlı
- Bu geliştirici personası son birkaç yılda düzinelerce başka açık kaynak yazılıma da dahil oldu
- Jia Tan kullanıcı adının arkasında gerçek bir kişinin mi olduğu, yoksa tamamen kurgulanmış bir figür mü olduğu bilinmiyor
- Ek teknik analizler Filippo Valsorda’nın Bluesky dizisinde, Kevin Beaumont’un analizinde ve Freund’un cuma günü yayımladığı açıklamalarda görülebilir
CVE ve doğrulama araçları
- Bu zafiyetin izleme kimliği CVE-2024-3094
- Binarly’nin xz.fail sayfası IFUNC uygulamasını tespit ediyor ve davranış analizine dayanıyor
- Benzer bir arka kapı başka bir yere yerleştirilse bile değişmeyen koşulları otomatik olarak tespit edebilir
- xzbot, analiz ve deney amaçlı işlevler sunuyor
- honeypot: exploit girişimlerini tespit etmek için sahte savunmasız sunucu
- ed448 patch: kendi ED448 açık anahtarını kullanacak şekilde
liblzma.soyaması - backdoor format: arka kapı payload biçimi
- backdoor demo: ED448 özel anahtarının bilindiği varsayımıyla RCE’yi tetikleyen CLI
1 yorum
Hacker News yorumları
Amaç, standartlaştırılmış bir test framework’ü kullanarak XZ için test yazmayı kolaylaştırmaktı.
Jia’nın 2022-06-17’de yazdığına göre henüz test edilmemiş çok sayıda özellik vardı; testleri artırmanın projenin uzun vadeli kararlılığına yardımcı olacağını düşünüyordu.
Yani bu, uzun zamandır hazırlanmakta olan bir değişiklikti.
Kütüphanenin
RSA_public_decryptaraya girmesini mümkün kılan linkleme mekanizması pek tartışılmamış gibi görünüyor.Süreç izolasyonu gibi konular çok konuşuluyor, ama o fonksiyon çağrısının yeniden yönlendirilmesi hakkında daha az şey söyleniyor.
SSH üzerinden gelen kod gibi temel bileşenleri kütüphanelerle hiyerarşik bir güven modeliyle linkleyip, “çağırdığım konumda güveniyorum ama başka çağrı noktalarına kendiliğinden araya girmesine izin vermiyorum” gibi bir model kurulamaz mı diye düşünüyorum.
Etrafından dolaşma yolları var diye anlamsız gören “security through obscurity” refleksini tetikleyebilir, ama yine de bunu saldırı yüzeyini küçültme olarak görmek mümkün.
Ancak işletim sisteminde birden fazla güvenlik bağlamı üst üste biner. XZ arka kapısıyla ilgili olarak bu daha çok modül düzeyinde capability tabanlı güvenlik meselesi, ama program düzeyi capability’ler, bellek düzeyi izolasyon (paging), mikro-mimari düzey izolasyon gibi katmanlar da var.
Bu unsurları birlikte çalıştırıp bir yandan performans almak epey zor; Unix türevlerinin böyle bir modele geçmesi ise süreç kavramının kendisini değiştirmeyi gerektireceği için fiilen imkânsız görünüyor.
Bu, XZ testlerini bozdu; ardından birdenbire o testleri devre dışı bırakmak için lobi yapan hesaplar ortaya çıktı ve sonuçta exploit mümkün hale geldi.
./configure && makeçalıştırılırken) C dosyasını gizlice değiştirerek ifunc resolver’ı patch’liyor ve sağlanan kötü amaçlı nesneyi çağırmasını sağlıyor.Bozulmuş nesne dosyası
nowlinker flag’iyle linkleniyor; böylece kütüphane yüklenirken ifunc hemen çözümleniyor ve o anda süreç link tablosu hâlâ yazılabilir durumda olduğu için patch’lenmiş resolver çağrılıyor.Kritik nokta da tam burası: kütüphane yüklendiğinde bellekteki
RSA_public_decryptfonksiyonunu doğrudan ele geçirebiliyordu.Arka kapı enjeksiyon sürecini çok iyi analiz eden yazı: https://research.swtch.com/xz-script
dlopenkullanılmasına yönelik değişikliği birleştirdi: https://github.com/systemd/systemd/pull/31550Bu anlamda daha güvenli bir linkleme biçimi.
ltrace’in çağrılan sembolleri izlemesi yeterli olur mu merak ediyorum.Neden dünyanın “neredeyse” tamamına bulaştırdı deniyor, bilmiyorum.
En azından oldukça popüler 3 Linux dağıtımı, Arch, Gentoo, openSUSE Tumbleweed, arka kapıyı haftalarca dağıttı ve Tumbleweed’de kesin olarak çalışıyordu.
Haftalar boyunca arka kapı içeren SSH söz konusuydu; “neredeyse” demek zayıf kalıyor.
Yalnızca deb/rpm hedeflerinde çalıştığı için pratikte prodüksiyona ulaşmadan durdurulmuş oldu.
Bu, sorun olmadığı anlamına gelmiyor; eğer bu RHEL ya da Debian/Ubuntu stable’a girecek kadar uzun süre fark edilmemiş olsaydı, bankalar veya sağlık kurumları gibi yerlerden bildirimler alıyor olurduk.
Kimlik doğrulama öncesi uzaktan kod çalıştırma söz konusuysa, ağı sıkı biçimde kısıtlamayan ve iyi akış loglamasına sahip olmayan yerler için “etkilenmedik” demek zor olurdu.
xz-5.6.1-1ilexz-5.6.1-2içindekiliblzma.so.5.6.1dosyalarıcmp -lile karşılaştırıldığında yalnızca çok küçük farklar var.Tavsiye metni yazılmadan önce bunun bilinmediği anlaşılıyor.
https://github.com/QubesOS/qubes-issues/issues/9067#issuecom...
Yine de bunu destekleyecek verinin nasıl elde edileceğini bilmiyorum.
Önümüzdeki 12 ay içinde benzer bir şeyin gerçek ortamlarda bulunacağına 101 dolar yatırırım.
Çünkü bakımcılar birbirlerinin eski commit’lerinden şüphelenip incelemeye başlayacak.
Önemli ama pek bilinmeyen ve çok az bakımcısı olan codebase’lere bakmak yeterli.
Ben böyle bir şeye sahip olsaydım ve iyi çalışsaydı, daha sonra başka bir hesapla bunu “keşfedip” düzelttirirdim.
Bu olaydan çıkardığım kişisel sonuçlar birkaç tane
Birincisi, kaynak deposundan farklı kod içeren kaynak dağıtım tarball’ları iyi değil; bunlardan uzaklaşmak gerekiyor. Bir başka büyük tedarik zinciri saldırısı olan event-stream de benzer bir noktadan yararlanmıştı
Bunun sonucu olarak otomatik üretilen çıktılar her zaman commit edilmelidir
İkincisi, kod incelemesinde herkesin Page Down ile geçip gittiği otomatik üretilen çıktılar sorunlu. Böyle dosyalar depoda varsa, birinin bunlarla oynayıp oynamadığını kontrol eden otomatik testler de olmalı; bu aynı zamanda eski otomatik üretilmiş dosyaların bırakılıp unutulmasını da önler
Üçüncüsü, 1 ve 2’nin sonucu olarak autotools kötü, autotools kültürü de kötü
Dördüncüsü, Libsystemd ekosistem için bir sorun. Bunu söyleyince systemd düşmanı diye yaftalanıyorsunuz ama büyük, karmaşık, çok bağımlılığı var ve çoğu program bunun yalnızca çok küçük bir kısmını kullanıyor. Her servisin başlatma bildirimi için buna bağımlı olmasını teşvik etmek delilik
Beşincisi, kod yeniden kullanımının her zaman iyi olduğu ve küçük bir özellik için büyük bir kütüphaneye bağımlı olmanın sorun olmadığı yönünde bir kültür var; bu doğru değil. Bağımlılıklar bakım yükü ve güvenlik riskidir; getirdikleri işlevlerle tartılmaları gerekir
Altıncısı, dağıtım bakımcılarının paketlere büyük yamalar uygulaması da bir sorun. Asıl bakımcıların bakmadığı kütüphane ve uygulamaların yaygın kullanılan fiilî fork’ları ortaya çıkıyor
Yedincisi, geliştirici açısından OSS’nin finansal olarak sürdürülebilir hale gelmesi gerekiyor. Liblzma ve xz-utils’in on milyonlarca kurulumu olmalı; buna rağmen ruh sağlığı sorunları yaşayan tek bir bakımcıya dayanıyordu
Sekizincisi, söylemek istemiyorum ama artık kod incelemesi ve bakım yetkisinin devrinde jeopolitik değerlendirmeler de yapmak gerekiyor
Jia Tan’ın gerçek adı olduğuna dair kanıt yok; gerçek bir kişi olduğuna dair bile kanıt yok
Projeler Asyalı gibi duyulan isimlerden katkı almamaya başlarsa, bir sonraki saldırıda Richard Jones adını kullanmaları yeterli olur
BSD dünyasından gelince systemd şok edici; canavar gibi ve dokunaçlarını her yere uzatıyor
Tüketiciler saf ama yazılım sektörünün kendisi de güvenlik tehditleri konusunda saf
Sosyal exploit’ler, kod exploit’lerinin bir parçasıdır
FOSS’un “koda bakan göz ne kadar çoksa o kadar iyi” ilkesi doğru, ama yalnızca o gözler eğitimli gözlerse işler. FOSS’un sektörün maddi desteğine ihtiyacı var
Bu exploit’i bir MSFT mühendisi yakaladı, ama yine de Fedora 41, openSUSE ve Kali’nin genel herkese açık sürümlerine girmişti
Geliştirme araç zinciri ve test süreçleri hiçbir zaman güvenliği test etmek üzere tasarlanmadı. SolarWinds de bakmaya değer: https://www.wired.com/story/the-untold-story-of-solarwinds-t...
Sürüm çıktılarında yalnızca autoconf betikleri bulunmaz
Bir sürüm arşivine ikili blob koymanın birçok nedeni vardır. Oyun kaynakları, firmware imajları, test vakaları vb. mpv’nin, özel mülk bir encoder ile üretilmiş bazı medya dosyalarını test vakası olarak dahil ettiğinden de söz edilmişti; bu kötü değil, iyi bir şey
İyi bakımı yapılan sqlite her yerde kullanılıyor ve harika bir test paketi de var. Her sürümde bir değil, derleme aşamalarına göre iki tarball yayımlıyor. Bunu durdurmak kolay olurdu ama yalnızca paket bakımcılarının işini artırır, güvenliği iyileştirmez
Debian’ın seçilmiş tarball’dan derleme yapmasının nedeni, bunların insanlar tarafından seçilip iyi bilinen anahtarlarla imzalanmasıdır. Elbette git’ten de derlenebilir ama bunun durumu iyileştirip iyileştirmeyeceği belirsiz. Her proje sürüm etiketlerini imzalamıyor; imzalasa bile bunun daha büyük olasılıkla otomatikleştirilmiş olması mümkün
Değişikliklerin önce upstream bakımcı tarafından, sonra paket bakımcısı tarafından incelenmesini istiyoruz ve bu iki tarafın birbirinden bağımsız olmasını tercih ediyoruz
Bu kez yozlaşmış bir upstream bakımcı bu sürece saldırdı, ama bu upstream bakımcıları ortadan kaldırmamız gerektiği anlamına gelmez. Son birkaç yılda bu yapı sayesinde birden fazla backdoor girişimi engellendi; dikkatli inceleme yapmadan çöpe atılacak bir süreç değil
Sürekli söylediğimiz iyileştirme yönü aynı. Yeniden üretilebilir derlemeler için daha çok çaba göstermeli, mümkün olduğunda saldırı yüzeyini ve derleme karmaşıklığını azaltmalı, bakımcılara güvenmeli ama işi doğrulamalıyız
Aksine bu noktada kafa karışıklığı yaşadılar ve libsystemd olmadan basit datagramların nasıl uygulanacağına dair dokümantasyon ekliyorlar
liblzma ve xz-utils’in kurulum sayısı on milyonlardan çok daha fazla olmalı. Python, PHP, Ruby gibi birçok dil libxml2’ye bağımlı; libxml2 de liblzma kullanıyor. Başka bağımlılıklar da çok
Jeopolitik değerlendirmeler bakımcının işi değil. OSS hiçbir garanti olmadan sunulur
Üstelik “Jia Tan”ın tamamen sahte olma ihtimali var. Commit zaman damgalarına bakınca, aynı gün içinde bile zaman dilimi Doğu Avrupa’dan Asya’ya değişiyor. En azından bir kimlik oyunu oynandığı kesin
Bu sorunu keşfeden kişinin Azure Postgres’te çalışan bir Microsoft mühendisi olduğunu bilmiyordum
Teşekkürler Microsoft, artık Azure’u sevmeye başladım
Çünkü bu sorun böyle keşfedildi
Ardından sorunlu kütüphaneye bakıp, sahte bir persona’nın projeyi ele geçirdiği benzer aykırı durumları aramak gerekiyor
Bu tür hataları görmezden gelmek yaygın bir uygulama gibi görünüyor
Bu tarz paketlemeye gerçekten katlanamıyorum
xz’nin asıl bakımcısı, Jia Tan’ı bizzat görmeden ya da en azından onunla telefonda bile konuşmadan sorumluluğu devretmiş gibi görünüyor
Yalnızca e-posta veya GitHub üzerinden iletişim kurmanın yaygın bir şey olup olmadığını merak ediyorum
Bu olaydan sonra bazı açık kaynak proje bakımcıları daha dikkatli davranacak gibi
Ben de gerçek kişinin kim olduğunu hiç bilmeden, sadece metinle iletişim kurarak kütüphane bakımını devraldım veya devrettim
Ama bu olaydan “bakımcıların daha dikkatli olması gerekir” sonucunu çıkarmanın tamamen yanlış olduğunu düşünüyorum
İnsanların kendi projelerine neyi dahil ettiklerinin sorumluluğu bakımcıda değil, o projede çalışan kişilerde
Ya bakımcıya güvenirsiniz ya da güvenmezsiniz; bir kütüphaneye bağımlı olmaya başladığınız anda kime güvendiğinizi sürekli güncelleyeceğinizi zımnen kabul etmiş olursunuz
Milyonlarca şirket, ücretsiz çalışan açık kaynak geliştiricilerinin emeğinden bedavaya yararlanıyor
Bu yüzden onların ayrılması ve sorun çıkması şaşırtıcı değil
O kişinin niyetleri hakkında nasıl ek bir güven sağlayacaktı?
GitHub’da 100 yıldızdan 30 bin yıldıza kadar farklı ölçeklerde yaklaşık altı açık kaynak projeye katıldım; kimseyle telefonda konuşmadım ve metin tabanlı iletişim standarttı
Ama birini şahsen tanımak da sorunu mutlaka çözmez
Uzun zaman önce anonim olarak bir açık kaynak projesinde çalışmıştım; burada adını vermek istemiyorum. Baş programcının, onu oldukça iyi tanıyor gibi görünen bir ortak bakımcısı vardı
Bu ortak bakımcı beni ve daha sonra gelen diğer bakımcıları sürekli gaslighting’e maruz bıraktı, küçümsedi ve çok küçük hatalar yüzünden suçlayarak ayrılmalarına neden oldu. Hakaretleri bir kenara bırakırsanız, eğitici nitelikteki Linus Torvalds tarzı azarlamalardan da farklıydı
Baş bakımcı, iddianın teknik özüne katıldığı için onu cesaretlendirdi
Birkaç yıl sonra bu ortak bakımcı projeyi düşmanca ele geçirmeye çalıştı ve işler beklendiği gibi gitmedi. Kısa süre sonra çeşitli özel yazışmalar yayımlandı; bunlar, onun en başından beri bunu istediğini ve diğer bakımcıları gaslighting’e maruz bırakmasının da bu hedefin bir parçası olduğunu ortaya koydu
İki kişi birbirini tanımasına rağmen bunlar yaşandı
Herkes bu backdoor’un erken yakalandığını düşünüyor, ama belki de amacına çoktan ulaşmış olabilir
Özellikle hedef Kali veya Debian gibi rolling release dağıtımlar kullanan bir geliştiriciyse bu mümkün
Hafta başında biraz SSH trafiğine baktım, o sırada pek önemsemedim
Elbette bu yanlış izlenim de olabilir: https://www.nubi-network.com/news.php?id=21
“Lasse Collin xz Utils’i yeterince sık ya da hızlı güncellemiyordu” şeklindeki meme hataydı
SSH’nin neden xz kullandığını bilmiyorum
Kullanması mı gerekiyor? Gerçekten bu kadar önemli mi?
OpenSSH, başlatma bildirimi sağlamak için libsystemd’yi içeri çekti; libsystemd de liblzma’yı içeri çekti. Normalde liblzma’nın kodu OpenSSH’nin içine girmez
Ancak libsystemd’nin bağımlılığı olarak derlendiği için, derleme betiği libsystemd ve OpenSSH ile aynı ortamda çalışır
Saldırı yükü, liblzma test dizininde sıkıştırma test vakası gibi gizlenmiş, obfuscate edilmiş bir ikili blob olarak saklanmıştı
lzma’yı git kaynağından derleyip autotools ile derleme betikleri üretildiğinde şüpheli bir şey yoktu. Ancak dağıtım paketleyicilerinin kullandığı kaynak tarball’larında autotools zaten çalıştırılmıştı ve saldırgan otomatik üretilen, okunması zor betik çıktısını değiştirmişti
Bu betik, liblzma’nın OpenSSH ile aynı ortamda derlenip derlenmediğini ve
.debveya.rpmpaketine girecek şekilde derlenip derlenmediğini kontrol ediyordu; ikisi de doğruysa saldırı yükünü OpenSSH’ye yerleştiriyorduDaha sonra payload, OpenSSH’nin init betiğiyle normal şekilde mi başlatıldığını yoksa elle mi çalıştırıldığını, yaygın hata ayıklama araçlarının bulunup bulunmadığını ve benzeri birçok kontrol yapıyor; hata ayıklama aracı olmadan “doğal” bir önyükleme gibi göründüğünde ancak çalışan sürece bağlanıyordu
Çalışırken özel anahtar doğrulamasına hook takıyor ve doğru özel anahtar oturum açmayı denerse gelen paketin geri kalanını
systemile çağırarak root yetkili uzaktan kod çalıştırma sağlıyordu