Bên trong mẫu mã độc tấn công youtuber gần đây có gì?

Gần đây, một số youtuber nổi tiếng liên tục bị hack kênh bằng mã độc thông qua phishing. Mã độc có thể chạy trên máy nạn nhân mà không gặp “trở ngại” nào nên mình tiến hành phân tích để nghiên cứu sâu hơn về mẫu mã độc này.

File name: Black Myth Wukong.rar

SHA256: f2964617ae3b6f60aa73ec64e273010bc4a60c63d3152dcfeef26267efae8512

Tiến hành giải nén Black Myth Wukong.rar thu được nhiều tệp tin và thư mục khác nhau.

Mình kiểm tra lần lượt từng thư mục và các tệp tin trong đó chỉ thấy tập tin đáng ngờ là “Black Myth Wukong 64-bit.exe” (sha256:f9c032c6b54136958abdbc9c50be2f5b35b58b0e6c6a2449337cd025f0323d5e) có kích thước khá lớn, hơn 600MB. Tuy nhiên, đa phần kích thước của nó được chèn thêm nhiều bytes 0x00 nhằm mục đích tránh bị phát hiện bởi các phần mềm antivirus.

Như 1 thói quen, mình thường kiểm tra strings trước khi phân tích sâu hơn thì phát hiện mã độc này được viết bằng python 3.12 và được compile từ .py -> .exe.

Mình sử dụng pyinstxtractor và pydyc để decompile exe -> py thu được file BSR.py:

File này thực hiện thay thế ‘TTT’ thành 0 trong chuỗi Data và chuyển chúng từ dạng nhị phân về ascii để thực thi script. Sau khi thay thế, ta thu được 1 đoạn python script mới:

Script tạo thread và thực thi một tập tin exe được mã hóa base64 (có mã hash sha256  – a5798e0229fe027c248cb9d8a2ec0c1b790e6f9e79f9a6f397acf9e2f0394d4a). File exe này đóng vai trò loader chịu trách nhiệm giải mã nhiều bước và thực thi shellcode, shellcode thực thi giải mã thực thi PE file khác. PE file này có header XS thay vì MZ như ta thường thấy, đặc biệt nhiều phần thông tin khác như section bị bỏ trống.

Đến đây, mình sử dụng tính năng “take memory snapshot” trong IDA pro để lưu lại những segment chứa PE này để phân tích.

Kiểm tra sơ bộ, mình thấy mã độc có nhiều string bị mã hóa, và sử dụng kỹ thuật hashAPI nên mình đã viết idascript để tự động giải mã string và sử dụng plugin shellcode_hash để xác định API được mã độc sử dụng.

Mã hóa string

  • Dữ liệu string sau khi mã hóa bao gồm 16 bytes đầu dùng để tạo khóa giải mã, dữ liệu còn lại string thực sự sau khi mã hóa

  • Key dùng để giải mã string được tạo từ 16 bytes init key bằng các toán tử logic

  • Cuối cùng xor từng byte của key và enc_str.

Sau khi chạy script để giải mã string. Ta thấy một số string có vẻ liên quan đến các payload khác của mã độc như proto.x86, netclient.x86, early.x64, early.x86, ngoài ra còn có user agent và một số API hữu ích khác.

Kỹ thuật hash API khá đơn giản:

Config được mã hóa dưới dạng base64 custom alphabet:

Config mã độc:

Tương tự strings, 16 bytes đầu sau khi decode base64 sẽ được dùng để genkey và xor với phần dữ liệu còn lại:

Sau giải mã ta thấy url https://94.156.8.129/68c8ee7d3c216cd1fa3c/vwfg50p7.3snom

Tại điểm phân tích, mình thử request đến url nhưng nó đã bị hacker off:

Quay trở lại phân tích từ entry của PE file này. Ban đầu, mã độc kiểm tra sự tồn tại registry key HKCU\software\Sibcode\sn có tồn tại hay không. Nếu key không tồn tại, mã độc sẽ tạo và ghi thời gian hệ thống hiện tại vào sn key name. Điều này có thể để đánh dấu máy đã bị nhiễm mã độc trước đó hay chưa.

Sau đó, mã độc kiểm tra máy nạn nhân có cài các phần mềm antivirus như Avast, AVG, 360 total security bằng cách tìm kiếm objects của những antivirus.

Cơ bản, mã độc có 2 luồng thực thi chính:

Dựa vào trường flag1 của config, mã độc thực thi hàm xx5DFD() trước.

Phân tích hàm xx5DFD()

Tại luồng này, malware thực hiện decrypt 1 một đoạn payload, sau đó thực hiện inject shellcode vào 1 tiến trình khác.

Đầu tiên, mã độc decrypt payload có tên stage.x86 bằng cách tính hash của “stage.x86” tương tự thuật toán hashAPI, dựa vào hash này mã độc tìm đến được vùng nhớ chứa payload và key giải mã, sau đó giải mã bằng thuật toán xor key và 0xB4.

Tiếp theo, mã độc copy phần payload đc giải mã và tính hash của một số API và lưu vào một vùng heap được cấp phát.

Sau đó, mã độc tiến hành patch file thực thi ban đầu bằng cách copy payload stage.x86 được decrypt vào đó. Ngoài payload, một số thông tin như đường dẫn của file đang chạy, độ dài của đường dẫn cũng được copy nhằm sửa lại luồng thực thi của mã độc để mã độc luôn gọi xx3E3D() khi thực thi.

