Phân Tích Mã Độc Practical Malware Analysis Lab01-01
Bài viết dưới đây sẽ giúp bạn đọc quan tâm đến công nghệ thông tin, virus máy tính hay mã độc hiểu sâu về Lab01-01 trong cuốn Practical Malware Analysis. Bài viết là kết quả quá trình nghiên cứu và tìm hiểu của chuyên gia an ninh mạng SecurityBox, đi sâu phân tích về mã độc LAB ...
Bài viết dưới đây sẽ giúp bạn đọc quan tâm đến công nghệ thông tin, virus máy tính hay mã độc hiểu sâu về Lab01-01 trong cuốn Practical Malware Analysis. Bài viết là kết quả quá trình nghiên cứu và tìm hiểu của chuyên gia an ninh mạng SecurityBox, đi sâu phân tích về mã độc LAB 01-01: cách phát hiện, cách nhận biết và gỡ bỏ mã độc này.
Practical Malware Analysis: https://nostarch.com/malware
Mẫu mã độc Lab01-01 có thể tải về từ: https://github.com/mikesiko/PracticalMalwareAnalysis-Labs
Phân tích mã độc Lab01-01
Lab01-01 được chia thành hai loại đó là: 1 .EXE và 1 .DLL, cả 2 đều không được pack:
Tìm hiểu về Lab01-01.exe:
- Chỉ có thể thực thi với tham số đầu vào là “WARNING_THIS_WILL_DESTROY_YOUR_MACHINE”.
- Thực hiện copy file Lab01-01.dll vào thư mục C:WINDOWSSystem32 với tên mới là “kerne132.dll”. Giá trị “C:WINDOWSSystem32kerne132.dll” được hard-coded.
- Tìm kiếm tất cả các file .EXE trong ổ C:. Đối với mỗi file .EXE, mã độc tìm kiếm và thay thế giá trị “kernel32.dll” trong bảng IMPORT DESCRIPTOR của PE bằng giá trị “kerne132.dll”. Giá trị “C:*” là tham số đầu vào cho hàm chức năng thực hiện tìm kiếm các file .EXE và được hard-coded.
- Như vậy, tất cả các file .EXE không nằm trong ổ C: và các file .EXE nằm trong ổ C: nhưng không import hàm từ thư viện kernel32.dll sẽ không bị ảnh hưởng.
Tìm hiểu về Lab01-01.dll:
- DLL này không có hàm export.
- Thực hiện kết nối tới địa chỉ IP “127.26.152.13” để lắng nghe lệnh trong dữ liệu nhận được. Các thao tác lệnh bao gồm:
- “sleep”: Ngủ trong 6.5 phút, sau đó lặp lại kết nối nhận lệnh.
- “exec”: Tạo một process bằng hàm CreateProcess với tên tiến trình là chuỗi string liền trước dấu cách “ ” đầu tiên trong chuỗi lệnh command line. Chuỗi lệnh command line này là phần tính từ byte thứ 5 trong dữ liệu nhận được từ 127.26.152.13.
- Ngủ và lặp lại kết nối nhận lệnh.
- Địa chỉ “127.26.152.13” được hardcoded.
File C:WINDOWSSystem32kerne132.dll:
- Nội dung được giữ nguyên từ Lab01-01.dll với các hàm export trong export table (SECTION .rdata -> EXPORT Address Table) được copy từ export table của thư viện KERNEL32.DLL. Các hàm export của kerne132.dll được set Description là “Forwarded Name RVA” và giá trị địa chỉ mỗi hàm export trỏ tới hàm export tương ứng của KERNEL32.DLL.
Cách phát hiện mã độc Lab01-01
Lab01-01.exe:
Chúng ta có thể phát hiện Lab01-01.exe bằng signature:
- 20 byte tính từ file offset 6208 (decimal), đầu hàm start trong SECTION .text. “x53x56x57x89x65xE8x83x65xFCx00x6Ax01xFFx15x58x20x40x00x59x83”
- 20 byte tính từ file offset 6400 (decimal), cuối hàm start trong SECTION .text.
“xFBxFFxFFx83xC4x30x89x45xDCx50xFFx15x30x20x40x00x8Bx45xECx8B”
Lab01-01.dll:
Phát hiện Lab01-01.dll và C:WINDOWSSystem32kerne132.dll bằng signature:
- 20 byte tính từ file offset 4199 (decimal), đoạn code đánh dấu sự tồn tại của instance của chính mã độc trong hệ thống thông qua hàm CreateMutex.
“x68x38x60x02x10x50x50xFFx15x08x20x00x10x8Dx4Cx24x78x51x68x02”
- 20 byte tính từ file offset 4419 (decimal), đoạn code kiểm tra và thực hiện lệnh sleep.
“x6Ax05x51x68x18x60x02x10xFFxD5x83xC4x0Cx85xC0x75x0Dx68x00x00”
Các .EXE bị sửa đổi bởi Lab01-01.exe:
- Các .EXE này chỉ bị sửa đổi tại vị trí duy nhất là tên thư viện “kerne132.dll” trong bảng IMPORT DESCRIPTOR của PE. Địa chỉ offset chứa giá trị tên thư viện “kerne132.dll” là khác nhau trên mỗi file .EXE nên không thể dùng signature để phát hiện. Phải duyệt bảng IMPORT DESCRIPTOR của PE.
- Structure PE_LDR_PARAM_PTR cung cấp giá trị các vùng nhớ tương ứng với 1024 byte từ ImageBase, 1024 byte từ EP và 4096 byte ImageTail nhưng không vùng nhớ nào chứa giá trị tên thư viện “kerne132.dll” => Phải thực hiện hàm ReadFile và duyệt bảng IMPORT DESCRIPTOR trên buffer thu được từ hàm ReadFile.
- Structure NtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT] là một mảng gồm các bảng IMPORT DESCRIPTOR. Ta chỉ cần duyệt giá trị ImportDescriptor->Name để so sánh với giá trị “kerne132.dll”.
Hướng dẫn gỡ bỏ mã độc Lab01-01
Lab01-01.exe:
Trường hợp bị nhiễm mã độc Lab01-01 dạng .exe thì cách gỡ bỏ đơn giản là xóa file nếu phát hiện nó là mã độc Lab01-01.exe.
Lab01-01.dll:
Với trường hợp phát hiện nhiễm mã độc Lab01-01 dạng .dll, muốn gỡ bỏ hãy làm theo các hướng dẫn dưới đây
- So sánh file path với giá trị “C:WINDOWSSystem32kerne132.dll”. Giá trị này được hard-coded trong mã độc nên có thể truyền trực tiếp vào một string. Nếu không được hard-coded, ta phải lấy giá trị này thông qua hàm WinAPI là GetSystemDirectory().
- Nếu file path khác với giá trị trên, file là DLL độc hại nhưng không phải là kerne132.dll đang được dùng bởi rất nhiều .EXE nên có thể xóa trực tiếp tương tự Lab01-01.exe. Nếu file path trùng với giá trị string trên, file là kerne132.dll đang được dùng bởi các .EXE bị sửa đổi, ta không thể xóa trực tiếp file này.
- Thực hiện sửa đổi C:WINDOWSSystem32kerne132.dll bằng cách ghi đè 448 byte tính từ NtHeaders->OptionalHeader.BaseOfCode + 40 (decimal) bằng 448 byte 0x90 (NOP). 448 byte bị ghi đè này chính là phần mã thực thi các chức năng độc hại của Lab01-01.dll như phân tích ở trên.
Các file .EXE bị sửa đổi:
- Lấy giá trị file offset của ImportDescriptor->Name trùng khớp với “kerne132.dll”. Giá trị này chính là địa chỉ byte “k” trong “kerne132.dll”. Cộng giá trị tìm được với 5 được địa chỉ byte “1” trong “kerne132.dll”.
- Byte có giá trị là 0x31, sử dụng hàm WriteFile để ghi đè byte này với giá trị mới là 0x6C, tương ứng với ký tự “l” để sửa “kerne132.dll” thành “kernel32.dll”.
XEN THÊM BÀI VIẾT LIÊN QUAN:
- Phân tích mã độc LAB 06
- Phân tích mã độc LAB 07
- Phân tích mã độc X68 Disassembly