GIẢI MÃ MÃ ĐỘC MACRO OFFICE DROPPER: TẤN CÔNG ĐA GIAI ĐOẠN, ẨN MÌNH TRONG HẠ TẦNG HỢP PHÁP

NCS Threat Intelligence ghi nhận một tập tin Microsoft Excel macro-enabled đóng vai trò công cụ quản lý dữ liệu, được nhúng chức năng dropper độc hại thực thi tự động. Giao diện bảng tính hiển thị cho người dùng một công cụ hợp pháp mang nhãn “NEXUS ECOM ACCOUNT”, lớp chức năng này che giấu payload thực sự nằm ở sự kiện khởi động tài liệu.

Về cơ chế hoạt động, mã độc sử dụng sự kiện Workbook_Open để khởi chạy chuỗi thực thi, đọc và giải mã khối dữ liệu được nhúng sẵn trong tập tin. Payload sau giải mã được ghi xuống thư mục tạm dưới dạng tệp thực thi giả mạo dịch vụ hệ thống (service), sau đó được kích hoạt. Mã độc còn tích hợp một số kỹ thuật nhằm né tránh các môi trường phân tích tự động.

Chuỗi tấn công

Thông tin mẫu mã độc

Tên file Loại file MD5
TTS US NAMVU 2.xlsm Xlsm file 77b51336ed3561877eb8c4bceb6638e5
Setup.exe PE file 49026eb6770a7a79ecdb16ace270665e
coreinitx64.exe PE file 78770a1b0f8afbda8585a781b4f9fef1
Version.exe PE file e7ad8b8093f6c99c68c9a98e79350b6f
Explorer.exe PE file 5bc45453611a8c9ca3021c272e5aa850
MergedApp.exe PE file 24fa693615d733878490e8a5672a7351

 

Phân tích chi tiết mã độc

Phân tích Stage-1: Mã độc Macro – dropper stage 2

Phân tích bằng công cụ olevba phát hiện nhiều chỉ dấu đáng ngờ trong macro VBA của tập tin Excel, bao gồm cơ chế tự động thực thi, giải mã payload ẩn, ghi tệp xuống hệ thống và khởi chạy tệp. Kết quả kiểm tra thủ công xác nhận macro có chức năng dropper độc hại.

Kết quả của olevba đối với macro có trong file Office

Tập tin Excel độc hại được bảo vệ bằng mật khẩu đối với VBA Project. NCS Threat Intelligence đã gỡ bỏ lớp bảo vệ này và truy xuất thành công mã nguồn macro, phục vụ quá trình phân tích chuyên sâu.

Macro được bảo vệ bằng mật khẩu

Dưới đây là đoạn macro độc hại sau khi đã được gỡ bỏ lớp bảo vệ

 

Đoạn mã Macro độc hại

 

Dựa trên các chú thích (comment) bằng tiếng Việt trong mã macro, NCS Threat Intelligence nhận định tác nhân đứng sau phát triển mã độc này nhiều khả năng sử dụng tiếng Việt. Bên cạnh đó, một số đặc điểm trong cấu trúc và phong cách mã nguồn gợi ý khả năng tác nhân đã sử dụng công cụ AI để hỗ trợ phát triển mã độc.

Macro độc hại được kích hoạt tự động thông qua sự kiện Workbook_Open khi người dùng mở tập tin và cho phép thực thi macro.

Ở giai đoạn đầu, mã độc đọc chuỗi Base64 được lưu ẩn trong ô Z34 của worksheet đầu tiên, sau đó kiểm tra độ dài chuỗi. Nếu chuỗi có ít hơn 10 ký tự, quá trình thực thi sẽ bị bỏ qua nhằm tránh xử lý payload không hợp lệ hoặc không tồn tại.

Payload Stage2 được giấu trong ô Z34 của file excel

Tiếp theo, mã khởi tạo các đối tượng Scripting.FileSystemObject và WScript.Shell, sinh tên tệp ngẫu nhiên dạng svc_<random>.exe và một tệp trung gian cache_<random>.tmp, cả hai được đặt trong thư mục %TEMP%.

Stage 2 sau khi giải mã là 1 file thực thi

Chuỗi Base64 được giải mã thành dữ liệu nhị phân thông qua đối tượng MSXML2.DOMDocument với thuộc tính bin.base64. Dữ liệu sau đó được ghi xuống tệp .tmp bằng ADODB.Stream theo từng khối nhỏ, xen kẽ các khoảng chờ ngắn. Kỹ thuật này có thể nhằm kéo dài thời gian thực thi và gây khó khăn cho quá trình phân tích trong môi trường sandbox.

Sau khi hoàn tất quá trình ghi dữ liệu, tệp .tmp được đổi tên thành tệp thực thi .exe, qua đó tách biệt hai thao tác ghi tệp và thực thi payload. Tiếp theo, mã độc sử dụng WScript.Shell.Run ở chế độ bất đồng bộ để khởi chạy tệp thực thi, cho phép macro kết thúc trong khi payload tiếp tục hoạt động độc lập.

