Skip to main content

Command Palette

Search for a command to run...

HoneyMyte đưa CoolClient xuống kernel: khi rootkit thay đổi thứ Windows cho phép bạn nhìn thấy

Updated
27 min readView as Markdown
HoneyMyte đưa CoolClient xuống kernel: khi rootkit thay đổi thứ Windows cho phép bạn nhìn thấy

Tóm tắt

CoolClient vốn đã là một backdoor gián điệp đầy đủ chức năng: keylogging, đánh cắp clipboard, thu thập thông tin xác thực, quản lý file, trinh sát hệ thống, và kiến trúc mở rộng bằng plugin. Biến thể mới mà Kaspersky công bố ngày 14/08/2026 không thêm chức năng gián điệp nào đáng kể.

Nó thêm một thứ khác: driver kernel-mode có chữ ký số, được cài như một Windows service và giao tiếp với thành phần user-mode qua các yêu cầu IOCTL. Driver này giấu tiến trình CoolClient, bảo vệ file và khóa registry liên quan khỏi bị kiểm tra hay chỉnh sửa, và lọc địa chỉ C2 khỏi thông tin mạng trả về cho user mode.

Điểm cần nắm: driver này không làm gì "độc hại" theo nghĩa cổ điển. Nó không mã hóa dữ liệu, không đánh cắp file, không phát tán. Nó thay đổi thứ mà Windows cho phép bạn nhìn thấy. Với đội phòng thủ, đây là sự dịch chuyển từ bài toán "tìm mã độc ở đâu" sang một câu hỏi khó chịu hơn nhiều: liệu công cụ của tôi có đang được nói thật hay không.

Nạn nhân được ghi nhận ở Myanmar, Mông Cổ, Pakistan và Nga, bao gồm cả các cơ quan chính phủ đã được xác nhận.

Hành động ưu tiên: rà soát toàn bộ endpoint tìm lệnh wmic thêm đường dẫn loại trừ cho Microsoft Defender — bước này xảy ra sớm nhất trong chuỗi, trước khi bất kỳ file độc hại nào được thả và trước khi có rootkit nào che chắn.


Bối cảnh: CoolClient và HoneyMyte

CoolClient là họ backdoor được gán cho nhóm APT HoneyMyte — còn được biết đến với tên Mustang Panda — sử dụng trong các chiến dịch gián điệp mạng nhắm vào tổ chức khắp châu Á và Nga.

Lịch sử công bố của họ mã độc này khá rõ ràng:

Thời điểm Nguồn Nội dung
2022 Sophos Công bố công khai lần đầu, trong nghiên cứu về các trường hợp DLL sideloading có liên quan
2023 Trend Micro Phân tích tiếp trong báo cáo về Earth Preta và các chiến thuật ẩn mình cập nhật
2025 Kaspersky Biến thể mới thêm đánh cắp clipboard và chặn lưu lượng HTTP để thu thập thông tin xác thực
Cuối 2025 – 2026 Kaspersky Biến thể có driver kernel-mode — nội dung của bài viết này

Đây không phải lần đầu HoneyMyte đưa mã xuống kernel. Kaspersky đã ghi nhận nâng cấp kernel-mode trong ToneShell trước đó, và đánh giá thiết kế tổng thể của driver CoolClient là tương đương. Khác biệt quan trọng: driver CoolClient bộc lộ các IOCTL handler riêng, cho phép backdoor user-mode giao tiếp trực tiếp với driver thay vì chỉ dựa vào cấu hình tĩnh.

Một đặc điểm vận hành nhất quán khác: trong toàn bộ các vụ xâm nhập được quan sát, CoolClient luôn được triển khai như backdoor thứ hai, sau khi PlugX đã tạo được chỗ đứng ban đầu. Kaspersky nêu rõ chính chuỗi triển khai này — PlugX làm implant sau xâm nhập đầu tiên, rồi mới chuyển sang CoolClient — là một trong những yếu tố củng cố attribution.


Kill chain

Tổng quan biến thể CoolClient mới

Tổng quan biến thể CoolClient mới với thành phần kernel-mode (nguồn: Kaspersky GReAT).

