ESET araştırmacıları, FishMonger’ın gelişmiş gizlilik için bir çekirdek sürücüsünü silah hâline getiren arka kapısı olan SprySOCKS for Windows’u keşfettiler
ESET araştırmacıları, daha önce yalnızca Linux için geliştirilmiş ve I-SOON adlı Çinli bir yüklenici tarafından yönetildiği düşünülen FishMonger grubu tarafından kullanıldığı bildirilen SprySOCKS’un, henüz belgelenmemiş iki Windows varyantını keşfetti. Bu kötü amaçlı yazılım örneklerini ilk olarak VirusTotal’da keşfetmiş olsak da ESET telemetri verileri 2023 ile 2024 yılları arasında Honduras, Tayvan, Tayland ve Pakistan’da çoğunlukla devlet kurumlarını hedef alan ve birkaç kurbanın olduğu gerçek faaliyetleri göstermektedir.
Keşfedilen Windows varyantları, dâhili olarak WIN_DRV ve WIN_PLUS olarak işaretlenmiştir. Her ikisi de sabit kodlanmış bir C&C yapılandırmasına sahiptir ve TCP, UDP ve WebSocket protokolleri üzerinden iletişimi desteklemektedir. Her ikisinin de temel arka kapı işlevselliği, sistem bilgisi toplama, işlem numaralandırma gibi çeşitli işlevlerin yanı sıra hizmet yönetimi ve dosya listeleme, oluşturma, silme ve aktarma gibi dosya yönetimi işlevlerini kapsayan 30’dan fazla C&C komutunu desteklemektedir.
Temel arka kapı işlevselliğine ek olarak, WIN_DRV sürümü, kötü amaçlı yazılımın ağ bağlantılarını, işlemlerini, dosyalarını ve kayıt defteri anahtarlarını gizlemek için çekirdek sürücülerini kullanır ve TCP trafiğinin yönlendirilmesini sağlar; bu sayede kötü amaçlı yazılım operatörleri, ağ trafiğinde arka kapının gerçek dinleme bağlantı noktasını açığa çıkarmadan, kurbanın cihazındaki rastgele bir TCP bağlantı noktası üzerinden arka kapıya komutlar gönderebilir.
ESET telemetri verilerine göre, bazı SprySOCKS saldırı senaryolarının, muhtemelen CVE-2023-24932 güvenlik açığını istismar eden bir UEFI bootkit bileşeni içerebileceğine dair sınırlı sayıda gösterge bulunmaktadır.
Bu raporda sunulan analizler, bu yeni Windows varyantlarını yüksek bir güven derecesiyle FishMonger’a atfetmemize yol açmaktadır.
Raporun ana noktaları:
- FishMonger’ın SprySOCKS arka kapısının daha önce belgelenmemiş iki Windows varyantını keşfettik.
- ESET telemetri verileri, 2023 ile 2024 yılları arasında, esas olarak Honduras, Tayvan, Tayland ve Pakistan’daki devlet kurumlarını hedef alan faaliyetler olduğunu göstermektedir.
- Her iki Windows varyantı da TCP, UDP ve WebSocket protokolleri üzerinden iletişimi desteklemekte ve 30’dan fazla komut uygulamaktadır.
- WIN_DRV varyantı, alınan bir TCP paketinin içinde özel olarak hazırlanmış veriler tespit edildiğinde trafiği arka kapının gizli TCP bağlantı noktasına yönlendirmek için bir çekirdek sürücüsüne dayanan, gizli ve pasif bir TCP arka kapısı oluşturur.
FishMonger profili
FishMonger – I-SOON adlı bir Çinli yüklenici tarafından yönetildiği düşünülen (bkz. 2023 4. Çeyrek – 2024 1. Çeyrek APT Faaliyet Raporu) – Winnti Grubu çatısı altında yer alan ve büyük olasılıkla Çin’in Chengdu kentinden faaliyet gösteren bir siber casusluk grubudur. Earth Lusca, TAG-22, Aquatic Panda veya Red Dev 10 adlarıyla da bilinir. 2019 Haziran ayında başlayan sivil protestolar sırasında Hong Kong’daki üniversiteleri yoğun bir şekilde hedef aldığı 2020 yılının başlarında FishMonger hakkında bir analiz yayımlamıştık. Trend Micro’nun bildirdiği üzere, grubun “watering-hole” saldırıları düzenlediği de bilinmektedir. FishMonger’ın araç seti arasında ShadowPad, Spyder, Cobalt Strike, FunnySwitch, SprySOCKS ve BIOPASS RAT yer almaktadır.
Teknik analiz
Bu bölümde, FishMonger’ın SprySOCKS arka kapısının bu yeni Windows varyantlarına ilişkin teknik bir analiz sunuyoruz.
Bu keşfe yol açan arşiv, Nisan 2024’te klelam00007.zip adıyla VirusTotal’a yüklenmiştir; içeriği Şekil 1 adresinde gösterilmektedir.

Şekil 1 . VirusTotal’da görüntülenen klelam00007.zip dosyasının içeriği
Bu arşiv, DLL yan yüklemesini barındırmak için kullanılan meşru dosyalar ve .dat uzantılı, şüpheli görünen üç şifreli dosya dâhil olmak üzere çeşitli dosyalar içermektedir. Daha sonra yaptığımız analiz, bu şifreli dosyaların, geliştiricileri tarafından WIN_DRV olarak adlandırılan, FishMonger’ın SprySOCKS arka kapısının daha önce belgelenmemiş yeni bir Windows varyantını içerdiğini ortaya çıkardı. Daha ayrıntılı araştırma, ESET Telemetri’de WIN_PLUS olarak adlandırılan ek bir arka kapı sürümünü ortaya çıkardı.
İlk erişim
FishMonger, ilk erişimi elde etmek için genellikle sunucu tabanlı N-day güvenlik açıklarını istismar ederek kurbanlarının halka açık sunucularını hedeflemesiyle bilinmektedir. Bu kampanyada FishMonger’ın kurbanlarının sistemlerine tam olarak nasıl girdiğini doğrulayamasak da bazı kurban cihazlarında sunucu işletim sisteminin bulunması ve FishMonger’ın tipik çalışma şekli, saldırganların yanlış yapılandırılmış veya yamalanmamış halka açık uygulamalar aracılığıyla sisteme girmiş olabileceğini düşündürüyor.
Windows için SprySOCKS
Eylül 2023’te Trend Micro, analistlerinin SprySOCKS adını verdiği yeni bir FishMonger Linux arka kapısı hakkında bir rapor yayımladı. Arka kapının kodu, Trochilus adlı açık kaynaklı bir Windows uzaktan erişim truva atına (RAT) dayanmaktadır ve RedLeaves arka kapısıyla birçok ortak özelliğe sahiptir; ancak yeni bir arka kapı olarak kabul edilebilecek kadar genişletilmiş ve değiştirilmiştir. Bu raporda, SprySOCKS v1.8 sürümünün henüz açıklanmamış iki Windows varyantını analiz ediyoruz:
- Bunlardan biri, geliştiricileri tarafından WIN_DRV olarak adlandırılmış ve gelişmiş gizlilik için bir çekirdek sürücüsü kullanıyor.
- Diğeri ise sürücü içermeyen ve WIN_PLUS olarak adlandırılan varyanttır.
Şekil 2 ’de gösterildiği gibi, arka kapı sürüm türü ve numarası ikili dosyada sabit olarak kodlanmıştır.