Toàn bộ quy trình được đặt trong khối xử lý lỗi (error handling). Khi xảy ra lỗi, mã chỉ thực hiện dọn dẹp các đối tượng liên quan mà không hiển thị thông báo cho người dùng. Cơ chế này giúp quá trình thực thi thất bại một cách im lặng, hạn chế khả năng người dùng phát hiện hoạt động bất thường.

 

Phân tích Stage-2: “Setup.exe” – Downloader Stage-3

Tệp Setup.exe là một .NET assembly 32-bit, được đóng gói bằng SmartAssembly phiên bản 8.4.0.6650. Đây là công cụ obfuscation thương mại, được sử dụng nhằm làm phức tạp quá trình dịch ngược và gây khó khăn cho hoạt động phân tích mã nguồn tĩnh.

Sau khi thực hiện unpack lớp bảo vệ SmartAssembly, NCS Threat Intelligence thu được mã nguồn đã được giải mã, tạo cơ sở cho việc phân tích chi tiết các chức năng và hành vi của mã độc ở giai đoạn tiếp theo.

Đoạn mã độc hại dropper Stage2

 

Payload Setup.exe (Stage-2) là một .NET assembly đóng vai trò downloader, chịu trách nhiệm tải xuống và thực thi thành phần mã độc ở giai đoạn tiếp theo (Stage-3).

Khi được kích hoạt, mã độc lần lượt kiểm tra danh sách URL dự phòng, cùng trỏ đến một tài nguyên nhưng được lưu trữ trên nhiều nền tảng hợp pháp khác nhau, bao gồm Cloudflare Pages, GitHub, GitLab, Neocities và một số dịch vụ hosting khác.

Việc tận dụng các nền tảng có độ tin cậy cao để lưu trữ payload giúp mã độc gia tăng khả năng vượt qua các cơ chế lọc dựa trên uy tín (reputation-based filtering), đồng thời duy trì khả năng tải xuống thành phần tiếp theo ngay cả khi một hoặc nhiều nguồn lưu trữ bị gỡ bỏ hoặc không còn khả dụng.

Tập các URL được sử dụng để download file

Trong quá trình kết nối, mã độc thiết lập TLS 1.2 và ghi đè ServerCertificateValidationCallback để chấp nhận mọi chứng chỉ, đồng thời giả mạo User-Agent trình duyệt nhằm ngụy trang lưu lượng. URL đầu tiên trả về nội dung hợp lệ sẽ được chọn làm nguồn tải; dữ liệu nhận về ở dạng Base64 được giải mã thành tệp thực thi và ghi xuống đường dẫn %APPDATA%\Microsoft\Windows\Templates\ với tên coreinitx64.exe

Mã độc được download xuống với tên coreinitx64.exe

Để duy trì sự tồn tại, mã độc ghi một khóa Run trong registry HKCU\Software\Microsoft\Windows\CurrentVersion\Run với tên “Windows Core Service” trỏ tới payload, sau đó thực thi tệp qua Process.Start với cơ chế thử lại tối đa 5 lần và kiểm tra tiến trình có thoát quá sớm hay không nhằm đảm bảo thực thi thành công. Toàn bộ quá trình được bao bọc trong các khối xử lý lỗi rỗng, giúp mã độc thất bại hoàn toàn im lặng và không để lại dấu hiệu cho người dùng.

Persistence thông qua Registry key Run với tên “Windows Core Service”

Phân tích stage-3: coreinitx64.exe – Thiết lập môi trường và downloader stage-4

“CoreInitx64.exe” là thành phần trung tâm của chuỗi lây nhiễm, đảm nhận vai trò chuẩn bị môi trường trước khi tải payload chính thức. Cũng chính vì đây là thành phần trung tâm của chuỗi lây nhiễm, mã độc được bảo vệ bằng Net Reactor. Khác với stage-2 vốn chỉ là downloader đơn giản, stage-3 tập trung vào vô hiệu hoá cơ chế phòng vệ và leo thang đặc quyền. Mã độc tự nhân bản vào thư mục hệ thống, phân nhánh xử lý theo quyền hạn hiện có, thêm ngoại lệ cho Windows Defender và thực hiện UAC bypass khi cần. Cuối cùng sau khi đã thực hiện đầy đủ các hành động trên, mã độc thực hiện tải và thực thi thành phần ở giai đoạn tiếp theo. Sau đây là phân tích chi tiết chức năng của mã độc stage-3.

Đầu tiên về chức năng tự nhân bản, mã độc sao chép chính nó vào đường dẫn “%APPDATA%\Microsoft\Windows\Templates” và thiết lập thuộc tính Hidden kết hợp System nhằm ẩn hoàn toàn khỏi người dùng thông thường, đồng thời giả mạo vị trí thư mục hệ thống của Windows. Việc đặt payload trong thư mục %APPDATA% cho phép mã độc hoạt động mà không bắt buộc quyền quản trị.

Tạo thư mục và thiết lập thuộc tính