Trong chiến dịch nhắm Myanmar mà Kaspersky mô tả:

  1. HoneyMyte dùng PlugX làm implant hậu xâm nhập đầu tiên để triển khai các thành phần CoolClient.

  2. Trước khi thả mã độc, kẻ tấn công thêm loại trừ vào Microsoft Defender — cả loại trừ thư mục lẫn loại trừ file — cho thư mục cài đặt Windows Defender giả và file sideloader đã đổi tên.

  3. Tạo một thư mục cài đặt Windows Defender giả và copy toàn bộ nội dung thư mục Windows Defender thật vào đó bằng xcopy.

  4. Copy các thành phần CoolClient vào thư mục giả, và đổi tên một file thực thi hợp pháp của Sangfor — thường tên Sang.exe — thành defender.exe để làm DLL sideloader.

  5. Thiết lập persistence qua scheduled task khởi chạy defender.exe với quyền SYSTEM lúc hệ thống khởi động, đặt tên giả là một service của Windows Defender ATP.

  6. Khi chạy, defender.exe sideload libngs.dll độc hại — loader tầng một.

  7. libngs.dll giải mã loadcert.ini bằng keystream XOR lặp 0x32 byte dẫn từ seed 0xA4, nạp thẳng vào bộ nhớ.

  8. loadcert.ini tạo AutoRun entry tên goopdate dưới HKCU\Software\Microsoft\Windows\CurrentVersion\Run.

  9. Nếu có đủ quyền và không phát hiện 360 Total Security, cài thêm service tên media_updaten.

  10. Nếu chưa có quyền quản trị, thực hiện UAC bypass qua RPC kết hợp giả mạo tiến trình cha.

  11. Inject loadcert.ini đã giải mã vào một tiến trình synchost.exe mới ở trạng thái suspended, rồi kết thúc tiến trình gốc.

  12. Trong synchost.exe, giải mã time.ini, kiểm tra quyền truy cập Service Control Manager và sự hiện diện của SeTcbPrivilege.

  13. Giải nén driver nhúng dạng LZMA từ loadcert.ini, ghi ra đĩa thành msagent.sys cùng thư mục với cert.ini, tạo và khởi động service driver.

  14. Mở device \\.\msagent và gửi ba yêu cầu DeviceIoControl để khởi tạo driver.

  15. Liệt kê phiên WinStation đang hoạt động, duplicate access token, tạo synchost.exe mới qua CreateProcessAsUserA và inject cert.ini — implant tầng cuối phụ trách giao tiếp C2.

Ba chi tiết đáng phân tích riêng

Defender exclusion đi trước tất cả. Lệnh được chạy trước khi bất kỳ file độc hại nào chạm đĩa:

wmic /Node:localhost /Namespace:\\Root\Microsoft\Windows\Defender Path MSFT_MpPreference
     call Add ExclusionPath="$programfiles\Microsoft\Windows Defender"

Đây là điểm phát hiện rẻ nhất và sớm nhất trong toàn bộ chuỗi. Quan trọng hơn: nó xảy ra khi chưa có rootkit nào che chắn, nên nếu bạn thu thập được sự kiện này, bạn thấy nó một cách trung thực. Sau bước 13, mọi thứ bạn nhìn thấy đều đã đi qua bộ lọc của kẻ tấn công.

Kiểm tra 360 Total Security. Trước khi cài service, mã độc kiểm tra sự hiện diện của 360sd.exe, zhudongfangyu.exe360desktopservice64.exe. Nếu thấy bất kỳ tiến trình nào, nó bỏ nhánh cài service và chuyển sang đường khác. Chi tiết này cho biết tác giả có hiểu biết cụ thể về phần mềm bảo mật mà mục tiêu của họ thường dùng.

UAC bypass qua RPC và giả mạo tiến trình cha. Đây là phần tinh vi nhất của chuỗi user-mode. Mã độc kết nối tới endpoint ncalrpc cục bộ (201ef99a-7fa0-444c-9399-19ba84f12a1a) và gọi NdrAsyncClientCall để khởi chạy winver.exe. Nó lấy debug object của tiến trình này qua NtQueryInformationProcess, gỡ debugger bằng NtRemoveProcessDebug, rồi kết thúc tiến trình — giữ lại debug object để dùng tiếp.

Tiếp theo, cùng kỹ thuật RPC được dùng để tạo computerdefaults.exe. Mã độc gắn debug object đã lấy vào thread hiện tại qua DbgUiSetThreadDebugObject, chờ sự kiện tạo tiến trình bằng WaitForDebugEvent, và duplicate handle của tiến trình qua NtDuplicateObject để có handle full access.

Cuối cùng, nó tự khởi chạy lại với tham số passuac, cấu hình PROC_THREAD_ATTRIBUTE_PARENT_PROCESS qua UpdateProcThreadAttribute để đặt handle đã duplicate làm tiến trình cha. Kết quả: tiến trình mới chạy trong ngữ cảnh quyền cao và trông như được sinh ra bởi một tiến trình Windows tin cậy thay vì bởi CoolClient.

Các thành phần trong chuỗi

