Laporan Analisis Malware: DLL Side-Loading
Subtitle: Phishing Attachment Pre-Execution Triage
Klasifikasi: TLP: WHITE — Dapat didistribusikan bebas
Penulis: rwx4m
Tanggal: 10 Mei 2026
Status Insiden: 🟢 TIDAK ADA EKSEKUSI (Triage Pre-Execution)
⚠️ KONTEKS INSIDEN : Seorang karyawan menerima email phishing dengan lampiran ZIP. Karyawan TIDAK mengeksekusi file dan segera melaporkannya kepada tim keamanan. File diserahkan untuk analisis triage pre-execution. Tidak ada sistem yang terdampak.
1. Konteks & Latar Belakang Insiden
Pada awal Mei 2026, seorang karyawan menerima email yang mengklaim berisi dokumen keuangan berupa "Laporan Rekening Bulan April". Email tersebut menyertakan lampiran berupa arsip ZIP. Karyawan TIDAK membuka atau mengeksekusi isi arsip tersebut, melainkan segera melaporkannya kepada tim keamanan dan menyerahkan file untuk dianalisis.
1.1 Kronologi Penemuan
| Waktu | Kejadian |
|---|---|
| ~2 April 2026 | EXE diduga disiapkan dan dikemas ke dalam ZIP (berdasarkan file timestamp) |
| 7 Mei 2026 | DLL impostor dikompilasi (PE timestamp: 2026-05-07 09:48:45 UTC) |
| 8 Mei 2026 11:31 | ZIP dianalisis di sandbox — ValleyRAT C2 aktif terhubung |
| 8 Mei 2026 14:49 | ZIP diserahkan oleh karyawan kepada tim keamanan (mtime ZIP) |
| 10 Mei 2026 08:28 | Analisis triage dimulai di mesin analis |
| 11 Mei 2026 | Laporan analisis dipublikasikan |
1.2 Status Dampak
✅ TIDAK ADA EKSEKUSI — TIDAK ADA DAMPAK TERDETEKSI > Berdasarkan laporan karyawan, file ZIP tidak diekstrak maupun dijalankan di mesin produksi manapun. Analisis ini bersifat triage pre-execution untuk memvalidasi ancaman dan menghasilkan artefak deteksi bagi tim keamanan.
2. Ringkasan Eksekutif
Analisis teknis mendalam terhadap lampiran phishing mengungkap kampanye distribusi malware bertarget yang menggunakan teknik DLL Side-Loading dengan tingkat kecanggihan tinggi. Berikut temuan utama yang telah diverifikasi secara independen:
| # | Temuan | Signifikansi |
|---|---|---|
| 1 | Tagihan bulan.exe adalah binary Microsoft VS2022 yang SAH (signed) — digunakan sebagai host DLL side-loading | Binary legit menyamarkan eksekusi malware dari deteksi AV |
| 2 | VsGraphicsCore.dll adalah impostor dikompilasi GCC 4.9.2 (MinGW-w64) — BUKAN Microsoft | 23 GCC compiler strings yang tidak dapat dipalsukan — bukti definitif |
| 3 | 1.859 dari 1.861 exported functions adalah stub return 0 | Kamuflase — payload berjalan via DLL_PROCESS_ATTACH, bukan export |
| 4 | Payload 3.008 bytes tersembunyi dalam 188 GUID strings di .rdata | Teknik encoding non-trivial — menghindari deteksi berbasis string |
| 5 | Custom rolling XOR cipher (key=0xe2, poly=0xb8) mendekripsi payload | Dikonfirmasi dari decompile FUN_6f9c3030 |
| 6 | C2 IP 207.56.138.28:6666 ditemukan langsung dalam decoded payload DLL | Divalidasi INDEPENDEN dari laporan sandbox — bukan asumsi |
| 7 | 4 lapis anti-analysis: file marker, screen check, 10 juta iterasi CPU, anti-debug | 60% VT engine tidak mendeteksi akibat sandbox timeout |
| 8 | Sandbox: ValleyRAT/Winos4.0 — C2 berhasil terhubung dua arah | IDS: ET MALWARE Winos4.0 Framework CnC Login Message + Server Response |
3. Gambaran Umum Serangan
Attack chain berikut direkonstruksi berdasarkan analisis artefak, reverse engineering, dan laporan sandbox:
[TAHAP 1: DELIVERY]
Karyawan menerima email dengan lampiran:
'Laporan Rekening Bulan April.zip' (849 KB)
|
v
[TAHAP 2: EXTRACTION -- TIDAK TERJADI DI ENDPOINT INI]
Jika dibuka, WinRAR mengekstrak ke direktori YANG SAMA:
Tagihan bulan.exe (2.1 MB) -- Microsoft VS2022, SIGNED, LEGITIMATE
VsGraphicsCore.dll (132 KB) -- GCC impostor, UNSIGNED, MALICIOUS
|
v
[TAHAP 3: DLL SIDE-LOADING]
EXE dijalankan --> Windows DLL Search Order:
Cari VsGraphicsCore.dll di direktori EXE --> MATCH! --> DLL dimuat
DLL_PROCESS_ATTACH --> DllMain() dieksekusi otomatis
|
v
[TAHAP 4: ANTI-ANALYSIS GAUNTLET (FUN_6f9c2eb0)]
Cek %LOCALAPPDATA%\\.app_config_test (anti-reanalysis file marker)
GetSystemMetrics() (deteksi resolusi layar sandbox)
100x floating-point loop (CPU timing / VM detection)
GetVersionExA() (OS version fingerprinting)
|
v
[TAHAP 5: PAYLOAD LOADING (FUN_6f9c3300 = 'stringw::stringw()')]
- LoadLibrary(activeds.dll, Kernel32, rpcrt4, User32)
- GetProcAddress(UuidFromStringA, VirtualProtect, SetTimer)
- Decode 188 GUID strings --> 3.008 bytes encoded binary payload
- ANTI-SANDBOX: 10.000.000 iterasi CPU burn (>30 detik!)
- Sleep(500ms)
- CreateFileMappingA(PAGE_EXECUTE_READWRITE) --> executable memory
- FUN_6f9c3030: Rolling XOR decode (key=0xe2, poly=0xb8)
- SetTimer(0, 0, 0, shellcode_ptr) --> SHELLCODE DIEKSEKUSI!
- GetMessageA / DispatchMessageA --> trigger timer callback
|
v
[TAHAP 6: C2 COMMUNICATION]
TCP connect --> 207.56.138.28:6666
IDS: 'ET MALWARE Winos4.0 Framework CnC Login Message'
IDS: 'CnC Server Response' --> koneksi 2 arah BERHASIL
4. Analisis Artefak
Seluruh command berikut dijalankan langsung di mesin analisis. Output dapat direproduksi dan di-screenshot untuk verifikasi.
4.1 Identifikasi File & Verifikasi Hash
Tagihan bulan.exe: PE32+ executable for MS Windows 6.00 (GUI), x86-64, 6 sections
VsGraphicsCore.dll: PE32+ executable for MS Windows 5.02 (DLL),
x86-64 (stripped to external PDB), 11 sections
-rw-rw-r-- 1 rwx4m rwx4m 2.1M Apr 2 17:02 Tagihan bulan.exe
-rw-rw-r-- 1 rwx4m rwx4m 132K May 7 17:48 VsGraphicsCore.dll
3375ca29848411bcd49f7d6f7c6e3354f9804fb736d8486c39dc24ab934033fb Tagihan bulan.exe
52253c4e296a1d1f0931e8836fe9bf02413996e49f091e589eea24252c920dbc VsGraphicsCore.dll
Catatan: VsGraphicsCore.dll terakhir dimodifikasi 7 Mei 2026 — hanya 3 hari sebelum analisis. Keterangan stripped to external PDB mengindikasikan debug symbol dihapus — umum pada malware release build.
4.2 Analisis ZIP Attachment
Length Method Size Cmpr Date Time CRC-32 Name
------- ------ ----- ---- ---------- ----- -------- ----
2191944 Defl:N 828240 62% 2026-04-02 17:02 62af5d21 Tagihan bulan.exe
134656 Defl:N 40708 70% 2026-05-07 17:48 badebb8f VsGraphicsCore.dll
------- ------- --- -------
2326600 868948 63% 2 files
4.3 PE Header Analysis
| Atribut | VsGraphicsCore.dll | Tagihan bulan.exe | DLL VS Asli |
|---|---|---|---|
| Compile Time | 2026-05-07 ✅ Real | 2052-01-21 ⚠️ Forged | Sesuai versi |
| Subsystem | 3 (Console) ❌ | 2 (GUI) ✅ | 2 (GUI) |
| ASLR | Nonaktif ❌ | Aktif ✅ | Aktif |
| CFG Guard | Nonaktif ❌ | Aktif ✅ | Aktif |
| Authenticode | UNSIGNED ❌ | Signed Microsoft ✅ | Signed Microsoft |
| Version Info | TIDAK ADA ❌ | Ada ✅ | Ada |
4.4 Compiler Forensics — Bukti GCC dalam DLL
Ini adalah bukti forensik paling definitif bahwa DLL ini bukan produk Microsoft:
Mingw-w64 runtime failure:
Address %p has no image-section
Unknown pseudo relocation protocol version %d.
Unknown pseudo relocation bit size %d.
GCC: (GNU) 4.9.2 <- muncul 21 kali
GCC: (tdm64-1) 4.9.2 <- MinGW-w64 TDM build (2 kali)
TOTAL: 23 GCC compiler strings
🚨 BUKTI DEFINITIF: DLL IMPOSTOR > GCC strings muncul 23 kali — satu per object file yang dikompilasi dan di-link ke DLL ini. Artifact ini TIDAK DAPAT dipalsukan secara retrospektif tanpa recompile ulang. Microsoft tidak pernah menggunakan GCC untuk mem-build komponen Visual Studio.
4.5 Authenticode & Version Info
# Tagihan bulan.exe -- Microsoft Signed
WIN_CERTIFICATE:
wCertType : 0x2 (WIN_CERT_TYPE_PKCS_SIGNED_DATA)
Signer : Microsoft Corporation
Issuer : Microsoft Code Signing PCA 2011
Valid FROM: 2024-09-12 20:11:14Z
Valid TO : 2025-09-11 20:11:14Z
Kesimpulan: EXE adalah binary Microsoft yang sepenuhnya sah dan ditandatangani resmi. EXE bukan malware — ia adalah carrier yang dimanfaatkan untuk DLL side-loading.
4.6 Section Entropy Analysis
Section .edata berukuran 77 KB dengan entropy 5.91 — di atas normal untuk export table (3.0–4.5).
Elevasi berasal dari dua sumber: (1) 1.861 mangled C++ names panjang, dan (2) 188 GUID strings yang menyembunyikan encoded payload shellcode (Bagian 6).
4.7 Import Table Analysis
Pola LoadLibraryA + GetProcAddress tanpa import API tingkat lanjut secara langsung adalah runtime API resolution — teknik menyembunyikan kapabilitas berbahaya dari static analysis. Penggunaan msvcrt.dll alih-alih VCRUNTIME140.dll adalah konfirmasi tambahan compiler GCC/MinGW.
4.8 Export Table Anomaly
Total exports : 1861
Unique RVAs : 783
[1859x] 554889e5b8000000 <- push rbp; mov rbp,rsp; mov eax,0 --> return 0!
[ 2x] 5541574156415541 <- fungsi dengan implementasi nyata
⚠️ IMPLIKASI KRITIS: Export Functions Adalah Kamuflase > 1.859 dari 1.861 exported functions adalah stub identik yang hanya mengembalikan 0. EXE tidak mendapatkan fungsionalitas apapun dari export DLL ini. Payload aktif berjalan HANYA melalui DLL_PROCESS_ATTACH saat DLL dimuat — bukan melalui export functions manapun.
5. Reverse Engineering
5.1 DllMain — Entry Point
Eksekusi chain: DllMain → FUN_6f9c1290 → FUN_6f9c1050 → stringw::stringw() @ 0x6f9c3300.
Payload utama tersembunyi di dalam C++ class constructor dengan nama yang terlihat seperti kelas string standar dari VisualStudioGraphics.
5.2 FUN_6f9c2eb0 — Environment Check & Anti-Reanalysis
| Atribut | Implementasi | Tujuan |
|---|---|---|
| File marker | %LOCALAPPDATA%\.app_config_test (OPEN_EXISTING) | Deteksi reanalysis berulang |
| Screen check | GetSystemMetrics(SM_CXSCREEN / SM_CYSCREEN) | Deteksi sandbox resolusi kecil |
| CPU timing | 100× floating-point operations | Deteksi VM/hypervisor via timing |
| OS fingerprint | GetVersionExA(&osvi) | Profiling target environment |
5.3 FUN_6f9c1a00 — PRNG Seed Initializer
Fungsi ini mengumpulkan entropy dari berbagai sumber sistem (GetSystemTimeAsFileTime, PID, TID, GetTickCount, QueryPerformanceCounter) dan melakukan XOR untuk menghasilkan PRNG seed baru.
5.4 FUN_6f9c3300 — GUID Shellcode Loader (Payload Utama)
Tersembunyi di balik nama VisualStudioGraphics::stringw::stringw() — sebuah C++ class constructor yang terlihat sah.
---------------------🚧 Work In Progress---------------
Seluruh bagian tambahan tersebut akan dirilis secara bertahap. masih ada 12 poin lagi. Sabar ya... xixixi