Mustang Panda và một số biến thể của mã độc PlugX được sử dụng phổ biến trong thời gian gần đây - Phần I

Mustang Panda và một số biến thể của mã độc PlugX được sử dụng phổ biến trong thời gian gần đây - Phần I

Tổng quan

Mustang Panda là một nhóm tấn công được CrowdStrike Falcon Intelligence phát hiện vào 2017. Kể từ khi xuất hiện, Mustang Panda đã thực hiện nhiều chiến dịch tấn công vào các doanh nghiệp và tổ chức tại một số quốc gia như Mỹ, Đức , Mông Cổ, Myanmar, Pakistan, Vatican và các quốc gia khác trong khu vực Đông Nam Á, bao gồm cả Việt Nam.

Phương pháp tấn công chính của Mustang Panda là sử dụng kỹ thuật DLL-Sideloading, lợi dụng một tệp thực thi sạch để tải một tệp dll độc hại (loader); trong đó, tệp dll có nhiệm vụ giải mã tệp .dat để thực hiện bước tấn công tiếp theo.

Tuyên bố miễn trừ trách nhiệm

Thông tin do hệ thống Viettel Threat Intelligence của Công ty An ninh mạng Viettel cung cấp được thu thập từ các nguồn khác nhau trên Internet, không nhằm mục đích tấn công hoặc gây tổn hại cho bất kỳ tổ chức hoặc cá nhân nào.

Phân tích chi tiết

Mẫu XOR 1

Phân tích Loader

Mã độc sử dụng kỹ thuật DLL-SideLoading qua tệp explorer.exe có chứng chỉ (certificate) hợp lệ của Adobe nhằm qua mặt các phần mềm diệt vi-rút.

Hình 1: Tập tin có chứa chứng chỉ hợp lệ được mã độc sử dụng

Kiểm tra tệp explorer.exe trên Virustotal, ta có thể thấy tên gốc của chương trình là Adobe CEF Helper.exe.

Hình 2: Thông tin về tệp explorer.exe trên Virustotal

Khi được thực thi, tệp này sẽ tải tệp hex.dll và gọi tới hàm CEFProcessForkHandlerEx.

Hàm trên sẽ tiến hành đọc tệp adobeupdate.dat, sau đó trích xuất key và payload đã mã hóa và giải mã. Cấu trúc của tệp adobeupdate.dat bao gồm 2 phần. Tính từ byte null đầu tiên, các byte phía trước là key và phía sau là payload đã mã hóa.

Hình 3: Mã độc tiến hành đọc tệp adobeupdate.dat

Tiếp theo, mã độc sẽ thực hiện XOR các byte tiếp theo với key vừa trích xuất được để giải mã.

Hình 4: Hàm giải mã payload
Hình 5: Payload trước và sau khi giải mã

Sau khi tự giải mã, mã độc sẽ sử dụng hàm VirtualProtect để đổi vùng nhớ chứa payload thành PAGE_EXECUTE_READWRITE và thực thi như một shellcode.

Hình 6: Hàm thực thi payload

Mặc dù được thực thi như một shellcode nhưng thực tế payload lại là 1 tệp PE có chứa 1 đoạn shellcode nhỏ nằm ở địa chỉ số 0. Đoạn payload này sẽ tiến hành gọi tới hàm export có tên “Loader”.

Hình 7: Shellcode

Hàm Loader sẽ thực hiện nạp lại tệp vừa giải mã và thực thi payload.

Phân tích PlugX

Giải mã cấu hình mã độc

Cấu hình được giải mã bằng cách sau. Mã độc sẽ tiến hành kiểm tra tại phần đầu của cấu hình, nếu không được bắt đầu bằng XXXXXXXX, mã độc sẽ tiến hành giải mã bằng cách XOR với key 123456789.

Hình 8: Hàm giải mã cấu hình

Cấu hình sau khi giải mã có dạng như sau:

Hình 9: Nội dung của cấu hình sau khi giải mã

Các luồng thực thi

Sau khi giải mã cấu hình, mã độc sẽ kiểm tra tham số của chương trình và thực thi theo các cách như sau:

Điều kiện Cách thực thi
Không có tham số Mã độc sẽ sao chép mã độc vào thư mục được cấu hình trong tệp cấu hình, tạo autorun với tham số ngẫu nhiên và thực thi lại mã độc với một tham số ngẫu nhiên vừa tạo.
1 tham số - Lây nhiễm vào USB.
- Đánh cắp dữ liệu và lưu vào USB.
- Kết nối tới máy chủ điều khiển và thực thi lệnh.
Nếu tham số là -net, mã độc sẽ thực hiện thêm:
- Đặt registry key "System\CurrentControlSet\Control\Network\Version" thành "1"
- Tạo autorun như trên
2 tham số - Thực thi tệp được đặt trong tham số đầu tiên
- Đóng Windows Explorer
- Tạo autorun như trên