Şekil 2 . WIN_DRV (solda) ve WIN_PLUS (sağda) Windows SprySOCKS arka kapı varyantlarında sabit kodlanmış sürüm türü ve numarası
Trend Micro’nun raporunda tanıtılan SprySOCKS arka kapısının Linux sürümünde bulunan artefaktların ve işlevlerin büyük çoğunluğu, bu raporda açıklanan yeni keşfedilen Windows SprySOCKS varyantlarında da bulunabilir. Bunlar arasında şunlar yer alır:
- aynı C&C mesaj biçimi,
- çok benzer C&C komutları (bazı ek komutlar da dâhil),
- aynı şifreleme anahtarları ve algoritmaları, ve
- aynı statik olarak bağlanmış ağ kütüphanesinin (HP-Socket) kullanımı.
Bu iki yeni SprySOCKS varyantında da C&C iletişimi ve kullanılabilir komutları içeren temel arka kapı işlevselliği birbirine çok benzemektedir. En dikkat çekici farklılıklar, nihai arka kapının yüklenme şekli, geliştirilmiş gizlilik özelliği ve kullanılan bileşen adları ile yollarda göze çarpmaktadır.
Aşağıdaki alt bölümlerde, önce her bir SprySOCKS varyantının yürütme zincirinde yer alan bileşenleri analiz edeceğiz, ardından her iki varyant için de büyük ölçüde aynı olan arka kapı bileşenini açıklayacağız.
WIN_DRV bileşenleri
VirusTotal’a yüklenen bir arşivde, boş bir C&C yapılandırmasıyla gelen SprySOCKS’un WIN_DRV sürümünü keşfettik. Sonuç olarak, bu sürüm herhangi bir uzak adresle aktif olarak iletişim kurmaz; ancak yine de kurbanın cihazında rastgele bir bağlantı noktasında bir TCP sunucusu başlatabilir ve böylece pasif bir arka kapı görevi görür. İlginç bir şekilde, saldırganların bu sunucunun TCP bağlantı noktası numarasını bilmelerine gerek yoktur; çünkü daha sonra açıklanacağı üzere, WIN_DRV sürümü tarafından kullanılan RawWNPF sürücüsü, herhangi bir açık bağlantı noktasında alınan TCP trafiğinin arka kapıya sessizce yönlendirilmesine olanak tanır (daha fazla bilgi için bkz. RawWNPF sürücüsü bölümü).
Şekil 1 ’de gösterildiği gibi, SprySOCKS’un WIN_DRV sürümünü içeren arşivde birkaç dosya bulunmaktadır:
- klelam00007.bat – arka kapıyı kalıcı hâle getirmekten sorumlu bir toplu iş betiği. Şekil 3 ‘te gösterildiği gibi, bu betik:
- geçerli çalışma dizinindeki tüm dosyaları %SystemRoot%\Fonts dizinine kopyalar (düzgün çalışabilmesi için, toplu iş dosyasının arşivdeki diğer dosyalarla aynı dizine yerleştirilmesi gerekir),
- ApphostRagistreationVerifier adında, her sistem başlangıcında NT AUTHORITY\SYSTEM ayrıcalıklarıyla ApphostRagistreationVerifier.exe dosyasını (bu, saldırganlar tarafından Microsoft tarafından imzalanmış meşru AppHostRegistrationVerifier.exe dosyasını taklit etmek üzere yeniden adlandırılmış, meşru ve geçerli bir şekilde imzalanmış bir yürütülebilir dosyadır) çalıştıracak şekilde yapılandırılmış bir zamanlanmış görev oluşturur. Saldırganlar, Windows’un DLL’leri yükleme şeklinden yararlanarak, iyi bilinen DLL yan yükleme tekniğini kullanır ve meşru, imzalanmış bir uygulama aracılığıyla kendi kötü amaçlı DLL’lerini (bu durumda tpsvcloc.dll) yükler. Daha açık olmak gerekirse bu durumda saldırganlar MFC Uydu DLL’leri aracılığıyla Kötü Amaçlı Yazılım Yan Yükleme tekniğini kullanır (tpsvcloc.dll dosya adındaki loc dizesine dikkat edin),
- ApphostRagistreationVerifier.exe – tpsvc.dll kütüphanesini yükleyen, ThinPrint’in AutoConnect yazıcı oluşturma hizmetine ait, imzalı ve meşru bir yürütülebilir dosya (SHA-1: FFC3AA7909D4E72C360D65A1F45260DFFE5C99B7),
- tpsvc.dll – tpsvcloc.dll kütüphanesini yükleyen, meşru ve imzalanmış bir kütüphane,
- tpsvcloc.dll – SprySOCKS arka kapı yükleyicisi,
- X1B5206BDC1743DD.dat – SprySOCKS arka kapısı ve sonraki iki dosyanın kopyalarını içeren şifreli bir konteyner,
- KX1B5206BDC1743DD.dat – DriverLoader; KW1B5206BDC1743FP.dat dosyasından başka bir çekirdek sürücüsünü yüklemekle sorumlu şifrelenmiş bir çekirdek sürücüsü ve
- KW1B5206BDC1743FP.dat – RawWNPF, arka kapının dosyalarını ve ağ faaliyetlerini gizlemekle görevli şifrelenmiş bir çekirdek sürücüsü.

Şekil 3 . klelam00007.bat dosyası, SprySOCKS arka kapısı için kalıcılık ayarlarını yapmaktadır (okunabilirlik amacıyla satır sonları eklenmiştir)
Aşağıdaki örnekte (Şekil 4), SprySOCKS WIN_DRV varyantının yürütme zincirini göstermektedir.

Şekil 4 . SprySOCKS WIN_DRV varyantının yürütme zinciri
Aşağıdaki üç alt bölümde, yukarıda bahsedilen bileşenler olan SprySOCKS yükleyicisi, DriverLoader sürücüsü ve RawWNPF sürücüsü hakkında teknik analizler sunulmaktadır.
SprySOCKS yükleyicisi
Yükleyici, sanal ortamın ve birkaç güvenlik ürününün varlığını kontrol ederek çalışmaya başlar. Yükleyicinin işleminde belirli kütüphaneleri (yani: snxhk.dll, SxWrapper.dll, SxIn.dll, SXIn64.dll ve SbieDll.dll) arar ve bunlardan herhangi birini bulursa sonlandırılır.
Bir sonraki adımda, adresindeki klelam00007.bat komut dosyası tarafından kalıcılığın başarıyla ayarlanıp ayarlanmadığını doğrular (3 ). Bunu yapmak için mevcut yükleyicinin görüntüsünün %SystemRoot%\Fonts\ dizininden yüklenip yüklenmediğini kontrol eder ve %SystemRoot%\Fonts\X1B5206BDC1743DD.dat, %SystemRoot%\Fonts\ tpsvc.dll ve %SystemRoot%\Fonts\tpsvcloc.dll dosyalarına erişmeye çalışır. Bu dosyalardan herhangi birinin olması gereken yerde olmadığını tespit ederse aşağıdaki adımları izleyerek kendi kendine kalıcılık sağlar:
- X1B5206BDC1743DD.dat, tpsvc.dll, tpsvcloc.dll ve ApphostRagistreationVerifier.exe dosyalarını geçerli çalışma dizininden %SystemRoot%\Fonts\ dizinine kopyalamak,
- %SystemRoot%\Fonts\ApphostRagistreationVerifier.exe uygulamasını, uygulamanın yolunu HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\vds.exe\debugger kayıt defteri değerine yazarak vds.exe (sistem başlangıcında otomatik olarak çalıştırılabilen bir Sanal Disk Hizmeti) için hata ayıklayıcı olarak kaydetmek ve
- affair-build.bat dosyasını %SystemRoot%\Fonts\ dizinine bırakıp ardından cmd.exe aracılığıyla çalıştırır. Şekil 5adresinde gösterilen bu komut dosyası, dağıtım dizinindeki dosyaları silerek ve vds hizmetini yeniden başlatarak (artık %SystemRoot%\Fonts\ dizininden) kötü amaçlı yazılımı tekrar çalıştırarak bu işlemin izlerini siler.

