18/09/2018, 15:56

Phân tích, phát hiện và gỡ bỏ mã độc Practical Malware Analysis Lab07-03

Phân tích mã độc Lab07-03 trong cuốn Practical Malware Analysis của Andrew Honig và Michael Sikorski ( https://nostarch.com/malware ) Mẫu mã độc của Lab07-03 có thể tải về từ: https://github.com/mikesiko/PracticalMalwareAnalysis-Labs Phân tích Lab07-03 gồm ...

lab731

Phân tích mã độc Lab07-03 trong cuốn Practical Malware Analysis của Andrew Honig và Michael Sikorski (https://nostarch.com/malware)

Mẫu mã độc của Lab07-03 có thể tải về từ: https://github.com/mikesiko/PracticalMalwareAnalysis-Labs

Phân tích

Lab07-03 gồm Lab07-03.exe và Lab07-03.dll, cả 2 đều không được pack:

  • Lab07-03.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 Lab07-03.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.
  • Lab07-03.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 có nội dung được giữ nguyên từ Lab07-03.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.

lab731

Phát hiện

  • Lab07-03.exe:

Phát hiện Lab07-03.exe bằng signature:

            + 20 byte tính từ file offset 6208 (decimal), đầu hàm start trong SECTION .text

Lab732

             + 20 byte tính từ file offset 6400 (decimal), cuối hàm start trong SECTION .text.

lab733

  • Lab07-03.dll:

Phát hiện Lab07-03.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.

lab734

            + 20 byte tính từ file offset 4419 (decimal), đoạn code kiểm tra và thực hiện lệnh sleep.

lab735

  • Các .EXE bị sửa đổi bởi Lab07-03.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”.

Gỡ bỏ

  • Lab07-03.exe:

Chỉ cần xóa file nếu phát hiện nó là mã độc Lab07-03.exe.

lab736

  • Lab07-03.dll:

                    + 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().

lab737

                   + 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ự Lab07-03.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 Lab07-03.dll như phân tích ở trên.

lab738

XEM THÊM BÀI VIẾT: PHÂN TÍCH, PHÁT HIỆN VÀ GỠ BỎ MÃ ĐỘC PRACTICAL MALWARE ANALYSIS LAB07-02

0