Phân tích mã độc

Windows Internals

1. Kiến trúc Windows

Windows OS chạy trong 2 mode chính là User Mode và Kernel Mode:

20241125154020.png

2. Windows API Call Flow

Xem xét ví dụ với hàm ReadProcessMemory

BOOL ReadProcessMemory(
  [in]  HANDLE  hProcess,
  [in]  LPCVOID lpBaseAddress,
  [out] LPVOID  lpBuffer,
  [in]  SIZE_T  nSize,
  [out] SIZE_T  *lpNumberOfBytesRead
);

ReadProcessMemory nằm trong thư viện kernel32.dll, hàm này gọi Native API call là NtReadVirtualMemory

20241125162355.png

NtReadVirtualMemory nằm trong NTDLL.DLL, khởi tạo một lênh system call (syscalls) có số 3F. Kernel duy trì một bảng gọi là System Service Descriptor Table (SSDT) hay syscall table (System Call Table) là data structure, mỗi entry bao gồm syscall number và pointer trỏ đến vị trí tương ứng của kernel function.

20241125162628.png

Syscall function được thực thi trong kernel, nơi Windows memory management và process isolation được tận dụng. Kernel thực hiện các kiểm tra cần thiết, kiểm tra quyền truy cập và đọc bộ nhớ từ process mục tiêu, trích xuất physical memory pages tương ứng với virtual address được yêu cầu và sao chép vào buffer được cung cấp.

Sau khi kernel đọc bộ nhớ xong, nó chuyển thread trở lại user mode và ứng dụng ban đầu.

20241125161856.png

3. Portable Executable

Windows OS sử dụng PE format để đóng gói chương trình thực thi và DLLs, được tổ chức dưới dạng các section như sau:

4. Processes

20241125170645.png

Mỗi process bao gồm:

DLL là một loại PE cho phép chia sẻ các function của nó.

Ví dụ, shell.exe là một malware process thực hiện hành vi process injection để inject code đến process notepad.exe sử dụng các import function từ kernel32.exe:

20241126142859.png

Static Analysis

Thông qua quá trình phân tích tĩnh, các thông tin quan trọng cần trích xuất bao gồm:

20241126144851.png

1. Identifying The File Type

Xác định file type: sử dụng command file hoặc hexdump. Với hexdump cần có kiến thức về signature của các loại file type, thông thường file PE sẽ bắt đầu bằng ký tự MZtương ứng mã hex là 4D 5A.

file /home/htb-student/Samples/MalwareAnalysis/Ransomware.wannacry.exe
hexdump -C /home/htb-student/Samples/MalwareAnalysis/Ransomware.wannacry.exe | more

Trên Windows, có thể sử dụng CFF Explorer để xác định File type.

20241126164158.png

2. Malware Fingerprinting

Tạo malware fingerprinting bằng các thuật toán hashing như MD5, SHA1 hoặc SHA256. Mục đích của việc này bao gồm:

md5sum /home/htb-student/Samples/MalwareAnalysis/Ransomware.wannacry.exe
sha256sum /home/htb-student/Samples/MalwareAnalysis/Ransomware.wannacry.exe

Do chỉ cần thay đổi một vài bytes cũng dẫn đến sự thay đổi của chuỗi hash nên nếu như chỉ sử dụng MD5, SHA1 hay SHA256 sẽ không hiểu quả để phát hiện các mẫu malware giống nhau nhưng khác tên. Nên có vài thuật toán hashing khác cải thiện độ chính xác trong việc tìm kiếm các mẫu malware tương tự như sau:

Trên Windows, có thể sử dụng PowerShell Get-FileHassh để tính toán MD5, SHA1 hay SHA256 hash.

Get-FileHash -Algorithm MD5 C:\Samples\MalwareAnalysis\Ransomware.wannacry.exe
Get-FileHash -Algorithm SHA256 C:\Samples\MalwareAnalysis\Ransomware.wannacry.exe

3. String Analysis

Phân tích strings, có thể phát hiện được các thông tin như các file liên quan khác, địa chỉ IP hay domain, registry, Windows API function, tham số command-line và các thông tin khác liên quan đến threat actor.

strings -n 15 /home/htb-student/Samples/MalwareAnalysis/dharma_sample.exe

Một công cụ khác ngoài strings để trích xuất string trong file khác là floss - FireEye Labs Obfuscated String Solver được thiết kế bởi FLARE team của Fireeye nhằm tự động gỡ rối (deobfuscate) string.

floss /home/htb-student/Samples/MalwareAnalysis/dharma_sample.exe

4. Unpacking UPX-packed Malware

Unpacking, một số file malware sử dụng các kỹ thuật làm rối mã hoặc nén, giảm kích thước của tệp thực thi gây khó khăn trong việc phân tích tĩnh. Một công cụ packer phổ biến sử dụng trong nhiều loại malware là Ultimate Packer for Executables (UPX). Có thể phát hiện file được packing bằng packer này bằng các string signature.

20241126163146.png

upx -d -o unpacked_credential_stealer.exe credential_stealer.exe                   

20241126164612.png

Dynamic Analysis

Các bước phân tích động malware bao gồm:

Trong một số trường hợp, khi malware có các phương pháp lẩn tránh và phức tạp, có thể sử dụng các sanbox enviroment như Cuckoo Sanbox, Joe SandboxFireEye's Dynamic Threat Intelligence cloud, cung cấp một môi trường an toàn, nằm trong kiểm soát chặt chẽ và tự động phân tích, tự động tạo report về hành vi của malware.

Noriben là công cụ phân tích động được viết bằng Python, sử dụng ProcMon làm nền tảng. Vì nếu chỉ sử dụng ProcMon sẽ cho nhiều thông tin nhiễu, Noriben được phát triển để lọc và cho phép tạo report .csv hiển thị cụ thể được thông tin về Malware.

20241127112039.png

Code Analysis

1. Code Analysis

Lab đọc code với IDA: https://academy.hackthebox.com/module/227/section/2499

2. Debugging

Xây dựng môi trường để test malware bao gồm 2 máy ảo dựng trên VMWare như sau:

Note

Cả 2 máy đều có card mạng là host-only, giúp cách ly với Internet.