Tiếp đến về phân nhánh theo đặc quyền, mã độc phân biệt giữa việc tài khoản hiện tại có thuộc nhóm Administrators hay không và việc tiến trình có đang thực sự chạy với quyền nâng cao hay không. Dựa trên kết quả này, mã độc quyết định luồng xử lý tương ứng:

  • Nếu đã có quyền admin, mã độc tiến hành thêm ngoại lệ Defender.
  • Nếu là tài khoản có khả năng nâng quyền nhưng chưa được nâng, mã độc chuyển sang nhánh UAC bypass.

Cách phân nhánh có chủ đích giúp mã độc hạn chế gây lỗi và giảm dấu hiệu bất thường trên các môi trường không đủ điều kiện.

Kiểm tra UAC bật/tắt (EnableLUA)

Về chức năng vô hiệu hoá Windows Defender, mã độc thêm một loạt đường dẫn vào danh sách ngoại lệ của Windows Defender (Exclusions\Paths) nhằm ngăn các payload đặt trong những vị trí này bị quét. Cơ chế được thực hiện theo hai hướng:

  • Ghi trực tiếp vào registry HKLM\SOFTWARE\Policies\Microsoft\Windows Defender\Exclusions\Paths,
  • Sử dụng PowerShell với lệnh Add-MpPreference -ExclusionPath (chạy ẩn, kèm ExecutionPolicy Bypass), sau đó xác minh lại kết quả qua Get-MpPreference.
Vô hiệu hoá Windows Defender – Ghi trực tiếp vào Registry
Vô hiệu hoá Windows Defender – Sử dụng Powershell

Danh sách ngoại lệ bao gồm nhiều tên tệp giả mạo tiến trình hệ thống hợp pháp như explorer.exe, svchost.exe, Cortana.exe, OneDrive.exe và msedge.exe. Đáng chú ý, nhiều tên tệp trong danh sách được chèn các ký tự vô hình (zero-width characters) ở giữa, và mã độc sử dụng một hàm chuyên loại bỏ các ký tự này khi so sánh, kỹ thuật vừa gây khó khăn cho việc phát hiện dựa trên chữ ký tĩnh, vừa tạo ra các tên tệp “gần giống” tiến trình hệ thống nhưng thực chất khác biệt.

Danh sách ngoại lệ

Chức năng khi phần mềm chưa có đủ quyền là thực hiện leo thang đặc quyền UAC bypass. Khi cần nâng quyền, mã độc tạo một thư mục tạm mang tên RunasAdmin_<random> và giải nén ra nhiều tệp hỗ trợ, bao gồm script .vbs, .ps1, .cs và một tệp thực thi version.exe được nhúng sẵn trong resource. Trong trường hợp UAC đang bật, mã độc thực thi thông qua wscript.exe với tệp .vbs trung gian. Nếu UAC đã tắt, mã độc chạy version.exe trực tiếp với tham số runas. Sau khi thực hiện, mã độc giám sát tiến trình version và tiến hành xóa toàn bộ thư mục tạm nhằm xóa dấu vết, nhằm mục tiêu phòng chống điều tra.

Leo thang đặc quyền – UAC bypass

Tương tự Stage-2, mã độc sử dụng danh sách nhiều URL dự phòng được lưu trữ trên các nền tảng hợp pháp để tải payload ở giai đoạn tiếp theo, với tài nguyên có tên exp40.txt.

Tuy nhiên, điểm khác biệt nằm ở cơ chế kiểm tra nguồn tải. Thay vì lần lượt truy vấn từng URL, Stage-3 sử dụng ThreadPool để gửi yêu cầu đồng thời đến nhiều nguồn và lựa chọn nguồn đầu tiên phản hồi hợp lệ. Cách tiếp cận đa luồng này giúp rút ngắn thời gian tải xuống, đồng thời tăng khả năng duy trì hoạt động khi một số nguồn không khả dụng.

Bên cạnh đó, mã độc sử dụng phương thức HEAD để kiểm tra khả năng phản hồi của máy chủ trước khi chuyển sang GET nếu máy chủ không hỗ trợ. Các yêu cầu HTTP được bổ sung thông tin User-Agent và Referer giả mạo nhằm ngụy trang lưu lượng mạng, khiến hoạt động liên lạc của mã độc khó bị nhận diện hơn.

Payload tải về được mã hóa dưới dạng Base64, sau đó giải mã thành tệp thực thi và ghi xuống thư mục %APPDATA%\Microsoft\Windows với tên giả mạo explorer.exe. Tệp được thiết lập thuộc tính Hidden nhằm hạn chế khả năng bị phát hiện thông qua kiểm tra thông thường.

Cuối cùng, mã độc thực thi tệp này ở chế độ ẩn và triển khai cơ chế thử lại tối đa 5 lần nếu quá trình khởi chạy không thành công.

Quản lý danh sách tải mã độc stage-4

Cuối cùng thực hiện persistence, mã độc có chức năng ghi khóa Run trong registry HKCU\Software\Microsoft\Windows\CurrentVersion\Run với tên giá trị “Windows Explorer” trỏ tới payload nhằm duy trì sự tồn tại qua các lần khởi động lại.

Persistence thông qua việc tạo Registry key Run

Phân tích Stage-4: Explorer.exe – Kiểm tra môi trường và Process Injection

