{
	"id": "11986765-e714-4ef6-995f-30a159351d9d",
	"created_at": "2026-04-06T01:32:27.67008Z",
	"updated_at": "2026-04-10T03:21:01.336196Z",
	"deleted_at": null,
	"sha1_hash": "ff45d521e043f6ec359bee1121591d5b6484635a",
	"title": "Phân tích mã độc lợi dụng dịch Covid-19 để phát tán giả mạo “Chỉ thị của thủ tướng Nguyễn Xuân Phúc” - Phần",
	"llm_title": "",
	"authors": "",
	"file_creation_date": "0001-01-01T00:00:00Z",
	"file_modification_date": "0001-01-01T00:00:00Z",
	"file_size": 95689,
	"plain_text": "Phân tích mã độc lợi dụng dịch Covid-19 để phát tán giả mạo “Chỉ thị\r\ncủa thủ tướng Nguyễn Xuân Phúc” - Phần\r\nBy Yến Hứa\r\nPublished: 2020-03-17 · Archived: 2026-04-06 01:24:10 UTC\r\nTable of Contents\r\n1. Mô phỏng hoạt động Windows Loader\r\n2. Các cách thực thi chính\r\n3. Giải mã cấu hình\r\n4. Tạo files và thiết lập persistence key\r\n5. Kết nối và giao tiếp với C2\r\n6. Ghi log\r\nNhư đã đề cập ở phần trước, unsecapp.exe sẽ nạp http_dll.dll, code tại http_dll.dll đọc dữ liệu đã mã hóa\r\ntrong http_dll.dat và tiến hành giải mã payload cuối vào bộ nhớ, sau đó gọi thẳng tới payload này để thực thi. Có thể nói\r\nvới kĩ thuật fileless malware này, payload cuối cùng sẽ không hề để lại dấu vết trên ổ đĩa.\r\nPayload nói trên bản chất là một dll (name: HT.dll), trong quá trình phân tích chúng tôi nhận thấy đây là một biến thể của\r\ndòng PlugX. Trong bài viết này, chúng tôi sẽ mô tả một số hoạt động cơ bản của biến thể này.\r\n1. Mô phỏng hoạt động Windows Loader\r\nCách thức thực thi payload này khá giống kiểu thực thi shellcode. Nó được gọi thẳng tới ImageBase, từ đây sẽ gọi tới hàm\r\nđược export là Loader (0x10001710). \r\nHàm Loader làm nhiệm vụ:\r\nTruy xuất PEB lấy tên các module, tính toán hash tương ứng.\r\nNếu tên module trùng với hash đã tính toán trước, lấy tên các hàm thuộc module đó. Tính toán hash của các hàm.\r\nNếu tên hàm trùng với hash đã tính toán trước, thực hiện lấy ra địa chỉ của hàm.\r\nThực hiện các bước tương tự nhiệm vụ của Windows Loader để nạp chính xác dll và sau đó nhảy thẳng\r\ntới DllEntryPoint.\r\nDanh sách các hash tương ứng với module và tên hàm mà mã độc sử dụng:\r\nHash Module / Function\r\n0x6A4ABC5B kernel32.dll\r\n0x3CFA685D ntdll.dll\r\n0xEC0E4E8E LoadLibraryA\r\n0x7C0DFCAA GetProcAddress\r\n0x91AFCA54 VirtualAlloc\r\nhttps://blog.vincss.net/vi/re012-2-phan-tich-ma-doc-loi-dung-dich-covid-19-de-phat-tan-gia-mao-chi-thi-cua-thu-tuong-nguyen-xuan-phuc-phan-2-2/\r\nPage 1 of 7\n\n0x534C0AB8 NtFlushInstructionCache\r\nHình 2: Nhảy tới DllEntryPoint\r\n2. Các cách thực thi chính\r\nTừ DllEntryPoint sẽ gọi tới chức năng chính của mã độc. Tại đây, thực hiện giải mã cấu hình của mã độc (chứa thông tin\r\nthư mục, C2, ports), sau đó sẽ có hai hướng thực thi chính như sau:\r\nHướng\r\nthực thi\r\nMục đích\r\nKhông có\r\ntham số\r\nTạo thư mục để lưu mã độc, ghi các files vào thư mục đã tạo, thiết lập persistence key\r\ntrong registry để chạy malware với tham số ngẫu nhiên và thực thi lại mã độc với tham số\r\nlà “6”.\r\nCó tham số Tạo mutex, kết nối, giao tiếp với địa chỉ C2 và thực hiện các lệnh.\r\nHình 3: Các hình thức thực thi của mã độc\r\nTrong quá trình phân tích, chúng tôi thấy payload này gọi tới các hàm APIs thông qua các hàm wrapper nhằm mục đích làm\r\nrối. Các hàm wrapper sử dụng kĩ thuật stackstrings để xây dựng tên API, gọi hàm GetProcAddress để lấy địa chỉ thật, sau\r\nđó thực thi hàm chính.\r\n3. Giải mã cấu hình\r\nNhư mô tả ở trên, trước khi thực thi chức năng chính, mã độc sẽ thực hiện giải mã cấu hình liên quan tới tên thư mục dùng\r\nđể lưu các files, địa chỉ C2, port sử dụng (80, 443, 8080, 8000). Hàm giải mã tại 0x1000AD10 thực hiện nhiệm vụ:\r\nCopy toàn bộ vùng dữ liệu đã mã hóa vào bộ nhớ (Nếu có file payload như ở phần trước thì vùng dữ liệu này nằm tại\r\noffset 0x1D000).\r\nSử dụng XOR để thực hiện vòng lặp giải mã toàn bộ dữ liệu có kích thước 0x724 bytes với khóa giải mã là\r\n“123456789”.\r\nHình 4: Giải mã cấu hình của mã độc\r\nHình ảnh trước và sau khi giải mã:\r\nHình 5: Kết quả trước và sau khi giải mã thành công\r\n4. Tạo files và thiết lập persistence key\r\nNhư đã phân tích trong phần trước, ban đầu mã độc tạo các files trong thư mục %LocalAppData%Temp và khởi chạy\r\nfile 3.exe. Ở lần thực thi đầu tiên, do không truyền tham số nên mã độc sẽ thực hiện mã ứng với hướng “không có tham\r\nsố”. Tóm lược nhiệm vụ của hướng này:\r\nhttps://blog.vincss.net/vi/re012-2-phan-tich-ma-doc-loi-dung-dich-covid-19-de-phat-tan-gia-mao-chi-thi-cua-thu-tuong-nguyen-xuan-phuc-phan-2-2/\r\nPage 2 of 7\n\nLấy thông tin tên thư mục từ cấu hình đã giải mã, cấu thành các chuỗi %userprofile%; %allusersprofile%, tạo thư\r\nmục “Microsoft Malware Protectionydy” và xây dựng đường dẫn để lưu files:\r\nHình 6: Cấu thành đường dẫn phục vụ lưu mã độc\r\nLấy thông tin các files đã tạo ở thư mục %LocalAppData%Temp, tạo các files mới ở thư mục đã chỉ định:\r\nHình 7: Tạo files tại thư mục do mã độc chỉ định\r\nCấu thành chuỗi gồm đường dẫn tới %AllUsersProfile%Microsoft Malware Protectionydy unsecapp.exe kèm\r\ntheo một tham số ngẫu nhiên  để lưu vào Registry:\r\nHình 8: Cấu thành đường dẫn tới file thực thi kèm tham số ngẫu nhiên\r\nTạo các registry run key\r\ntại HKLMSoftwareMicrosoftWindowsCurrentVersionRun và HKCUSoftwareMicrosoftWindowsCurrentVersionRu\r\nHình 9: Tạo persistence run key\r\nHình 10: Key tạo thành công tại HKLMSoftwareMicrosoftWindowsCurrentVersionRun\r\nHình 11: Key tạo thành công tại HKCUSoftwareMicrosoftWindowsCurrentVersionRun\r\nCuối cùng, thực thi malware một lần nữa với tham số mặc định là “6”:\r\nHình 12: Thực thi lại mã độc với tham số mặc định\r\nHình 13: Mã độc thực thi với tham số mặc định\r\n5. Kết nối và giao tiếp với C2\r\nBằng cách thực thi lại kèm theo tham số, mã độc sẽ thực hiện lệnh tại hướng “có tham số”. Hướng này tạo mutex, kết nối\r\ntới địa chỉ C2 và thực hiện các lệnh. Mã độc sẽ khởi tạo để sử dụng Winsock thông qua hàm WSAStartup, bật các quyền\r\nliên quan tới “Privilege Escalation”: SeDebugPrivilege, SeTcbPrivilege, SeTcpPrivilege.\r\nMã độc xây dựng các TLS (Thread Local Storage) cho phép nhiều luồng của tiến trình cùng sử dụng chung một giá\r\ntrị index được cấp phát bởi hàm TlsAlloc. Các giá trị TLS mà mã độc sử dụng trong biến thể này bao gồm:\r\nTên Mục đích\r\nCXOnline::OlStartProc Thực thi thread CXOnline::OlStartProcPipeKhởi tạo giao tiếp với C2\r\nCXOnline::OlStartProcPipe Khởi tạo pipe, phân tích và thực hiện các C2 commands.\r\nCXSoHttp::SoWorkProc Gửi yêu cầu tới C2. Mỗi kết nối thực hiện 03 lần.\r\nhttps://blog.vincss.net/vi/re012-2-phan-tich-ma-doc-loi-dung-dich-covid-19-de-phat-tan-gia-mao-chi-thi-cua-thu-tuong-nguyen-xuan-phuc-phan-2-2/\r\nPage 3 of 7\n\nCXFuncShell::ShellT1 Thực hiện shell, liên quan tới ReadFile\r\nCXFuncShell::ShellT2 Thực hiện shell, liên quan tới WriteFile\r\nMã độc kết hợp nhiều cách khác nhau để kết nối tới C2, sử dụng HTTP POST request hoặc thông qua raw TCP. Luồng\r\ncode sử dụng HTTP POST request để khởi tạo kết nối tới C2 như sau:\r\nHình 14: Luồng thực thi sử dụng HTTP POST request\r\nĐể giao tiếp với C2, mã độc xây dựng các thông tin sau trong Request Headers:\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1;\r\nThiết lập “Pragma: no-cache” thông qua việc bật\r\ncờ INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_KEEP_CONNECTION\r\nBổ sung các tham số:\r\n         · x-debug\r\n            · x-request\r\n            · x-content\r\n         · x-storage\r\nURL sử dụng để gửi yêu cầu tới C2 có dạng: /update?wd=%8.8x (%8.8x là 8 số ngẫu nhiên).\r\nMã độc thực hiện gửi tối thiểu 03 request tới C2, nếu không thành công sẽ sử dụng port khác để kết nối. Các port sử dụng\r\ngồm: 80, 443, 8080, 8000.\r\nHình 15: Tối thiểu 03 lần cho mỗi request tới C2\r\nHình 16: Minh họa 03 kết nối với URL ngẫu nhiên thông qua port 80\r\nhttps://blog.vincss.net/vi/re012-2-phan-tich-ma-doc-loi-dung-dich-covid-19-de-phat-tan-gia-mao-chi-thi-cua-thu-tuong-nguyen-xuan-phuc-phan-2-2/\r\nPage 4 of 7\n\nHình 17: Request Headers gửi tới C2 từ máy nạn nhân\r\nTrong trường hợp kết nối thành công tới C2, quá trình tương tác với nạn nhân sẽ được điều khiển bởi C2. Với biến thể mà\r\nchúng tôi phân tích, khi nhận được thông tin từ C2, nó sẽ thực hiện lệnh theo hai nhóm lệnh khác nhau phụ thuộc vào quá\r\ntrình giao tiếp. Các nhóm lệnh có id lần lượt là 0x1001 và 0x1002\r\nHình 18: Các nhóm lệnh sẽ thực hiện nếu giao tiếp thành công với C2\r\nCác lệnh ứng với nhóm lệnh có id 0x1001:\r\nLệnh Mục đích\r\n0x1001\r\nLấy thông tin hệ thống của nạn nhân: thông tin tình trạng sử dụng bộ nhớ; thông tin phiên bản\r\nvề hệ điều hành đang hoạt động; thông tin về tên máy, tên người dùng; thông tin về CPU;\r\nthông tin về kích thước màn hình; tạo CSLID của mã độc (HKLMSoftwareCLASSESms-pu /\r\nHKCUSoftwareCLASSESms-pu)\r\n0x1002 Tạo thread liên quan tới giao tiếp Pipe (CXOnline::OlStartProcPipe)\r\n0x1003 Unknown\r\nhttps://blog.vincss.net/vi/re012-2-phan-tich-ma-doc-loi-dung-dich-covid-19-de-phat-tan-gia-mao-chi-thi-cua-thu-tuong-nguyen-xuan-phuc-phan-2-2/\r\nPage 5 of 7\n\n0x1004 ExitProcess\r\nHình 19: Nhóm lệnh ứng với id 0x1001\r\nCác lệnh ứng với nhóm lệnh có id 0x1002:\r\nLệnh Mục đích\r\n0x7002\r\nTạo pipe name, khởi chạy cmd.exe dưới pipe name, thực hiện remote shell với các\r\nthread CXFuncShell::ShellT1 \u0026 CXFuncShell::ShellT2\r\n0x3000 Lấy thông tin ổ đĩa, dung lượng.\r\n0x3001 Tìm kiếm file.\r\n0x3004 Mở file, lấy thông tin ngày tháng, kích thước và đọc nội dung file.\r\n0x3007 Ghi file.\r\n0x300A Tạo thư mục.\r\n0x300B Kiểm tra tồn tại file.\r\n0x300C Khởi chạy tiến trình mới dưới một Desktop ẩn.\r\n0x300D Gọi hàm SHFileOperationW nhằm thực hiện copy, move, rename, hoặc delete một file.\r\n0x300E Mở rộng biến môi trường và thay thế bằng các giá trị mà kẻ tấn công mong muốn.\r\n0x300F Lấy thư mục chứa mã độc.\r\nHình 20: Nhóm lệnh ứng với id 0x1002\r\nQuá trình thực hiện các nhóm lệnh nói trên, mã độc sẽ trao đổi nội dung thông qua việc mã hóa/giải mã (sử dụng XOR) và\r\nnén/giải nén dữ liệu (sử dụng thuật toán nén LZ):\r\nHình 21: Nhóm lệnh sử dụng mã hóa/giải mã trong quá trình giao tiếp\r\nHình 22: Nhóm lệnh sử dụng mã hóa/giải mã trong quá trình giao tiếp\r\nThuật toán mã hóa/giải mã dữ liệu sử dụng ở biến thế này để giao tiếp giữa nạn nhân và C2 là XOR, kèm theo một giá trị cố\r\nđịnh là ‘6666’ (0x36363636):\r\nHình 23: Thuật toán XOR sử dụng để mã hóa/giải mã\r\n6. Ghi log\r\nTrong quá trình thực hiện, nếu có exception xảy ra, mã độc sẽ sử dụng thread CXSalvation::SalExceptionHandler để ghi\r\nlog vào file có tên là SS.log với các thông tin cơ bản gồm:\r\nhttps://blog.vincss.net/vi/re012-2-phan-tich-ma-doc-loi-dung-dich-covid-19-de-phat-tan-gia-mao-chi-thi-cua-thu-tuong-nguyen-xuan-phuc-phan-2-2/\r\nPage 6 of 7\n\n“EName: %s”: tên của exception\r\n“EAddr: 0x%p”: địa chỉ gây ra exception\r\n“ECode: 0x%p”: mã của exception\r\nĐoạn code được mã độc sử dụng để thực hiện ghi log như sau:\r\nHình 24: Mã độc ghi log vào file SS.log\r\nBài phân tích xin được dừng lại tại đây, qua đây có thể thấy đây là một dòng mã độc phức tạp với nhiều chức năng. Mã độc\r\nthông qua nhiều bước để có thể khởi chạy được payload cuối cùng, đồng thời dữ liệu trao đổi với C2 đều được nén và mã\r\nhóa, giúp cho mã độc có thể vượt qua được các giải pháp phòng vệ một cách khá hiệu quả.\r\n———————\r\nĐể tiện theo dõi, chúng tôi cung cấp bài phân tích đầy đủ dưới dạng PDF:\r\nFile Name: CSS-RD-ADV-200319-012_Phân tích mã độc lợi dụng dịch Covid-19 để phát tán giả mạo “Chỉ thị của thủ\r\ntướng Nguyễn Xuân Phúc” v1.0 Final\r\nFile Hash (SHA-256): 3b0af20f01e2a543cdd43e47e57553bd42d6103e670de2ef75fe5383a2cccda6\r\nhttps://drive.google.com/file/d/1OpPiT6ieub3_q0sLIxGt8iI85tInqjoU/view\r\nR\u0026D Center – VinCSS (a member of Vingroup)\r\nSource: https://blog.vincss.net/vi/re012-2-phan-tich-ma-doc-loi-dung-dich-covid-19-de-phat-tan-gia-mao-chi-thi-cua-thu-tuong-nguyen-xuan-phuc-phan-2-\r\n2/\r\nhttps://blog.vincss.net/vi/re012-2-phan-tich-ma-doc-loi-dung-dich-covid-19-de-phat-tan-gia-mao-chi-thi-cua-thu-tuong-nguyen-xuan-phuc-phan-2-2/\r\nPage 7 of 7",
	"extraction_quality": 1,
	"language": "VI",
	"sources": [
		"Malpedia"
	],
	"references": [
		"https://blog.vincss.net/vi/re012-2-phan-tich-ma-doc-loi-dung-dich-covid-19-de-phat-tan-gia-mao-chi-thi-cua-thu-tuong-nguyen-xuan-phuc-phan-2-2/"
	],
	"report_names": [
		"re012-2-phan-tich-ma-doc-loi-dung-dich-covid-19-de-phat-tan-gia-mao-chi-thi-cua-thu-tuong-nguyen-xuan-phuc-phan-2-2"
	],
	"threat_actors": [],
	"ts_created_at": 1775439147,
	"ts_updated_at": 1775791261,
	"ts_creation_date": 0,
	"ts_modification_date": 0,
	"files": {
		"pdf": "https://archive.orkl.eu/ff45d521e043f6ec359bee1121591d5b6484635a.pdf",
		"text": "https://archive.orkl.eu/ff45d521e043f6ec359bee1121591d5b6484635a.txt",
		"img": "https://archive.orkl.eu/ff45d521e043f6ec359bee1121591d5b6484635a.jpg"
	}
}