Thành phần Vai trò
defender.exe / Sang.exe Ứng dụng Sangfor hợp pháp bị lạm dụng để DLL sideloading
libsrapc.dll Dependency lành tính cần cho ứng dụng Sangfor chạy bình thường
libngs.dll Loader tầng một, giải mã và nạp tầng tiếp theo vào bộ nhớ
loadcert.ini DLL mã hóa chứa chức năng lõi: xử lý lệnh, process injection, triển khai driver, persistence
cert.ini Implant tầng cuối, phụ trách giao tiếp C2 và chức năng backdoor
time.ini File cấu hình của CoolClient

Đáng chú ý về mặt ngụy trang: libngs.dll export rất nhiều hàm giả. Mỗi export chỉ đơn giản gọi OutputDebugStringA với tên hàm tương ứng rồi gọi ngay ExitProcess — không phục vụ mục đích nào ngoài việc bắt chước bảng export mà DLL hợp pháp lẽ ra phải có. Toàn bộ logic độc hại nằm trong DllMain, được làm rối bằng control flow flattening và rất nhiều lệnh nhảy vô điều kiện.

Dummy export trong libngs.dll

Các hàm export giả trong libngs.dll gọi OutputDebugStringA rồi ExitProcess (nguồn: Kaspersky GReAT).


Driver msagent.sys

Chữ ký số và PDB path

PDB path

Đường dẫn PDB nhúng trong driver (nguồn: Kaspersky GReAT).

Driver được ký bằng chứng chỉ cấp cho Nanjing Ranyi Technology Co., Ltd., serial number 3E 62 DC 5D 8D 61 2A 26 33 E7 6B DF D6 07 19 DD. Chứng chỉ có hiệu lực từ tháng 08/2013 tới tháng 09/2014.

Kaspersky đã xác định được một số driver độc hại cũ hơn ký bằng cùng chứng chỉ này, compile khoảng năm 2013, nhưng không tìm thấy bằng chứng nối trực tiếp các mẫu đó với hoạt động CoolClient được mô tả trong báo cáo.

Đường dẫn PDB nhúng trong driver chứa một số chuỗi đáng chú ý, bao gồm "南京实验室" (Nam Kinh thực nghiệm thất) và "张雪杰云南m". Kaspersky nêu rõ phân tích OSINT của họ không tìm được thông tin nào nối các chuỗi này với một tổ chức, nhà phát triển hay threat actor đã biết. Chúng tôi giữ nguyên mức thận trọng này thay vì suy diễn thêm.

Cấu hình từ registry

Cấu hình registry

Cấu hình được driver nạp từ registry trong quá trình khởi tạo (nguồn: Kaspersky GReAT).

Trong quá trình khởi tạo, driver nạp cấu hình ẩn mình từ khóa \REGISTRY\MACHINE\SYSTEM\RNG. Hai giá trị REG_DWORD điều khiển chế độ hoạt động:

Hid_State          mặc định 1    Bật chức năng rootkit
Hid_StealthMode    mặc định 0    Điều khiển các tính năng ẩn mình bổ sung

Sáu giá trị REG_MULTI_SZ định nghĩa các đối tượng cần giấu hoặc bảo vệ:

Wid_H1deF5Dirs        Thư mục cần giấu
Wid_H1deF5Files       File cần giấu
Wid_H1deRegKeys       Khóa registry cần giấu
Wid_H1deRegValues     Giá trị registry cần giấu
Hid_IgnoredImages     Tiến trình cần bỏ qua
Hid_ProtectedImages   Tiến trình cần bảo vệ

Tìm offset EPROCESS động

Kiểm tra ActiveProcessLinks

Driver kiểm tra các bố cục ActiveProcessLinks ứng viên trước khi bật chức năng giấu tiến trình (nguồn: Kaspersky GReAT).

Driver định vị động trường ActiveProcessLinks trong cấu trúc EPROCESS thay vì dựa vào offset cứng. Nó kiểm tra một số offset định trước, và nếu không có cái nào khớp, thực hiện quét tuyến tính toàn bộ cấu trúc để tìm vị trí đúng.

Cách làm này cho phép driver tương thích trên nhiều phiên bản Windows khác nhau, nơi bố cục của EPROCESS có thể thay đổi. Đây là dấu hiệu của mã được viết để dùng lâu dài trên nhiều môi trường, không phải cho một mục tiêu duy nhất.

Sau khi xác định được offset, driver dùng IOCTL 0x22219C0x2221A0 để unlink và relink các entry trong danh sách tiến trình đang hoạt động của Windows — giấu hoặc khôi phục tiến trình theo yêu cầu.