Stage 4 là một file .Net PE32 có tên “explorer.exe”, được obfuscate bằng SmartAssembly và giả danh Windows Explorer. Nhiệm vụ chính của nó là giải mã payload cuối cùng và inject vào tiến trình hợp lệ.

Trước khi thực thi bất kỳ logic nào, mã độc kiểm tra tính toàn vẹn của chính nó thông qua StrongNameSignatureVerificationEx(). Nếu chữ ký không hợp lệ hoặc public key token không khớp giá trị gốc, mã độc vào luồng ngoại lệ và dừng ngay. Sau khi vượt qua kiểm tra, các tham số mã hóa được khởi tạo: AES key 32 bytes, IV 16 bytes, đường dẫn self-copy trong %AppData%, và lock object cho thread synchronization khi inject payload.

Mã độc kiểm tra tính toàn vẹn

Tiếp đến, mã độc triển khai bốn lớp phát hiện môi trường phân tích, hoạt động theo cơ chế OR, chỉ cần một lớp phát hiện thành công là chương trình dừng. Lớp đầu tiên resolve IsDebuggerPresent động qua GetProcAddress với tên hàm xây từ mảng ký tự để tránh string detection, phát hiện các user-mode debugger như OllyDbg hay dnSpy.

Chuỗi IsDebuggerPresent

Lớp thứ hai gọi NtQueryInformationProcess với ProcessDebugPort để phát hiện cả debugger kernel-level mà lớp trước bỏ sót. Lớp thứ ba kiểm tra Debugger.IsAttached, phát hiện khi Visual Studio hoặc dnSpy đang attach. Lớp cuối cùng là timing check: sleep ngẫu nhiên 3-7 giây rồi đo thời gian thực tế, nếu chưa tới 2 giây mã độc nhận diện sandbox đang fast-forward hàm Sleep, từ đó xác định đang chạy trong môi trường phân tích tự động.

Tiếp đến, mã độc tìm base address của ntdll.dll qua danh sách process modules, sau đó resolve địa chỉ hàm EtwEventWrite bằng GetProcAddress với tên hàm xây từ mảng ký tự.

Tiếp theo, nó thay đổi quyền truy cập vùng nhớ chứa hàm sang PAGE_EXECUTE_READWRITE và ghi byte 0xC3 vào byte đầu tiên. Từ thời điểm này, mọi lời gọi EtwEventWrite trả về ngay mà không ghi event nào, vô hiệu hóa hoàn toàn hệ thống ETW.

Mã độc mở kết nối tới http://www.gstatic[.]com/generate_204, endpoint Google luôn trả HTTP 204, nhẹ và hiếm khi bị firewall doanh nghiệp chặn. Nếu không có internet, toàn bộ quy trình dừng lại.

Mã độc thực hiện kết nối đến gstatic.com để kiểm tra kết nối Internet

Về khả năng Persistence, nếu mã độc không phải chạy từ vị trí ban đầu là %AppData%, nó sẽ tự sao chép bản thân tới %AppData%\Microsoft\Windows\ với tên file là explorer.exe (tên chứa ký tự Zero-Width Joiner để đánh lừa người dùng khi nhìn tên là explorer nhưng thực ra lại là một file khác). Sau đó mã độc thêm giá trị “Windows Explorer” vào registry key Run trỏ tới bản copy trong %AppData%.

Ghi key Run khởi chạy cùng hệ thống

Trong mã nguồn của mã độc được nhúng một payload dưới dạng chuỗi Base64 và trải qua chuỗi giải mã lồng nhau Base64 decode cho ra ciphertext, tiếp tục giải mã AES-256-CBC (RijndaelManaged, padding PKCS7) với key 32 bytes và IV 16 bytes, sau đó XOR từng byte với key “MyXorKey123” theo modulo, cuối cùng giải nén GZIP để cho ra một file PE32.NET assembly là RAT payload hoàn chỉnh với khả năng keylog, chụp màn hình, webcam, quản lý file và kết nối tới C2.

Payload Base64 RAT được nhúng trong source code

Payload sau khi được giải mã sẽ được inject vào RegAsm.exe bằng kỹ thuật Process Hollowing. RegAsm được chọn vì là binary hợp lệ có chữ ký của Microsoft trong .Net Framework giúp RAT hoạt động như một tiến trình đáng tin cậy.

RegAsm được sử dụng để inject payload

Phân tích stage-5: “MergedApp.exe” – RAT

Sau khi được stage 4 giải mã và inject vào “RegAsm.exe” qua Process Hollowing, RAT thiết lập kết nối TCP thô tới C2 server, nhận lệnh điều khiển từ xa bao gồm chụp màn hình, tải và thực thi file tuỳ ý, tự cập nhật, nạp plugin mở rộng, và thu thập thông tin hệ thống. RAT sử dụng kiến trúc Dead Drop Resolver với 8 URL phân tán trên nhiều nền tảng để resolve địa chỉ C2 thực, giúp duy trì kết nối ổn định ngay cả khi C2 server thay đổi IP hoặc bị takedown. Sau đây là các chức năng chính của RAT.