Şekil 5 . SprySOCKS yükleyicisi tarafından çalıştırılan affair-build.bat
Kalıcılık ayarlandığında, yükleyici %SystemRoot%\Fonts\X1B5206BDC1743DD.dat konumunda bulunan şifreli bir konteynerden yükleri yüklemeye devam eder. Şifre çözme algoritması ve anahtarı: ECB modunda 128 bit AES ve sabit kodlanmış uXQLESMXGaRMs6BL anahtarı.
Bu işlem, DllToShellCode açık kaynaklı aracı tarafından oluşturulan bir kabuk kodu (shellcode) üretir. Kabuk kodunu çalıştırmadan önce, yükleyicisi konteynerdeki şifrelenmiş yüklerin geri kalanını ayrı dosyalara çıkarır:
- %SystemRoot%\Fonts\KX1B5206BDC1743DD.dat
- %SystemRoot%\Fonts\KW1B5206BDC1743FP.dat
İşlem tamamlandığında, yükleyici, spoolsv.exe’den elde edilen bir jetonla CreateProcessAsUserW işlevini kullanarak yeni bir svchost.exe süreci başlatır ve süreç ikizleme tekniğini kullanarak arka kapının kabuk kodunu bu sürece enjekte eder. Enjeksiyon işlemi sırasında kabuk kodu, dosya adında TH önekini kullanarak %TEMP% dizinine geçici bir dosyaya yerleştirilir.
Son adım olarak, yükleyici, daha önce bırakılan KX1B5206BDC1743DD.dat dosyasının içinde gizlenmiş bir çekirdek sürücüsü olan DriverLoader’ı şifresini çözüp çalıştırır. DriverLoader önce şifresi çözülür, ardından şifresi çözülmüş içerik C:\Windows\System32\drivers\fsdiskbit.sys dosyasına kaydedilir. Bunu çalıştırmak için yükleyici, bırakılan sürücüye işaret eden bir ImagePath değerine sahip msidiskserver adlı yeni bir hizmet kayıt defteri anahtarı manuel olarak oluşturarak ( Şekil 6 ‘da gösterildiği gibi) bu sürücüyü bir minifilter sürücüsü olarak yükler ve yüklemek için bu kayıt defteri anahtarını parametre olarak kullanarak NtLoadDriver Windows API işlevini çağırır. Herhangi bir hata tespit edilmezse yükleyici hem msidiskserver kayıt defteri anahtarını hem de fsdiskbit.sys dosyasını siler. Bundan sonra yükleyici işini tamamlar ve sonlanır.

Şekil 6 . SprySOCKS WIN_DRV yükleyicisi tarafından oluşturulan hizmet kayıt defteri anahtarı
DriverLoader sürücüsü
DriverLoader’ın işlevselliğine geçmeden önce önemli bir not: Windows Vista’nın piyasaya sürülmesiyle birlikte Microsoft, Windows çekirdeğinde yalnızca geçerli şekilde imzalanmış çekirdek modu bileşenlerinin yürütülmesine izin veren bir özellik olan sürücü imzası zorunluluğu (DSE) uygulamasını getirmiştir. Bu, fsdiskbit.sys sürücüsünü (DriverLoader) yürütmek için saldırganların onu güvenilir bir sertifika ile imzalaması gerektiği anlamına gelir.
Sürücünün en azından bazı eski veya yanlış yapılandırılmış sistemlerde çalışmasını sağlamak için saldırganlar, GitHub’daki PastDSE proje deposunda bulunan sızdırılmış bir sertifikayı kullanarak fsdiskbit.sys sürücüsünü bu sertifika ile imzaladılar. Kullanılan sertifika hakkındaki bilgilere Şekil 7 adresinden ulaşılabilir.