Bốn cơ chế bảo vệ

Object callback. Đăng ký qua ObRegisterCallbacks với altitude 1203, cho cả PsProcessTypePsThreadType. Callback này chặn các yêu cầu mở handle tới tiến trình và thread. Nếu tiến trình đích nằm trong danh sách bảo vệ, driver giảm quyền truy cập được cấp cho tiến trình yêu cầu, ngăn các thao tác như kết thúc tiến trình, inject mã, và các hình thức can thiệp khác. Trong mẫu này, tiến trình được bảo vệ là mã CoolClient chạy bên trong synchost.exe.

Process và image load callback. Đăng ký qua PsSetCreateProcessNotifyRoutineExPsSetLoadImageNotifyRoutine. Khi một tiến trình được tạo, tên image của nó được so với các danh sách cấu hình. Driver cũng thực hiện một lần liệt kê toàn bộ tiến trình đang chạy sau khi đăng ký callback, để đảm bảo các tiến trình đã tồn tại trước khi driver khởi tạo cũng được theo dõi.

Filesystem minifilter. Driver tạo các entry registry cần thiết dưới HKLM\SYSTEM\CurrentControlSet\Services\msagent\Instances, và để tránh xung đột altitude, nó gán altitude động rồi thử lại việc đăng ký cho tới khi có được giá trị duy nhất. Trong quá trình hoạt động, minifilter so đường dẫn được truy cập với danh sách nội bộ và từ chối truy cập các entry khớp.

Đăng ký minifilter

Thử lại đăng ký minifilter với giá trị altitude tăng dần cho tới khi FltRegisterFilter thành công (nguồn: Kaspersky GReAT).

Registry callback. Đăng ký qua CmRegisterCallbackEx với altitude 320000. Với yêu cầu enumerate, các khóa và giá trị khớp bị loại khỏi kết quả trước khi trả về user mode. Với yêu cầu truy cập trực tiếp — mở, sửa, hoặc xóa — callback trả về STATUS_ACCESS_DENIED.

Điểm quan trọng: trước khi áp dụng các hạn chế này, driver kiểm tra xem tiến trình yêu cầu có phải tiến trình tin cậy hay không. Các tiến trình đã đăng ký qua IOCTL 0x222120, bao gồm chính thành phần user-mode của CoolClient, bỏ qua toàn bộ logic lọc và giữ quyền truy cập không hạn chế.

Ẩn kernel module và hook Nsiproxy

Để hỗ trợ giấu kernel module, driver resolve địa chỉ của biến kernel không export PsLoadedModuleList lúc runtime qua MmGetSystemRoutineAddress. Khi tìm thấy module khớp, driver unlink entry tương ứng bằng cách cập nhật con trỏ Flink và Blink — module bị giấu sẽ không còn xuất hiện trong các thủ tục liệt kê kernel module tiêu chuẩn.

Hook Nsiproxy

Cài hook Nsiproxy bằng cách resolve \Driver\Nsiproxy và thay handler gốc bằng routine lọc của driver (nguồn: Kaspersky GReAT).

Nhưng phần đáng lo nhất với đội phòng thủ là hook Nsiproxy. Driver lấy tham chiếu tới \Driver\Nsiproxy qua ObReferenceObjectByName và thay một trong các con trỏ handler của Nsiproxy bằng routine lọc của chính nó. Hook giữ lại handler gốc và chuyển tiếp thực thi sau khi xử lý dữ liệu trả về.

Khi routine bị hook xử lý thông tin mạng, driver so các entry trả về với danh sách địa chỉ C2 đã đăng ký. Các địa chỉ IP khớp bị xóa trước khi dữ liệu được trả về user mode, ngăn các ứng dụng dựa vào thông tin mạng do Nsiproxy cung cấp nhìn thấy địa chỉ C2 của mã độc.


33 IOCTL handler — nhưng mẫu chỉ dùng 3

Đây là phần tôi cho là quan trọng nhất với đội TI, và cũng là chỗ mà việc đọc kỹ báo cáo gốc tạo ra khác biệt so với đọc bản tin tóm tắt.

Driver tạo device object tên \Device\ToolTool cùng symbolic link \DosDevices\ToolTool, và triển khai 33 IOCTL handler. Mẫu CoolClient được phân tích chỉ dùng ba trong số đó trong quá trình thực thi bình thường:

IOCTL Mục đích
0x222120 Đăng ký tiến trình CoolClient hiện tại với driver như tiến trình tin cậy
0x2221E0 Gửi địa chỉ C2 IPv4 đã cấu hình cho driver
0x2220F0 Đăng ký đường dẫn filesystem và registry cần bảo vệ hoặc giấu

