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 II

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 II

Mẫu XOR 2

Một số kỹ thuật mới

Control flow flattening

Biến thể mới sử dụng kỹ thuật control flow flattening nhằm gây khó khăn trong việc phân tích mã độc. Kỹ thuật này biến các câu lệnh điều kiện, các vòng lặp hay các khối chương trình trở thành một vòng lặp vô hạn cùng một lệnh switch được sử dụng để kiểm soát luồng thực thi của chương trình.

Dưới đây là hình minh hoạ về luồng thực thi của hàm DecryptConfig khi sử dụng và không sử dụng kỹ thuật trên.

Hình 32: Trước khi sử dụng kỹ thuật control flow flattening
Hình 33: Sau khi Sử dụng kỹ thuật control flow flattening

Dynamic Resolve API

Biến thể mới của PlugX sử dụng thuật toán fnv-1a để hash và lấy địa chỉ các hàm thay vì chỉ sử dụng GetProcAddress và LoadLibraryA như các biến thể cũ được biết đến trước đây.

Hình 34: PlugX cũ
Hình 35: PlugX mới

Anti-analysis

Tại các hàm Export của mã độc, mã độc chèn một lượng lớn các mã rác không có chức năng, khiến cho luồng thực thi khó nhận diện.

Hình 36: Luồng thực thi của hàm Export

String obfuscation

Đối với biến thể cũ của PlugX, mã độc chỉ sử dụng stack string để chống lại các công cụ như strings.exe. Nhưng với biến thể mới này, mã độc sử dụng xen kẽ giữa stack string bị mã hoá XOR và stack string không bị mã hoá.

Hình 37: Stack string được giải mã bằng XOR

Một số điểm khác so với các mẫu đã từng gặp

Giải mã cấu hình

Ở biến thể mới của MustangPanda, thay vì kiểm tra cấu hình với XXXXXXXX, mã độc sẽ tiến hành kiểm tra với ######## mã độc sẽ tiến hành giải mã cấu hình. Cấu hình vẫn được giải mã bằng cách XOR với key 123456789.

Hình 38: Luồng giải mã cấu hình

Cấu trúc của cấu hình có dạng như sau:

Hình 39: Thông tin cấu hình của biến thể Xor 2

Sau khi giải mã, ta được một số thông tin sau:

Hình 40: Cấu hình của biến thể XOR 2 sau khi giải mã

Có thể thấy rằng, ở biến thể mới của Mustang Panda, có thêm 1 trường mới là Campaign ID ngoài các cấu hình quen thuộc. Trường này được sử dụng để định danh chiến dịch tấn công và được gửi tới máy chủ điều khiển khi lây nhiễm thành công.

Hình 41: Mã độc lấy thông tin hệ thống bao gồm Campaign ID
Hình 42: Mã độc gửi thông tin hệ thống của nạn nhân tới máy chủ điều khiển

UAC Bypass

Biến thể mới cũng sử dụng một số kỹ thuật bypass UAC như UAC Bypass – Fodhelper và UAC Bypass – eventvwr. Các kỹ thuật này được mô tả chi tiết tại:

Hình 43: UAC Bypass – Fodhelper
Hình 44: UAC Bypass - Eventvwr

Tạo schedule task để bật mạng

Mã độc tiến hành tạo schedule task để bật interface. Command có dạng như sau:

cmd.exe /c schtasks.exe /create /sc minute /mo 30 /tn <task name>
/tr "netsh interface set interface ""<interface name>"" enabled"
/ru SYSTEM /F&schtasks.exe /run /tn <task name>

Trường Interface name sẽ bao gồm một trong những thông tin sau:

  • Wireless Network Connection
  • Wireless Network Connection 1
  • Wireless Network Connection 2
  • Wireless Network Connection 3
  • Wi-Fi
  • Wi-Fi 1
  • Wi-Fi 2
  • Wi-Fi 3
  • Ethernet0
  • Ethernet
  • Ethernet 1
  • Ethernet 2
  • Ethernet 3
  • Local Area Connection
  • Local Area Connection 1
  • Local Area Connection 2
  • Local Area Connection
Hình 45: Tạo schedule task

Giao tiếp với máy chủ điều khiển

Ở biến thể này, mã độc sử dụng RtlCompressBuffer với thuật toán LZ để nén dữ liệu. Sau đó, mã độc sẽ sử dụng RC4 để mã hoá dữ liệu vừa nén (ở các biến thể cũ, mã độc sử dụng XOR) và sử dụng khoá được hardcode có giá trị là sV!e@T#L$PH%. Dữ liệu vừa được mã hoá sẽ được gửi tới server, quá trình ngược lại cũng tương tự.

Hình 46: Mã độc nén dữ liệu với LZ
Hình 47: Mã độc mã hóa dữ liệu bằng thuật toán RC4