Şekil 7 . DriverLoader’ın kod imzalama sertifikası
Şimdi işlevselliğe geçelim. Bu bileşenin amacı oldukça basittir: Başka bir sürücüyü, bu sefer yalnızca belleğe yüklemek. İlk olarak, yükleyici tarafından önceden oluşturulan C:\Windows\Fonts\KW1B5206BDC1743FP.dat dosyasının içeriğini okur ve şifresini çözer. Yükleyiciyle aynı algoritma ve anahtarı kullanır: uXQLESMXGaRMs6BL anahtarıyla ECB modunda 128 bit AES. Şifresi çözülen veriler, yerel bir PE ikili dosyasını içerir ( RawWNPF sürücüsü bölümünde açıklanmıştır); bu dosya daha sonra manuel olarak eşleştirilir ve giriş noktası yürütülür.
DriverLoader ikili dosyasında gömülü olan PDB yolu şöyledir:
C:\Users\xdd\Desktop\今天\2023-4-11\2023-04-10__注册表驱动加载功能__集成到内测3中-未完成\DriverMemoryLoadDriver\x64\Release\DriverMemoryLoadDriver.pdb
Basitleştirilmiş Çince metnin makine çevirisi şu şekildedir:
- 今天: Bugün
- 注册表驱动加载功能__集成到内测3中-未完成: Kayıt defteri sürücü yükleme işlevi__iç beta 3 sürümüne entegre edildi – tamamlanmadı
Sembol yolundan da görülebileceği gibi bu bileşen en azından Nisan 2023’ten beri geliştirilmekte gibi görünüyor; bu da DriverLoader’ın derleme zaman damgasıyla örtüşüyor. Benzer şekilde, yoldaki dizelere bakıldığında, bu sürücünün parçası olduğu projenin, sürücü derlendiğinde muhtemelen hâlâ geliştirme aşamasında olduğu anlaşılıyor.
RawWNPF sürücüsü
RawWNPF sürücüsü, SprySOCKS arka kapısının WIN_DRV sürümünü, WIN_PLUS varyantına kıyasla çok daha gizli hâle getiren bileşendir. Bu sürücü, ele geçirilmiş sistemde arka kapının kötü amaçlı faaliyetlerinin gizlenmesini sağlar ve sürücünün özel I/O kontrol kodları (IOCTL’ler) çağrılarak yapılandırılabilir. Sürücü, \Device\RawWNPF adlı bir aygıt sürücüsü oluşturur; kısa açıklamalarıyla birlikte kullanılabilir IOCTL’lerin listesi adresindeki Tablo 1 ’de gösterilmiştir.
Tablo 1 . RawWNPF sürücüsü tarafından işlenen IOCTL’lerin listesi
| IOCTL | Description |
| 0x220200 | Configure the driver to hide active network connections to and from the specified local TCP port. |
| 0x220300 | Unhide the network connections configured with 0x220200. |
| 0x220340 | Insert an entry into the hidden connections list. |
| 0x220344 | Remove an entry from the hidden connections list. |
| 0x220348 | Wipe the whole hidden connections list. |
| 0x22034C | Read the hidden connections list. |
| 0x220350 | Insert a process with a specified PID into the hidden processes list. |
| 0x220354 | Remove a process with a specified PID from the hidden processes list. |
| 0x220358 | Wipe the whole hidden processes list. |
| 0x22035C | Read the hidden processes list. |
| 0x222000 | Initialize the driver’s main functions (hiding network connections, hiding processes, hiding malware components, network filters, persistence protection). After this initialization, other IOCTLs can be used to configure what exactly should be hidden. |
| 0x222004 | Returns two hardcoded DWORD values: 1 and 2. This possibly could be the driver’s version. |
| 0x222008 | Delete the driver’s binary (if it exists). |
| IOCTL | Description |
| 0x220200 | Configure the driver to hide active network connections to and from the specified local TCP port. |
| 0x220300 | Unhide the network connections configured with 0x220200. |
| 0x220340 | Insert an entry into the hidden connections list. |
| 0x220344 | Remove an entry from the hidden connections list. |
| 0x220348 | Wipe the whole hidden connections list. |
| 0x22034C | Read the hidden connections list. |
| 0x220350 | Insert a process with a specified PID into the hidden processes list. |
| 0x220354 | Remove a process with a specified PID from the hidden processes list. |
| 0x220358 | Wipe the whole hidden processes list. |
| 0x22035C | Read the hidden processes list. |
| 0x222000 | Initialize the driver’s main functions (hiding network connections, hiding processes, hiding malware components, network filters, persistence protection). After this initialization, other IOCTLs can be used to configure what exactly should be hidden. |
| 0x222004 | Returns two hardcoded DWORD values: 1 and 2. This possibly could be the driver’s version. |
| 0x222008 | Delete the driver’s binary (if it exists). |
Belirtilen işlemleri gizleme
RawWNPF sürücüsü, işlem kimliklerine göre işlemleri gizleyecek şekilde yapılandırılabilir ve gizli işlemlerin listesi, sürücünün0x220358, 0x22035C, 0x220354 ve 0x220350 IOCTL’leri çağrılarak yönetilebilir. Bir işlemi gizlemek için sürücü NtQuerySystemInformation sistem çağrısının yürütülmesine kanca takar ve çalışan işlemlerle ilgili bilgiler alınıyorsa (yani SystemProcessInformation değeri SystemInformationClass parametresine aktarılıyorsa) çıktısını değiştirir. Bu API işlevi tarafından alınan işlemlerden herhangi biri, sürücünün gizli işlemler listesindeki bir işlemle eşleşirse sürücü bu işlemi işlevin çıktısından kaldırır. Çekirdek sürücüsünün NtQuerySystemInformation sistem çağrısını ele geçirme yöntemi, büyük ölçüde InfinityHookPro projesinin kaynak koduna dayalı gibi görünmektedir.
Ağ etkinliğini gizleme
Sürücü, belirli aktif bağlantıları (belirtilen bir IP, bağlantı noktası veya her ikisinin birleşimi ile) gizleyecek şekilde yapılandırılabilir; böylece bu bağlantılar netstat.exe gibi yaygın ağ yönetim araçlarının çıktısında listelenmez. Bu, iyi bilinen bir teknikle (örn. [1], [2], [3], …) gerçekleştirilir; bu teknikte saldırganlar, nsiproxy.sys Windows çekirdek sürücüsünün DeviceIoControl işlevi içindeki IOCTL 0x12001B için IoCompletionRoutine’i ele geçirir. nsiproxy’nin 0x12001B IOCTL işleyicisindeki kod, aktif bağlantıların listesini almaktan sorumludur ve bu işleyicinin IoCompletionRoutine işlevine kanca takılması, saldırganların alınan listeyi taramasına, belirli bağlantı noktalarının, adreslerin veya her ikisinin varlığını kontrol etmesine ve bir eşleşme bulunursa listedeki belirli bağlantıyı gizlemesine olanak tanır. Şekil 8 , ağ bağlantılarını gizlemekten sorumlu kanca işlevini göstermektedir.

Şekil 8 . Ağ bağlantılarını gizlemekten sorumlu nsiproxy’nin IoCompletionRoutine kancasının Hex-Rays tarafından yapılan dekompilasyonu
Etkin ağ bağlantılarının gizlenmesine ek olarak, sürücü, herhangi bir açık TCP bağlantı noktasında alınan TCP paketlerini, IOCTL0x220200 ile yapılandırılan belirtilen TCP bağlantı noktasına (aslında bu, SprySOCKS arka kapısının TCP sunucusunun bağlantı noktasıdır) yönlendirmesine olanak tanıyan ilginç bir işlev içerir; ancak bu, yalnızca alınan TCP verilerinin özel olarak hazırlanmış veriler içermesi durumunda gerçekleşir. Bunu başarmak için sürücü, Windows Filtering Platform (WFP) API işlevlerini kullanarak kendi paket filtre nesnelerini kaydeder, aktarılan IPv4 paketlerinin içeriğini manuel olarak ayrıştırır (hem gelen hem de giden trafik denetlenir) ve alınan bir TCP paket verisi içinde özel olarak hazırlanmış veriler tespit edilirse trafiği yönlendirmeye devam eder. Bu özelliğin amacı, esas olarak ikili dosyaya bir C&C adresi gömmek zorunda kalmadan kötü amaçlı arka kapıyla iletişim kurma yeteneği sağlamaktır. Ayrıca bu şekilde yönlendirilen trafik Wireshark gibi araçlar kullanılarak incelenebilse de gerçek bağlantı noktası (trafiğin yönlendirildiği nokta) ortaya çıkmaz; dolayısıyla bu kötü amaçlı trafiğin gerçek hedefini araştırmak zor olabilir.
Yüklü paket filtreleri ve tanımlayıcı bilgileri, Tablo 2 adresinde listelenmiştir.
Tablo 2 . RawWNPF sürücüsü tarafından kaydedilen WFP filtre nesneleri
| Filter layer name | Filter object name and GUID | Filter object callout name and GUID |
| Inbound IP Packet v4 Layer | Delivery Optimization (TCP-In){E980088D-BE44-4057-8E5C-C7FDF8968795} | COInbound{DE0D7F67-94ED-4DDB-8215-9C028B54661B} |
| Outbound IP Packer v4 Layer | Delivery Optimization (TCP-Out){33F76397-DBCB-445E-8EC3-AA51ED302D15} | COOutbound{8280DDF3-7489‑4402-B9D8-96B50912346B} |
| ALE Connect v4 Layer | Delivery Optimization (TCP-In){5746AF70-2917‑4861-97E6-D5E4DD569F2D} | COAuthConnect{A33E1AA8-9B0F-44A3-B24A-AEB04CA54C3B} |
| ALE Listen v4 Layer | Delivery Optimization (TCP-In){7CB4DFB4-0D20-402D-A49D-BA9660D026E6} | COAuthListen{40045FAF-6BAE-4B48-9119‑31B48FFEA629} |
| ALE Receive/Accept v4 Layer | Delivery Optimization (TCP-In){2C1AB6EF-0B65-4634‑8666-BCB2CF9C72E9} | COAuthAccept{DDFE5189‑389F-437F-9B92-59495ED2181A} |
| ALE ResourceAssignment v4 Layer | Delivery Optimization (TCP-In){B4AE248F-98D5-446F-88EB-14CF605AE722} | COAuthResAssignment{FE570356-A1A9-413C-94CC-BD6C448E9969} |
Arka kapının dosyalarını gizleme
Sürücü, kendisini bir minifiltre sürücüsü olarak kaydettirerek ve aşağıdaki geri çağırmaları yükleyerek SprySOCKS arka kapısının dosyalarını gizler/korur:
- her IRP_MJ_CREATE I/O isteğinde tetiklenen ve sürücünün gizli/korunan dosyalar listesinden bir dosya veya dizin oluşturma ya da açma girişiminde STATUS_NO_SUCH_FILE değerini döndürmekten sorumlu olan işlem öncesi geri çağırma,
- her IRP_MJ_DIRECTORY_CONTROL I/O isteğinde tetiklenen ve dizin numaralandırmasıyla ilgili olmayan istekleri filtreleyerek, yalnızca dizin numaralandırmasıyla ilgili olanların işlem sonrası geri çağırma işlevine iletilmesini sağlayan işlem öncesi geri çağırma işlevi, ve
- işlem sonrası geri çağırma, işlem öncesi geri çağırma kontrollerinden geçen IRP_MJ_DIRECTORY_CONTROL G/Ç isteklerinde tetiklenir. Bu geri çağırma, herhangi bir dizin listeleme girişiminden gizli/korumalı dosya girdilerini kaldırmaktan sorumludur.
Aşağıdaki sabit kodlanmış dosya adları listesi sürücü tarafından korunmaktadır:
- \SystemRoot\Fonts\tpsvc.dll
- \SystemRoot\Fonts\tpsvcloc.dll
- \SystemRoot\Fonts\ApphostRagistreationVerifier.exe
- \SystemRoot\Fonts\X1B5206BDC1743DD.dat
- \SystemRoot\Fonts\KX1B5206BDC1743DD.dat
- \SystemRoot\Fonts\KW1B5206BDC1743FP.dat
Kalıcılığın korunması
Sürücü, SprySOCKS yükleyicisinin kalıcılığı için kullanılan kayıt defteri anahtarını gizlemekle sorumlu bir RegistryCallback yordamını yüklemek üzere CmRegisterCallbackEx işlevini çağırır: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\vds.exe. Sonuç olarak, anahtarı açmaya veya numaralandırmaya yönelik tüm girişimler sürücü tarafından filtrelenir.
WIN_PLUS bileşenleri
SprySOCKS WIN_PLUS sürümünde, telemetri verilerimizde ilk olarak kötü amaçlı şifreli konteyneri tespit ettik; ilk tespit, Temmuz 2024’e kadar uzanıyor ve Pakistan’daki bir kurbanın cihazında bulundu. Bu konteyner, SprySOCKS arka kapısını ve SprySOCKS yükleyicisini içeriyordu. C&C yapılandırması mevcuttu ve Şekil 9 ‘da gösterilmiştir.