Đầu tiên fingerprint & lấy thông tin nạn nhân. Sau khi kết nối C2 thành công RAT gửi gói thông tin nhận dạng bao gồm: tên máy tính, tên user đang đăng nhập, volume serial number ổ cứng hệ thống, phiên bản OS kèm Service Pack và kiến trúc (x86/x64), thời gian biên dịch file, tiêu đề cửa sổ đang active, kết quả kiểm tra webcam, và danh sách plugin đã cài trong registry. Tên nạn nhân mặc định là chuỗi base64 “SGFjS2Vk”,decode ra “HacKed”, ghép với volume serial tạo thành ID duy nhất cho mỗi máy bị nhiễm. RAT cũng phát hiện Windows 11 qua registry key CurrentBuild >= 22000 để điều chỉnh buffer size và timeout cho phù hợp.

Lấy thông tin của máy tính nạn nhân

RAT không lưu cố định địa chỉ IP của máy chủ C2 trong mã nguồn mà sử dụng một danh sách gồm 8 URL trên các nền tảng khác nhau, cùng trỏ đến đường dẫn /bachkhoahn/ads.txt. Nội dung tệp này chứa thông tin máy chủ C2, bao gồm hostname và port ở dạng văn bản thuần (plaintext).

Khi cần xác định địa chỉ C2, RAT xáo trộn ngẫu nhiên thứ tự danh sách URL, sau đó gửi các yêu cầu đồng thời thông qua ThreadPool. URL đầu tiên trả về dữ liệu hợp lệ sẽ được lựa chọn làm nguồn cung cấp thông tin kết nối, trong khi các yêu cầu còn lại bị hủy bỏ.

Trước khi chấp nhận endpoint mới, RAT thực hiện kiểm tra kết nối TCP (TCP probe) với thời gian chờ (timeout) có thể điều chỉnh để xác minh máy chủ C2 thực sự đang lắng nghe và sẵn sàng tiếp nhận kết nối.

Đáng chú ý, endpoint sau khi được xác định sẽ được lưu vào Registry để tái sử dụng trong những lần kết nối tiếp theo, tránh phải thực hiện lại quá trình phân giải địa chỉ C2.

Ngoài ra, RAT vô hiệu hóa hoàn toàn cơ chế xác thực chứng chỉ TLS thông qua callback luôn trả về true. Điều này khiến kết nối không kiểm tra tính hợp lệ của chứng chỉ máy chủ, cho phép mã độc tiếp tục hoạt động ngay cả trong môi trường có proxy thực hiện kiểm tra hoặc can thiệp lưu lượng theo cơ chế Man-in-the-Middle (MITM).

C2 của kẻ tấn công được lưu trong file “ads.txt”

Bộ xử lý lệnh hỗ trợ các nhóm chức năng sau:

  • Chụp màn hình (CAP): capture toàn bộ màn hình kèm vị trí con trỏ, resize theo kích thước server yêu cầu, nén JPEG, và gửi về. RAT tính MD5 mỗi frame.
  • Tải và thực thi file (rn): nhận payload dạng GZIP inline hoặc URL download, giải nén, ghi vào thư mục temp với extension tùy chỉnh, rồi Process.Start. Cho phép kẻ tấn công triển khai bất kỳ mã độc bổ sung nào lên máy nạn nhân.
  • Tự cập nhật (up): download binary mới (GZIP hoặc URL), ghi ra file .exe trong temp, chạy binary mới với tham số “..”, rồi gọi quy trình uninstall bản cũ. Mục tiêu là thực hiện update liền mạch không cần user interaction.
  • Plugin system (inv, ret, Ex): download .NET assembly dạng GZIP, lưu vào registry dưới dạng binary blob, nạp qua Assembly.Load + reflection tìm class “A”. Plugin nhận đầy đủ context kết nối C2 (host, port, TcpClient, trạng thái), cho phép mở rộng chức năng RAT runtime mà không cần cập nhật binary chính, có thể nạp module keylogger, file manager, reverse shell.
  • Quản lý registry (prof): đọc, ghi, xóa giá trị registry tùy ý trong subkey của RAT, server dùng để lưu cấu hình, trạng thái plugin, hoặc thay đổi hành vi RAT từ xa.
  • Điều khiển process (un): gỡ cài đặt hoàn toàn (xóa persistence, xóa file, tự hủy), dừng process ngay, restart RAT.

RAT còn có cơ chế bảo Process, gọi NtSetInformationProcess với ProcessInformationClass = 29, đánh dấu process hiện tại là critical. Khi một process critical bị terminate (ví dụ user kill trong Task Manager), Windows sẽ trigger BSOD tạo ra tình huống: user không thể tắt malware mà không crash hệ thống. Flag này chỉ được gỡ khi RAT tự uninstall theo lệnh từ C2 (gọi NtSetInformationProcess với giá trị 0).

TỔNG KẾT VÀ KHUYẾN NGHỊ

Tổng kết

