Vào giữa tháng 01/2026, đội ngũ bảo mật của CyStack phát hiện các hoạt động bất thường trên hệ thống của một khách hàng doanh nghiệp.
Tuy nhiên, những dấu hiệu này không đủ rõ ràng để được xem là một cuộc tấn công. Cả người dùng lẫn các cơ chế bảo mật như antivirus đều không phát hiện ra điều gì đáng ngờ.
Với các doanh nghiệp nhạy cảm – nơi dữ liệu và độ tin cậy là yếu tố sống còn, đây là một kịch bản có mức độ rủi ro cực kỳ cao.
Khoanh vùng và điều tra
Quá trình khoanh vùng cho thấy các dấu hiệu bất thường tập trung tại một máy trạm thuộc bộ phận hỗ trợ khách hàng. Trước thời điểm xảy ra sự cố, người dùng tại đây đã tương tác với một đường link được gửi qua kênh hỗ trợ, dẫn tới việc tải và thực thi một file có phần mở rộng .pif.
Thực chất, đây là một chương trình thực thi được ngụy trang bằng định dạng ít phổ biến và được ký số hợp lệ tại thời điểm phát tán. Cách làm này đã giảm đáng kể mức độ nghi ngờ trong giai đoạn xâm nhập ban đầu.
Quá trình điều tra sau đó tập trung vào các tài nguyên còn tồn tại trên hệ thống nạn nhân, bao gồm file system, registry liên quan đến cơ chế khởi động cùng hệ thống, cấu hình Windows service và dấu vết tiến trình. Kết quả phân tích cho thấy đây là một chiến dịch tấn công nhiều giai đoạn, sử dụng các kỹ thuật phổ biến trong các chiến dịch tấn công có chủ đích như staging payload trong thư mục giả dạng Windows Update, khai thác DLL sideloading, và thực thi payload trực tiếp trong bộ nhớ. Tất cả là nhằm che giấu hoạt động và hạn chế dấu vết trên máy nạn nhân.
Nhận định
Tại thời điểm hoàn tất điều tra, chúng tôi chưa ghi nhận bằng chứng cho thấy mã độc đã lan truyền sang các hệ thống khác trong cùng môi trường. Tuy nhiên, việc phân tích hạ tầng điều khiển (C&C), mô hình thực thi payload và kiến trúc backdoor cho thấy nhiều điểm tương đồng đáng chú ý với các chiến dịch đã được công bố trước đó, đặc biệt là các hoạt động được QiAnXin Threat Intelligence gán cho APT-Q-27 (GoldenEyeDog).
Mặc dù chưa có đủ bằng chứng để khẳng định chắc chắn về sự liên quan, các tương đồng về cách đặt tên hạ tầng C&C, mô hình multi-stage, kỹ thuật lưu trữ payload trong file log và kiến trúc backdoor dạng mô-đun cho thấy chiến dịch này nhiều khả năng thuộc cùng một hệ sinh thái công cụ hoặc chia sẻ framework và hạ tầng với các hoạt động của APT-Q-27, phản ánh một chiến dịch được phát triển, duy trì và tái sử dụng theo thời gian.
⚠️ Miễn trừ trách nhiệm:
Bài viết này nằm trong chuỗi nghiên cứu bảo mật chuyên sâu được thực hiện bởi đội ngũ CyStack. Nội dung được biên tập thuần túy cho mục đích học thuật và giáo dục, nhằm nâng cao nhận thức cộng đồng về các nguy cơ an ninh mạng và lỗ hổng bảo mật. Chúng tôi khẳng định không cung cấp hướng dẫn thực hiện mã độc hay các hành vi tấn công trái phép.
Toàn bộ nội dung và số liệu công bố đã được thông báo, nhận được sự đồng ý từ các tổ chức liên quan, đồng thời mọi thông tin định danh đều đã được ẩn danh để đảm bảo tính bảo mật tuyệt đối.
Tổng quan chuỗi tấn công
👤
Người dùng – Bộ phận CSKH
Nhận link qua Zendesk. Tải & thực thi file.
⬇️
Dropper (File tải về)
Kết nối cloud. Tải các loader thành phần.
⚡
Loader
Giải mã payload. Thực thi hoàn toàn trong bộ nhớ.
⚙️
Backdoor
Thiết lập persistence (service). Kết nối C&C. Nhận lệnh / tải module.
📡
Duy trì hiện diện & điều khiển từ xa
Hoàn tất xâm nhập.
Phân tích kỹ thuật chi tiết
Giai đoạn xâm nhập ban đầu
Điểm vào của chiến dịch là một URL được gửi tới nhân viên qua ticket Zendesk có dạng hxxps://storage[.]googleapis[.]com/iwantuu/photo202512.pif#image2025-12-29-14-53.jpg
Ở góc độ trực quan, URL này được thiết kế để đánh lừa người dùng tin rằng đây là một tệp hình ảnh JPG, thông qua việc gắn thêm phần mở rộng .jpg ở phía sau ký tự #.
Tuy nhiên, điểm mấu chốt nằm ở cơ chế xử lý URL của trình duyệt và giao thức HTTP:
Mọi nội dung nằm sau ký tự # (fragment identifier) sẽ không bao giờ được gửi lên server. Fragment chỉ tồn tại ở phía client, thường được sử dụng cho điều hướng nội dung trong trang web, và không ảnh hưởng tới request thực tế.
File được tải về (chúng tôi sẽ gọi là Dropper) có phần mở rộng .pif (Program Information File), một định dạng có từ thời MS-DOS, từng được sử dụng để mô tả cách thực thi các chương trình 16-bit. Trong các phiên bản Windows hiện đại, .pif vẫn được Windows Explorer coi là một file thực thi, tương đương với .exe.
Quan trọng hơn, trong nhiều cấu hình hệ thống, đặc biệt là khi tùy chọn hiển thị phần mở rộng file bị tắt, Windows Explorer chỉ hiển thị phần tên phía trước .pif, khiến file trông giống như một tài liệu hoặc hình ảnh thông thường.
File dropper nguyên bản
Có một số đặc điểm với Dropper này:
File .NET (C#)
Được pack/obfuscate mạnh:
Tên hàm, biến bị làm rối
String quan trọng không tồn tại dạng plaintext
Các chuỗi được decode động khi runtime, chủ yếu thông qua:
Base64 nhiều lớp đối với URI chứa FileList
Obfuscate các string quan trọng
Và điểm đáng chú ý nhất là Dropper được ký số hợp lệ tại thời điểm phát tán.
Phân tích chữ ký số cho thấy:
Chứng thư được phát hành cho Portier Global Pty Ltd
Thuật toán băm SHA-256
Có timestamp hợp lệ từ dịch vụ ký số bên thứ ba (SSL.com Timestamp)
Mặc dù tại thời điểm phân tích, chứng chỉ này đã bị explicitly revoked, nhưng việc có timestamp hợp lệ đồng nghĩa với việc:
Windows vẫn coi chữ ký là hợp lệ tại thời điểm ký
SmartScreen và nhiều cơ chế kiểm tra khác không chặn file ở thời điểm người dùng tải về
Việc sử dụng chứng chỉ thật, từng hợp lệ cho thấy nhóm tấn công có khả năng tiếp cận chứng chỉ bị rò rỉ hoặc chứng chỉ được cấp cho mục đích khác nhưng bị lạm dụng.
Đây là một chiến thuật quen thuộc trong các chiến dịch targeted malware và thường chỉ xuất hiện ở những nhóm có mức độ đầu tư tương đối cao, nhằm giảm tối đa nghi ngờ trong giai đoạn bắt đầu.
Thực thi Dropper
Ngay sau khi người dùng click thực thi, dropper khởi tạo HTTP client với:
User-Agent được chọn ngẫu nhiên trong 3 giá trị dưới đây:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Edge/120.0.0.0
Header hợp lệ (Accept, Accept-Language, Cache-Control)
Ngôn ngữ được set gồm cả en-US, zh-CN, cho thấy khả năng tái sử dụng cho nhiều khu vực
Dropper không mang payload chính bên trong. Thay vào đó, nó:
2. Thực hiện GET request tới Filelist URL thu được để lấy về các file cần thiết
Tên file
MD5
Nhận định
updat.exe
64B07B1C385CF94A3559E323009F7641
File sạch, giữ vai trò Loader
crashreport.dll
30917B5ABB991DF495827A9D7C7EBCBC
DLL độc hại có ký số
updat.log
543023ACE4F10B736C4C4109E005F0EF
blob chứa payload chính (đã nén/mã hóa)
vcruntime140.dll
4113057339D9E4E376BDED9074D20C17
File sạch
image.jpg
4DE8079431D85D3A37FD77FB26E8328F
File mồi, để tăng độ hợp pháp của thư mục
msvcp140.dll
7E8BDD2C2304E204B44A3BEC09D66062
File sạch
3. Các file này được được lưu vào một thư mục có dạng C:\\Users\\Admin\\AppData\\Local\\Microsoft\\WindowsUpdate\\Cache\\WU_20251230_67e65f7b@27 với mục đích giả mạo Windows Update cache nhằm đánh lừa người dùng. Thư mục này chúng ta sẽ gọi là Staging.
4. Thư mục Staging sau đó được gán đồng thời hai thuộc tính Hidden và NotContentIndexed. Điều này khiến thư mục không hiển thị trong các thao tác duyệt file mặc định và không bị các dịch vụ lập chỉ mục của Windows xử lý.
5. Song song với việc staging payload, dropper thiết lập một cơ chế persistence tạm thời thông qua registry Run key tại:
Run key này trỏ tới updat.exe (chúng ta sẽ gọi là Loader), đảm bảo file này được chạy khi người dùng đăng nhập. Persistence ở giai đoạn này không nhằm duy trì hiện diện lâu dài, mà đóng vai trò giữ foothold trong thời gian cần thiết để hoàn tất việc tải và triển khai các thành phần tiếp theo của chuỗi tấn công.
Ngoài ra, Dropper cũng đã chuẩn bị sẵn các phương án xóa dấu vết, như là cho phép xóa Registry key đã ghi ở trên
Thực thi Loader
Trong chuỗi tấn công này, updat.exe đóng vai trò loader có chữ ký số hợp lệ (benign loader), trong khi crashreport.dll là malicious loader stage. Do crashreport.dll trùng tên với DLL mà updat.exe mong đợi, Windows loader sẽ ưu tiên load DLL này từ thư mục Staging, dẫn đến việc thực thi mã độc ngay trong ngữ cảnh của một tiến trình hợp lệ. Một điểm đáng chú ý nữa là file .dll này còn được ký số trùng signer với file .NET
Ngay khi crashreport.dllđược load, luồng thực thi đi qua DllMain, từ đó gọi vào logic loader chính, bao gồm:
Giải mã tên file payload (updat.log). Tên file này vốn không được hardcoded trong mã nguồn để tránh bị phát hiện, thay vào đó nó được xây dựng từ một hàm giải mã với thuật toán XOR đơn giản (với 0xAA) từ một mảng byte tĩnh.
Sau khi khi xác định được tên file payload, loader mở file updat.log ; đọc toàn bộ nội dung vào buffer; và thực hiện vòng lặp giải mã để thu được payload hoàn chỉnh (bao gồm shellcode và dữ liệu PE file)
Sau khi giải mã:
Loader gọi VirtualProtect để chuyển vùng nhớ sang PAGE_EXECUTE_READ
Gọi trực tiếp entry point của payload để shellcode được thực thi
Theo những gì chúng tôi quan sát được, shellcode này đảm nhiệm công việc:
Giải nén payload chính thành một file PE
Map PE vào bộ nhớ
Fix import table
Resolve API động
File PE cuối cùng này chính là Backdoor hoàn thiện, nó sẽ giữ vai trò chính trong việc hiện diện, nhận lệnh, và thực thi lệnh từ máy chủ điều khiển trong tương lai. Điểm đáng chú ý là Backdoor được giải mã, thực thi hoàn toàn trên RAM (In-memory execution) để né tránh các phương pháp săn mã độc truyền thống của các Antivirus.
Thực thi Backdoor
Kiểm tra môi trường để chống phân tích
Ngay sau khi Backdoor được load, nó sẽ kiểm tra môi trường:
Chống chạy nhiều instance / đánh dấu phiên chạy
Tạo mutex bằng CreateMutexA().
Nếu GetLastError() == 183 (đã tồn tại) thì hiểu là đã có instance khác, thường sẽ thoát hoặc đổi nhánh xử lý.
Chống debug
Gọi IsDebuggerPresent().
Nếu có debugger → exit.
Kiểm tra “đủ tài nguyên” để tránh sandbox
Hàm CPUandRamCheck() gọi:
GetSystemInfo() → kiểm tra số core CPU ≥ 3
GlobalMemoryStatusEx() → kiểm tra RAM ≥ 3 GB
Nếu không đạt → thoát (điển hình để né VM/sandbox cấu hình thấp).
Giải mã danh sách máy chủ điều khiển (C2) khi chạy
Backdoor đã lưu sẵn một danh sách các C2 dưới dạng mã hóa ngay trong nó, với mục tiêu giải mã trong quá trình chạy nhằm chống lại việc phát hiện của các Antivirus với chuỗi tĩnh.
Các C2 này được giải mã bằng hàm XOR (hàm sub_1001F582 với vòng lặp XOR theo byte_10046160[...]).
Kết quả sau giải mã là nhiều C2 theo format kiểu:<ip>:15628
Kiểm tra quyền
Backdoor kiểm tra quyền người dùng hiện tại:
Nếu không phải Admin: tự chạy lại với quyền admin (qua ShellExecuteExA).
Nếu đang là Admin: đi vào nhánh thiết lập persistence (tạo service), rồi mới chạy các module logic tiếp theo.
Persistence bằng Windows Service
Sau khi xác định tiến trình đang chạy với quyền admin, backdoor tiến hành thiết lập cơ chế persistence dài hạn bằng cách lợi dụng Windows Service Control Manager (SCM). Mục tiêu của bước này là đảm bảo mẫu được khởi động tự động cùng hệ thống và duy trì khả năng kiểm soát ngay cả sau khi hệ thống khởi động lại.
Mẫu kiểm tra sự tồn tại của một service có tên: Windows EventN
Tên service này được lựa chọn nhằm ngụy trang như một thành phần hệ thống hợp lệ, dễ gây nhầm lẫn với các service liên quan tới Windows Event Log hoặc Windows Event Collector.
Quy trình thiết lập persistence diễn ra theo các nhánh sau:
Trường hợp service chưa tồn tại:
Mã độc tạo một thư mục mới trên hệ thống người dùng với đường dẫn có dạng:
C:\\Users\\<User>\\Videos\\<random_string>@27
Các file thực thi liên quan được sao chép vào thư mục này.
Mẫu sau đó gọi các API như OpenSCManagerA() và CreateServiceA() để tạo service mới, trỏ tới executable vừa được triển khai.
Service được cấu hình chạy tự động khi hệ thống khởi động.
Trường hợp service đã tồn tại:
Mẫu kiểm tra trạng thái và cấu hình của service.
Nếu service chưa được thiết lập để chạy cùng hệ thống, mã độc sẽ cập nhật lại cấu hình thông qua các lời gọi ChangeServiceConfigA/ChangeServiceConfig2A.
Trong trường hợp service tồn tại nhưng không hoạt động, mã độc sẽ khởi động lại service và kết thúc tiến trình hiện tại.
Vô hiệu hoá cơ chế UAC
Backdoor tiếp tục thực hiện một bước quan trọng nhằm đảm bảo các module độc hại sau này có thể chạy mà không hiển thị UAC prompt đối với người dùng.
Mẫu kiểm tra phiên bản hệ điều hành thông qua GetVersionExA() và xác định:
Nếu hệ điều hành có dwMajorVersion >= 6 (tương ứng Windows Vista trở lên), mã độc tiến hành chỉnh sửa các chính sách liên quan tới UAC.
Cụ thể, backdoor thao tác trực tiếp với các khoá registry dưới nhánh:
Cho phép các tiến trình con và module bổ sung được thực thi trong ngữ cảnh quản trị mà không yêu cầu tương tác người dùng
Kết nối C2 và cơ chế điều khiển theo mô-đun
Chỉ sau khi các cơ chế persistence và kiểm soát đặc quyền đã được thiết lập đầy đủ, backdoor mới tiến hành kết nối tới hạ tầng C2 được nhắc ở phần trên.
Sau khi thiết lập kết nối thành công, backdoor khởi tạo một bảng ánh xạ mã lệnh (command dispatch table). Mỗi mã lệnh được liên kết với một handler hoặc module cụ thể, phản ánh kiến trúc plugin-based của loại mã độc này.
Một số module được quan sát trong mẫu phân tích bao gồm (chúng tôi đính kèm danh sách chi tiết ở phụ lục):
Module thao tác file
Module chụp / ẩn màn hình
Module ghi nhận bàn phím
Module thực thi shell
Một số module placeholder hoặc chờ kích hoạt trong các giai đoạn sau
Thiết kế này cho phép kẻ tấn công:
Kích hoạt chức năng theo nhu cầu
Linh hoạt mở rộng khả năng của backdoor mà không cần thay đổi payload chính
Mối liên hệ với các chiến dịch tấn công đã biết
Trong quá trình mở rộng phân tích, chúng tôi tiếp tục đối chiếu các chỉ dấu kỹ thuật của mẫu mã độc với các chiến dịch đã được công bố công khai. Một trong những báo cáo đáng chú ý là phân tích của QiAnXin Threat Intelligence về APT-Q-27 (còn được gọi là GoldenEyeDog), trong đó mô tả chi tiết hoạt động gần đây của nhóm này.
Tương đồng về cách đặt tên và sử dụng hạ tầng C2
Điểm đáng chú ý nhất là cách đặt tên domain C2. Trong chiến dịch chúng tôi phân tích, domain như wk.goldeyeuu.io được sử dụng làm máy chủ điều khiển. Việc sử dụng chuỗi “goldeye” trong tên miền C2 cho thấy sự tương đồng rõ rệt về mặt đặt tên với các chiến dịch được QiAnXin gán cho APT-Q-27, vốn sử dụng tên GoldenEyeDog để mô tả hệ sinh thái mã độc của nhóm.
Tương đồng về hạ tầng C&C
Danh sách máy chủ C&C được giải mã từ backdoor cho thấy sự trùng lặp trực tiếp của một số địa chỉ IP, đáng chú ý như 192.252.182.53 và 27.124.41.140, và cổng: 15628 vốn đã xuất hiện trong các phân tích công khai trước đó. Ngoài ra, phần lớn C&C đều được triển khai tại các khu vực tương tự (Hồng Kông, Nhật Bản, Hoa Kỳ), phản ánh một mô hình hạ tầng phân tán quen thuộc của các chiến dịch APT nhằm duy trì khả năng hoạt động lâu dài.
Tương đồng về cơ chế thực thi payload
Một điểm đáng chú ý khác là cách sử dụng file log làm container payload. Payload chính không được lưu trữ trực tiếp dưới dạng PE mà được đọc từ file log, giải mã và thực thi hoàn toàn trong bộ nhớ. Cách tiếp cận này trùng khớp với kỹ thuật được mô tả trong chiến dịch của APT-Q-27, và là dấu hiệu cho thấy sự tương đồng rõ rệt về tư duy thiết kế backdoor.
Kiến trúc backdoor
Backdoor sử dụng kiến trúc plugin-based, trong đó các lệnh từ C&C được ánh xạ tới các module chức năng độc lập (file, screen, keylogging, shell). Kiến trúc này phù hợp với mô hình backdoor đã được ghi nhận trong các chiến dịch APT trước đây, thay vì các mã độc cơ hội thông thường.
Mặc dù chưa đủ cơ sở để khẳng định cùng một chiến dịch hoặc cùng một nhóm tấn công, các điểm tương đồng về hạ tầng C&C, cơ chế tải payload và kiến trúc backdoor cho thấy mẫu mã độc này nhiều khả năng thuộc cùng một hệ sinh thái công cụ, hoặc là một biến thể/phái sinh được phát triển dựa trên nền tảng đã từng được sử dụng trong các chiến dịch trước đó.
Khuyến nghị cho doanh nghiệp
Từ các phát hiện trong chiến dịch này, CyStack khuyến nghị các tổ chức cần ưu tiên những biện pháp phòng thủ sau:
Tăng cường Threat Hunting chủ động trên endpoint, tập trung vào các hành vi khó phát hiện bằng chữ ký như DLL sideloading, thực thi payload trong bộ nhớ, tiến trình hợp lệ có hành vi bất thường và các Windows service không rõ nguồn gốc. Việc săn tìm mối đe dọa định kỳ giúp phát hiện các chiến dịch đã vượt qua lớp phòng thủ ban đầu nhưng chưa gây ra sự cố rõ ràng.
Chuẩn bị sẵn sàng năng lực Incident Response, cho phép khoanh vùng nhanh các máy trạm bị xâm nhập, thu thập artefact phục vụ phân tích và cô lập hệ thống trước khi mã độc thiết lập kết nối ổn định với hạ tầng C&C hoặc lan sang các tài nguyên quan trọng hơn.
Áp dụng giải pháp bảo vệ endpoint dựa trên hành vi, không chỉ dựa vào chữ ký hoặc danh tiếng file. Các giải pháp như CyStack Endpoint giúp giám sát tiến trình, phát hiện các cơ chế persistence bất thường và can thiệp kịp thời ngay cả với các mẫu mã độc chưa từng được biết đến.
Khai thác Threat Intelligence có ngữ cảnh, bao gồm thông tin về hạ tầng C&C, TTP và mối liên hệ giữa các chiến dịch đã biết, nhằm nâng cao khả năng phát hiện sớm và đánh giá đúng mức độ rủi ro thay vì phản ứng bị động theo từng IOC rời rạc.
Đánh giá lại các bề mặt tấn công phi truyền thống, đặc biệt là các kênh hỗ trợ khách hàng, hệ thống ticketing và các bộ phận thường xuyên tương tác với bên ngoài, nơi các kỹ thuật social engineering tinh vi ngày càng được khai thác.
Phụ lục
Phụ lục A. Dấu vết tấn công hệ thống (IOC) – Máy chủ điều khiển