Şekil 9 . SprySOCKS’un WIN_PLUS sürümüne ait C&C yapılandırması
Şifrelenmiş konteyner, saldırıya uğrayan sistemde aşağıdaki yolda bulunmaktaydı:
- C:\Windows\System32\spool\drivers\color\config.dat
Şifresi çözüldüğünde, konteynerin içinde bir SprySOCKS yükleyicisi ve SprySOCKS arka kapısının kendisi bulunduğu görüldü. Konteynerdeki SprySOCKS arka kapısının daha ayrıntılı analizi, bu durumda şifrelenmiş konteynerden SprySOCKS yükleyicisini yüklemekle sorumlu ek bir bileşen olduğunu ortaya koydu. Bu analizde birinci aşama yükleyici olarak adlandırılan bu bileşen, aşağıdaki kayıt defteri anahtarı altında bir yazdırma işlemcisi olarak yüklenmelidir:
HKLM\SYSTEM\ControlSet001\Control\Print\Environments\Windows x64\Print Processors\VSPMsg
İlginç bir şekilde, telemetri verilerimizde bu VSPMsg dizesiyle ilgili herhangi bir şey aradığımızda, Honduras’taki iki farklı kurban cihazda C:\Windows\System32\spool\prtprocs\x64\VSPMsg.dll konumunda dağıtılmış bir dosya keşfettik. Bu dosyanın, yukarıda bahsedilen config.dat dosyasından SprySOCKS yükleyicisini çalıştırmaktan sorumlu birinci aşama yükleyici olduğu ortaya çıktı.
SprySOCKS WIN_PLUS varyantının yürütme şeması, Şekil 10 adresinde gösterilmiştir.

Şekil 10 . SprySOCKS WIN_PLUS varyantının yürütme şeması
Birinci aşama yükleyici
Bu yükleyici, öncelikle spoolsv.exe tarafından çalıştırılıp çalıştırılmadığını kontrol eder ve çalıştırılmamışsa sonlandırılır; bu, yükleyicinin bir yazdırma işlemcisi olarak çalıştırılması amaçlandığından, davranışını otomatik kötü amaçlı yazılım analiz sanal ortamlarından gizler. Ardından, C:\Windows\System32\spool\drivers\ color\config.dat adlı şifreli kapsayıcıdan SprySOCKS yükleyicisinin şifresini çözmeye devam eder. Öncelikle, yükleyiciyi sabit kodlanmış uXQLESMXGaRMs6BL anahtarıyla 128 bit AES-ECB şifresini çözer, ardından işlem doppelgänging yöntemi kullanarak yeni oluşturulan svchost.exe işlemine enjekte eder. Bu sırada, SprySOCKS yükleyicisi, %TEMP% dizinine TH önekine sahip bir geçici dosyaya bırakılır.
Örnek, iki işlevi dışa aktarır:
- GetErrorMessageModule
- SetErrorMessageModule
SetErrorMessageModule işlevi herhangi bir işlem yapmazken GetErrorMessageModule işlevi yükleyicinin kendisinin kalıcılığını sağlamak amacıyla kullanılır. Yürütüldüğünde, HKLM\SYSTEM\ControlSet001\Control\Print\Environments\Windows x64\Print Processors\VSPMsg kayıt defteri anahtarını oluşturur, Driver kayıt defteri değerini VSPMsg.dll olarak ayarlar ve sabit kodlanmış C:\ProgramData\Microsoft Event\PFs\VSPMsg.dll dosyasını C:\Windows\System32\spool\prtprocs\x64\ dizinine kopyalar. Bir sonraki adım olarak, şifrelenmiş konteyneri C:\ProgramData\Microsoft Event\PFs\config.dat konumundanC:\Windows\System32\spool\drivers\color\config.dat konumuna kopyalar ve işlem tamamlandığında affair-build.bat toplu iş komut dosyasını oluşturup C:\Windows\System32\spool\drivers\color\ dizinine yerleştirir ve çalıştırır. Şekil 11 ‘de gösterildiği gibi, bu komut dosyasının amacı, orijinal dağıtım dizinindeki dosyaları silerek yükleyicinin izlerini örtmek ve yazdırma biriktirici hizmetini yeniden başlatarak yeni yüklenen yazdırma işlemcisinin çalıştırılmasını tetiklemektir.