Ba mươi handler còn lại không được mẫu này gọi. Nhưng chúng tồn tại, và danh sách của chúng cho thấy msagent.sys không phải một thành phần được thiết kế hẹp chỉ để giấu:

0x222000   Bật hoặc tắt rootkit
0x222134   Inject shellcode vào tiến trình đích qua NtCreateThreadEx
0x222138   Giấu kernel module bằng cách unlink khỏi PsLoadedModuleList
0x222144   Xóa file
0x222168   Unmap image section của tiến trình đích
0x22216C   Kết thúc tiến trình theo PID
0x222194   Gỡ bảo vệ Protected Process Light (PPL)
0x2221A4   Giấu module bên trong một tiến trình
0x2221AC   Liệt kê và khôi phục kernel notification callback
0x2221B0   Vô hiệu hóa hoặc khôi phục kernel notification callback
0x2221B4   Nạp thủ công một kernel driver thứ hai
0x2221BC   Ghi vào địa chỉ kernel tùy ý
0x2221C0   Bật chế độ deny-rootkit qua giám sát image load

Hai mục trong danh sách này đáng được nhấn mạnh riêng, vì chúng nhắm thẳng vào nền tảng kỹ thuật mà EDR hiện đại dựa vào.

Gỡ bảo vệ PPL (0x222194). Protected Process Light là cơ chế Windows dùng để bảo vệ các tiến trình nhạy cảm — bao gồm tiến trình của nhiều giải pháp EDR — khỏi bị can thiệp từ tiến trình khác, kể cả khi tiến trình đó có quyền quản trị. Một driver kernel có khả năng gỡ PPL có thể mở đường cho việc kết thúc hoặc can thiệp vào chính công cụ bảo mật.

Vô hiệu hóa kernel notification callback (0x2221B0). Đây chính là cơ chế mà EDR dùng để nhận sự kiện tạo tiến trình, nạp module và các sự kiện hệ thống khác — cùng loại callback mà chính driver này đăng ký ở phần trên. Khả năng tắt chúng nghĩa là có thể làm EDR ngừng nhận sự kiện mà không cần kết thúc tiến trình EDR nào.

Kết luận cho đội TI: đây là khoảng cách giữa năng lựchành vi đã quan sát được. Kaspersky không thấy mẫu này gọi các handler đó trong quá trình thực thi bình thường, nhưng sự tồn tại của chúng thay đổi cách đánh giá rủi ro.

Nếu msagent.sys xuất hiện trên một máy trong môi trường của bạn, hãy giả định năng lực đầy đủ của driver chứ không phải ba IOCTL đã quan sát. Việc actor chưa dùng tới chúng trong mẫu này không nói gì về việc họ sẽ dùng hay không trong một vụ khác.


Vì sao chuyện này khó với đội phòng thủ

Bốn hệ quả trực tiếp của việc driver hoạt động:

Thông tin mạng không đáng tin. Công cụ user-mode xem thông tin kết nối có thể không thấy địa chỉ C2, dù kết nối vẫn tồn tại. netstat, Process Explorer, và các agent EDR chạy ở user mode đều lấy dữ liệu qua Nsiproxy. Kết nối vẫn ở đó — rootkit chỉ can thiệp vào thứ mà phần mềm bảo mật và người phân tích được phép quan sát.

Tiến trình được bảo vệ không thể can thiệp. Object callback giảm quyền truy cập handle, chặn cả việc kết thúc tiến trình lẫn inject mã. Công cụ bảo mật cố gắng dừng tiến trình sẽ nhận về lỗi quyền chứ không phải kết quả.

File và registry biến mất khỏi kết quả liệt kê. Minifilter và registry callback lọc kết quả trước khi trả về, và trả STATUS_ACCESS_DENIED cho truy cập trực tiếp.

Kernel module có thể bị unlink. Bản thân driver có thể tự giấu khỏi các thủ tục liệt kê module tiêu chuẩn.

Hệ quả vận hành mà Security Affairs diễn giải rất chính xác: tìm thấy Sang.exe, defender.exe hay libngs.dll không còn là đủ. Điều tra viên phải xem cả driver, service, thay đổi registry và hoạt động mạng bất thường — và quan trọng hơn, phải thu thập những dữ liệu đó từ bên ngoài host.


IOC

IOC lấy từ báo cáo GReAT của Kaspersky ngày 14/08/2026. Domain đã defang.

Hash mẫu