Mã độc sử dụng chuỗi tấn công đa giai đoạn (multi-stage) gồm 5 giai đoạn, bắt đầu từ một tệp Microsoft Excel hỗ trợ macro, được ngụy trang dưới dạng công cụ quản lý dữ liệu. Dựa trên các comment tiếng Việt trong mã nguồn, đường dẫn C2 chứa chuỗi “bachkhoahn” và việc nhắm mục tiêu vào người dùng tại Việt Nam, NCS Threat Intelligence nhận định tác nhân đứng sau nhiều khả năng có khả năng sử dụng tiếng Việt. Tuy nhiên, đây mới là những dấu hiệu mang tính suy luận, chưa đủ cơ sở để xác định chính xác danh tính hoặc nguồn gốc của tác nhân.

Chuỗi lây nhiễm được thiết kế theo mô hình phân tầng, trong đó mỗi giai đoạn đảm nhiệm một chức năng riêng:

  • Stage-1 (Macro Dropper): Kích hoạt macro khi người dùng mở tệp Excel, giải mã payload Base64 được ẩn trong ô bảng tính và ghi thành tệp thực thi trong thư mục tạm.
  • Stage-2 (Setup.exe): Đóng vai trò downloader, tải thành phần mã độc tiếp theo từ danh sách URL dự phòng được phân tán trên nhiều nền tảng lưu trữ hợp pháp.
  • Stage-3 (CoreInitx64.exe): Chuẩn bị môi trường thực thi, can thiệp vào một số cơ chế phòng vệ của hệ thống, thiết lập ngoại lệ cho Windows Defender và tìm cách vượt qua cơ chế UAC khi cần thiết, sau đó tải payload ở giai đoạn tiếp theo.
  • Stage-4 (Explorer.exe): Triển khai nhiều kỹ thuật chống phân tích (anti-analysis), bao gồm phát hiện debugger, kiểm tra thời gian thực thi (timing check) và can thiệp ETW. Thành phần này cũng kiểm tra kết nối Internet, giải mã payload RAT thông qua chuỗi xử lý AES-256 → XOR → GZIP, sau đó inject mã độc vào tiến trình RegAsm.exe bằng kỹ thuật Process Hollowing.
  • Stage-5 (MergedApp.exe): Đóng vai trò RAT, sử dụng cơ chế Dead Drop Resolver để truy xuất địa chỉ máy chủ C2; hỗ trợ các chức năng điều khiển từ xa như chụp màn hình, tải xuống và thực thi tệp tùy ý, nạp plugin mở rộng. Đáng chú ý, RAT còn thiết lập tiến trình ở trạng thái critical nhằm ngăn chặn việc kết thúc tiến trình theo cách thông thường.

Một số điểm đáng chú ý về mặt kỹ thuật của mã độc:

  • Sử dụng nhiều lớp obfuscation: Kết hợp các công cụ bảo vệ mã .NET thương mại như SmartAssembly và .NET Reactor nhằm gây khó khăn cho quá trình dịch ngược và phân tích mã độc.
  • Lạm dụng hạ tầng lưu trữ hợp pháp: Tận dụng các nền tảng hosting phổ biến để lưu trữ payload và phân phối thông tin C2, qua đó làm giảm mức độ bất thường của lưu lượng mạng và gây khó khăn cho các cơ chế phát hiện dựa trên uy tín nguồn (reputation-based detection).
  • Sử dụng ký tự zero-width: Chèn các ký tự Unicode không hiển thị vào tên tệp nhằm thay đổi chuỗi định danh và né tránh một số cơ chế phát hiện dựa trên chữ ký tĩnh.
  • Kiến trúc plugin mở rộng: Cho phép RAT tải và thực thi các thành phần chức năng bổ sung trong quá trình hoạt động mà không cần cập nhật toàn bộ tệp thực thi chính.

Khuyến nghị

Từ kết quả phân tích mã độc, NCS đưa ra một số khuyến nghị nhằm giúp người dùng và tổ chức chủ động phòng ngừa, phát hiện sớm và giảm thiểu rủi ro từ các chiến dịch mã độc sử dụng macro Office và chuỗi lây nhiễm đa giai đoạn tương tự.

Đối với người dùng:

  • Không bật macro đối với các tệp Office được gửi từ email hoặc tải xuống từ những nguồn không đáng tin cậy.
  • Cảnh giác với các tệp Excel, Word yêu cầu bật “Enable Content” hoặc “Enable Macro”, đặc biệt là các tệp được ngụy trang dưới dạng công cụ quản lý dữ liệu, hóa đơn hoặc chứng từ.
  • Không tự ý tắt Windows Defender hoặc các phần mềm bảo mật đang được cài đặt trên thiết bị.
  • Kiểm tra các chương trình khởi động cùng Windows và những tiến trình chạy từ các thư mục dữ liệu người dùng như %APPDATA%. Cần đặc biệt lưu ý các tệp có tên mô phỏng thành phần Windows nhưng được thực thi từ đường dẫn bất thường, chẳng hạn Windows Core Service hoặc Windows Explorer.
  • Cập nhật hệ điều hành và bộ Microsoft Office lên phiên bản mới nhất để hạn chế nguy cơ bị khai thác thông qua các lỗ hổng đã được khắc phục.