Sau khi patch luồng thực thi, malware kiểm tra process là một Wow64Process rồi phân 2 nhánh thực thi, gọi 2 hàm với tham số gần như giống nhau. Với hàm xx6CCE() mã độc sử dụng kỹ thuật heaven gate để thực thi payload early.x64.

2 hàm này có mục dùng để inject code vào 1 process. Trong 2 hàm này, đầu tiên malware tiến hành decrypt payload, payload sau khi giải mã bắt đầu với kí tự XS, phần mem này chứa code để thực hiện inject code, sau đó malware thực hiện các hàm để inject code.

Đầu tiên trong hàm hook_NtCreateUserProcess_n_find_offset_inject_function(), malware thực hiện các hành vi sau:

+ Check xem KiFastSystemCall có bị Hook hay không, nếu có, thực hiện unhook function này

+ Tiến hành unhook ntdll

+ Hook vào hàm NtCreateUserProcess, tính offset đến function dùng để inject code.

Trong hàm HookNtCreateUserProcessNOffsetInject:

Function dùng để inject chính là xxF3B7, function này thực hiện 2 nhiệm vụ, gồm unhook CreateUserProcess và Injectcode:

  • Unhook

  • Inject shellcode

Quay lại luồng đang thực hiện, sau khi thực hiện hàm hook_NtCreateUserProcess_n_find_offset_inject_function(), trả về offset của inject function, malware thực hiện tạo process, nếu tạo thành công, malware sẽ thực hiện inject shellcode vào trong 4 process dialer.exe, openwith.exe, dllhost.exe, rundll32.exe theo thứ tự cần 1 process thành công, function sẽ break.

Trong hàm Execute() dùng để chạy function đùng để inject, malware sử dụng heaven gate để chuyển sang execute 64 bitcode.

Rax ở đấy trỏ tới function Inject (sub_40df3b7).

Trong shellcode, malware thực hiện resolve các API dựa trên hash có sẵn đã tính trước bao gồm các API như MapViewOfFile, UnmapViewOfFile, VirtualAlloc, VirtualFree, VirtualProtect, CloseHandle.

Sau đó, malware thực hiện decrypt payload  và copy vào một vùng nhớ mới.

Sau đó, Malware thực hiện copy dữ liệu trong file mapping  sang một vùng nhớ mới, sau đó return một pointer trỏ đến filemap và xs_image.

Đến đây, ta thấy entry shell khá giống với file PE payload ban đầu.

Malware thực hiện lại luồng thực thi của ban đầu, tuy nhiên lúc này không còn luồng 0xaf5dfd nữa thay vào đó sẽ thực hiện xóa file ban đầu và luồng 0xxx3E3D.

Phân tích hàm 0xxx3E3D

Ban đầu, hàm này tiến hành unhook nếu tiến trình mã độc hiện tại đang thực thi trong môi trường wow64 bằng cách reload lại một số dll.

Ngược lại, mã độc giải mã và gọi payload strategy.x86 tương tự như các payload trước đó. Payload là 1 file PE với header XS.

* Module strategy.x86 này là 1 chuỗi cách thức kiểm tra máy nạn có phải trong môi trường sandbox, VM

  • Kiểm tra kết nối WMI

  • Kiểm độ phân giải màn hình có lớn hơn 800×600

  • Kiểm tra md5 file ảnh nền màn hình có khác 5b94362ac6a23c5aba706e8bfd11a5d8bab6097d

  • Kiểm các tiến trình đang thực thi có khác với list tên tiến trình các công cụ dịch ngược, giám sát cần kiểm tra.

  • Kiểm tra máy nạn nhân có cài các phần mềm chrome, firefox, Opera…

  • Kiểm tra user name với “JohnDeo”, “JOHN”, “george”. Kiểm tra computer name với “DESKTOP-BOT”, “JOHN-PC”, “MUELLER-PC”, “HAL9TH”

  • Kiểm tra desktop có các file chứa thông tin ngạy cảm passwords.txt, keys.txt

* Sau module strategy.x86, mã độc tiếp tục gọi đến module dt.x86. Module này là 1 chuỗi cách thức kiểm tra máy nạn có phải trong môi trường sandbox, VM, Antidebug.

  • Kiểm tra service của các sandbox có được cài trên máy nạn nhân không.

  • Kiểm tra tên tiến trình mã độc đang chạy nó nằm trong tên mà các sandbox, người phân tích thường đặt

  • Kiểm tra 1 số tên username, computer, tên file hệ thống của máy nạn nhân so với username, computer, tên file thường dùng trong sandbox

  • Kiểm tra số processors, cores của máy nạn nhân có nhỏ hơn 2

  • Kiểm tra một số module thường dùng của sandbox

  • Ngoài ra, mã độc cũng kiểm tra thêm username trên máy nạn nhận với một số username khác

  • Mã độc có nhiều kỹ thuật antidebug khác nhau như check các flag, lệnh ngắt, breakpoint…

Ngoài ra còn nhiều kỹ thuật anti virtual machine khác nữa. Vì quá nhiều kỹ thuật nên mình cũng không tiện liệt kê hết ở đây.

Module netclient.x86 chịu trách nhiệm kết tới C2 thông qua bộ thư viện ws_32.dll:

Payload được trả về từ server sau đó được cấp phát và thực thi.

Nhìn chung, mã độc này chủ yếu đóng vai trò loader, đi “dò đường” để tải xuống những mã độc khác phía sau để thực thi, khai thác thông tin từ máy nạn nhân.

Trên đây là một số phân tích của mình, cảm ơn mọi người đã quan tâm theo dõi!

 

By,

Blue_Team

126 lượt xem