2d7c8780e97409770a9d4f31c66c9d63    msagent.sys    (driver kernel-mode)
9460E150E1981D5C165043520C5C12FE    msagent.sys    (driver kernel-mode)
9717F005C5FB98E08D2AD983D88F94EE    libngs.dll     (loader tầng một)
F518D8E5FE70D9090F6280C68A95998F    libngs.dll     (loader tầng một)
EB79558B037669792652A816E2C669DE    ctxmui.dll

Domain C2

cloudtroe.giize[.]com
employers.theworkpc[.]com
freeread.casacam[.]net
us.lenovoappstore[.]com
sundanish.freeddns[.]org
torinarlabs.webredirect[.]org
news.dursamjbataar[.]org
video.dursamjbataar[.]org
black-popular[.]com
whatismybestthing[.]com

Lưu ý mô thức đặt tên: nhiều domain dùng dịch vụ dynamic DNS miễn phí (giize.com, casacam.net, freeddns.org, webredirect.org), và us.lenovoappstore[.]com giả dạng hạ tầng của một nhà sản xuất phần cứng.

Đường dẫn cài đặt được quan sát

C:\Program Files\microsoft\windows defender\
C:\Program Files\windows media player\mediares\
C:\ProgramData\symantecdir\
C:\ProgramData\virtualstore\
C:\Windows\identitycrl\production\
C:\Windows\serviceprofiles\networkservice\
C:\Users\<user>\AppData\Local\viber24.8\
C:\Users\<user>\AppData\Roaming\dsassistant\
C:\Program Files\common files\microsoft shared\office14\
C:\programdata\msdn\

Tên file thành phần

defender.exe / Sang.exe     Ứng dụng Sangfor hợp pháp bị lạm dụng
libsrapc.dll                Dependency lành tính đi kèm
libngs.dll                  Loader tầng một (độc hại)
loadcert.ini                DLL mã hóa, tầng hai
cert.ini                    Implant tầng cuối
time.ini                    File cấu hình
msagent.sys                 Driver kernel-mode

Artifact registry

# AutoRun
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\goopdate
  → chạy Sang.exe hoặc defender.exe với tham số "work"
 
# Service
media_updaten                                    Service user-mode của CoolClient
msagent                                          Service của driver kernel-mode
HKLM\SYSTEM\CurrentControlSet\Services\msagent\Instances    Entry minifilter
 
# Cấu hình rootkit
\REGISTRY\MACHINE\SYSTEM\RNG
  Hid_State, Hid_StealthMode                     REG_DWORD
  Wid_H1deF5Dirs, Wid_H1deF5Files                REG_MULTI_SZ
  Wid_H1deRegKeys, Wid_H1deRegValues             REG_MULTI_SZ
  Hid_IgnoredImages, Hid_ProtectedImages         REG_MULTI_SZ

Artifact kernel và device

\Device\ToolTool                Device object của driver
\DosDevices\ToolTool            Symbolic link
\\.\msagent                     Đường dẫn user-mode mở device
 
# IOCTL được dùng trong thực thi bình thường
0x222120    Đăng ký tiến trình tin cậy
0x2221E0    Đăng ký địa chỉ C2 IPv4
0x2220F0    Đăng ký đường dẫn cần bảo vệ
 
# Altitude callback
1203        Object callback (ObRegisterCallbacks)
320000      Registry callback (CmRegisterCallbackEx)

Chứng chỉ ký driver

Chủ thể      Nanjing Ranyi Technology Co., Ltd.
Serial       3E 62 DC 5D 8D 61 2A 26 33 E7 6B DF D6 07 19 DD
Hiệu lực     08/2013 – 09/2014

Hành vi cần săn

# Trước khi driver được nạp — vị trí quan sát trung thực nhất
wmic ... MSFT_MpPreference call Add ExclusionPath="..."
xcopy sao chép nội dung thư mục Windows Defender sang đường dẫn khác
schtasks /create /sc onstart ... /ru "system"  với tên giả service Windows Defender
File thực thi Sangfor (Sang.exe) nằm ngoài thư mục cài đặt Sangfor chuẩn
Tiến trình đọc và kiểm tra sự tồn tại của 360sd.exe, zhudongfangyu.exe, 360desktopservice64.exe
 
# Trong chuỗi thực thi
synchost.exe được tạo ở trạng thái suspended rồi bị ghi bộ nhớ
Kết nối tới ncalrpc endpoint 201ef99a-7fa0-444c-9399-19ba84f12a1a
winver.exe hoặc computerdefaults.exe được tạo rồi kết thúc ngay
Cài đặt driver mới với chữ ký hết hạn từ trước 2015

MITRE ATT&CK Mapping

