Tüm internet hacklenmekten sadece yarım saniyelik bir gecikme ile kurtuldu desem inanır mısınız? Microsoft'ta mühendis olarak çalışan Andres Freund, SSH bağlantısındaki ufak bir işlemci yükü ve gecikme anormalliğini fark etti ve ortaya daha büyük bir tablo çıktı. Gelin, anlatayım.
Bölüm 1: Düşman Dışarıda Değil, İçeride
XZ yazılımı Linux sistemlerde veri sıkıştırmak için kullanılan bir programdır. Fakat yazılım açık kaynaktı. Doğal olarak bu yazılımın yükünü yıllardır XZ'nin kurucusu Lasse Collin çekiyordu. Lasse, yılların yorgunluğu ve sağlık problemleri dolayısıyla XZ'nin geliştirilme sürecini bir başkasına bırakmak istiyordu.
O sırada sahneye birisi girdi: Jia Tan. 3 yıldır bu projeye büyük emek veriyordu ve Lasse'nin güvenini kazanmıştı. Jia Tan, Lasse Collin'den projeyi devralmak istediğini söyledi. O ise uzun süredir tanıdığı ve güvendiği Jia Tan'e seve seve bu görevi devretti. Lasse Collin artık huzur bulmuştu, ya da biz mi öyle sanıyoruz?
Bölüm 2: Mutlak Kontrol
Yazılımın tüm kontrolü Jia Tan'deydi. Yazılımın tüm kaynak kodları GitHub'da saklanıyordu ve kod değişikliklerini herkes görebiliyordu. Peki, veri sıkıştırma yazılımına çoğu kişinin anlayamayacağı bir biçimde nasıl zararlı yazılım ekleriz? Yorumlara yazın.
Cevap ikili veri blokları. Bir veri sıkıştırma yazılımı yazarken, sıkıştırmanın açılıp açılmadığını kontrol etmek için yazılımın içinde ikili veri blokları bulunur. Çöp veri olarak kabul edilir. Jia Tan için bu bir altın madeniydi. Fark ettirmeden burada değişiklikler yapabilir ve zararlı yazılımını bu ikili veri blokları içerisinde saklayabilirdi. Acaba başarabilecek miydi?
Bölüm 3: Teknik Deha
İçerisinde zararlı kod bulunan ikili veri bloğunu, derleme betiklerinin arasına gizledi ve XZ kütüphanesine ekledi. SSH servisi bu kütüphaneleri dolaylı olarak çağırıyor. Ardından IFUNC fonksiyonu sayesinde, daha SSH servisi başlamadan, GOT (Global Offset Table)'a "bak benim adresim bu" diyerek SSH servisini ele geçirebiliyordu.
Farkındayım, sizi çok teknikle boğuyorum. GOT ve IFUNC fonksiyonunun ne işe yaradığını anlatayım
IFUNC:
Normalde bir yazılımcı kod yazarken, yazdığı kodun eski bir bilgisayarda mı, yoksa son model bir işlemcide mi çalışacağını asla bilemez. İşte burada IFUNC fonksiyonu devreye giriyor. IFUNC, yazılımcı yerine cihazın donanım özelliklerini öğrenir ve çalışma prensibinin nasıl olacağına dair karar verir.
GOT (Global Offset Table):
Modern işletim sistemlerinde programlar, çalışırken bellekten tasarruf etmek için ortak kütüphaneler kullanır. Ancak bir problem var. Örneğin SSH servisi çalışmaya başladığında, her cihaz açıldığında rastgele adres verildiği için alakalı kütüphanelerin nerede olduğu tam olarak bilemez. İşte burada GOT devreye girer. Bunu, telefon numaralarının bulunduğu bir deftere benzetebiliriz. Gerekli kütüphaneler bu tablodan bulunur.
Bölüm 4: Eğer Fark Edilmeseydi?
XZ'nin zararlı sürümü Linux işletim sistemlerinin unstable, yani kararsız sürümündeydi. Eğer Andres Freund bu işlemci yükünü ve yarım saniyelik gecikmeyi fark etmeseydi ne olurdu?
Öncelikle işletim sistemi kararlı sürümlerinde de XZ'nin zararlı versiyonunu kabul edecekti ve saldırgan Linux kullanılan sunuculara, devletlerin kritik altyapılarına ve devasa bulut sunucularına sızabilecekti. İnternetin çok büyük bir kısmını log dahi oluşturmadan ele geçirebilecekti.
5. Bölüm: Çıkarılacak Dersler
Gerilim dolu ve deha kokan bir yazının sonuna geldik. Peki bu yazıdan neleri öğrenmeliyiz?
1-) Sıfır Güven:
Asla ama asla "bu kod açık kaynaklıdır, zaten herkes kodları inceliyor" gibi bir tutumda bulunmamalıyız. Yazılımın doğrulanmasını beklemeli ve öyle kullanmalıyız.
2-) Anomali Takibi:
Bu backdooru imza tabanlı antivirüsler bulamazdı. Fakat Andres bu backdooru ufak bir anomali ile buldu. Bir programın normalde 100 ms'de yanıt vermesi gerekiyorken bize 600 ms'de yanıt veriyorsa, işte orada şüphelenmeliyiz.
3-) Sıkı Takip:
Anomalileri görebilmek için sistemimizi takip etmeli ve olağan dışı aktiviteleri fark etmeliyiz.
KAPANIŞ
Günümüzde internette en çok kullanılan yazılımlar, açık kaynak kod yazan mühendislerden çıkmıştır. Şirketler bu sistemleri severek kullanırken işin güvenliğini de o mühendislere bırakıyor. Sizce burada suçlu kim siz karar verin.
Sistemlere karşı her daim paranoya ile bakmanın ve bazen dünyayı hacklenmekten kurtaran şeyin milyonlarca dolar değil yaratıcı ve şüpheci bir zihin olduğunu gördük. Yazı hakkındaki feedback'lerinizi yorumlarda bekliyorum.