Đối với tổ chức:

  • Cập nhật các chỉ báo xâm nhập (IoC), bao gồm hash tệp, domain và URL được cung cấp trong báo cáo, vào các hệ thống bảo mật để phục vụ hoạt động giám sát, phát hiện và ngăn chặn.
  • Thiết lập chính sách kiểm soát macro Office, đặc biệt là hạn chế hoặc chặn macro trong các tệp có nguồn gốc từ Internet.
  • Tăng cường giám sát các hành vi bất thường như tiến trình Office khởi chạy tệp thực thi, tạo tệp .exe trong thư mục dữ liệu người dùng, tải payload từ các nền tảng hosting công cộng hoặc thực hiện Process Hollowing.
  • Theo dõi các thay đổi bất thường đối với cấu hình Windows Defender, Registry và các cơ chế bảo vệ hệ thống; chú ý những hành vi có dấu hiệu vô hiệu hóa phần mềm bảo mật hoặc vượt qua UAC.
  • Triển khai và duy trì các giải pháp EDR/XDR để phát hiện hành vi can thiệp hệ thống, tiêm mã vào tiến trình và thực thi mã độc nhiều giai đoạn.
  • Xây dựng quy trình ứng phó sự cố, bảo đảm khả năng cô lập thiết bị nghi nhiễm, thu thập chứng cứ số và điều tra phạm vi ảnh hưởng khi phát hiện dấu hiệu xâm nhập.

 

MITRE ATT&CK

Tactic Technique ID Tên kỹ thuật Mô tả áp dụng
Resource Development T1583.006 Acquire Infrastructure: Web Services Lạm dụng Cloudflare Pages, GitHub, GitLab, Neocities, Blogspot, clan.su, edgeone.dev làm nơi lưu trữ payload và file resolve C2 (ads.txt)
Initial Access T1566.001 Phishing: Spearphishing Attachment Phân phối file Excel macro-enabled (TTS US NAMVU 2.xlsm) giả dạng công cụ quản lý dữ liệu.
Execution T1204.002 User Execution: Malicious File Người dùng mở file Excel và cho phép chạy macro → kích hoạt Workbook_Open
T1059.005 Command and Scripting Interpreter: Visual Basic Macro VBA đọc payload Base64 từ ô Z34, giải mã, ghi svc_<random>.exe vào %TEMP%; wscript.exe + .vbs trung gian cho UAC bypass
T1059.001 Command and Scripting Interpreter: PowerShell Stage-3 dùng PowerShell -ExecutionPolicy Bypass chạy Add-MpPreference -ExclusionPath và Get-MpPreference
T1106 Native API Gọi NtSetInformationProcess (đánh dấu critical process → BSOD khi kill), NtQueryInformationProcess, GetProcAddress, StrongNameSignatureVerificationEx
Persistence T1547.001 Boot or Logon Autostart Execution: Registry Run Keys Key Run trong HKCU\…\CurrentVersion\Run: “Windows Core Service” → coreinitx64.exe, “Windows Explorer” → explorer.exe
Privilege Escalation T1548.002 Abuse Elevation Control Mechanism: Bypass UAC Stage-3: UAC bật → wscript.exe + .vbs trung gian; UAC tắt → version.exe với runas
Defense Impairment T1685 Disable or Modify Tools Thêm ngoại lệ Windows Defender qua registry (HKLM\…\Exclusions\Paths) VÀ PowerShell Add-MpPreference; Patch ETW — ghi 0xC3 (RET) vào EtwEventWrite trong ntdll.dll, vô hiệu hóa hoàn toàn Event Tracing for Windows
Stealth T1027.002 Obfuscated Files or Information: Software Packing Smart Assembly v8.4.0.6650 (Stage-2, Stage-4) và .NET Reactor (Stage-3); VBA project bảo vệ bằng mật khẩu
T1027.018 Obfuscated Files or Information: Invisible Unicode Chèn ký tự zero-width (Zero-Width Joiner) vào tên file payload (explorer.exe, svchost.exe…) để tránh signature detection, tên hiển thị giống tiến trình hệ thống nhưng thực tế khác biệt
T1140 Deobfuscate/Decode Files or Information Chuỗi giải mã 4 lớp: Base64 → AES-256-CBC (PKCS7) → XOR (“MyXorKey123”) → GZIP; Stage-1 Base64 decode từ ô Z34
T1036.005 Masquerading: Match Legitimate Resource Name or Location Đặt tên file giả mạo tiến trình hệ thống (explorer.exe, svchost.exe, Cortana.exe, OneDrive.exe, msedge.exe); payload đặt trong %APPDATA%\Microsoft\Windows\ giả mạo đường dẫn hệ thống
T1564.001 Hide Artifacts: Hidden Files and Directories Thuộc tính Hidden + System cho thư mục và file payload trong %APPDATA%\Microsoft\Windows\Templates\
T1622 Debugger Evasion 3 lớp anti-debugs: IsDebuggerPresent (resolve dynamic qua GetProcAddress), NtQueryInformationProcess (ProcessDebugPort), Debugger.IsAttached
T1497.003 Virtualization/Sandbox Evasion: Time Based Checks Sleep 3-7s rồi đo thời gian thực – nếu <2s → sandbox fast-forward; Stage-1 chèn delay xen kẽ khi ghi payload
T1055.012 Process Injection: Process Hollowing Inject RAT vào RegAsm.exe – binary .NET Framework hợp lệ có chữ ký Microsoft
Discovery T1082 System Information Discovery RAT thu thập: hostname, username, volume serial, OS version + SP + arch, CurrentBuild (≥22000 = Win11), webcam
T1016 System Network Configuration Discovery Kiểm tra Internet qua http://gstatic[.]com/generate_204 (HTTP 204) trước khi thực thi
Collection T1113 Screen Capture RAT chụp màn hình + vị trí con trỏ, resize, nén JPEG, MD5 mỗi frame
T1125 Video Capture RAT kiểm tra và truy cập webcam nạn nhân
Command and Control T1102.001 Web Service: Dead Drop Resolver URL trên nhiều nền tảng → /bachkhoahn/ads.txt chứa host:port C2 (bachkhoahn.kozow.com)
T1071.001 Application Layer Protocol: Web Protocols Giả mạo User-Agent + Referer; HTTPS download payload; bypass TLS cert validation
T1095 Non-Application Layer Protocol RAT kết nối TCP thô (raw TCP) tới C2 server
T1105 Ingress Tool Transfer Tải payload qua nhiều URL dự phòng: coreinitx64.exe (Stage-2), explorer.exe/exp40.txt (Stage-3), plugin + update (RAT)
T1219 Remote Access Tools RAT (MergedApp.exe): điều khiển từ xa toàn diện — screen capture, file exec, self-update, plugin system, registry control, uninstall từ xa

 