Tactic Technique ID Technique Name Ghi nhận trong chiến dịch
Defense Evasion T1014 Rootkit msagent.sys giấu tiến trình, file, registry, module và thông tin mạng
Persistence T1574.002 Hijack Execution Flow: DLL Side-Loading Sang.exe sideload libngs.dll
Defense Evasion T1553.002 Subvert Trust Controls: Code Signing Driver ký bằng chứng chỉ hợp lệ giai đoạn 2013–2014
Defense Evasion T1562.006 Impair Defenses: Indicator Blocking Hook Nsiproxy lọc địa chỉ C2 khỏi dữ liệu mạng
Defense Evasion T1562.001 Impair Defenses: Disable or Modify Tools Thêm exclusion vào Microsoft Defender
Persistence T1543.003 Create or Modify System Process: Windows Service Service media_updatenmsagent
Persistence T1547.001 Registry Run Keys / Startup Folder AutoRun entry goopdate
Persistence T1053.005 Scheduled Task Task khởi động với quyền SYSTEM, tên giả Windows Defender ATP
Privilege Escalation T1548.002 Abuse Elevation Control Mechanism: Bypass UAC UAC bypass qua RPC
Defense Evasion T1134.004 Access Token Manipulation: Parent PID Spoofing Đặt handle tiến trình đã duplicate làm parent
Defense Evasion T1055 Process Injection Inject vào synchost.exe suspended
Defense Evasion T1112 Modify Registry Cấu hình rootkit dưới \SYSTEM\RNG
Defense Evasion T1564 Hide Artifacts Giấu file, thư mục, khóa và giá trị registry
Defense Evasion T1036.005 Masquerading: Match Legitimate Name or Location Thư mục Windows Defender giả, defender.exe, msagent.sys
Defense Evasion T1027 Obfuscated Files or Information XOR keystream, control flow flattening, export giả
Defense Evasion T1140 Deobfuscate/Decode Files or Information Giải mã loadcert.ini, time.ini; giải nén LZMA
Discovery T1518.001 Software Discovery: Security Software Discovery Kiểm tra tiến trình 360 Total Security
Discovery T1082 System Information Discovery Trinh sát hệ thống của CoolClient
Collection T1056.001 Input Capture: Keylogging Chức năng sẵn có của CoolClient
Collection T1115 Clipboard Data Chức năng bổ sung từ biến thể 2025
Command and Control T1071.001 Application Layer Protocol: Web Protocols Giao tiếp C2 của cert.ini
Command and Control T1105 Ingress Tool Transfer Triển khai CoolClient qua PlugX

Nhận định

Rootkit không làm mã độc mạnh hơn. Nó làm công cụ của bạn yếu đi.

Đây là điểm tôi cho là quan trọng nhất, và nó đáng được nói rõ vì nó thay đổi cách tiếp cận điều tra. Một implant chạy hoàn toàn ở user mode có thể rất mạnh, nhưng đội phòng thủ vẫn có rất nhiều cơ hội để kiểm tra tiến trình, file, handle và hoạt động mạng. Một thành phần kernel chủ động lọc những góc nhìn đó thay đổi bản chất bài toán phát hiện.

Toàn bộ quy trình ứng cứu sự cố tiêu chuẩn dựa trên một giả định ngầm: dữ liệu thu được từ host là dữ liệu đúng. Bạn chạy công cụ liệt kê tiến trình, bạn tin kết quả. Bạn xem kết nối mạng, bạn tin danh sách. Giả định đó bị phá vỡ ở đây, và điều tệ nhất là nó bị phá vỡ một cách im lặng — không có thông báo lỗi, không có dấu hiệu gì cho biết bạn đang xem một danh sách đã bị lọc.

Về chứng chỉ hết hạn từ 2014. Việc một driver ký bằng chứng chỉ hết hạn hơn mười năm trước vẫn nạp được là điều đáng nói với đội vận hành. Đây là kỹ thuật cũ nhưng vẫn hiệu quả, và nó tạo ra một khuyến nghị rất cụ thể: bật Microsoft Vulnerable Driver Blocklist, và với các môi trường có yêu cầu cao hơn, cân nhắc WDAC với chính sách chặn driver theo signer. Đây là loại kiểm soát mà nhiều tổ chức có sẵn trong license nhưng chưa bật.

