Mã độc KorPlug: Vạch trần kỹ thuật chống phân tích nguy hiểm

Bài viết này tiếp tục chuỗi phân tích về mã độc KorPlug, tập trung chuyên sâu vào payload giai đoạn hai phức tạp. Nội dung mở rộng từ các phát hiện ban đầu về phương pháp DLL side-loading, vốn sử dụng các chương trình hợp pháp để thực thi mã độc một cách lén lút.
Payload được xác định là một DLL độc hại có mã băm SHA-256 là b6b239fe0974cf09fe8ee9bc5d0502174836a79c53adccdbb1adeb1f15c6845c. Tệp này có kích thước 638.976 byte (tương đương 624 KB) và được cấu trúc dưới dạng tệp PE x86. Phân tích tĩnh cho thấy hàm Initialize, được kích hoạt bởi loader, sở hữu biểu đồ luồng điều khiển (CFG) có cấu trúc bất thường cao.
CFG này chứa đầy các kỹ thuật obfuscation tinh vi, cản trở đáng kể cả quá trình dịch ngược (disassembly) và truy vết động (dynamic tracing). Báo cáo này trình bày chi tiết các chiến thuật reverse-engineering nâng cao được áp dụng để phá vỡ các rào cản obfuscation này. Mục tiêu là phơi bày cơ chế thực thi của KorPlug, đồng thời cung cấp thông tin tình báo có giá trị cho các nhà săn lùng mối đe dọa.
Để biết thêm thông tin chuyên sâu về cách thức hoạt động của loại mã độc này, độc giả có thể tham khảo phân tích kỹ thuật chuyên sâu về mã độc KorPlug từ nguồn đáng tin cậy.
Chỉ Số Nhận Dạng Sự Cố (IOC)
Mã Băm SHA-256 của Payload
- b6b239fe0974cf09fe8ee9bc5d0502174836a79c53adccdbb1adeb1f15c6845c
Kỹ Thuật Chống Phân Tích Nâng Cao của Mã Độc KorPlug
Nhớ lại giai đoạn cuối từ phân tích ban đầu, payload đã giải mã mô phỏng một DLL tiêu chuẩn. Tuy nhiên, nó sử dụng phương thức thực thi giống như shellcode thông qua API EnumSystemGeoID. Điều này cho phép chuyển hướng luồng điều khiển trực tiếp đến hàm Initialize, bỏ qua các biện pháp bảo vệ tải thông thường của Windows.
Sự phức tạp của CFG trong mã độc KorPlug bắt nguồn từ việc sử dụng O-LLVM, một biến thể trình biên dịch LLVM tùy chỉnh. O-LLVM nổi tiếng với khả năng triển khai các kỹ thuật chống phân tích tiên tiến. Các kỹ thuật này bao gồm làm phẳng luồng điều khiển (control flow flattening), chèn các nhánh giả mạo (bogus branches), và thay thế lệnh (instruction substitution) nhằm né tránh phát hiện và phân tích.
Cụ thể, các kỹ thuật này làm phẳng logic của chương trình thành các bộ điều phối kiểu switch, khiến việc truy vết trực tiếp trở nên cực kỳ khó khăn. Chúng còn chèn các đường dẫn mã gây hiểu lầm và làm phức tạp các lệnh, tăng đáng kể rào cản cho quá trình reverse-engineering. Các đánh giá về các công cụ khử obfuscation mã nguồn mở, bao gồm MODeflattener, đã làm nổi bật những hạn chế của chúng đối với mẫu mã độc này, đòi hỏi các tùy chỉnh đặc biệt để xử lý hiệu quả.
Phương Pháp Luận Khử Obfuscation Mã Độc
Để vượt qua lớp obfuscation phức tạp của mã độc KorPlug, các nhà phân tích đã áp dụng một phương pháp luận có hệ thống. Cách tiếp cận này giúp phá vỡ các rào cản do O-LLVM tạo ra, khôi phục logic ban đầu của mã độc.
Phân Loại Thành Phần Biểu Đồ Luồng Điều Khiển (CFG)
Quá trình thâm nhập vào lớp obfuscation của payload KorPlug bắt đầu bằng việc phân loại một cách hệ thống các thành phần CFG. Việc này là cần thiết để hiểu rõ cấu trúc và chức năng của mã độc.
- Khối tiền điều phối (Pre-dispatcher block): Dễ nhận dạng qua số lượng tiền nhiệm cao và một nhảy đơn giản đến bộ điều phối ban đầu.
- Bộ điều phối (Dispatcher): Thao tác một biến trạng thái để giải quyết các đường dẫn thực thi khác nhau.
- Các khối xương sống (Backbone blocks): Thực thi các kiểm tra biến thông qua các chuỗi lệnh như JMP, MOV, SUB và JZ để điều hướng luồng.
- Các khối liên quan (Relevant blocks): Chứa logic cốt lõi của mã độc, được chia thành loại đơn giản (gán MOV cứng) và có điều kiện (CMOVZ-driven).
- Các khối đuôi (Tail blocks): Chỉ là các nhảy chuyển tiếp, được xác định và loại bỏ để tinh gọn CFG.
Việc phân loại này cho phép ánh xạ chính xác các gán biến trạng thái với các nhảy hợp lệ, qua đó tiết lộ các chuỗi lệnh được xác định trước. Các chuỗi này duy trì chức năng của mã độc KorPlug giữa cấu trúc bị làm phẳng. Hiểu được cơ chế kiểm soát luồng điều khiển này là rất quan trọng để khôi phục logic hoạt động ban đầu.
Tự Động Hóa Khử Obfuscation với Framework Angr
Để tự động hóa quá trình khử obfuscation mã độc này, một script đã được phát triển bằng Python cùng với framework angr. Script này thực hiện các bước quan trọng để tái cấu trúc CFG.
Cụ thể, script tự động hóa việc liệt kê các khối, lập danh mục giá trị trạng thái và vá nhị phân. Nó thay thế các nhảy obfuscated bằng các lệnh trực tiếp hoặc có điều kiện, chèn các lệnh NOP để duy trì căn chỉnh và loại bỏ các phần tử điều phối cùng các khối xương sống không cần thiết. Kết quả là một CFG được tinh gọn, phản ánh chính xác logic ban đầu của KorPlug.
Phương pháp này không chỉ làm rõ hành vi của mã độc KorPlug, chẳng hạn như các chuyển đổi điều khiển bằng biến cho phép thực thi mô-đun, mà còn có khả năng thích ứng với các mối đe dọa O-LLVM tương tự. Nó vượt trội hơn các công cụ như MODeflattener thông qua khả năng nhận dạng mẫu tổng quát và hiệu quả hơn trong việc phân tích mã độc KorPlug.
Minh Bạch Hóa TTPs và Cải Thiện Threat Intelligence
Sau khi vá, các chiến thuật, kỹ thuật và quy trình (TTPs) của mã độc KorPlug trở nên minh bạch hơn. Điều này hỗ trợ đáng kể trong việc đánh giá lỗ hổng và nâng cao khả năng phân tích và tổng hợp threat intelligence.
Phương pháp luận này phơi bày các kỹ thuật né tránh tinh vi của mã độc KorPlug, giúp các nhà phòng thủ đối phó hiệu quả hơn với các luồng điều khiển bị làm phẳng trong bối cảnh mã độc đang phát triển. Mặc dù cần có các điều chỉnh cụ thể cho mẫu đối với các công cụ hiện có, việc triển khai dựa trên angr mang lại một framework mạnh mẽ và có thể mở rộng cho các ứng dụng rộng hơn trong phân tích và đối phó với các mối đe dọa mã độc phức tạp.