Şekil 11 . Birinci aşama SprySOCKS WIN_PLUS yükleyicisi tarafından kullanılan affair-build.bat toplu iş komut dosyası
SprySOCKS yükleyici
Bu yükleyici, öncelikle fqwhi2d1qaz2 adında sabit kodlanmış bir mutex oluşturarak başlar ve ardından C:\Windows\System32\spool\drivers\color\ config.dat konumunda bulunan şifreli konteynerden SprySOCKS arka kapısını yüklemeye devam eder. Yükleyici, sabit kodlanmış uXQLESMXGaRMs6BL anahtarıyla arka kapıyı 128 bit AES-ECB şifre çözme işlemiyle açar, ardından işlem klonlama yöntemi ile yeni oluşturulan svchost.exe sürecine enjekte eder. Bu sırada, SprySOCKS yükleyicisi, %TEMP% dizinine, dosya adı önekini TH olarak içeren geçici bir dosyaya bırakılır.
SprySOCKS arka kapısı
Son olarak, SprySOCKS arka kapısının kendisine yönelik analizimize geçiyoruz. WIN_DRV ve WIN_PLUS olmak üzere her iki varyantta da arka kapının işlevselliği neredeyse aynıdır; farklılıklar yalnızca kullanılan belirli dosya yolları, kayıt defteri anahtarları ile sınırlıdır ve daha önce de belirtildiği gibi, WIN_PLUS sürümü gelişmiş gizlilik için RawWNPF sürücüsünü kullanmamaktadır.
Bu raporda analiz edilen her iki varyant da orijinal adı PrcsServer.dll olan ve Stop adlı bir işlevi dışa aktaran DLL’lerdir. Başlangıçta prcs-server-run adlı bir mutex oluştururlar ve hemen ardından, arka kapının ana işlevselliğinin başlatılmasına geçerler; bu, C&C iletişim kanallarının (sabit kodlanmış yapılandırmaya dayalı olarak) başlatılması ve keylogger’ın kurulmasını içerir. Bu eylemlere ek olarak, WIN_DRV arka kapı sürümü, 0x222000 IOCTL işleyicisini çağırarak RawWNPF sürücüsünü başlatır ve ardından sürücünün 0x220350 IOCTL’sini çağırarak kendi sürecini gizler.
Tuş kaydı, yalnızca %appdata%\Microsoft\Vault\lgf.dat konumunda, key adlı ve değeri 1 olarak ayarlanmış bir özellik içeren bir config bölümü barındıran mevcut bir INI dosyası varsa etkinleştirilir. Bu koşullar karşılanırsa her iki arka kapı da Global\{DCAA7ED8-521B-4EAB-BE21-65254CF59239} adlı bir mutex oluşturur ve panodaki verileri, etkin pencere başlığı ve tuş vuruşlarıyla birlikte %appdata%\Microsoft\Vault\lg.dat dosyasına periyodik olarak kaydeder. Dosyadaki veriler, 0x44anahtarı kullanılarak tek baytlı bir XOR şifreleme yöntemiyle şifrelenir.
C&C iletişimi
Arka kapı, C&C ile iletişim için üç protokolü desteklemektedir – TCP, UDP ve WebSocket – ve hem istemci hem de sunucu olarak işlev görebilir. Ağ ile ilgili işlevsellik büyük ölçüde HP-Socket ağ çerçevesine dayanmaktadır ve bazı şifreleme işlevleri Crypto++ kütüphanesi kullanılarak uygulanmıştır.
C&C yapılandırması arka kapıya gömülüdür ve şunları içerebilir:
- en fazla üç IP adresi ve ilgili bağlantı noktaları; her biri, iletişim kanallarından biri (TCP, UDP veya WebSocket) için bir C&C IP adresini ve bağlantı noktasını belirtir; ve
- en fazla üç bağlantı noktası numarası; her biri, arka kapının yeni bağlantılar için dinlemesi gereken bir bağlantı noktasını belirtir. Bunlardan biri TCP sunucusu, biri UDP sunucusu ve biri de WebSocket sunucusu için kullanılır.
WIN_PLUS sürümünden bir yapılandırma örneği, Şekil 9 ‘da gösterilmiştir ve şunları içerir:
- TCP iletişim kanalı için C&C adresi ve bağlantı noktası: 207.148.78[.]36:443.
- UDP iletişim kanalı için C&C adresi ve bağlantı noktası: 207.148.78[.]36:53.
- WebSocket iletişim kanalı için C&C adresi ve bağlantı noktası: 207.148.78[.]36:80.
- Arka kapının TCP sunucusu dinleme bağlantı noktası: 53781.
Herhangi bir bağlantı başlatılmadan veya bir sunucu başlatılmadan önce, SprySOCKS WIN_DRV sürümü, RawWNPF sürücüsünün0x220340 ve 0x220200 numaralı IOCTL’lerini çağırarak yapılandırmadaki adreslere veya bağlantı noktalarına yönelik tüm bağlantıları gizler. Sonuç olarak, bu bağlantılar aktif olmalarına rağmen netstat.exe gibi araçların çıktısında listelenmez. Ayrıca her iki arka kapı sürümü de netsh.exe yardımcı programını iki kez çalıştırır:
netsh.exe netsh advfirewall firewall delete rule name=”Core Networking – Packet Too Big(ICMPv6 – In)”
netsh advfirewall firewall add rule name=”Core Networking – Packet Too Big(ICMPv6 – In)” dir=in action=allow protocol=tcp localport=53781
İlk komut, belirtilen bir güvenlik duvarı kuralını siler; ikincisi ise az önce silinene aynı isimde yeni bir güvenlik duvarı kuralı ekler ve yapılandırmada belirtilen arka kapının TCP sunucu bağlantı noktasına gönderilen tüm gelen TCP trafiğine izin verir.
C&C yapılandırması boşsa (VirusTotal’da keşfettiğimiz WIN_DRV sürümünde olduğu gibi), arka kapı, ele geçirilmiş makinedeki rastgele bir bağlantı noktasını dinleyen bir TCP sunucusu başlatır ve ayrıca RawWNPF sürücüsünün IOCTL 0x220200 komutunu çağırarak bu bağlantı noktasını gizler. Bu çağrı, TCP sunucusunun standart ağ araçlarının çıktısında listelenmesini engellemekle kalmaz, aynı zamanda RawWNPF sürücüsü tarafından sağlanan TCP yönlendirme özelliğini de etkinleştirir. Bu özellik, saldırganların arka kapının dinlediği gerçek bağlantı noktasını bilmeden, kurbanın makinesindeki herhangi bir açık TCP bağlantı noktasına özel olarak hazırlanmış TCP verileri göndererek arka kapıya komutlar göndermesine olanak tanır.
TCP iletişim kanalı açısından, C&C protokolü Trend Micro’nun raporunda analiz edilen Linux sürümündekiyle aynı kalmış gibi görünüyor. Gerçek arka kapı verilerini göndermeden önce her seferinde, başlığın geri kalan kısmının 32 bitlik CRC’sini,0xACACBCBC DWORD sihirli değerini ve başlığın ardından gelen verilerin boyutunu belirten bir DWORD değerini içeren 12 baytlık bir başlık gönderir.
UDP ve WebSocket kanalları için sihirli değerler farklıdır; mesaj başlığı biçimi ve boyutu da farklıdır. UDP kanalında sihirli değer0xACACBFBC’dir ve 36 baytlık bir başlığın 0x1C ofsetinde yer alır; bunu, takip eden verilerin boyutunu belirten bir DWORD izler. WebSocket kanalında ise 0x1BDCCBAA sihirli değeri, WebSocket başlığında bir Masking-Key olarak kullanılır. Şekil 12 , her bir iletişim kanalına ait sihirli değerleri içeren bir ağ trafiği yakalama örneğini göstermektedir.