Điểm phát hiện tốt nhất nằm trước khi driver được nạp. Sau bước cài driver, mọi thứ bạn nhìn thấy từ host đều đã đi qua bộ lọc của kẻ tấn công. Trước bước đó, chuỗi này để lại một loạt dấu vết rất rõ:

  • Lệnh wmic thêm Defender exclusion — chạy trước khi bất kỳ file độc hại nào chạm đĩa

  • xcopy sao chép nội dung thư mục Windows Defender sang đường dẫn khác

  • Scheduled task với quyền SYSTEM, đặt tên giả một service của Windows Defender

  • File thực thi Sangfor nằm ngoài thư mục cài đặt chuẩn của Sangfor

  • Cài đặt một driver mới với chữ ký từ trước năm 2015 Không dấu vết nào trong số này cần biết trước tên mã độc, và không cái nào bị rootkit che vì chúng xảy ra trước khi rootkit tồn tại.

Về việc thu thập dữ liệu. Với môi trường nghi ngờ có rootkit kernel, dữ liệu đáng tin nhất là dữ liệu không đến từ host đó: netflow, log firewall, log DNS ở tầng hạ tầng, và ảnh chụp bộ nhớ lấy bằng công cụ chạy ở mức thấp hơn driver. Danh sách 10 domain C2 trong báo cáo có giá trị đúng ở chỗ này — bạn tìm chúng trong log DNS của hạ tầng, không phải trên máy nghi ngờ.

Liên hệ Việt Nam

Cần nói rõ trước: Kaspersky liệt kê nạn nhân ở Myanmar, Mông Cổ, Pakistan và Nga. Việt Nam không nằm trong danh sách của đợt này, và chúng tôi không suy diễn thêm ngoài dữ liệu có sẵn.

Tuy nhiên có hai điểm đáng để đội TI trong nước theo dõi.

Thứ nhất là phổ mục tiêu khu vực. HoneyMyte, dưới tên Mustang Panda, là nhóm có lịch sử nhắm Đông Nam Á rất đậm theo các báo cáo trước của Sophos (2022) và Trend Micro (2023), với trọng tâm là cơ quan chính phủ và tổ chức nghiên cứu. Myanmar nằm trong danh sách nạn nhân lần này. Với các tổ chức trong nước có chức năng tương đương, đây là loại năng lực đáng đưa vào mô hình mối đe dọa chứ không phải tin tức về một khu vực xa.

Thứ hai là việc lạm dụng binary Sangfor. Chuỗi này dùng một file thực thi hợp pháp của Sangfor làm sideloader. Sangfor là hãng bảo mật có sản phẩm hiện diện trong khu vực, nên đây là hạng mục rà soát cụ thể và làm được ngay: kiểm tra xem tổ chức có file thực thi Sangfor nào nằm ngoài thư mục cài đặt chuẩn hay không. Một binary hợp pháp có chữ ký hợp lệ nằm ở vị trí sai là dấu hiệu đáng điều tra bất kể chiến dịch nào.

Cần lưu ý thêm rằng danh sách đường dẫn cài đặt mà Kaspersky công bố cho thấy actor không cố định một vị trí duy nhất — họ dùng thư mục giả danh Symantec, Windows Media Player, Office 14, Viber, và ProgramData. Việc săn theo một đường dẫn cụ thể sẽ bỏ sót; săn theo binary hợp pháp ở vị trí bất thường mới là cách tiếp cận bền hơn.


Khuyến nghị

  • Bật Microsoft Vulnerable Driver Blocklist trên toàn bộ endpoint Windows, và với môi trường có yêu cầu cao, triển khai WDAC với chính sách chặn driver theo signer — chứng chỉ ký driver trong chiến dịch này đã hết hạn từ năm 2014.

  • Cảnh báo trên việc thêm đường dẫn loại trừ cho Microsoft Defender qua wmic hoặc PowerShell — đây là bước sớm nhất trong chuỗi và là bước duy nhất chắc chắn chưa bị rootkit che.

  • Săn tìm binary có chữ ký hợp lệ nằm ngoài thư mục cài đặt chuẩn, đặc biệt là file thực thi của Sangfor, thay vì săn theo một đường dẫn cụ thể — actor luân chuyển nhiều thư mục giả danh khác nhau.

  • Giám sát việc cài đặt driver mới: service kernel-mode mới, entry dưới Services\*\Instances, và driver có chữ ký từ trước năm 2015.

  • Với môi trường nghi ngờ nhiễm, không tin dữ liệu lấy từ chính host: đối chiếu kết nối mạng bằng netflow, log firewall và log DNS ở tầng hạ tầng, vì thông tin mạng ở user mode có thể đã bị lọc.

  • Nếu phát hiện msagent.sys, giả định năng lực đầy đủ của driver — bao gồm khả năng gỡ PPL và vô hiệu hóa kernel notification callback — chứ không chỉ ba IOCTL đã được quan sát trong mẫu này.


Tài liệu tham khảo

More from this blog

F

FPT IS Security

955 posts

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