HijackLoader là trình tải phần mềm độc hại mới đã trở nên phổ biến trong vài tháng qua. Mặc dù HijackLoader không chứa các tính năng nâng cao, nhưng nó có khả năng sử dụng nhiều module khác nhau để chèn và thực thi mã vì nó sử dụng kiến trúc module, một tính năng mà hầu hết các trình tải không có. Dựa trên báo cáo của Zscaler, bài viết này sẽ trình bày các hoạt động bên trong của HighjackLoader, từ quá trình khởi tạo đến thiết kế module cho đến các kỹ thuật chống phân tích.
TỔNG QUAN
HijackLoader là trình tải phần mềm độc hại mới mà nhóm nghiên cứu phần mềm nhúng ThreatLabz đến từ công ty an ninh mạng Zscaler đã phát hiện lần đầu tiên vào tháng 7/2023. Trình tải này đang được sử dụng để tải các dòng phần mềm độc hại khác nhau như Danabot, SystemBC và RedLine Stealer, làm tăng thêm mối đe dọa tiềm tàng của nó.
HijackLoader sử dụng lời gọi hệ thống (system call – cách làm cho chương trình thực hiện một tương tác với hệ điều hành) để trốn tránh sự giám sát từ các giải pháp bảo mật, phát hiện các quy trình cụ thể dựa trên danh sách chặn được nhúng và trì hoãn việc thực thi mã ở các giai đoạn khác nhau.
Phần mềm độc hại này sử dụng các module nhúng cung cấp khả năng thực thi và tiêm mã (code injection), một tính năng không phổ biến ở các trình tải thông thường. Thiết kế module của HijackLoader cho phép nó hoạt động linh hoạt, thích ứng với nhiều hành động khác nhau và tránh bị phát hiện hiệu quả hơn.
TRÌNH TẢI GIAI ĐOẠN ĐẦU TIÊN
Giai đoạn khởi tạo
Sau khi được kích hoạt, HijackLoader bắt đầu bằng cách thực thi một chức năng đã sửa đổi của Windows C Runtime (CRT). Trong giai đoạn khởi tạo, trình tải xác định xem payload cuối cùng đã được nhúng vào tệp nhị phân hay nó cần tải xuống từ máy chủ bên ngoài. Để đạt được điều này, HijackLoader bao gồm một cấu hình được mã hóa, lưu trữ thông tin, ví dụ như:
- Giá trị băm DWORD để phát hiện giai đoạn tiếp theo.
- Mã băm API Windows để tải động (dynamic loading).
- Một mảng array DWORD được sử dụng để xác định xem trình tải có phải tải xuống payload cuối cùng hay không. Offset cho các trường này có thể khác nhau tùy theo mẫu.
- Tham số cho một số chức năng Windows API.
- Giá trị DWORD được sử dụng để xác thực payload khi được tải từ ổ đĩa bằng cách tìm kiếm nó trong dữ liệu của payload.
- Giá trị DWORD, được sử dụng để phát hiện tất cả các BLOB (Binary Large Object – một kiểu dữ liệu có thể lưu trữ đối tượng nhị phân hoặc dữ liệu) của payload được mã hóa.
- Danh sách chặn các tiến trình (được mô tả sau trong Bảng 1).
Khối cấu hình (block) ở trên được phát hiện bằng cách sử dụng các offset được mã hóa cứng (hardcode) và sau đó được giải mã bằng phép XOR hoặc ADD theo bit.
Chống phân tích
Giai đoạn đầu tiên bao gồm một số kỹ thuật nhằm chống sự phân tích của các giải pháp bảo mật:
- Tải động các chức năng API của Windows bằng cách tận dụng kỹ thuật băm API tùy chỉnh.
- Thực hiện kiểm tra kết nối HTTP tới một trang web hợp pháp (ví dụ: mozilla.org). Nếu không thể thực hiện kết nối thì HijackLoader sẽ không tiếp tục thực thi và đi vào một vòng lặp vô hạn cho đến khi kết nối được thực hiện.
- Trì hoãn việc thực thi mã ở các giai đoạn khác nhau.
- Giai đoạn đầu tiên kiểm tra sự hiện diện của một tập hợp các tiến trình đang chạy. Tùy thuộc vào tiến trình hiện có, nó sẽ thực thi các chức năng khác nhau.
Bảng 1. Danh sách chặn các tiến trình của HijackLoader
TRÌNH TẢI GIAI ĐOẠN HAI
HijackLoader định vị payload của giai đoạn thứ hai (tức là module “ti”) bằng cách thực hiện theo các bước sau:
1. Phân tích khối cấu hình được giải mã, được lấy từ giai đoạn khởi tạo. Sau đó, HijackLoader định vị URL payload được mã hóa và giải mã nó bằng phép XOR theo bit.
2. Payload tải xuống và xác thực nó bằng cách kiểm tra sự hiện diện của ký số (có trong khối cấu hình) trong dữ liệu của nó. Nếu quá trình xác thực thành công, nó sẽ ghi nó vào ổ đĩa.
3. Tìm kiếm các BLOB được mã hóa bằng điểm đánh dấu thứ hai. Mỗi điểm đánh dấu thể hiện sự bắt đầu của một BLOB được mã hóa cùng với kích thước của BLOB (được lưu trữ trước mỗi lần xuất hiện). Hơn nữa, khóa XOR nằm sau offset của BLOB được mã hóa đầu tiên.
4. Khi tất cả các BLOB được mã hóa đã được trích xuất, chúng sẽ được nối với nhau và được giải mã bằng khóa XOR.
5. Cuối cùng, payload được giải mã sẽ giải nén bằng thuật toán LZNT1.
Hình 1. Mã giai đoạn thứ hai của HijackLoader để tải xuống và thực thi payload
Quy trình tương tự được thực hiện khi payload được tải từ ổ đĩa. Sự khác biệt duy nhất là HijackLoader sử dụng một mẫu bổ sung (từ khối cấu hình) để tìm offset đầu của payload được nhúng (Hình 2).
Hình 2. Thực thi payload giai đoạn hai của HijackLoader từ một tệp cục bộ
Payload được giải mã bao gồm hai thành phần:
– Bảng module: Bảng này bao gồm các module HijackLoader cùng với cài đặt của chúng và payload cuối cùng (ví dụ: SystemBC).
– Shellcode và cài đặt chính hoặc danh sách các tệp tùy chọn được sử dụng để chiếm quyền điều khiển DLL.
Tiếp theo, giai đoạn đầu tiên cần tải và thực hiện giai đoạn tiếp theo. Điều này được thực hiện bằng cách lấy đường dẫn tệp của DLL để vá (ví dụ: “mshtml.dll”) và một bảng cho các module của HijackLoader được bao gồm trong payload được giải mã.
Sau đó, HijackLoader tải DLL được chỉ định và định vị giai đoạn tiếp theo (module “ti”) sau khi tìm kiếm hàm băm của nó (có trong khối cấu hình) trong bảng module. Cuối cùng, nó sao chép dữ liệu của module vào phần mã của DLL hợp pháp và thực thi nó. Chú ý, đường dẫn tệp và tên của các tệp được HijackLoader ghi vào đĩa được tạo dựa trên tên người dùng của máy chủ bị xâm nhập.
MODULE
Các module của HijackLoader hỗ trợ quá trình thực thi và chèn mã của payload cuối cùng. Bảng 2 hiển thị một số module được ThreatLabz xác định, cùng với các giá trị và chức năng CRC32 tương ứng.
Bảng 2. Một số module HijackLoader được ThreatLabz quan sát
Hơn nữa, mỗi module có cấu trúc chứa thông tin như: tên module; offset module trong bảng; kích thước module. Do chất lượng của mã và phần còn lại của các trường cấu trúc không được sử dụng nên các nhà nghiên cứu không thể xác định mục đích của các thành viên cấu trúc còn lại.
Tuy nhiên, ThreatLabz đánh giá rằng các thông tin sau cũng có thể được đưa vào như: dấu thời gian của module; tên nội bộ (ví dụ: “rLdr64” cho module “rshell”).
Từ các module được đề cập ở trên, phân tích của các nhà nghiên cứu tập trung vào “ti” và các module shellcode thiết bị chính, vì hai module này triển khai phần lớn chức năng chính cho HijackLoader.
Module “ti”
Các kỹ thuật chống phân tích cũng giống như được trình bày trong phần trước, nhưng có hai điểm khác biệt đáng chú ý:
- Các nhà phát triển đã đưa vào kỹ thuật “Heaven’s gate” (tên thường gọi của một kỹ thuật cho phép binary 32-bit thực thi các lệnh 64-bit mà không cần tuân theo luồng xử lý chuẩn trên môi trường).
- Danh sách chặn tiến trình vẫn giữ nguyên nhưng hành vi mã khác nhau.
Vai trò chính của module này là đưa module “Main instrumentation” vào, chịu trách nhiệm tải giai đoạn cuối cùng. Module “ti” thực hiện giai đoạn tiếp theo bằng cách sử dụng một trong các phương pháp sau:
- Thực thi lại tệp ban đầu từ vị trí và tham số mới.
- Tạo một tiến trình mới (được chỉ định trong cấu hình), ánh xạ tệp bị tấn công vào đó (ví dụ: “mshtml”) và chèn mã shellcode của module “Main instrumentation”. Ngoài ra (tùy thuộc vào cờ cấu hình), nó thực thi module “FIXED”, modul này có thể được sử dụng sau này để chèn mã.
- HijackLoader có thể bao gồm một tập hợp tệp bổ sung, có thể được sử dụng để chiếm quyền điều khiển DLL. Trong trường hợp này, nó ghi chúng vào ổ đĩa cùng với payload được mã hóa (từ giai đoạn 1) và thực thi tệp thực thi bị tấn công.
- Thực thi module “ESLDR” và đưa vào shellcode “Main instrumentation”.
Module “Main instrumentation”
Module này chứa chức năng chính để tải và thực thi giai đoạn cuối cùng của chuỗi lây nhiễm.
Các kỹ thuật chống phân tích vẫn được giữ nguyên với các giai đoạn nói trên. Tuy nhiên, một điểm khác biệt chính là việc triển khai module “AVDATA”. Module này chứa một tập hợp các tên tiến trình và nếu phát hiện bất kỳ tên nào trong số đó thì hành vi mã có thể thay đổi.
Tải trọng nhúng được giải mã bằng phép XOR theo bit với khóa được lấy từ 200 byte đầu tiên. Shellcode của HijackLoader sau đó tiến hành chèn hoặc thực thi trực tiếp payload được giải mã. Kỹ thuật mà shellcode sử dụng phụ thuộc vào một số yếu tố khác nhau, chẳng hạn như loại tệp của payload và cờ, được lưu trữ trong cài đặt và cho biết phương pháp chèn sẽ sử dụng.
KẾT LUẬN
HijackLoader là một trình tải module với các kỹ thuật lẩn tránh và chống phân tích, cung cấp nhiều tùy chọn tải cho các payload độc hại. Mức độ phổ biến ngày càng tăng của HijackLoader cho thấy các tác nhân đe dọa có thể ngày càng áp dụng nó trong việc triển khai tải các dòng phần mềm độc hại khác nhau. Vì thế, cá nhân người dùng cuối, các cơ quan, đơn vị cần phải luôn cảnh giác và cập nhật thường xuyên về các mối đe dọa nguy hiểm này, từ đó có phương án chủ động phòng tránh kịp thời.