|
Practical Malware Analysis |
CHƯƠNG 9 - OLLYDBG
Dowloads Lab tại đây
Table of Contents
Lab 9-1
Phân tích mã độc được tìm thấy trong tập tin Lab09-01.exe bằng cách sử
dụng OllyDbg và IDA Pro để trả lời câu hỏi sau. Mã độc này đã được
phân tích sơ bộ trong các bài thực hành của Chương 3 bằng cách sử dụng
các kỹ thuật phân tích tĩnh và động cơ bản.
Câu hỏi?
1. Làm thế nào để khiến mã độc này tự cài đặt?
2. Những tùy chọn dòng lệnh cho chương trình này là gì? Yêu cầu về mật khẩu
là gì?
3. Làm thế nào để sử dụng OllyDbg để vá lỗi mã độc này vĩnh viễn, để nó
không yêu cầu mật khẩu dòng lệnh đặc biệt?
4. Những dấu hiệu trên máy chủ (host-based indicators) của mã độc này là gì?
5. Những hành động khác nhau mà mã độc này có thể được hướng dẫn thực hiện
thông qua mạng là gì?
6. Có bất kỳ chữ ký dựa trên mạng (network-based signatures) hữu ích nào cho
mã độc này không?
Phân tích chi tiết
1. Thông tin tổng quan
Môi trường phân tích | Windows 10 Flare VM |
---|---|
Mẫu phân tích | Lab09-01.exe |
Size | 61440 bytes |
MD5 | B94AF4A4D4AF6EAC81FC135ABDA1C40C |
2. Công cụ sử dụng
- Detect It Easy (DIE) (https://www.virustotal.com): Sử dụng để phân tích các tập tin và xác định thông tin về chúng.
- Stings (https://learn.microsoft.com/en-us/sysinternals/downloads/strings): quét các tệp và trích xuất các chuỗi ký tự ASCII và Unicode có thể in được.
- IDA Pro (https://hex-rays.com/ida-pro): Trình dịch ngược để phân tích mã assembly.
- OllDBG (https://www.ollydbg.de/): gỡ lỗi (debug).
3 Phân tích Tĩnh
3.1 - Sử dụng Detect It Easy (DIE)
Mã độc không bị đóng gói và được biên dịch bằng Microsoft Visual C/C++
Khi kiểm tra với tính năng Memory map và Entropy
Thông tin về hàm Nhập
Trong số các DLL đã nhập, chúng ta thấy các thư viện Windows quan trọng như KERNEL32.DLL , ADVAPI32.DLL và USER32.DLL , gợi ý các hoạt động ở cấp độ hệ thống và tương tác với API Windows.
WS2_32.DLL chỉ ra rằng phần
mềm độc hại này có khả năng giao tiếp qua mạng, có thể là để gửi dữ liệu hoặc
lấy lệnh.
Bây giờ, chúng ta hãy xem xét một số chuỗi cơ bản:
Trích xuất chuỗi đáng chú ý:
0000B5B8 GetLastActivePopup 0000B5CC GetActiveWindow 0000B5DC MessageBoxA 0000B5E8 user32.dll 0000B5F8 PATH 0000B7EA CloseHandle 0000B7F8 SetFileTime 0000B806 GetFileTime 0000B814 CreateFileA 0000B822 GetSystemDirectoryA 0000B838 GetLastError 0000B848 ReadFile 0000B854 WriteFile 0000B860 Sleep 0000B868 GetShortPathNameA 0000B87C GetModuleFileNameA 0000B892 CopyFileA 0000B89E ExpandEnvironmentStringsA 0000B8BA DeleteFileA 0000B8C6 KERNEL32.dll 0000B8D6 RegQueryValueExA 0000B8EA RegOpenKeyExA 0000B8FA RegSetValueExA 0000B90C RegCreateKeyExA 0000B91E RegDeleteValueA 0000B930 CreateServiceA 0000B942 CloseServiceHandle 0000B958 ChangeServiceConfigA 0000B970 OpenServiceA 0000B980 OpenSCManagerA 0000B992 DeleteService 0000B9A0 ADVAPI32.dll 0000B9B0 ShellExecuteA 0000B9BE SHELL32.dll 0000B9CA WS2_32.dll 0000B9D8 ExitProcess 0000B9E6 TerminateProcess 0000B9FA GetCurrentProcess 0000BA0E GetTimeZoneInformation 0000BA28 GetSystemTime 0000BA38 GetLocalTime 0000BA48 DuplicateHandle 0000BA5A GetCommandLineA 0000BA6C GetVersion 0000BA7A SetStdHandle 0000BA8A GetFileType 0000BA98 SetHandleCount 0000BAAA GetStdHandle 0000BABA GetStartupInfoA 0000BACC CreatePipe 0000BADA GetExitCodeProcess 0000BAF0 WaitForSingleObject 0000BB06 HeapReAlloc 0000BB14 HeapAlloc 0000BB20 GetCPInfo 0000BB2C GetACP 0000BB36 GetOEMCP 0000BB42 UnhandledExceptionFilter 0000BB5E FreeEnvironmentStringsA 0000BB78 FreeEnvironmentStringsW 0000BB92 WideCharToMultiByte 0000BBA8 GetEnvironmentStrings 0000BBC0 GetEnvironmentStringsW 0000BBDA GetModuleHandleA 0000BBEE GetEnvironmentVariableA 0000BC08 GetVersionExA 0000BC18 HeapDestroy 0000BC26 HeapCreate 0000BC34 VirtualFree 0000BC42 HeapFree 0000BC4E RtlUnwind 0000BC5A MultiByteToWideChar 0000BC70 GetStringTypeA 0000BC82 GetStringTypeW 0000BC94 SetFilePointer 0000BCA6 VirtualAlloc 0000BCB6 LCMapStringA 0000BCC6 LCMapStringW 0000BCD6 GetProcAddress 0000BCE8 LoadLibraryA 0000BCF8 FlushFileBuffers 0000BD0C GetFileAttributesA 0000BD22 CreateProcessA 0000BD34 CompareStringA 0000BD46 CompareStringW 0000BD58 SetEnvironmentVariableA 0000C030 Configuration 0000C040 SOFTWARE\Microsoft \XPS 0000C058 \kernel32.dll 0000C070 HTTP/1.0 0000C080 GET ... ... 0000C098 NOTHING 0000C0AC DOWNLOAD 0000C0B8 UPLOAD 0000C0C4 SLEEP 0000C0CC cmd.exe 0000C0D4 >> NUL 0000C0DC /c del 0000C0E8 http://www.practicalmalwareanalysis.com 0000C118 Manager Service 0000C12C .exe 0000C134 %SYSTEMROOT%\system32\ 0000C14C k:%s h:%s p:%s per:%s
Phân tích chi tiết các chuỗi quan trong được trích xuất:
1. API liên quan đến quản lý cửa sổ (User32.dll)
-
GetLastActivePopup
,GetActiveWindow
,MessageBoxA
→ Cho thấy khả năng tương tác với giao diện người dùng, có thể được sử dụng để hiển thị thông báo giả mạo hoặc đánh cắp dữ liệu từ cửa sổ đang hoạt động.
2. API liên quan đến tệp tin và thao tác hệ thống (Kernel32.dll)
-
CreateFileA
,ReadFile
,WriteFile
,CloseHandle
,CopyFileA
,DeleteFileA
,SetFileTime
,GetFileTime
→ Cho thấy mã độc có khả năng thao tác với tệp tin, có thể được sử dụng để sửa đổi, sao chép, xóa hoặc ẩn tệp tin độc hại. -
GetModuleFileNameA
,GetSystemDirectoryA
,ExpandEnvironmentStringsA
→ Dùng để lấy thông tin về đường dẫn hệ thống và thư viện.
3. API thao tác với Registry (Advapi32.dll)
-
RegOpenKeyExA
,RegQueryValueExA
,RegSetValueExA
,RegCreateKeyExA
,RegDeleteValueA
→ Mã độc có khả năng đọc, ghi, xóa và chỉnh sửa registry, điều này có thể được sử dụng để duy trì sự tồn tại (persistence) hoặc thay đổi cài đặt hệ thống.
4. API thao tác với dịch vụ hệ thống
-
OpenSCManagerA
,OpenServiceA
,CreateServiceA
,ChangeServiceConfigA
,DeleteService
,CloseServiceHandle
→ Chỉ ra khả năng tạo, sửa đổi và xóa dịch vụ hệ thống. Mã độc có thể đăng ký chính nó dưới dạng một dịch vụ Windows để duy trì hoạt động ngay cả sau khi hệ thống khởi động lại.
5. API liên quan đến tiến trình và quản lý bộ nhớ
-
CreateProcessA
,TerminateProcess
,ExitProcess
,GetCurrentProcess
,DuplicateHandle
,WaitForSingleObject
→ Cho thấy khả năng tạo và điều khiển tiến trình, có thể dùng để chạy lệnh độc hại hoặc kiểm soát tiến trình của hệ thống. -
HeapAlloc
,HeapFree
,VirtualAlloc
,VirtualFree
,HeapReAlloc
,HeapDestroy
→ Dấu hiệu của kỹ thuật ẩn mã độc trong bộ nhớ hoặc sử dụng các kỹ thuật như code injection.
6. API mạng và thực thi lệnh từ xa
-
WS2_32.dll
(Windows Sockets) → Chứa các hàm liên quan đến mạng, có thể mã độc sẽ thực hiện kết nối ra bên ngoài. -
HTTP/1.0
,GET
,DOWNLOAD
,UPLOAD
→ Cho thấy mã độc có thể tải xuống và tải lên dữ liệu, điều này có thể liên quan đến hành vi điều khiển từ xa hoặc đánh cắp dữ liệu. -
ShellExecuteA
,cmd.exe
,/c del
→ Chỉ ra mã độc có thể chạy các lệnh trên hệ thống bằng cách sử dụng Command Prompt.
7. Dấu hiệu của sự tồn tại lâu dài (Persistence)
- Việc sử dụng Registry (RegSetValueExA, RegCreateKeyExA) và Service Control Manager (CreateServiceA, ChangeServiceConfigA) cho thấy mã độc có thể tự động khởi động lại khi hệ thống bật lên.
- Sao chép chính nó (CopyFileA) và tạo tiến trình mới (CreateProcessA) có thể giúp mã độc tự nhân bản hoặc khởi động lại chính nó nếu bị đóng.
8. Dấu hiệu của đánh cắp dữ liệu
-
GetActiveWindow
,GetLastActivePopup
,ReadFile
,WriteFile
→ Có thể đánh cắp dữ liệu từ cửa sổ đang hoạt động hoặc các tệp tin quan trọng. -
GetModuleFileNameA
,GetSystemDirectoryA
,GetShortPathNameA
→ Có thể thu thập thông tin hệ thống để thực hiện các hành vi độc hại dựa trên môi trường mục tiêu.
9. Dấu hiệu của tải và thực thi mã độc từ xa
-
HTTP/1.0
,GET
,DOWNLOAD
,UPLOAD
,http://www.practicalmalwareanalysis.com
→ Chứng tỏ mã độc có thể liên lạc với máy chủ điều khiển (C2 server) để tải xuống mã độc bổ sung hoặc gửi dữ liệu bị đánh cắp. -
ShellExecuteA
,cmd.exe
→ Có thể thực hiện các lệnh tùy ý, bao gồm cả việc xóa dấu vết bằng/c del
.
3.2 Phân tích nâng cao
Tiếp theo tôi sẽ sử dụng IDA Pro kết hợp với OllDBG để phân tích.
Bởi vì OllyDBG không thể xác định chính xác điểm bắt đầu của hàm chính nên cần có IDA để xác định điểm bắt đầu thực thi hàm.
IDA xác định hàm main tại địa chỉ 0x402AF0
Trong OllDBG mở tệp Lab09-01.exe, chúng ta có thể thấy nó ngay lập tức tạm dừng khi chạm đến điểm thực thi được chỉ định.
Điều này không quan trọng với chúng ta. Chúng ta có thể nhấn F8 (step-over) nút quay lại và thực hiện từng bước. Trên thực tế F7 (step-into), an toàn nhất là nhấn nút quay lại vào lúc này vì bạn không biết khi nào hàm sẽ được gọi. Nếu bạn muốn Quay lại Nơi bắt đầu thực thi có thể được nhấn Ctrl+F2 để quay lại nơi hàm được thực thi lần đầu tiên.