Tổng quan về BunyLoader
BunnyLoader cung cấp nhiều chức năng khác nhau như tải xuống và thực thi payload giai đoạn tiếp theo, đánh cắp thông tin xác thực trình duyệt và thông tin hệ thống,… Ngoài ra, BunnyLoader sử dụng Keylogger để ghi lại các lần thao tác bàn phím và một clipper để theo dõi bộ nhớ đệm của nạn nhân và thay thế địa chỉ ví tiền điện tử bằng địa chỉ do tin tặc kiểm soát.
Sau khi có được thông tin, BunnyLoader sẽ đóng gói dữ liệu vào kho lưu trữ ZIP và tiến hành truyền dữ liệu thu thập được đến máy chủ ra lệnh và kiểm soát (C2). Trong bài viết này sẽ phân tích cách BunnyLoader hoạt động và các thành phần kỹ thuật của nó, dựa trên báo cáo của ThreatLabz.
Phần mềm độc hại này đã được rao bán trên nhiều diễn đàn khác nhau bởi một người dùng có tên “PLAYER_BUNNY”/”PLAYER_BL” với giá 250 USD.
Hình 1. Quảng cáo BunnyLoader từ các diễn đàn tội phạm
Dựa trên quảng cáo có thể thấy rằng, BunnyLoader có các tính năng sau:
- Biên dịch bằng ngôn ngữ C/C++.
- Fileless Loader - tải xuống và thực thi các giai đoạn phần mềm độc hại tiếp theo trong bộ nhớ.
- Thực thi lệnh từ xa.
- Kết hợp các kỹ thuật chống phân tích.
- Cung cấp bảng điều khiển web hiển thị nhật ký đánh cắp dữ liệu, tổng số nạn nhân hay tác vụ đang hoạt động,…
Phiên bản v1.0 của BunnyLoader lần đầu xuất hiện vào ngày 04/9/2023. Kể từ thời điểm đó, các nhà phát triển của nó đã bổ sung thêm nhiều chức năng hơn, như các cơ chế chống phát hiện và khả năng đánh cắp thông tin bổ sung, đồng thời phát hành phiên bản chính thứ hai vào cuối tháng 9/2023.
Các nhà nghiên cứu tại Zscaler lưu ý rằng BunnyLoader đang nhanh chóng trở nên phổ biến trong giới tội phạm mạng vì đây là một phần mềm độc hại đa tính năng với mức giá không quá cao.
Phân tích BunyLoader
Bảng điều khiển C2 cung cấp các tùy chọn cho người mua để giám sát các tác vụ đang hoạt động, thống kê lây nhiễm, tổng số máy chủ được kết nối và không hoạt động cũng như nhật ký đánh cắp. Nó cũng cung cấp khả năng lọc thông tin và điều khiển từ xa các máy bị xâm nhập.
Hình 2. Các chức năng chính của phần mềm độc hại có sẵn trực tiếp thông qua bảng điều khiển C2
Khi thực thi BunnyLoader, trình tải sẽ thực hiện các hành động sau:
1. Tạo một giá trị registry mới có tên “Spyware_Blocker” trong key registry: “HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run”, trong đó giá trị (value) là đường dẫn đến tệp nhị phân BunnyLoader. Giá trị đăng ký này cho phép BunnyLoader duy trì tính bền vững trên máy tính nạn nhân.
2. Ẩn cửa sổ sử dụng “ShowWindow()” với “nCmdShow” là “SW_HIDE”.
3. Tạo giá trị mutex “BunnyLoader_MUTEXControl” thông qua hàm “CreateMutexW()”.
4. Thực hiện các kỹ thuật chống VM sau:
- Kiểm tra các mô-đun: SxIn.dll - 360 Total Security; cmdvrt32.dll/cmdvrt64.dll - Comodo Antivirus; wine_get_unix_file_name - Wine Detection; SbieDll.dll - Sandbox.
- Kiểm tra máy ảo bằng cách sử dụng truy vấn “ROOT\CIMV2”: SELECT * FROM Win32_VideoController; Win32_Processor; Win32_NetworkAdapter; Win32_BIOS; SELECT * FROM Win32_ComputerSystem.
- Kiểm tra Docker container thông qua “/proc/1/cgroup” - nếu container tồn tại, BunnyLoader sẽ không thực hiện thêm các hành động độc hại.
- Kiểm tra các username sandbox có trong danh sách blacklist, ví dụ: ANYRUN; Sandbox; Test; Virus;…
Nếu xác định được sandbox, BunnyLoader sẽ đưa ra thông báo lỗi sau: “The version of this file is not compatible with the current version of Windows you are running. Check your computer's system information to see whether you need an x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher”. Có nghĩa là phiên bản của tệp không tương thích với phiên bản Windows hiện tại.
Mặt khác, BunnyLoader thực hiện yêu cầu đăng ký HTTP tới máy chủ C2 như Hình 3.
Hình 3. Yêu cầu gửi tới máy chủ C2
User Agent cho yêu cầu trên được đặt thành “BunnyLoader”. Nếu phản hồi từ C2 là “Connected”, BunnyLoader sẽ thực hiện các hành động độc hại quan trọng.
Thực thi tác vụ
Sau khi đăng ký, BunnyLoader gửi yêu cầu tác vụ đến máy chủ C2 “http[:]//37[.]139[.]129[.]145/Bunny/TaskHandler.php?BotID=<bot_id>” với User Agent là “BunnyTasks” . Như được hiển thị Hình 4, phản hồi cho yêu cầu tác vụ bao gồm “ID”, “Name” và “Params”.
Hình 4. Phản hồi cho yêu cầu tác vụ
Ở đây, Name là mô-đun (chức năng) sẽ được thực thi và Params là các tham số được truyền cho mô-đun. Dựa trên tên mô-đun nhận được trong phản hồi tác vụ, BunnyLoader sẽ thực hiện thêm các hành động của mình.
BunnyLoader bao gồm các tác vụ sau:
- Trojan Downloader: Tải xuống và thực thi phần mềm độc hại.
- Chức năng xâm nhập: Thực thi Keylogger và đánh cắp thông tin.
- Mô-đun Clipper nhắm mục tiêu ví tiền điện tử: Bitcoin, Monero, Ethereum, Litecoin, Dogecoin, Zcash, Tether.
- Thực thi lệnh từ xa.
Tác vụ Keylogger
BunnyLoader triển khai Keylogger cơ bản bằng cách sử dụng hàm “GetAsyncKeyState()” để ghi lại các lần gõ phím. Đầu ra của Keylogger được lưu trữ trong tệp “C:\Users\<username>\AppData\Local\Keystros.txt”.
Đánh cắp thông tin
BunnyStealer được thiết kế để đánh cắp thông tin liên quan đến trình duyệt web, ví tiền điện tử, VPN,... Cuối cùng, thông tin bị đánh cắp sẽ được lưu trữ trong một thư mục có tên “BunnyLogs” trong “Appdata\Local Directory”, được nén dưới dạng kho lưu trữ ZIP và được chuyển sang máy chủ C2.
Phần mềm độc hại sẽ thực hiện đánh cắp một số thông tin trên trình duyệt như: dữ liệu tự động được điền, lịch sử trình duyệt, tệp tin tải xuống hay mật khẩu được lưu trên trình duyệt.
Ví dụ về thông tin bị đánh cắp được hiển thị trong Hình 5. Nhật ký bao gồm tệp “information.txt” chứa thông tin hệ thống cùng với thông tin liên quan đến vị trí của máy bị nhiễm. Mỗi thư mục chứa dữ liệu tương ứng bị đánh cắp từ hệ thống. Ví dụ: thư mục “Browser” chứa lịch sử trình duyệt web và thông tin tệp đã tải xuống.
Hình 5. Thông tin được Bunny Loader trích xuất
Dữ liệu bị đánh cắp được lưu trữ bằng script cmdlet trong Powershell: “System.IO.Compression.ZipFile” với tên tệp “ BunnyLogs_<hostname>.zip”.
Ngoài ra, BunnyLoader cũng thực hiện yêu cầu đăng ký trình đánh cắp có chứa số liệu thống kê liên quan đến thông tin bị đánh cắp và liên kết đến nhật ký được lọc với User Agent “ BunnyStealer”, như hiển thị ở Hình 6.
Hình 6. Yêu cầu đăng ký của trình đánh cắp
Mô-đun Clipper
Mô-đun clipper BunnyLoader được sử dụng để kiểm tra bộ nhớ tạm trên máy của nạn nhân để tìm nội dung khớp với các địa chỉ tiền điện tử và thay thế chúng bằng địa chỉ ví do tác nhân đe dọa kiểm soát. Trong trường hợp này, tiền điện tử được nhắm mục tiêu là: Bitcoin; Monero; Ethereum; Litecoin; Dogecoin; Zcash; Tether. Clipper sẽ nhận địa chỉ ví tiền điện tử để thay thế từ máy chủ C2.
Tải xuống và thực thi
BunnyLoader thực hiện hai loại chức năng tải xuống và thực thi. Đầu tiên là tải xuống một tệp từ URL do máy chủ C2 cung cấp, tệp này được ghi vào đĩa trong thư mục “AppData\Local” và được thực thi thêm.
Với chức năng thứ hai, BunnyLoader tạo tiến trình “notepad.exe” ở trạng thái tạm dừng và sau đó payload tải xuống từ URL đã nhận với User Agent “BunnyLoader_Dropper”. Tệp nhị phân đã tải xuống được lưu trữ trong bộ nhớ đệm và BunnyLoader thực hiện “Process Hollowing” để đưa payload đã tải xuống vào tiến trình “notepad.exe”.
Hình 7. Mã thực thi và tải xuống của BunnyLoader
Sau đó, BunnyLoader gửi yêu cầu hoàn thành tác vụ sau với User Agent là “TaskCompleted” và CommandID làm ID nhiệm vụ. Ví dụ về một yêu cầu hoàn thành tác vụ mẫu như sau: “http://37[.]139[.]129[.]145/Bunny/TaskHandler.php?CommandID=5&BotID=272148461”.
Thực thi lệnh từ xa
BunnyLoader thực hiện thực thi lệnh từ xa từ bảng C2. BunnyLoader nhận các lệnh được thực thi trên máy bị nhiễm thông qua yêu cầu “echoer” tới máy chủ C2 (ví dụ: http[:]//37[.]139[.]129[.]145/Bunny/Echoer.php) với User Agent được đặt thành “BunnyTasks” như Hình 8.
BunnyLoader phân tích phản hồi và kiểm tra các lệnh sau: “help”, “cd”, “pwd” rồi thực thi lệnh bằng cách sử dụng “_popen” và đầu ra lệnh được gửi qua máy chủ C2 dưới dạng tham số “&value=” trong một yêu cầu lệnh kết quả (ví dụ: “http[:]//37[.]139[.]129[.]145/Bunny/ResultCMD.php”) với User Agent là “BunnyShell”.
Hình 8. Thực thi lệnh từ xa của BunnyLoader
BunnyLoader cũng thực hiện yêu cầu “Heartbeat” để thông báo cho C2 rằng hệ thống bị nhiễm đang trực tuyến. User Agent trong trường hợp này là “HeartBeat_Sender”.
Hình 9. Yêu cầu về Hearbeat