APT Mustang Panda Sample 1
Xin chào mọi người :D nay rảnh rỗi thì chắc ngồi viết tiếp blog cá nhân cái thú vui giết thời gian cũng không tệ
Nay có 1 người anh em vứt cho tôi 1 mẫu Sample của nhóm APT Mustang panda . Mẫu này là 1 người quen của người anh em đó bị dính shit hồi đợt dịch Covid mà đợt đó team này cũng hoạt động mạnh :D rảnh rỗi thì phân tích mẫu này thôi

Ở đây chúng ta có thể thấy nó có 3 file. 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.
Trong bài viết này không phải 1 blog dạng report phân tích mẫu mà sẽ viết theo kiểu flex luồng thực thi của mẫu này . Ném file AAM Updates.exe vào IDA để phân tích

Khi được thực thi, tệp AAM Updates.exe sẽ tải tệp hex.dll và gọi tới hàm CEFProcessForkHandlerEx của hex.dll . Load Hex.dll vào IDA và đi tới hàm
CEFProcessForkHandlerEx để xem có gì hay ho :v

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.Xem file trong Hexview chúng ta sẽ thấy key ở đây là RuFcYzQNPJ và các byte đằng sau sẽ được encrypt

Nó sẽ dùng 1 hàm để decrypt file dat . Sau đó nó sẽ dùng VirtualProtect để đổi vùng nhớ chứa payload thành protect PAGE_EXECUTE_READWRITE và thực thi như một shellcode.

Nó sẽ xor các byte với key vừa được truyền vào để giải mã file

Ban đầu khi resource file đó vào IDA file đó thế này

Và sau khi decrypt file thì chúng ta sẽ trông nó thành thế này

Chúng ta có thể dễ dàng thấy 2 byte đầu là MZ là ký tự bắt đầu của tệp PE.
Hàm loader sẽ nạp lại tệp lần nữa để thực thi payload đó
Ở đây để dễ dàng phân tích tôi sẽ dump file đó ra . Cách để dump file thì có rất là nhiều cách để dump . Bạn có thể dump toàn bộ vùng nhớ này bằng OllyDumpEx plugin . Có thể download plugins này ở đây
https://low-priority.appspot.com/ollydumpex/
Có 1 cách khác là sử dụng Process Hacker, dump file từ memory (nhớ lưu thông tin địa chỉ base address . Sau đó, dùng công cụ pe_unmapper của chính hasherezade để fix file đã dump
Sau khi được file đã dump tôi ném nó vào Delect It Easy để xem file đó thuộc loại extension nào

Có vẻ như là 1 tệp Dll32 . Tôi ném nó vào IDA để tiếp tục phân tích

Ở đây tôi sẽ phân tích theo luồng thực thi của PlugX . đi vào Function ở address 0x6ED71B66 .


Ở hàm Getconfig nó sẽ giải mã cấu hình của mã độc . Nó sẽ check header của cấu hình xem có bắt đầu bằng "XXXXXXXX" nếu không nó sẽ Xor với key là 123456789
Sau khi chạy hàm DecryptConfig chúng ta sẽ được cấu hình như sau

Chúng ta có thể thấy C&C config của nó là 103.200.97.189,185.239.226.17
Ở đây dựa vào số paramter truyền vào thì nó sẽ thực thi khác nhau


Case1 :
Nếu không có parameter thì nó 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%

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

Nó sẽ persistant bằng 2 key là
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
Cuối cùng nó sẽ tạo 1 Process và thực thi lại mẫu mã độc với tham số rand được khởi tạo

Case2:
Nếu như nó có tham số truyền vào nó sẽ đi vào case2

Đầu tiên nó sẽ khởi tạo 1 Mutex . Sau đó nó sẽ so sánh cái parameter truyền vào có là option "-net" . Nếu giống thì nó sẽ thực hiện việc SetNetWork và giống như case1 là khởi tạo hàm AutoRuns để persistant .
Đi vào hàm SetNetWorkVersionTo1 chúng ta có thể thấy write 2 key
HKEY_CURRENT_USER/System//CurrentControlSet//Control//Network
HKEY_LOCAL_MACHINE/System//CurrentControlSet//Control//Network

Còn trong trường hợp không giống nó sẽ tiếp tục đi vào hàm Infect_USB . Đầu tiên nó 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.

Các hàm SetPrivilege và UninstallOldVersion để set quyền và xóa đi các phiên bản cũ của các tiến trình


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.

Ở đây nếu giá trị v8 = 1 thì nó sẽ thực hiện việc inject và steal data . Nó có tạo 2 thread cho 2 việc đó . Tại thread inject nó 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

tạo tệp desktop.ini

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 đó:

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.

Nó 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>.

Sau đó nó sẽ lưu tệp vào USB

Khi kết nối thành công tới máy chủ điều khiển C&C, 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.

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
Ngoài ra còn thêm những chức năng phụ nữa nhưng trong blog lần này mình sẽ chỉ nêu những core hoạt động chính của mẫu này :D Bài viết chắc cũng sẽ chỉ đến đây thôi hy vọng mn đọc 1 cái relax . Chúc mn có 1 ngày tốt lành