Bảng 1: Các cách thực thi của mã độc sau khi giải mã cấu hình

Hình 10: Các luồng thực thi của mã độc

Thiết lập cơ chế giữ quyền truy cập

Mã độc sẽ tiến hành lấy thông tin về tên thư mục từ cấu hình được giải mã và tạo thư mục đó trong %alluserprofiles% hoặc %userprofile%.

Hình 11: Cấu hình đường dẫn cho mã độc

Sau đó, mã độc tiến hành sao chép tệp vào thư mục vừa tạo và tạo một số ngẫu nhiên làm tham số cho việc tạo registry.

Hình 12: Mã độc tự sao chép vào đường dẫn mới

Mã độc tạo cơ chế giữ quyền truy cập tại:

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

và thực thi lại mã độc với tham số vừa tạo.

Hình 13: Tạo registry key dùng để persistent

Lây nhiễm USB và ăn cắp các thông tin nhạy cảm

Đầu tiên, mã độc sẽ tiến hành kiểm tra xem các tiến trình AdobeHelper.exe, AdobeUpdates.exe và AdobeUpdate.exe có đang chạy hay không. Nếu các tiến trình này đang chạy, mã độc sẽ tiến hành xoá tiến trình, autorun và toàn bộ thư mục chứa mã độc.

Hình 14: Hàm xoá các phiên bản cũ của mã độc

Mỗi khi có USB được cắm vào máy tính, mã độc sẽ tạo hai luồng để thực hiện việc đánh cắp thông tin nhạy cảm và lây nhiễm bằng cách tự sao chép vào USB.

Hình 15: Hàm tạo luồng phục vụ việc lây nhiễm và ăn cắp thông tin

Tại luồng thực hiện việc lây nhiễm, mã độc sẽ tiến hành tắt tính năng hiện tệp tin ẩn của windows bằng cách đặt giá trị của 2 registry key dưới thành 0.

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden
Hình 16: Hàm tắt hiển thị tệp tin ẩn

Sau đó, mã độc tạo thư mục ẩn để chứa dữ liệu đánh cắp, với tên có chứa kí tự khoảng trắng đặc biệt có mã ascii là 0xA0.

Hình 17: Hàm tạo thư mục ẩn

Ngoài ra, mã độc tạo tệp desktop.ini nằm trong thư mục trên với nội dung như bên dưới để đổi icon của thư mục thành icon USB:

[.ShellClassInfo]
IconResource=%systemroot%\system32\SHELL32.dll,7

Mã độc cũng tự sao chép vào thư mục <usb vol>\RECYCLER.BIN,

Hình 18: Mã độc tự sao chép vào USB

đồng thời tạo tệp desktop.ini với nội dung:

[.ShellClassInfo]
CLSID={645FF040-5081-101B-9F08-00AA002F954E}

Sau khi khởi tạo xong, mã độc sẽ xoá các tệp .lnk (Remove Disk.lnk, Removable Disk.lnk) nếu các tệp này đã tồn tại trước đó:

Hình 19: Mã độc xoá các tệp lnk cũ

Tiếp theo, mã độc sẽ chuyển toàn bộ dữ liệu trong USB của người dùng vào trong thư mục \xA0.

Hình 20: Hàm chuyển dữ liệu trong USB vào thư mục ẩn

Cuối cùng, trong bước lây nhiễm, mã độc sẽ tạo một tệp .lnk có tên trùng với tên của USB và sử dụng tệp này để mở thư mục \xA0 chứa dữ liệu người dùng trong USB.

Hình 21: Mã độc tạo tệp lnk có tên trùng với tên USB

Sau khi lây nhiễm, mã độc sẽ kiểm tra kết nối tới Internet bằng hàm InternetCheckConnectionW. Nếu có kết nối, mã độc sẽ gửi dữ liệu đã đánh cắp đến máy chủ điều khiển. Nếu không có kết nối, mã độc sẽ đánh cắp các dữ liệu nhạy cảm vào USB.

Hình 22: Hàm đánh cắp thông tin

Các tệp được đánh cắp sẽ được lưu vào thư mục %appdata%\Intel\.

Hình 23: Mã độc lưu tệp vào appdata