Şekil 12 . TCP, UDP ve WebSocket (sırasıyla yukarıdan aşağıya doğru) C&C iletişim kanallarında kullanılan sihirli değerleri gösteren SprySOCKS ağ trafiği yakalama görüntüsü
Başlığın ardından yine 32 bitlik bir CRC, ardından WORD değeri 0x0003 (muhtemelen şifreleme yöntemini belirtir) ve ardından base64 ile kodlanmış 128 bitlik AES-ECB modu şifreli veriler (sabit kodlanmış anahtar QFTHEYjzX3RBOMgZ kullanılarak) gelir.
Kod çözme ve şifre çözme işlemlerinden önceki ve sonraki bir C&C mesajı örneği, Şekil 13 ‘te gösterilmiştir.

Şekil 13 . Wireshark’ta görülen SprySOCKS C&C mesajı örneği (solda) ve kod çözme ve şifre çözme işlemlerinden sonra içeriği (sağda)
Şifresi çözülmüş C&C mesajındaki __msgid değeri, arka kapı tarafından yürütülmesi gereken ve bir mesaj kimliği ile tanımlanan bir komutu belirtmek için kullanılır. Arka kapı tarafından desteklenen mesaj kimliklerinin listesi ve açıklamaları Tablo 3 adresinde bulunabilir. Bu komutların tümünü derinlemesine analiz etmediğimizi unutmayın; bu nedenle, bazı açıklamalar sadece mesaj kimliğinin ilişkili olduğu kod/işlevselliğin bir kısmına dair genel bir bakış niteliğindedir.
Tablo 3 . SprySOCKS C&C komutları; * ile işaretlenmiş açıklamalar geçici değerlendirmelerdir
| Message ID | Description |
| 0x09 | Collect client (victim) system information, including: computer name, OS version, network adapter information, information about memory, CPU information, current privileges, system language and version, current time, and the backdoor version (1.8) and version type (WIN_DRV or WIN_PLUS). |
| 0x0A | Start an interactive console. |
| 0x0B | Write into the interactive console. |
| 0x0D | Stop the interactive console. |
| 0x0E | Specify an additional communication channel (do not start the channel). Likely to specify an additional backup C&C. |
| 0x0F | Send C&C message to a different target.* |
| 0x11 | Enumerate all processes. |
| 0x12 | Enumerate modules of a process specified by a PID. |
| 0x13 | Terminate a process specified by a PID. |
| 0x14 | Close all connections. |
| 0x16 | Get current communication channel information. |
| 0x17 | Specify additional communication channels (TCP, UDP, or WebSocket) and start them. |
| 0x19 | Uninstall the backdoor and exit. |
| 0x1E | Enumerate all services. |
| 0x1F | Configure StartType for a specified service. |
| 0x20 | Start services with a specified name. |
| 0x21 | Invoke the ControlService function with a specified dwControl parameter. |
| 0x22 | Delete a specified service from the service manager. This does not stop the service if it’s running. |
| 0x23 | Initialize SOCKS proxy. |
| 0x24 | Terminate SOCKS proxy.* |
| 0x25 | Send data through SOCKS proxy. |
| 0x26 | SOCKS proxy-related command.* |
| 0x2A | Upload a specified file.* |
| 0x2B | File-transfer-related helper command.* |
| 0x2C | Download a specified file.* |
| 0x2D | File-transfer-related helper command.* |
| 0x3C | Enumerate free disk space. |
| 0x3D | List files in the specified directory. |
| 0x3E | Delete a specified file. |
| 0x3F | Create a specified directory. |
| 0x40 | Rename a specified file. |
| 0x41 | Execute an existing file. |
| 0x42 | Copy a specified file. |
| 0x43 | List files from the Recent Windows directories for the logged-in user:%APPDATA%\Microsoft\Windows\Recent\%APPDATA%\Microsoft\Office\Recent\ |
Ağ altyapısı
Bu kampanyada yalnızca bir C&C adresi tespit edilmiştir: 207.148.78[.]36; bu adres, SprySOCKS arka kapısının WIN_PLUSvaryantının yapılandırmasında ( Şekil 9 ‘da gösterilmiştir) sabit olarak kodlanmıştır.
Arka kapının C&C ile iletişim kurmak için kullanması gereken yapılandırmadaki bağlantı noktaları:
- TCP: 443
- UDP: 53
- WebSocket: 80
Trend Micro’nun raporunda belirtildiği üzere, yukarıdaki C&C ile aynı 207.148.64.0/20 IP aralığından gelen207.148.75[.]122 IP adresi, Haziran 2023’te FishMonger operatörleri tarafından bir SprySOCKS dağıtım sunucusu olarak kullanıldı. Bu IP aralığı, Vultr bulut barındırma sağlayıcısına aittir.
Sonuç
Daha önce yalnızca Linux’a özgü bir arka kapı olarak bilinen SprySOCKS’un Windows varyantının keşfi, FishMonger’ın platformlar arası yeteneklerinin önemli ölçüde genişlediğini göstermektedir. Analizimiz, Windows sürümünün, C&C protokolü, kullanılan şifreleme ve genel komut işleme mantığı dâhil olmak üzere Linux öncülünün temel mimarisinin çoğunu koruduğunu ancak gerektiğinde Windows’a özgü mekanizmalarla ikame ettiğini ve çekirdek sürücülerini devreye sokarak arka kapının gizliliğini artırdığını göstermektedir. Olası bir UEFI bootkit katılımına dair sınırlı göstergeler göz önüne alındığında, herkese grubun faaliyetlerini yakından takip etmelerini tavsiye ediyoruz.
IOC’ler
Files
| SHA‑1 | Filename | Detection | Description |
| 955BFC3DCC867256F9F46A606DEB0779FA3416D8 | KX1B5206BDC1743DD.dat | Win64/SprySOCKS.A | Encrypted SprySOCKS DriverLoader driver. |
| 44DC4A08C5EB0972C8E18B0E01284E06F09006BB | bthcam.sys | Win64/Agent.ESB | SprySOCKS DriverLoader driver. |
| AB87B29B6F79487C75CA08D102E79001E536F083 | KW1B5206BDC1743FP.dat | Win64/SprySOCKS.A | Encrypted SprySOCKS RawWNPF driver. |
| 6490B8E4AADE25A3EE2DA9A47F312DB2122470BC | X1B5206BDC1743DD.dat | Win64/SprySOCKS.A | Encrypted container of the encrypted WIN_DRVvariant of SprySOCKS backdoor, encrypted SprySOCKS RawWNPF and SprySOCKS DriverLoader drivers. |
| E7484C24B88A1A2407A8F09D734F9A993670285B | klelam00007.zip | Win64/Agent.CXZWin64/SprySOCKS.ABAT/Runner.KS | ZIP archive from VirusTotal containing the WIN_DRVvariant of SprySOCKS, along with all the backdoor’s components; clean binaries used for side-loading are included. |
| 621D1952839BE4B0A1B0E66E87BCE5062CA368ED | tpsvcloc.dll | Win64/Agent.CXZ | SprySOCKS loader. |
| 2457EED2AB28E37741F10914EF929DAD2C8079D4 | VSPMsg.dll | Win64/Agent.CXZ | First-stage loader responsible for launching the SprySOCKS loader. |
| D2C706B1EAF662BF0CE124B5032F73ED84BDA24A | N/A | Win64/SprySOCKS.A | WIN_PLUSvariant of the SprySOCKS backdoor. |
| 5F3B87CEF56683D9A9E19186E0FD0D8019B559C4 | N/A | Win64/Agent.CXZ | SprySOCKS loader. |
| C793CA31E3F6628B5C8986146953BF66232E9A30 | config.dat | Win64/SprySOCKS.A | Encrypted container of the WIN_PLUSvariant of the SprySOCKS backdoor and its loader. |
| 037DB2445F3D72388CB2CF8510563148E5A184BE | N/A | BAT/Runner.KS | Batch script that persists the WIN_DRVvariant of SprySOCKS. |
Network
| IP | Domain | Hosting provider | First seen | Details |
| 207.148.78[.]36 | N/A | IRT-CHOOPALLC-AP | N/A | C&C IP hardcoded in the SprySOCKS backdoor (WIN_PLUS variant). |
MITRE ATT&CK teknikleri
Bu tablo, MITRE ATT&CK çerçevesinin 19. sürümü kullanılarak oluşturulmuştur.
| Tactic | ID | Name | Description |
| Reconnaissance | T1592.004 | Gather Victim Host Information: Client Configurations | SprySOCKS can collect information about the compromised device, including: computer name, OS version, information about memory and CPU, current privileges, system language and version, current time, and more. |
| T1590.005 | Gather Victim Network Information: IP Addresses | SprySOCKS can be collect information about the compromised device, including information about network interfaces and assigned IP addresses. | |
| Resource Development | T1587.001 | Develop Capabilities: Malware | FishMonger has developed custom malware for its operations, including the SprySOCKS backdoor. |
| Execution | T1059.003 | Command and Scripting Interpreter: Windows Command Shell | SprySOCKS can launch an interactive cmd.exe command shell, which allows the attackers to execute commands remotely on the compromised machine. |
| T1053.005 | Scheduled Task/Job: Scheduled Task | SprySOCKS uses a scheduled task to execute its loader on system start. | |
| T1569.002 | System Services: Service Execution | SprySOCKS abuses system services for both one-time and persistent execution. | |
| T1106 | Native API | FishMonger has used Windows APIs to execute code within a victim’s system. | |
| Persistence | T1547.012 | Boot or Logon Autostart Execution: Print Processors | To achieve persistence, FishMonger installs its malicious loader as a print processor. |
| Privilege Escalation | T1546.012 | Event Triggered Execution: Image File Execution Options Injection | SprySOCKS can install itself as a debugger for the Virtual Disk Service by modifying HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\vds.exe\debugger. |
| Stealth | T1205.002 | Traffic Signaling: Socket Filters | SprySOCKS uses the RawWNPF kernel driver to install packet filters capable of redirecting any inbound TCP traffic to the configured local port if a special magic value is detected in the packet. |
| T1134.002 | Access Token Manipulation: Create Process with Token | FishMonger uses CreateProcessAsUser to execute a new process with a token obtained from the print spooler service. | |
| T1622 | Debugger Evasion | SprySOCK’s RawWNPF driver uses the KdDisableDebugger function to disable the kernel debugger, if active. | |
| T1140 | Deobfuscate/Decode Files or Information | SprySOCKS loader decrypts the SprySOCKS backdoor from an encrypted file. Additionally, most of the strings in the SprySOCKS components are encrypted. | |
| T1070.004 | Indicator Removal: File Deletion | The SprySOCKS loader removes original files from the deployment directory after copying them and setting up persistence. | |
| T1070.009 | Indicator Removal: Clear Persistence | SprySOCKS loader removes a service registry value associated with the previously installed malicious minifilter driver after executing the driver. | |
| T1027.007 | Obfuscated Files or Information: Dynamic API Resolution | SprySOCKS components use dynamic API resolution. | |
| T1027.013 | Obfuscated Files or Information: Encrypted/Encoded File | SprySOCKS components are stored in an AES-encrypted file on the victim’s drive. | |
| T1055.013 | Process Injection: Process Doppelgänging | The SprySOCKS loader uses process doppelgänging to inject the backdoor into the svchost.exe process. | |
| T1014 | Rootkit | FishMonger uses the RawWNPF kernel driver, which serves as a rootkit responsible for hiding the SprySOCKS malicious activity. | |
| T1497 | Virtualization/Sandbox Evasion | SprySOCKS uses several anti-emulation techniques to prevent automated analysis by emulators or sandboxes. | |
| T1574.002 | Hijack Execution Flow: DLL Side-Loading | FishMonger uses DLL side-loading to execute the SprySOCKS backdoor. | |
| Defense Impairment | T1562.004 | Disable or Modify System Firewall | SprySOCKS adds a firewall rule allowing any inbound traffic sent to the backdoor’s listening port. |
| Discovery | T1010 | Application Window Discovery | SprySOCKS retrieves the active foreground window name as a part of its keylogging functionality. |
| T1083 | File and Directory Discovery | SprySOCKS can obtain file and directory listings from the compromised system. | |
| T1518.001 | Software Discovery: Security Software Discovery | SprySOCKS components check for the presence of security and sandboxing product libraries (snxhk.dll, SxWrapper.dll, SxIn.dll, SXIn64.dll, SbieDll.dll, and cmdvrt32.dll) in their own processes. | |
| T1082 | System Information Discovery | SprySOCKS can collect information about the compromised device, including: computer name, OS version, information about memory and CPU, current privileges, system language and version, current time, and more. | |
| T1614.001 | System Location Discovery: System Language Discovery | SprySOCKS can collect information about the compromised device, including system language. | |
| T1007 | System Service Discovery | SprySOCKS can enumerate all services on the system. | |
| T1124 | System Time Discovery | SprySOCKS can collect information about the compromised device, including current system time. | |
| Collection | T1056.001 | Input Capture: Keylogging | SprySOCKS implements a keylogger. |
| T1115 | Clipboard Data | SprySOCKS logs clipboard data, along with the captured keystrokes, as a part of its keylogging functionality. | |
| Command and Control | “T1132.001 | Data Encoding: Standard Encoding | SprySOCKS uses base64 encoding in its custom C&C communication protocol. |
| T1573.001 | Encrypted Channel: Symmetric Cryptography | SprySOCKS encrypts data sent to, and decrypts data received from, the C&C with 128-bit AES. | |
| T1008 | Fallback Channels | In addition to the TCP communication channel, SprySOCKS can contact its C&C using UDP and WebSocket channels. | |
| T1665 | Hide Infrastructure | SprySOCKS’s RawWNPF driver hides the backdoor’s active connections from being enumerated when using network tools such as netstat.exe. | |
| T1571 | Non-Standard Port | SprySOCKS uses nonstandard ports to communicate with the C&C. | |
| T1095 | Non-Application Layer Protocol | SprySOCKS uses nonstandard protocols to communicate with the C&C. | |
| Exfiltration | T1041 | Exfiltration Over C2 Channel | SprySOCKS can upload various files from the compromised system to the C&C. |