Indicators of Compromise

SHA-256 SHA-1
e885fd62995b3302894a343cfc02d5a73af2b0426d02555b8bea9eada87d1cb3 fd86b2b951fd51d6067674a5277c67b264a01a9f
e7071b4a526059a4c8898bf6c0a44dc7083662e9d888b9cec15af823d75fa269 48d3a407947c7d1a1f4efcc8a109fdf7e05a6ace
4fe56faef5947023281e29c75913279efee324ff025a51fd222ce1b4e7fa5e74 359cab5d0748096b1a2a09118b08395825bfe9b8
b73c4735556f8b43d6bed880a089a85823e27183792b19e08bd10f86eb9eb879 ece4f1ffffc0b6239efa007f07b11368f1243948
fbd4db896bb05fdd2e25a28e7c19885d4f559268f0fef0c944739c255c7455bb 39b77786ee0c381f60502e2fe1f90992369c0566
94996736d6917702bae5aa7ce888ee896be94fa6e620c0b155e9f3c7bbe5a369 84ef04fab3713c847101ed3ec69aa4058f308e1c

Network Indicators

https://24-09-2026[.]pages[.]dev/bachkhoahn/ads[.]txt

https://24-09-2026[.]edgeone[.]dev/bachkhoahn/ads[.]txt

https://raw[.]githubusercontent[.]com/mekong20252026/24-09-2026/refs/heads/main/bachkhoahn/ads[.]txt

https://24-09-2026[.]neocities[.]org/bachkhoahn/ads[.]txt

https://bachkhoahn1111[.]blogspot[.]com/ads[.]txt

http://proxycheap[.]for[.]ru/uploads/28916/13237/bachkhoahn/ads[.]txt

https://24-09-2026[.]clan[.]su/bachkhoahn/ads[.]txt

https://gitlab[.]com/24-09-2026-group1/24-09-2026/-/raw/main/bachkhoahn/ads[.]txt

https://24-09-2026[.]pages[.]dev/bachkhoahn/core40[.]txt

https://24-09-2026[.]edgeone[.]dev/bachkhoahn/core40[.]txt

https://raw[.]githubusercontent[.]com/mekong20252026/24-09-2026/refs/heads/main/bachkhoahn/core40[.]txt

https://24-09-2026[.]neocities[.]org/bachkhoahn/core40[.]txt

http://proxycheap[.]for[.]ru/uploads/28916/13237/bachkhoahn/core40[.]txt

https://24-09-2026[.]clan[.]su/bachkhoahn/core40[.]txt

https://gitlab[.]com/24-09-2026-group1/24-09-2026/-/raw/main/bachkhoahn/core40[.]txt

https://24-09-2026[.]pages[.]dev/bachkhoahn/exp40[.]txt

https://24-09-2026[.]edgeone[.]dev/bachkhoahn/exp40[.]txt

https://raw[.]githubusercontent[.]com/mekong20252026/24-09-2026/refs/heads/main/bachkhoahn/exp40[.]txt

https://24-09-2026[.]neocities[.]org/bachkhoahn/exp40[.]txt

http://proxycheap[.]for[.]ru/uploads/28916/13237/bachkhoahn/exp40[.]txt

https://24-09-2026[.]clan[.]su/bachkhoahn/exp40[.]txt

https://gitlab[.]com/24-09-2026-group1/24-09-2026/-/raw/main/bachkhoahn/exp40[.]txt

bachkhoahn[.]kozow[.]com

Tác giả: TheWantedX