Bài write-up tổng hợp lại quá trình mình thực hành các bài lab trong cuốn sách "Practical Malware Analysis" của tác giả Michael Sikorski and Andrew Honig từ nhà xuất bản No Starch Press
PART I- BASIC ANALYSIS
Sau khi tải bài lab về và chạy cài đặt vào folder bất kỳ ta có kết quả như sau:
![]() |
| PracticalMalwareAnalysis-Labs |
![]() |
| PracticalMalwareAnalysis-Labs |
Mở tiếp Chapter_1L:
![]() |
| PracticalMalwareAnalysis-Labs |
Các file cần phân tích lần lượt là Lab01-01.dll và Lab01-01.exe.
Questions
1. Upload the files to http://www.VirusTotal.com/ and view the reports. Does either file match any existing antivirus signatures?
2. When were these files compiled?
3. Are there any indications that either of these files is packed or obfuscated? If so, what are these indicators?
4. Do any imports hint at what this malware does? If so, which imports are they?
5. Are there any other files or host-based indicators that you could look for on infected systems?
6. What network-based indicators could be used to find this malware on infected machines?
7. What would you guess is the purpose of these files?
Answers
1. Upload the files to http://www.VirusTotal.com/ and view the reports. Does either file match any existing antivirus signatures?
Lab01-01.exe
Mẫu Lab01-01.exe lần đầu tiên được gửi tới Virustotal vào ngày 2012-02-16 07:31:54 UTC và kể từ đó, tính đến thời điểm viết bài nó có tỷ lệ phát hiện là virus 53/70:
![]() |
| VirusTotal.com reports for Lab01–01.exe |
Mẫu Lab01-01.dll lần đầu tiên được gửi tới Virustotal vào ngày 2011-07-04 19:57:48 UTC và kể từ đó, tính đến thời điểm viết bài nó có tỷ lệ phát hiện là virus 45/70:
![]() |
| VirusTotal.com reports for Lab01–01.dll |
2. When were these files compiled?
Sử dụng tool PEView để tìm thông tin này:
IMAGE_NT_HEADERS → IMAGE_FILE_HEADER → Time Date Stamp
Lab01-01.exe compile time - 2010/12/19 Sunday 16:16:19 UTC
![]() |
| PEView Lab01-01.exe |
Lab01-01.dll compile time - 2010/12/19 Sunday 16:16:38 UTC
![]() |
| PEView Lab01-01.dll |
Bonus thêm cách khác:
Trên trang kết quả quét của Virustotal → Details → History ta cũng có kết quả tương tự.
![]() |
| Virustotal details Lab01-01.exe |
![]() |
| Virustotal details Lab01-01.dll |
3. Are there any indications that either of these files is packed or obfuscated? If so, what are these indicators?
Khi một file được packed (đóng gói), sẽ khó phân tích hơn vì nó thường bị obfuscated ( làm rối) và nén. Những dấu hiệu chính cho thấy chương trình đã được đóng gói đó là strings hoặc thông tin hiển thị hoặc bao gồm các chức năng nhất định như LoadLibrary hoặc GetProcAddress - được sử dụng cho các chức năng bổ sung. Một tệp thực thi được packed có một wrapper program (chương trình bao bọc) để giải nén và chạy tệp và khi phân tích tĩnh một chương trình được packed, chỉ chương trình wrapper được kiểm tra.
Obfuscation là kỹ thuật biến đổi code của chương trình thành dạng rất khó đọc với mục đích che giấu thông tin về chương trình, gây khó khăn cho việc phát hiện và phân tích.
Packing là một dạng của obfuscation, thực hiện nén đoạn code ban đầu thành dạng không thể phân tích. Một chương trình đã được packed bao gồm 2 phần: đoạn bị packed (biến đổi từ chương trình gốc) và wrapper (làm nhiệm vụ giải nén đoạn packed).Một chương trình được packed thường có một số dấu hiệu sau đây:
- Số lượng strings rất ít, ít hơn hẳn so với một chương trình thông thường với kích thước tương đương;
- PE sections bất thường: ví dụ, virtual size lớn hơn rất nhiều so với raw size (dấu hiệu cho thấy chương trình được packed); section flags bất thường (như hình dưới),…
- Sử dụng trình packer.
Việc pack file được thực hiện thông qua một trình packer (có thể sử dụng packer có sẵn hoặc tự viết). Một số trình packer thông dụng có thể kể đến như: UPX, Themida, The Enigma Protector, VMProtect, Obsidium, MPRESS, Exe Packer 2.300, ExeStealth,… Biết được thông tin về trình packer được sử dụng là bước quan trọng để unpack file. Có nhiều tools hỗ trợ công việc này, tiêu biểu là PEiD, RDG Packer Detector, ExeInfo.
Quay lại câu hỏi, sử dụng công cụ PEiD, kết quả:
![]() |
| PEiD Lab01-01.exe |
![]() |
| PEiD Lab01-01.dll |
Kết quả cho thấy cả hai file Lab01-01.exe và Lab01-01.dll đều không bị đóng gói, cùng sử dụng trình biên dịch Microsoft Visual C++ 6.0.
Bonus thêm cách khác:
Sử dụng PEView ta thấy kích thước ảo gần với kích thước dữ liệu thô của file.
![]() |
| PEView size Lab01-01.exe |
Sử dụng Malcode Analyst Pack, có thể xem "strings" và thấy có rất nhiều trong số chúng.
Có vẻ như có một lượng kha khá thông tin được trả về. Trong trường hợp tệp được đóng gói hoặc bị xáo trộn, sẽ tìm thấy rất ít chuỗi dễ đọc.
Mặc dù không có nhiều chuỗi được trả về, nhưng dường như vẫn có một lượng thông tin tốt được trả về. Một địa chỉ ip, exec, sleep và các chức năng khác được tìm thấy.
Lab01-01.exe và Lab01-01.dll
![]() |
| Malcode Analyst Pack Lab01-01.exe and Lab01-01.dll |
IDAPro
Một kỹ thuật khác có thể được sử dụng để xác định xem phần mềm độc hại có được đóng gói hay không là sử dụng IDAPro để xem hướng dẫn có hợp lý hay không và liệu có bất kỳ bằng chứng nào về việc chuyển sang sơ khai bộ giải mã hay không:
Lab01-01.exe
![]() |
| IDAPro Lab01-01.exe |
Lab01-01.dll
![]() |
| IDAPro Lab01-01.dll |
Nhìn vào cả exe và dll trong IDAPro cho thấy rằng các hướng dẫn dường như không chuyển đến sơ khai bộ giải mã dưới bất kỳ hình thức nào và các hướng dẫn được hiển thị rõ ràng.
4. Do any imports hint at what this malware does? If so, which imports are they?
Sử dụng Dependency Walker kết quả:
Lab01-01.exe gọi tới các hàm:
- CreateFileA
- FindNextFileA
- FindFirstFileA
- CopyFileA
Dự đoán: Phần mềm độc hại này sẽ thực hiện thao tác tìm kiếm và copy.
![]() |
| Dependency Walker Lab01-01.exe |
Lab01-01.dll gọi tới các hàm:
- CreateProcess
- Sleep
Dự đoán: Phần mềm độc hại này có khả năng sinh ra một quy trình mới và ngủ (tạm dừng thực thi) ở một số giai đoạn.
![]() |
| Dependency Walker Lab01-01.dll |
Ngoài ra thông qua thư viện ws2_32. dll ta biết được tệp thực thi còn thực hiện các chức năng như: socket , connect , send , recv và closesocket điều này cho thấy rằng phần mềm độc hại này có thể thực thi qua máy chủ.
![]() |
| Dependency Walker lab01-01.dll_ws2_32. dll |
Note: Ba thư viện sau được dùng: kernel32.dll , ws2_32.dll, msvcrt.dll
Kernel32.dll là một tệp thư viện liên kết động 32 bit được thiết kế cho hệ điều hành Windows. Nhiệm vụ chính của nó là quản lý bộ nhớ hệ thống, các hoạt động đầu vào / đầu ra và ngắt. Tệp này được tải vào một không gian bộ nhớ bảo vệ khi Windows khởi động trong nỗ lực ngăn các ứng dụng khác chiếm lấy không gian này.
Ws2_32. dll là một thư viện được liên kết động được sử dụng để xử lý các kết nối mạng. Đây là một chương trình nhỏ liên quan đến các quy trình phần mềm, tương tự như các tệp EXE, nhưng thay vì đưa ra các lệnh, tệp . dll cho phép các ứng dụng giao tiếp với nhau.
Msvcrt.dll là một mô-đun chứa các hàm thư viện C tiêu chuẩn như printf, memcpy và cos. Nó là một phần của Thư viện Microsoft C Runtime.
5. Are there any other files or host-based indicators that you could look for on infected systems?
Lab01-01.exe:
Kiểm tra kỹ hơn các chuỗi chứa trong Lab01-01.exe cho thấy rằng nó đang tham chiếu đến một tệp có tên C:\windows\system32\kerne132.dll. Đây là một lỗi chính tả rất tinh vi của tệp Kernel32.dll hợp pháp (chú ý sử dụng 1 thay vì l ) vì điều này có thể là tệp độc hại và chúng tôi có thể sử dụng tệp này để tìm kiếm các hệ thống bị nhiễm.
![]() |
| Kerna123 |
Lab01-01.dll:
Không có
6. What network-based indicators could be used to find this malware on infected machines?
Lab01-01.exe:
Không có
Lab01-01.dll:
Kiểm tra kỹ hơn các chuỗi chứa trong Lab01-01.dll cho thấy có một địa chỉ IP. Do điều này và quá trình nhập mạng, rất có khả năng DLL này liên hệ với địa chỉ IP này và do đó, chúng tôi có thể sử dụng điều này để tìm các hệ thống bị nhiễm đã liên hệ với 127.26.152.13.
![]() |
| IP |
7. What would you guess is the purpose of these files?
Dựa trên những liệt kê ở trên ta có thể đoán rằng cách thức hoạt động của hai tệp như sau:
Lab01-01.exe:
Dùng để chạy Lab01-01.dll
Lab01-01.dll:
Hoạt động như một backdoor hoặc troijan truy cập từ xa (RAT). Dựa trên các lần nhập nó tìm kiếm C:\windows\system32\kerne132.dll có tồn tại không, và nếu không thì nó sẽ coppy file dll sang C:\windows\system32\kerne132. Khi một chương trình lạ sử dụng thư viện kernel132, nó sẽ mở ra một kết nối đến IP 127.26.152.13 với user/password cho sẵn.
Kết thúc write up Part I - Chapter 1 -Lab01
Đây là bài write up đầu tiên của mình, rất vui khi tiếp tục những bài write-up tiếp theo.





















