Phân tích phiên bản cập nhật mới của trình tải độc hại HijackLoader
TỔNG QUAN
HijackLoader (còn gọi là IDAT Loader) là một trình tải phần mềm độc hại được phát hiện lần đầu vào năm 2023, có khả năng sử dụng nhiều mô-đun khác nhau để tiêm lệnh và thực thi mã. Đây là tính năng đặc biệt mà hầu hết các trình tải độc hại khác không có. HijackLoader có kiến trúc mô-đun được sử dụng để phân phối payload đối với các loại mã độc như Amadey, Lumma Stealer, Racoon Stealer v2 và Remcos RAT. Trước đây, Tạp chí An toàn thông tin đã từng có bài viết phân tích về các kỹ thuật của HijackLoader, đặc biệt là thảo luận về các mô-đun của phần mềm độc hại này.
Trong phiên bản mới, phương thức phân phối của HijackLoader liên quan đến việc sử dụng hình ảnh PNG, được giải mã và phân tích cú pháp để tải giai đoạn tiếp theo của cuộc tấn công. Đồng thời sử dụng các kỹ thuật lẩn tránh phát hiện, những cải tiến này nhằm mục đích tăng khả năng tàng hình của phần mềm độc hại, do đó nó không bị phát hiện trong thời gian dài hơn. HijackLoader hiện bao gồm các mô-đun bổ sung để thêm tính năng loại trừ cho Windows Defender Antivirus và bỏ qua chức năng kiểm soát tài khoản người dùng (UAC).
PHÂN TÍCH KỸ THUẬT
Giai đoạn đầu
Mục đích của giai đoạn đầu tiên của trình tải là giải mã và giải nén các mô-đun HijackLoader sau: “ti64” cho tiến trình 64 bit, “ti” cho tiến trình 32 bit và thực hiện giai đoạn thứ hai.
Giai đoạn đầu tiên giải quyết các API một cách linh hoạt bằng cách đi qua khối à Process Environment Block (PEB) và phân tích cú pháp tiêu đề Portable Executable (PE). Trình tải sử dụng thuật toán băm SDBM bên dưới để phân giải API.
Hình 1. Thuật toán băm SDBM
Bằng cách sử dụng thuật toán băm SDBM (Hình 1), trình tải sẽ phân giải các API WinHTTP để kiểm tra kết nối Internet. Điều này đạt được với URL sau: “https://apache[.]org/logos/res/incubator/default[.]png”.
Trình tải sẽ lặp lại quá trình này cho đến khi có kết nối Internet. Sau đó, HijackLoader giải mã shellcode rồi thiết lập quyền thực thi bằng VirtualProtect và gọi địa chỉ bắt đầu của shellcode.
Shellcode sử dụng lại thuật toán băm SDBM để phân giải các API bổ sung. Sau đó, nó sử dụng API RtlGetNativeSystemInfo để kiểm tra các tiến trình được liệt kê trong danh sách chặn (blocklist) đang chạy trên hệ thống. Trong các phiên bản trước của HijackLoader, trình tải đã kiểm tra 5 tiến trình liên quan đến ứng dụng chống vi-rút. Bây giờ, mã chỉ kiểm tra 2 tiến trình.
Tên của các tiến trình đang chạy được chuyển đổi thành chữ thường và thuật toán băm SDBM được so sánh với giá trị băm của hai tiến trình. Nếu các giá trị này khớp nhau thì việc thực thi sẽ bị trì hoãn khi sử dụng API NtDelayExecution.
Bảng 1. Tiến trình trong danh sách chặn của HijackLoader
Lưu ý rằng, tiến trình AVG cũng bị các phiên bản HijackLoader trước đó đưa vào danh sách chặn.
Quá trình tải giai đoạn thứ hai
Có hai phương pháp mà HijackLoader sử dụng để tải giai đoạn thứ hai, cả hai đều được nhúng trong cấu hình của phần mềm độc hại. HijackLoader truy xuất DWORD từ cấu hình ở offset 0x110 và giá trị của XOR với DWORD từ cấu hình ở offset 0x28. Hãy coi kết quả của XOR này là giá trị “a”.
Phần mềm độc hại tải một bản sao của chính nó vào bộ nhớ bằng cách sử dụng hai hàm GlobalAlloc và ReadFile. Sau đó, nó đọc giá trị DWORD từ cấu hình ở offset 0xC và thêm giá trị này vào địa chỉ nơi tệp phần mềm độc hại được tải vào bộ nhớ, sau đó đọc giá trị DWORD từ địa chỉ này. Hãy gọi giá trị này là “b”.
- Nếu “a” và “b” không khớp, tệp PNG sẽ được tải xuống và sử dụng để tải giai đoạn thứ hai.
- Nếu “a” và “b” khớp nhau thì PNG được nhúng sẽ được sử dụng để tải giai đoạn thứ hai.
Hình 2 hiển thị mã HijackLoader đã được dịch ngược để kiểm tra xem PNG có được nhúng trong tệp không hay nó cần được tải xuống riêng.
Hình 2. Output được dịch ngược của HijackLoader
Nếu PNG được nhúng, phần mềm độc hại sẽ bắt đầu tìm kiếm hình ảnh PNG với các byte sau: 49 44 41 54 C6 A5 79 EA. Điều này chứa IDAT header 49 44 41 54 và header magic C6 A5 79 EA.
Hình 3. Định dạng của IDAT header
Nếu cần tải xuống PNG, URL sẽ được giải mã bằng mật mã XOR đơn giản. Sau đó, thư viện WinHTTP được sử dụng để tải xuống PNG từ URL này.
Có nhiều đối tượng blob được mã hóa trong tệp PNG. Mỗi blob này lưu trữ ở định dạng “Blob size:IDAT header” và có thể phát hiện bằng cách tìm kiếm IDAT header. Kích thước của mỗi blob mã hóa được phân tích cú pháp. Khi đạt đến tổng kích thước, dữ liệu này sẽ được giải mã bằng mã XOR với khóa: 32 A3 49 B3. Sau đó, blob giải mã được giải nén bằng thuật toán LZNT1.
Dữ liệu được giải nén chứa các mô-đun và cấu hình được sử dụng để tải giai đoạn thứ hai. Giá trị offset tại 0xF4 của dữ liệu giải nén chứa tên DLL (trong trường hợp cụ thể này là pla[.]dll) được tải vào bộ nhớ. Sau đó, các mô-đun này được phân tích cú pháp để định vị mô-đun ti (theo tên) bằng thuật toán băm SDBM. Sau đó, mô-đun ti được sao chép vào trường BaseOfCode DLL và thực thi.
Để tăng khả năng tàng hình trong hệ thống, giai đoạn thứ hai của trình tải sử dụng nhiều kỹ thuật chống phân tích hơn bằng cách sử dụng nhiều mô-đun. Các mô-đun này có các tính năng bao gồm bỏ qua UAC, loại trừ Windows Defender Antivirus và sử dụng kỹ thuật Process Hollowing để ẩn dấu các tiến trình.
Các nhà phát triển HijackLoader đã tiếp tục tạo ra các mô-đun mới, bao gồm:
- Mô-đun modCreateProcess: mô-đun này lấy giá trị một con trỏ tới một mảng array làm đối số. Mảng này chứa các đối số lpCommandLine, dwCreationFlags, lpStartupInfo và lpProcessInformationđược sử dụng để tạo tiến trình mới.
- Mô-đun modCreateProcess64: phiên bản 64-bit của modCreateProcess.
- Mô-đun modUAC: mô-đun này cũng lấy một con trỏ tới một mảng array làm đối số. Nó được sử dụng để bỏ qua kiểm tra UAC bằng interface CMSTPLUA COM.
- Mô-đun modUAC64: phiên bản 64-bit của modUAC.
- Mô-đun modWriteFile: mô-đun này cũng lấy một con trỏ tới một mảng array làm đối số. Mảng này chứa khóa XOR, địa chỉ nguồn, địa chỉ đích và kích thước dữ liệu. Dữ liệu nguồn được XOR bằng khóa và sao chép vào địa chỉ đích. Địa chỉ đích (chứa dữ liệu được giải mã) và kích thước dữ liệu được cung cấp dưới dạng đối số cho WriteFile.
- Mô-đun modWriteFile64: phiên bản 64-bit của modWriteFile.
- Mô-đun WDDATA: chứa lệnh PowerShell để thêm tính năng loại trừ Windows Defender Antivirus.
Mô-đun ti
Mô-đun ti có chức năng phân giải các API bằng cách duyệt qua PEB và phân tích cú pháp các PE header bằng cách sử dụng CRC-32 làm thuật toán băm. Sau đó, nó sẽ kiểm tra xem một giá trị mutex có tên được phân giải bằng cách sử dụng hàm băm CRC-32 có hiện diện trên hệ thống hay không. Nếu có mutex thì quá trình sẽ kết thúc; mặt khác, nó tiếp tục thực hiện.
Tiếp theo, mô-đun ti lấy biến môi trường ở offset 0x45 từ dữ liệu được giải nén (%APPDATA%), mở rộng nó và kiểm tra xem tiến trình hiện tại có đang chạy trong thư mục này hay không. Nếu không, nó sẽ tự sao chép vào vị trí này, thực thi tệp đã sao chép và tự kết thúc.
PHÂN PHỐI PHẦN MỀM ĐỘC HẠI
Vào tháng 3/2024, các nhà nghiên cứu của Zscaler đã phân tích khoảng 50 mẫu HijackLoader có nhúng tệp và cho biết trình tải này đã được sử dụng để phát tán phần mềm độc hại sau:
- Amadey: Trojan thu thập dữ liệu về hệ thống của nạn nhân và có khả năng tải phần mềm độc hại khác.
- Lumma Stealer (còn gọi là LummaC2 Stealer): Trình đánh cắp thông tin dữ liệu ví tiền điện tử, tài khoản steam, KeePass, FileZilla và tiện ích mở rộng trình duyệt.
- Racoon Stealer v2: Trình đánh cắp thông tin mật khẩu, cookie, dữ liệu tự động điền và ví tiền điện tử.
- Remcos: Trojan truy cập từ xa (RAT) được sử dụng để truy cập backdoor vào hệ thống của nạn nhân.
- Meta Stealer: Trình đánh cắp thông tin nhắm mục tiêu vào các trình duyệt, ví tiền điện tử, tiện ích mở rộng ví và tài khoản steam, đồng thời có nhiều điểm tương đồng với Redline Stealer.
- Rhadamanthys: Trình đánh cắp thông tin nhắm vào email, ứng dụng ghi chú và các ứng dụng nhắn tin.
Hình 4 minh họa sự phân bố của các dòng phần mềm độc hại do HijackLoader phân phối.
Hình 4. Biểu đồ hiển thị các dòng phần mềm độc hại khác nhau do HijackLoader phân phối
KẾT LUẬN
HijackLoader đã nổi lên như một mối đe dọa đáng kể, có khả năng phát tán nhiều phần mềm độc hại như Amadey, Lumma Stealer, Racoon Stealer v2 và Remcos RAT. Trong số này, Amadey được biết là mã độc được HijackLoader cung cấp phổ biến nhất.
Quá trình tải giai đoạn thứ hai liên quan đến việc sử dụng các tệp hình ảnh PNG được nhúng hoặc hình ảnh PNG tải xuống từ web, được giải mã và phân tích cú pháp để tải mô-đun ti. Ngoài ra, các mô-đun mới cũng đã được tích hợp vào HijackLoader, nâng cao khả năng của nó và khiến trình tải độc hại này trở nên mạnh mẽ hơn nữa.
Để hỗ trợ cộng đồng nghiên cứu phân tích HijackLoader, các nhà nghiên cứu Zscaler đã tạo một tập lệnh Python có sẵn trong kho lưu trữ GitHub. Tập lệnh cho phép giải mã và giải nén giai đoạn thứ hai, cung cấp quyền truy cập vào các mô-đun của HijackLoader. Quý độc giả có thể tìm hiểu tại đây.
Xuân Hưng (Tổng hợp)