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.
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.
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.
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ã.
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.
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à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.
Cấu hình sau khi giải mã có dạng như sau:
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
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%.
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.
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.
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.
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.
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
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.
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,
đồ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 đó:
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.
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.
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.
Các tệp được đánh cắp sẽ được lưu vào thư mục %appdata%\Intel\.
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
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.
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>.
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 |
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 |
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.
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