Selamlar Sevgili Siberatay Mensupları
Geçtiğimiz günlerde Ubuntu ve Linux sistemlerini hedef alan, sunucuları kelimenin tam anlamıyla bant genişliği tsunamisiyle boğan yeni nesil DDoS dalgalarını haberlerde görmüşsünüzdür. Güvenlik bültenleri "yeni bir tehdit" çığlıkları atarken, arka planda çalışan zararlı yazılımın kodlarını incelediğimizde karşımıza çıkan o tanıdık yüz hiç şaşırtıcı değildi: Mirai. Evet, 2016 yılında mutfaktaki akıllı buzdolabınızı ve şifresi "admin" olan o ucuz güvenlik kamerasını bir kitle imha silahına dönüştüren o aynı eski hayalet.
Bugün, bir zamanlar dünyanın en büyük web sitelerini dize getiren bu zararlı yazılımı laboratuvar masamıza yatırıp, tersine mühendislik (reverse engineering) neşteriyle parça parça edeceğiz.
Mirai Botnet Neden Hala Tehlikeli? (Kaynak Kod Sızıntısı)
Siber güvenlik dünyasında bir zararlı yazılımın ömrü genellikle kısadır. Antivirüs firmaları imzayı yakalar, güvenlik duvarları portları kapatır ve tehdit tarihin tozlu raflarına kalkar. Ancak Mirai, aradan geçen bunca yıla ve yamalanan binlerce zafiyete rağmen hala hayatta ve Linux sunucuları tehdit etmeye devam ediyor.
Neden mi? Cevap, yazılımın zekasında değil, yaratıcısının yaptığı o çılgınca hamlede gizli.
Eylül 2016'da, "Anna-senpai" kod adlı geliştirici, FBI'ın ensesinde olduğunu hissedince yeraltı forumu HackForums'ta Mirai'nin tüm kaynak kodunu sızdırdı.
Bu hamle, siber dünyanın Pandora Kutusu'nu açtı. Mirai'nin saf C diliyle yazılmış, son derece modüler ve derlenmesi inanılmaz kolay olan mimarisi artık herkesin elindeydi.
Bugün analiz ettiğimiz Mozi, Satori, Hajime veya son dönemde Linux/Ubuntu sunucularına saldıran botnet varyantlarının neredeyse tamamı,
çekirdeğinde Mirai'nin o sızdırılan DNA'sını taşır. Kimse sıfırdan bir botnet mimarisi, tarayıcı (scanner) modülü veya C&C (Komuta Kontrol) haberleşme protokolü yazmakla uğraşmıyor. Hazır şablonu alıyor, içine güncel birkaç zayıf parola listesi veya "exploit" ekliyor, derleyip sahaya sürüyorlar.
Mirai, siber dünyanın tartışmasız AK-47'sidir: Ucuz, basit, kolay modifiye edilebilir ve ne yazık ki hala ölümcül.
Peki, bu efsanevi kodun altında tam olarak ne yatıyor? Birkaç kilobaytlık bir C kodu, nasıl oluyor da devasa bir zombi ağını (botnet) askeri bir disiplinle yönetebiliyor?
Tersine Mühendislik (Reverse Engineering) Laboratuvar Kurulumu
Bir zararlı yazılımı (malware) analiz etmeden önce, o yazılımın bilgisayarınıza bulaşmasını engelleyecek izole bir laboratuvar ortamı kurmanız şarttır.
Biz bu analizde dinamik analizden (zararlıyı çalıştırıp ağ hareketlerini izlemek) ziyade, doğrudan beynine, yani kodlarına inebilmek için statik analiz yöntemini kullanacağız.
Statik Analiz İçin Gerekli Araçlar
Makine diline çevrilmiş (derlenmiş) 1 ve 0'lardan oluşan o soğuk binary dosyasını okuyabilmek için, onu tekrar insanların anlayabileceği Assembly veya C diline çevirmemiz (decompile/disassemble) gerekiyor. Bunun için sektör standartı olan iki büyük silaha ihtiyacımız var:
- IDA Pro: Hex-Rays tarafından geliştirilen, siber güvenlik uzmanlarının vazgeçilmezi olan dünyanın en güçlü disassembler aracıdır. Karmaşık fonksiyon bloklarını görsel bir haritaya dökerek analizi inanılmaz kolaylaştırır. (Resmi site:)İçeriklerden Faydalanmak için Üye olmanız Gerekmektedir. Giriş yap veya üye ol.
- Ghidra: Amerikan Ulusal Güvenlik Ajansı (NSA) tarafından geliştirilip açık kaynak olarak paylaşılan muazzam bir tersine mühendislik aracıdır. Özellikle ücretsiz olması ve güçlü decompiler (C koduna geri çevirme) özelliğiyle IDA'nın en büyük rakibidir. (Resmi site:)İçeriklerden Faydalanmak için Üye olmanız Gerekmektedir. Giriş yap veya üye ol.
ARM ve MIPS Mimarisi Neden Önemli?
Klasik bir Windows zararlı yazılımı incelerken genellikle x86 veya x64 işlemci mimarisine odaklanırsınız. Ancak Mirai bir IoT (Nesnelerin İnterneti) zararlısıdır. Mutfaktaki akıllı buzdolabınızda, modeminizde veya IP kameranızda devasa Intel işlemciler bulunmaz; bunun yerine düşük güç tüketen, ucuz
ARM veya MIPS mimarili işlemciler kullanılır.
Mirai'nin en tehlikeli özelliklerinden biri de "Cross-Compile" (Çapraz Derleme) yapısına sahip olmasıdır.
Zararlı yazılım bulaştığı cihaza, o cihazın işlemcisine özel olarak tasarlanmış bir sürümünü indirir.
Bu yüzden tersine mühendislik yaparken ekranda göreceğimiz Assembly komutları standart bir bilgisayardan farklı olarak ARM komut setine
(LDR, STR, BL vb.) ait olacaktır.
Mirai Kaynak Kod Analizi ve Assembly İncelemesi
Araçlarımızı kuşandığımıza ve düşmanın mimarisini anladığımıza göre, artık masadaki cesedi açabiliriz. Karşımızda Mirai'nin kalbi duruyor.
C&C (Komuta Kontrol) Sunucusu ile Haberleşme (Socket Analizi)
Her zombi ordusunun emir aldığı bir karargahı vardır. Mirai enfekte olduğu (bulaştığı) cihazda ayağa kalktığı anda yaptığı ilk iş, sessizce "Komuta Kontrol (C&C)" sunucusuna ulaşıp "Ben uyandım patron, kimi vuruyoruz?" mesajını iletmektir.
Zararlı yazılımı IDA Pro içerisine sürükleyip bıraktığımızda, programın başlangıç noktası olan
main() fonksiyonunu aramaya başlarız. Mirai, analiz edilmekten kaçınmak için içindeki C&C IP adreslerini ve kritik verileri açık metin (plaintext) olarak bırakmaz; basit bir XOR şifrelemesiyle gizler.
Tersine mühendislik araçlarımızla bu XOR döngüsünü çözdüğümüzde, zararlının dış dünyayla bağlantı kurmak için kullandığı
socket() ve connect() fonksiyonlarını net bir şekilde görürüz.
Yukarıdaki analiz ekranında da görebileceğiniz gibi, zararlı yazılım standart bir TCP bağlantısı kurarak patronuna (C&C sunucusuna) kancayı atıyor.
Bu bağlantı sağlandıktan sonra cihaz artık tamamen dışarıdan gelecek komutlara açık, uyuyan bir ajana (sleeper cell) dönüşüyor.
Patron hedefin IP adresini ve saldırı türünü (Örn: UDP Flood) yolladığı an, zombi terör estirmeye başlıyor.
Peki ama bu ordu nasıl bu kadar devasa sayılara ulaşıyor? Zombiler, yeni zombileri nasıl buluyor?
Tarayıcı (Scanner) Modülü: Zombiler Nasıl Ürüyor?
Mirai'nin en acımasız ve sinsi tarafı, kendini kopyalama (çoğalma) yeteneğidir. Enfekte olan her cihaz, C&C sunucusundan emir beklemenin yanı sıra, arka planda sessizce bir "avcıya" dönüşür.
IDA Pro'da
scanner.c veya tarayıcı fonksiyonlarına denk gelen bellek adreslerini (memory addresses) incelediğimizde, zararlının durmaksızın rastgele IP adresleri üreten bir algoritmaya sahip olduğunu görürüz. (Buna siber güvenlikte brute-force veya kaba kuvvet taraması denir). Bot, ürettiği bu rastgele IP adreslerinin Telnet (23) ve SSH (22) portlarına bağlanmaya çalışır.
Bağlantı başarılı olursa, decompiler ekranında karşımıza çok ilginç bir dizi bloğu (array) çıkar.
Mirai, kodlarının içine gömdüğü (ve yine basit bir XOR ile gizlediği) yaklaşık 60 adet varsayılan kullanıcı adı ve parola listesini hedefe tek tek dener.
Tersine mühendislik araçlarıyla bu şifrelemeyi kaldırdığımızda, kodun içinde kabak gibi parlayan şu meşhur listeyle karşılaşırız:
Bash:
[admin:admin]
[root:123456]
[support:support]
[user:user]
[root:vizxv]
Eğer bu şifrelerden biri tutarsa, tarayıcı modülü yeni kurbanın IP adresini ve şifresini derhal merkeze (Loader) raporlar.
Loader, saniyeler içinde o cihaza uygun Mirai zararlısını yükler ve orduya yeni bir asker daha katılmış olur.
DDoS Vektörlerinin İncelenmesi (SYN ve UDP Flood)
Zombiler ordusu kuruldu. Patron hedefi gösterdi. Peki ateşleme mekanizması kod seviyesinde nasıl işliyor?
Mirai, kurbanı boğmak için C kodları arasında spesifik saldırı fonksiyonları barındırır. Bunlardan en çok kullanılanları
attack_udp_generic (UDP Flood) ve attack_tcp_syn (SYN Flood) fonksiyonlarıdır. Ghidra kullanarak bu saldırı fonksiyonlarını decompile (C koduna geri çevirme) ettiğimizde, zararlının işletim sisteminin ağ katmanını (Network Layer) nasıl manipüle ettiğini görürüz.
Mirai, standart bir web tarayıcısı gibi yasal yollardan bağlantı kurmak yerine, Raw Sockets (Ham Soketler) kullanarak kendi ağ paketlerini (network packets) sıfırdan, sahte kimliklerle inşa eder (IP Spoofing). Aşağıdaki örnek kod bloğunda (terminal / C mantığında), hedefin nasıl bir SYN paketi yağmuruna tutulduğunu görebilirsiniz:
C:
// Mirai SYN Flood Paket Üretim Mantığı (Temsili/Decompile Edilmiş Yapı)
void attack_tcp_syn(uint8_t targs_len, struct attack_target *targs) {
int fd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP); // Ham soket oluştur
while (TRUE) {
// Hedefe durmaksızın, sahte kaynak IP'lerle SYN (Merhaba) paketi yolla
build_ip_header(); // Sahte IP başlığı
build_tcp_header(); // TCP SYN Bayrağı aktif
sendto(fd, packet, packet_len, 0, (struct sockaddr *)&dest, sizeof(dest));
// Hedef cevap verene kadar bekleme, sadece gönder ve boğ!
}
}
(while (TRUE)), zombi cihazın işlemcisi ve ağ kartı elverdiği ölçüde saniyede binlerce kez tekrarlanır. Yüz binlerce cihazın bu döngüyü aynı anda çalıştırdığını düşünün; işte o zaman hedef sunucunun RAM'i dolar, işlemcisi kilitlenir
ve sistem kelimenin tam anlamıyla fişi çeker.
Sistem Yöneticileri İçin: Mirai Varyantlarından Korunma Yolları
Bu kadar vahşi ve yaygın bir IoT zararlı yazılımı karşısında çaresiz değiliz. Tersine mühendislik adımlarında da gördüğümüz gibi, Mirai'nin temel besin kaynağı "ihmaldir". Sunucularınızı ve ağlarınızı bu botnet türevlerinden (Mozi, Satori vb.) korumak için şu adımları izlemelisiniz:
- Varsayılan Şifreleri Acilen Değiştirin: Ağınızdaki kameralar, yönlendiriciler (router), akıllı prizler ve sunucu yönetim arayüzleri kesinlikle 'admin:admin' gibi komik şifrelerle bırakılmamalıdır.
- Dışa Açık Portları Kapatın: Telnet (23) günümüzde tamamen ölü ve güvensiz bir protokoldür, derhal kapatılmalıdır. SSH (22) bağlantılarınızı ise internete açık bırakmak yerine, sadece belirli IP'lerden (VPN üzerinden) erişilebilir hale getirin. Key-based (Anahtar tabanlı) SSH kimlik doğrulamasına geçin.
- Ağ Segmentasyonu (VLAN) Yapın: IoT cihazlarınızı, ana verilerinizin ve bilgisayarlarınızın bulunduğu ağdan ayırın. Akıllı bir lambanın veya kameranın, ana sunucunuza erişim yetkisi olmamalıdır.
- Firmware Güncellemelerini İhmal Etmeyin: Cihaz üreticileri keşfedilen "Zero-Day" veya bilinen zafiyetler için yamalar yayınlar. Cihazlarınızın güncel olduğundan emin olun.
Sıkça Sorulan Sorular (S.S.S.)
Mirai Botnet Hangi Portları Kullanır? Mirai botnet, cihazlara sızmak ve yayılmak için öncelikli olarak internete açık Telnet (Port 23) ve SSH (Port 22) portlarını kullanır. Hedef cihazın bu portlarını tarayarak varsayılan şifrelerle (brute-force) giriş yapmaya çalışır.
IoT Cihazıma Virüs Bulaştığını Nasıl Anlarım? Cihazınızda normalin dışında bir ısınma, internet kotanızda veya ağ trafiğinizde (bant genişliği) açıklanamayan devasa bir artış, cihazın sık sık yeniden başlaması veya kendi kendine ayarlarının değişmesi, cihazınızın bir botnet zombisi (Mirai varyantı) olduğuna işaret edebilir.
En Popüler Mirai Türevleri Nelerdir? Mirai'nin kaynak kodlarının sızdırılmasının ardından bu kodu temel alan birçok tehlikeli varyant türemiştir. Günümüzde en bilinen ve hala aktif olan Mirai türevleri arasında Mozi, Satori, Hajime ve Okiru bulunmaktadır.
Değerli Siberatay üyeleri, bir tost makinesinin nasıl küresel bir siber silaha dönüştüğünü ve o silahın makine kodlarına inerek tersine mühendislik analizini baştan sona inceledik. Eklememi istediğiniz bir yer veya assembly kodları arasında kafanıza takılan bir detay varsa, konu altında belirtebilirsiniz.
Temiz portlar, güvenli şifreler!
Bir sonraki analizde görüşmek üzere!
VESPER