Giải mã biến thể mới của phần mềm độc hại Bandook
TỔNG QUAN VỀ TROJAN BANDOOK
Bandook được phát hiện lần đầu tiên vào năm 2007 và cho thấy sự phát triển mạnh mẽ theo từng giai đoạn. Đáng chú ý, Bandook được trang bị nhiều tính năng để giành quyền kiểm soát từ xa các hệ thống bị nhiễm. Phần mềm độc hại này đã được các tác nhân đe dọa khác nhau sử dụng trong nhiều chiến dịch khác nhau trong nhiều năm qua.
Các nhà nghiên cứu của FortiGuard Labs đã xác định một biến thể Bandook mới đang được phân phối qua tệp PDF vào tháng 10/2023. Tệp PDF này chứa một URL rút gọn tải xuống tệp .7z được bảo vệ bằng mật khẩu. Sau khi nạn nhân trích xuất phần mềm độc hại bằng mật khẩu trong tệp PDF, Bandook sẽ nhúng payload của nó vào tiến trình msinfo32[.]exe.
Vào tháng 7/2021, công ty an ninh mạng ESET của Slovakia đã trình bày chi tiết về một chiến dịch gián điệp mạng lợi dụng biến thể nâng cao của Bandook để xâm nhập mạng công ty ở các quốc gia nói tiếng Tây Ban Nha như Venezuela.
Điểm bắt đầu của chuỗi tấn công mới nhất là một thành phần Injector được thiết kế để giải mã và tải payload vào msinfo32[.]exe, một tệp nhị phân Windows hợp pháp thu thập thông tin hệ thống để chẩn đoán sự cố máy tính. Phần mềm độc hại ngoài việc thực hiện các thay đổi trong Registry để thiết lập tính bền vững trên máy chủ bị xâm nhập, còn thiết lập liên hệ với máy chủ C2 để truy xuất các payload và hướng dẫn bổ sung.
GIẢI MÃ BIẾN THỂ MỚI CỦA BANDOOK
Thành phần Injector
Như đã đề cập trước đó, Injector sẽ giải mã payload trong bảng tài nguyên và nhúng vào msinfo32[.]exe. Trước khi chèn, khóa Registry sẽ được tạo để kiểm soát hành vi của payload. Tên khóa này là PID của msinfo32[.]exe và giá trị chứa mã điều khiển cho payload. Sau khi thực thi với bất kỳ đối số nào, Bandook sẽ tạo một khóa Registry chứa một mã kiểm soát khác cho phép payload của nó thiết lập tính bền vững và sau đó đưa payload đó vào một tiến trình mới của msinfo32[.]exe. Có hai khóa Registry được hiển thị trong Hình 1.
Hình 1. Các khóa Registry được tạo bởi Bandook
Một biến thể của Bandook được báo cáo vào năm 2021 yêu cầu bốn mã kiểm soát và tạo ra bốn tiến trình explorer[.]exe mà nó đưa vào trong một lần thực thi. Trong khi đó, biến thể mới này sử dụng ít mã điều khiển hơn và phân chia nhiệm vụ chính xác hơn.
Thành phần payload
Hình 2. Luồng thực thi của payload
Hình 2 là luồng thực thi payload của biến thể mới Bandook. Sau khi được chèn, payload sẽ khởi tạo các chuỗi cho tên khóa của Registry, cờ, API,… Sau đó, phần mềm độc hại sử dụng PID của msinfo32[.]exe được chèn để tìm khóa Registry, rồi giải mã và phân tích giá trị khóa để thực hiện tác vụ được chỉ định bởi mã điều khiển.
Biến thể mà các nhà nghiên cứu phát hiện vào tháng 10/2023 có thêm hai mã kiểm soát, nhưng thành phần Injector của nó không tạo khóa Registry cho chúng. Một yêu cầu payload tải fcd.dll, tải xuống bởi một tiến trình được chèn khác và gọi hàm init của fcd.dll. Cơ chế còn lại thiết lập tính bền vững và thực thi bản sao của Bandook. Các mã kiểm soát không được sử dụng này đã bị xóa khỏi các biến thể mới hơn. Trong số hai mã kiểm soát còn lại, ACG là mã kiểm soát chính cho một cuộc tấn công, trong khi GUM thiết lập cơ chế duy trì.
Mã kiểm soát GUM
Khi mã kiểm soát là GUM, Bandook tạo một bản sao vào thư mục SMC trong appdata dưới dạng “SMC[.]exe” hoặc “SMC[.]cpl” và tạo khóa Registry để tự động thực thi bản sao.
Hình 3. Ba khóa Registry chạy SMC.exe
Hình 4. Khóa Registry và giá trị của nó khi bản sao là SMC[.]cpl
Mã điều khiển ACG
Khi mã điều khiển là ACG, payload có thể tải xuống các tệp cho các mô-đun khác, bao gồm fcd[.]dll, pcd[.]dll, tệp thực thi và các tệp khác. Đây là chức năng tùy chọn dựa trên các cờ được đặt khi payload khởi chạy. Các tệp tin cũng có thể được tải xuống từ máy chủ C2 khi cần thiết. Nếu fcd[.]dll được tải xuống, Bandook sẽ gọi các hàm của nó và chuyển tên khóa của Registry làm đối số. Tương tự, nhiều khóa Registry lưu trữ thông tin được sử dụng trong các hành động khác.
Một hành động có thể được tách thành nhiều phần và cần phải ghép tất cả các lệnh và khóa Registry liên quan lại với nhau. Ví dụ, giao tiếp C2 có thể sử dụng một lệnh để ghi khóa Registry và một lệnh riêng để đọc nó.
Kết nối C2
Hình 5. Dữ liệu thu thập lưu lượng truy cập và giải mã AES của thông tin nạn nhân
Đầu tiên, Bandook gửi thông tin nạn nhân đến máy chủ C2. Nếu máy chủ này khả dụng, Bandook sẽ nhận các lệnh từ máy chủ, bao gồm một số lệnh như: *DJDSR^, @0001, @0002,... Mặc dù chuỗi string trong các biến thể mới nhất là @0155, một số chuỗi chỉ được sử dụng khi gửi kết quả đến máy chủ và một số chuỗi khác chỉ tồn tại trong các mô-đun khác. Hình 5 minh họa việc payload không sử dụng lệnh @0133, mặc dù nó có thể được tìm thấy trong fcd[.]dll.
Hình 6. Lệnh @0133 có thể được tìm thấy trong fcd[.]dll
Mặc dù được đánh số, nhưng payload chỉ hỗ trợ 139 hành động. Ngoài ra, một số lệnh đặc biệt chỉ được gửi đến máy chủ trong những điều kiện cụ thể. Vì hầu hết các hành động đều giống như trong các biến thể trước đó nên các nhà nghiên cứu tập trung vào việc liên lạc giữa Bandook và máy chủ C2 bằng cách sử dụng các lệnh mới được thêm vào các biến thể gần đây nhất.
Những hành động này có thể được phân loại bao gồm các thao tác tệp, thao tác tạo khóa Registry, tải xuống, đánh cắp thông tin, thực thi tệp, gọi các chức năng trong dll từ C2, kiểm soát máy tính của nạn nhân, xóa tiến trình và gỡ cài đặt phần mềm độc hại. Dữ liệu từ máy chủ C2 có định dạng sau: {Command}~!{Arg2}~!{Arg3}~!{Arg4}~!{Arg5}~!{Arg6}~!. Trong đó, đối số đầu tiên là lệnh. Arg2 đến Arg6 là tùy chọn.
Các lệnh và hành động thực thi
Dưới đây là các ví dụ về hành động yêu cầu nhiều lệnh và hành động có cơ chế phức tạp.
Lệnh @0003, @0004
Hành động này thể hiện việc đọc tệp tin. Nếu Arg3 là R, nó sẽ tiếp tục gọi hàm Sleep cho đến khi máy chủ C2 gửi @0004 và các đối số liên quan của nó tới Bandook. Lệnh @0004 đưa ra một giá trị để xác định nơi đọc tệp hoặc không làm gì cả. Cuối cùng, Bandook gửi tệp do Arg2 chỉ định đến máy chủ C2.
Hình 7. Luồng quy trình khi Bandook nhận được @0003 từ máy chủ
Lệnh @0006, @0007
Hành động này là về việc ghi tệp tin. Tương tự như @0003, @0006 đợi @0007. @0007 xác định cách ghi dữ liệu từ máy chủ C2 vào tệp cục bộ.
Hình 8. Luồng quy trình khi Bandook nhận được @0007 từ máy chủ
Lệnh @0126, @0127, @0128
Các lệnh này thực thi một tệp Python. Lệnh chính là @0128 gọi hàm ShellExecute để chạy tệp Python {Parent directory}\Lib\dpx.pyc với các đối số Arg2 đến Arg6. Thư mục {Parent directory} được lưu trữ trong khóa Registry pthma trong HKCU\Software. Lệnh @0126 kiểm tra giá trị của pthma và gửi kết quả đến máy chủ. Đối với @0127, lệnh này ghi Arg2 của nó vào pthma nếu fcd[.]dll được khởi tạo trong máy tính của nạn nhân.
Lệnh @0124
Lệnh này giám sát màn hình của nạn nhân và điều khiển máy tính. Khi Bandook nhận được lệnh này, nó sẽ ghi đè lên tệp cấu hình của Firefox pref[.]js bằng mã được mã hóa cứng trong payload và vô hiệu hóa các cơ chế bảo vệ trong Microsoft Edge.
Sau đó, Bandook tạo một máy tính ảo và gán nó cho một luồng mới được tạo (Thread_Control) để thiết lập giao tiếp mới với máy chủ C2. Đầu tiên nó gửi chuỗi AVE_MARIA, theo sau là một gói khác chứa số 1 đến máy chủ.
Hình 9. Mã nguồn mã độc Bandook thực hiện gửi chuỗi AVE_MARIA và số
Nếu máy chủ phản hồi, Bandook sẽ tạo một luồng khác để tiếp tục gửi ảnh chụp màn hình đến máy chủ. Luồng này cũng gửi hai gói bao gồm chuỗi AVE_MARIA và số 0. Trong khi đó, Thread_Control nhận vị trí và mã điều khiển từ máy chủ. Ngoài ra, còn có 3 lệnh mới so với biến thể năm 2021:
Lệnh @0138
Thao tác này ghi các URL sao lưu được mã hóa vào khóa Registry kPYXM trong HKCU\Software\AkZhAyV0\. Khi máy chủ C2 hiện tại không khả dụng, Bandook sẽ giải mã nó và cố gắng truy cập các URL. Mã độc này sẽ trích xuất các URL và thử các URL này một cách tuần tự nếu URL trước đó không có sẵn.
Lệnh @0139
Lệnh này yêu cầu Bandook phân tích cú pháp cookie từ trình duyệt do C2 chỉ định, bao gồm Chrome, Edge, Firefox và lưu kết quả dưới dạng Default.json trong tệp .zip.
Lệnh @0140
Trong biến thể trước, lệnh @0140 bị thiếu. Lệnh này sẽ yêu cầu Bandook thiết lập cơ chế lưu giữ lâu dài với sub_13160400, cũng được gọi khi mã điều khiển là GUM (như trong Hình 10).
Hình 10. Biến thể mới sử dụng chức năng tương tự trong mã điều khiển và lệnh
KẾT LUẬN
Bài viết này giải mã những chi tiết mới về cơ chế C2 của phần mềm độc hại Bandook và các tính năng nâng cao trong biến thể mới nhất của nó. Một số lượng lớn các lệnh liên lạc C2 có thể được tìm thấy trong phần mềm độc hại này. Tuy nhiên, các tác vụ do payload thực hiện ít hơn số lượng trong lệnh. Điều này là do nhiều lệnh được sử dụng cho một hành động, một số lệnh gọi hàm trong các mô-đun khác và một số lệnh chỉ được sử dụng để phản hồi máy chủ.
Hồng Đạt
(Tổng hợp)