Nếu không có Internet, mã độc sẽ lấy cắp thông tin hệ thống và dữ liệu nhạy cảm ở máy tính nạn nhân. Mã độc sẽ tạo một tệp BAT tại vị trí <usb vol>\RECYCLE.BIN\<machine id>\tmp.bat với nội dung như sau:

cmd.exe /q /c systeminfo > <usb vol>\RECYCLE.BIN\<machine id>\c3lzLmluZm8
cmd.exe /q /c ipconfig /all >> <usb vol>\RECYCLE.BIN\<machine id>\c3lzLmluZm8
cmd.exe /q /c netstat -ano >> <usb vol>\RECYCLE.BIN\<machine id>\c3lzLmluZm8
cmd.exe /q /c arp -a >> <usb vol>\RECYCLE.BIN\<machine id>\c3lzLmluZm8
cmd.exe /q /c tasklist /v >> <usb vol>\RECYCLE.BIN\<machine id>\c3lzLmluZm8
cmd.exe /q /c del %0 >> <usb vol>\RECYCLE.BIN\<machine id>\c3lzLmluZm8
Hình 24: Hàm đánh cắp thông tin của hệ thống

Sau khi đánh cắp thông tin hệ thống, mã độc sẽ đánh cắp các tệp tài liệu .doc, .docx, .ppt, .pptx, .xls, .xlxs và .pdf.

Hình 25: Mã độc kiểm tra phần mở rộng của các tệp tin

Các tệp bị đánh cắp sẽ được mã hoá đơn giản với XOR, sau đó được lưu vào <usb vol>\RECYCLER.BIN\<machine id>.

Hình 26: Mã hoá tệp bằng thuật toán XOR
Hình 27: Lưu tệp vào USB

Kết nối và giao tiếp với máy chủ điều khiển

Sau khi lây nhiễm vào USB, mã độc tạo các TLS để thực thi các luồng mã độc. Các giá trị được sử dụng ở đây bao gồm:

TLS Chức năng
CXOnline::OlStartProc Thực thi thread CXOnline::OlStartProcPipe và khởi tạo giao tiếp với máy chủ điều khiển
CXOnline::OlStartProcPipe Khởi tạo pipe, phân tích và thực hiện các lệnh từ máy chủ điều khiển
CXSoHttp::SoWorkProc Gửi yêu cầu tới máy chủ điều khiển, với mỗi kết nối thực hiện 03 lần
CXFuncShell::ShellT1 Thực thi remote shell
CXFuncShell::ShellT2 Thực thi remote shell

Khi kết nối thành công tới máy chủ điều khiển, mã độc sẽ thực hiện hai nhóm lệnh khác nhau (0x1001 và 0x1002) phụ thuộc vào quá trình giao tiếp.

Các lệnh tương ứng với 0x1001 như sau:

Lệnh Chức năng
0x1001 Lấy thông tin của nạn nhân, bao gồm: thông tin bộ nhớ, tên máy, tên người dùng, CPU và kích thước màn hình
0x1002 Tạo luồng liên quan tới giao tiếp qua Pipe (CXOnline::OlStartProcPipe)
0x1003 Gửi dữ liệu về máy chủ điều khiển
0x1005 Thoát tiến trình
Hình 28: Các lệnh tương ứng với nhóm 0x1001

Các lệnh tương ứng với nhóm lệnh 0x1002 như sau:

Lệnh Chức năng
0x3000 Lấy thông tin các ổ đĩa
0x3001 Tìm tệp
0x3004 Đọc tệp
0x3007 Ghi tệp
0x300A Tạo thư mục
0x300B Kiểm tra xem tệp có tồn tại hay không
0x300C Tạo tiến trình trong desktop ẩn
0x300D Quản lý tệp
0x300E Mở rộng biến môi trường
0x300F Lấy thư mục chứa PlugX
0x7002 Tạo remote shell
Hình 29: Các lệnh tương ứng với nhóm 0x1002

Quá trình giao tiếp với máy chủ điều khiển được mã độc mã hoá/giải mã bằng cách sử dụng XOR và nén với thuật toán LZ.

Hình 30: Hàm mã hoá khi giao tiếp với máy chủ điều khiển

Ghi log

Mã độc có chức năng ghi lại log nếu trong quá trình thực thi xảy ra exception. Mã độc sử dụng thread CXSalvation::SalExceptionHandler để ghi log vào tệp SS.LOG với các thông tin như sau:

  • EName: %s: tên exception
  • EAddr: 0x%p: địa chỉ gây ra exception
  • ECode: 0x%p: mã của exception
Hình 31: Hàm ghi log của mã độc