Bảng thông tin bên dưới đây kiệt kê các tập tin DLLs và các hàm Import Functions từ một tập tin mã độc

2016-01-11_105401

Như hầu hết các chương trình có kích thước trung bình, tập tin thực thi này chứa một số lượng lớn các hàm import functions. Thật không may, chỉ một số nhỏ các import function là quan trọng trong việc phân tích mã độc. Khi bạn không chắc chắn về một hàm chức năng nào đó, bạn cần tìm kiếm và xác định nó là gì. Bạn có thể tham khảo những hàm chức năng quan trọng đối với việc phân tích mã độc trong phần phụ lục, hoặc có thể tìm kiếm chúng trên hệ thống trực tuyến MSDN.

Thông thường, chúng ta sẽ không nhận biết được mã độc này có phải là một tập tin keylogger tiềm năng hay không, và chúng ta sẽ cần phải tìm kiếm các chức năng mà sẽ cung cấp manh mối để giúp xác định đây có phải là mã độc hay không. Chúng ta sẽ chỉ tập trung vào các chức năng cung cấp các gợi ý về chức năng của chương trình đang xét.

Các hàm import functions được liệt kê từ tập tin Kernel32.dll trong hình trên cho chúng ta biết rằng phần mềm này có thể mở và thao tác các tiến trình (như là OpenProcess, GetCurrentProcess, và GetProcessHeap), và các tập tin (như là ReadFile, CreateFile, và WriteFile). Những hàm chức năng FindFirstFile và FindNextFile là những hàm đặc biệt mà chúng ta có thể sử dụng để thông qua các thư mục.

Các hàm import function được liệt kê từ tập tin User32.dll thậm chí còn quan trọng hơn nữa. Một số lượng lớn của các hàm chức năng thao tác trên giao diện đồ họa (như là RegisterClassEx, SetWindowText, và ShowWindow) cho thấy một khả năng rất cao phần mềm này sẽ có một giao diện đồ họa (mặc dù giao diện GUI này không nhất thiết phải hiển thị cho người sử dụng).

Hàm chức năng SetWindowsHookEx thường được sử dụng trong phần mềm gián điệp (spyware) và là cách phổ biến nhất mà các phần mềm keylogger ghi nhận các thông tin đầu vào từ bàn phím máy tính.

Hàm chức năng RegisterHotKey cũng khá là đáng để quan tâm. Chúng đăng ký một phím nóng (hot key) như là (CTRL SHIFT-P).

Các hàm import functions được liệt kê từ tập tin GDI32.dll là một hàm có liên quan tới đồ họa và chỉ đơn giản là xác nhận chương trình này có thể có một giao diện đồ họa. Các hàm import functions được liệt kê từ tập tin Shell32.dll cho chúng ta biết chương trình này có thể khởi chạy các chương trình khác – đây là một tính năng phổ biến của các phần mềm độc hại cũng như các chương trình hợp pháp.

Các hàm import functions được liệt kê từ tập tin Advapi32.dll cho chúng ta biết chương trình này sử dụng các registry, điều này cho chúng ta biết chúng ta nên tìm kiếm các chuỗi Strings mà giống như các khóa của Registry. Các chuỗi Registry trong rất giống như các thư mục. Trong trường hợp này, chúng ta tìm thấy chuỗi trong Software\Microsoft\Windows\CurrentVersion\Run, đây là một khóa Registry (thường được sử dụng bởi các phần mềm độc hại) dùng để điều khiển các chương trình được chạy tự động khi Windows khởi động.

Tập tin thực thi này cũng có một số hàm export function như LowLevelKeyboardProc và LowLevelMouseProc. Một số tài liệu của Microsoft cho rằng, “Hàm thủ tục LowLevelKeyboardProc là một ứng dụng đã được xác định hoặc là thư viện đã được xác định gọi lại các chức năng đã sử dụng với hàm chức năng SetWindowsHookEx”. Nói cách khác, chức năng này được sử dụng với SetWindowsHookEx để xác định những chức năng sẽ được gọi khi một sự kiện được xác định xảy ra, trong trường hợp này, là sự kiện ghi nhận bàn phím ở mức độ thấp. Các tài liệu cho SetWindowsHookEx giải thích thêm rằng chức năng này sẽ được gọi lên khi khi các sự kiện bàn phím ở mức thấp xảy ra.

Các tài liệu của Microsoft sử dụng tên LowLevelKeyboardProc, và các lập trình viên trong trường hợp này đã làm tốt công việc của mình. Chúng ta đã có thể lấy được các thông tin có giá trị bởi vì các lập trình viên đã không làm mờ tên của các hàm export function.

Việc sử dụng các thông tin thu thập được từ một phân tích tĩnh của các import function và export function, chúng ta có thể rút ra một số kết luận đáng kể hoặc xây dựng một số giả thuyết về phần mềm độc hại này. Trong một số trường hợp, nó có thể được xem là một local keylogger sử dụng hàm SetWindowsHookEx để ghi nhận lại các thao tác trên bàm phím. Chúng ta cũng có thể phỏng đoán nó có một giao diện đồ họa mà chỉ hiển thị đối với một số người dùng cụ thể nào đó, và phím nóng được đăng ký với hàm RegisterHotKey để giúp người phát tán mã độc gọi giao diện đồ họa của chương trình bằng phím nóng và xem nội dung các thao tác bàn phím được ghi lại. Chúng ta có thể tiếp tục suy đoán từ các hàm chức năng registry và sự tồn tại của Software\Microsoft\Windows\CurrentVersion\Run điều mà chương trình này tự thiết lập chính nó để nạp lúc khởi động hệ thống.

PackedProgram.exe: A Dead End

Hình minh họa bên dưới cho ta thấy một danh sách đầy đủ các hàm import function từ một khía cạnh khác của phần mềm độc hại mà ta chưa biết. Sự ngắn gọn của danh sách này cho chúng ta biết rằng phần mềm này đã được đóng gói hoặc đã được làm mờ đi, điều này khẳng định thực tế rằng không thể đọc ra được các chuỗi Strings. Một trình biên dịch của Windows sẽ không tạo ra một chương trình mà các hàm import function có số lượng ít như thế, thậm chí một chương trình xuất ra Hello World còn có nhiều hàm chức năng hơn thế.

Dlls and Functions Imported from PackedProgram.exe

Bigguy

(Tham khảo: Practical Malware Analysis)