Giải mã GodRAT: Phần mềm độc hại mới nhắm vào các tổ chức tài chính

19:04 | 06/09/2025

Vào tháng 9/2024, Kaspersky đã phát hiện hoạt động tấn công mạng nhắm vào các công ty tài chính (giao dịch và môi giới) thông qua việc phân phối các tệp .scr (trình bảo vệ màn hình) độc hại được ngụy trang thành tài liệu qua Skype Messenger. Kẻ tấn công đã phân phối một Trojan truy cập từ xa (RAT) mới có tên là GodRAT, dựa trên codebase của Gh0st RAT. Để tránh bị phát hiện, kẻ tấn công sử dụng kỹ thuật steganography (ẩn mã) để nhúng shellcode vào tệp hình ảnh. Shellcode này tải xuống GodRAT từ máy chủ điều khiển và ra lệnh do tin tặc kiểm soát (C2).

TỔNG QUAN

Theo các nhà nghiên cứu, GodRAT có khả năng hỗ trợ các plugin bổ sung. Sau khi cài đặt, kẻ tấn công sử dụng plugin FileManager để dò quét hệ thống của nạn nhân và triển khai chức năng đánh cắp mật khẩu trình duyệt nhằm trích xuất thông tin đăng nhập. Ngoài GodRAT, chúng còn sử dụng AsyncRAT làm phần mềm độc hại thứ cấp để duy trì quyền truy cập mở rộng.

GodRAT có những điểm tương đồng với AwesomePuppet, một Backdoor khác dựa trên Gh0st RAT, mà Kaspersky đã báo cáo vào năm 2023, cả về mã nguồn lẫn phương thức phân phối. Điều này cho thấy nó có thể là một phiên bản cải tiến của AwesomePuppet. Tính đến thời điểm hiện tại, cuộc tấn công vẫn đang diễn ra, với lần phát hiện gần đây nhất được ghi nhận vào ngày 12/8/2025. Ngoài các tệp .scr, kẻ tấn công còn sử dụng các tệp .pif giả mạo tài liệu tài chính.

PHÂN TÍCH KỸ THUẬT

Loader shellcode

Các nhà nghiên cứu xác định các tin tặc sử dụng hai loại loader shellcode và thực thi bằng cách chèn nó vào tiến trình riêng của chúng. Loại thứ nhất nhúng các byte shellcode trực tiếp vào tệp nhị phân của loader và loại thứ hai đọc shellcode từ một tệp hình ảnh. Tệp injector shellcode GodRAT có tên “2024-08-01_2024-12-31Data.scr” (MD5 d09fd377d8566b9d7a5880649a0192b4) là một tệp thực thi giải mã XOR shellcode nhúng bằng khóa mã hóa cứng: “OSEDBIU#IUSBDGKJS@SIHUDVNSO*SKJBKSDS#SFDBNXFCB”. Một phân đoạn mới sau đó được tạo trong bộ nhớ của một tiến trình thực thi, tại đó shellcode đã giải mã được sao chép. Sau đó, phân đoạn mới ánh xạ vào bộ nhớ tiến trình và một luồng được tạo ra để thực thi shellcode.

Một tệp khác: “2024-11-15_23.45.45 .scr” (MD5 e723258b75fee6fbd8095f0a2ae7e53c), đóng vai trò là tệp thực thi tự giải nén chứa một số tệp nhúng như Hình 1.

Hình 1. Nội dung của tệp thực thi tự giải nén

Trong số này có tệp “SDL2[.]dll” (MD5 512778f0de31fcce281d87f00affa4a8) là một loader, nó được tải bởi tệp thực thi hợp lệ Valve[.]exe (MD5 d6d6ddf71c2a46b4735c20ec16270ab6). Cả loader và Valve[.]exe đều được ký bằng một chứng thư số đã hết hạn. Chi tiết chứng thư số này như sau:

- Số sê-ri: 084caf4df499141d404b7199aa2c2131.

- Tên Common Name của bên phát hành: DigiCert SHA2 Assured ID Code Signing CA

- Hiệu lực: Từ 5h30 sáng Thứ sáu, ngày 25/9/2015 đến 17h30 ngày 3/10/2018

- Subject: Van

Loader “SDL2[.]dll” trích xuất các byte shellcode ẩn trong tệp hình ảnh “2024-11-15_23[.]45[.]45[.]jpg”, tệp này chứa một số thông tin tài chính nhạy cảm.

Hình 2. Tệp hình ảnh thể hiện một số thông tin tài chính

Loder phân bổ bộ nhớ, sao chép các byte shellcode đã trích xuất và tạo ra một luồng để thực thi nó. Các nhà nghiên cứu cũng xác định được các loader tương tự đã trích xuất shellcode từ tệp hình ảnh có tên “2024-12-10_05[.]59[.]18[.]18[.]jpg”. Một loader như vậy (MD5 58f54b88f2009864db7e7a5d1610d27d) tạo một mục entry point tại “HKCU\Software\Microsoft\Windows\CurrentVersion\Run\MyStartupApp”, trỏ đến tệp thực thi hợp lệ Valve[.]exe.

Chức năng Shellcode

Shellcode bắt đầu bằng việc tìm kiếm chuỗi “godinfo”, ngay sau đó là dữ liệu cấu hình được giải mã bằng khóa XOR một byte 0x63. Cấu hình được giải mã chứa các chi tiết sau: Địa chỉ IP C2, cổng và chuỗi dòng lệnh mô-đun. Shellcode kết nối với máy chủ C2 và truyền chuỗi “GETGOD”. Máy chủ C2 phản hồi bằng dữ liệu biểu diễn giai đoạn tiếp theo (thứ hai) của shellcode. Shellcode giai đoạn này bao gồm code bootstrap, DLL GodRAT được đóng gói UPX và dữ liệu cấu hình.

Tuy nhiên, sau khi tải xuống shellcode giai đoạn thứ hai, shellcode giai đoạn đầu tiên ghi đè bằng dữ liệu cấu hình của riêng nó. Sau đó, một luồng mới được tạo để thực thi shellcode giai đoạn thứ hai. Code bootstrap nhúng DLL GodRAT vào bộ nhớ và sau đó gọi entry point của DLL và hàm được xuất ra của nó là “run”. Toàn bộ shellcode giai đoạn tiếp theo được truyền dưới dạng đối số cho hàm “run”.

GodRAT

DLL GodRAT có tên nội bộ là ONLINE[.]dll và chỉ trích xuất một phương thức: “run”, phần mềm độc hại kiểm tra các tham số dòng lệnh và thực hiện các thao tác sau:

1. Nếu số lượng đối số dòng lệnh là một, nó sẽ sao chép dòng lệnh từ dữ liệu cấu hình là “C:\Windows\System32\curl[.]exe” trong mẫu được phân tích. Sau đó, phần mềm độc hại này thêm đối số “-Puppet” vào dòng lệnh và tạo một tiến trình mới với dòng lệnh “C:\Windows\System32\curl.exe -Puppet”. Tham số “-Puppet” đã được sử dụng trong AwesomePuppet RAT theo cách tương tự. Nếu không thành công, GodRAT cố gắng tạo một tiến trình bằng lệnh được mã hóa cứng “%systemroot%\system2\cmd.exe -Puppet”. Nếu thành công, nó sẽ tạm dừng tiến trình, phân bổ bộ nhớ và ghi bộ đệm shellcode (được truyền dưới dạng tham số cho hàm đã xuất “run”). Tiếp đó, một luồng được tạo để thực thi shellcode. Điều này nhằm thực thi GodRAT bên trong tiến trình curl[.]exe hoặc cmd[.]exe.

2. Nếu số lượng đối số dòng lệnh lớn hơn một, GodRAT kiểm tra xem đối số thứ hai có phải là “-Puppet” hay không. Nếu đúng, phần mềm độc hại tiếp tục thực hiện chức năng của RAT; nếu không, nó hoạt động như số lượng đối số dòng lệnh là một (đã mô tả trong trường hợp trước).

RAT thiết lập kết nối TCP đến máy chủ C2 trên cổng từ blob cấu hình và thu thập các thông tin sau của nạn nhân: Thông tin hệ điều hành, tên máy chủ, tên và ID tiến trình phần mềm độc hại, tên tài khoản người dùng được liên kết với tiến trình phần mềm độc hại, phần mềm diệt vi-rút đã cài đặt,…

Dữ liệu thu thập được nén zlib (deflate) và thêm vào header 15 byte. Sau đó, dữ liệu mã hóa XOR ba lần cho mỗi byte. Dữ liệu cuối cùng gửi đến máy chủ C2 bao gồm header 15 byte, theo sau là khối dữ liệu nén. Header bao gồm các trường sau: Byte magic (\x74\x78\x20), tổng kích thước (kích thước dữ liệu nén và kích thước header), kích thước dữ liệu giải nén và một DWORD cố định (1 cho dữ liệu đến và 2 cho dữ liệu đi). Dữ liệu nhận được từ C2 chỉ giải mã XOR, cũng ba lần cho mỗi byte. Dữ liệu này bao gồm header 15 byte, theo sau là dữ liệu lệnh. RAT có thể thực hiện các thao tác sau dựa trên dữ liệu lệnh nhận được:

- Chèn DLL plugin đã nhận vào bộ nhớ và gọi phương thức đã xuất của nó là “PluginMe”, truyền tên máy chủ C2 và cổng làm đối số, nó hỗ trợ nhiều plugin khác nhau, nhưng các nhà nghiên cứu chỉ phát hiện việc triển khai plugin FileManager.

- Đóng socket và chấm dứt tiến trình RAT.

- Tải xuống tệp từ URL được cung cấp và khởi chạy tệp đó bằng API CreateProcessA, sử dụng màn hình nền mặc định (WinSta0\Default)

- Mở một URL nhất định bằng lệnh shell để mở Internet Explorer (ví dụ: “C:\Program Files\Internet Explorer\iexplore.exe” %1)

Tiện ích bổ sung GodRAT FileManager

DLL của plugin FileManager có tên nội bộ là FILE[.]dll và trích xuất một phương thức duy nhất gọi là PluginMe. Plugin này thu thập các thông tin sau của nạn nhân: Chi tiết về ổ đĩa logic (bao gồm ký tự ổ đĩa, loại ổ đĩa, tổng số byte, số byte trống khả dụng, tên hệ thống tệp và tên ổ đĩa), đường dẫn đến màn hình nền của người dùng hiện đang đăng nhập và liệu người dùng có đang hoạt động dưới tài khoản SYSTEM hay không. Plugin có thể thực hiện các thao tác sau dựa trên các lệnh nhận được:

- Liệt kê các tệp và thư mục tại một vị trí cụ thể, thu thập thông tin chi tiết như loại (tệp hoặc thư mục), tên, kích thước và thời gian ghi cuối cùng.

- Ghi dữ liệu vào tệp hiện có tại vị trí offset đã chỉ định.

- Đọc dữ liệu từ một tệp ở vị trí offset được chỉ định.

- Xóa một tệp tin tại một đường dẫn đã chỉ định.

- Xóa đệ quy các tệp theo đường dẫn đã chỉ định.

- Kiểm tra sự tồn tại của tệp được chỉ định. Nếu tệp tồn tại, gửi kích thước của tệp đó; nếu không, tạo một tệp để ghi.

- Tạo một thư mục tại một đường dẫn đã chỉ định.

- Di chuyển một tệp tin hoặc thư mục hiện có, bao gồm cả các tệp tin hoặc thư mục con của nó.

- Mở một ứng dụng được chỉ định với cửa sổ hiển thị bằng API ShellExecuteA.

- Mở một ứng dụng được chỉ định với cửa sổ ẩn bằng API ShellExecuteA.

- Thực hiện dòng lệnh được chỉ định với cửa sổ ẩn bằng cmd[.]exe.

- Tìm kiếm các tệp ở một vị trí cụ thể, thu thập đường dẫn tệp tuyệt đối, kích thước và thời gian ghi cuối cùng.

- Dừng hoạt động tìm kiếm tệp.

- Thực thi 7zip bằng cách ghi các byte thực thi 7zip được mã hóa cứng vào “%AppData%\7z[.]exe” (MD5 eb8d53f9276d67afafb393a5b16e7c61) và “%AppData%\7z[.]dll” (MD5 e055aa2b77890647bdf5878b534fba2c), sau đó chạy “%AppData%\7z[.]exe” với các tham số do C2 cung cấp. Tiện ích này được sử dụng để giải nén các tệp đã tải xuống.

Payload giai đoạn thứ hai

Những kẻ tấn công đã triển khai các bản độc hại trong giai đoạn hai sau đây bằng cách sử dụng plugin FileManager của GodRAT:

Trình đánh cắp mật khẩu Chrome

Trình đánh cắp Chrome được đặt tại vị trí “%ALLUSERSPROFILE%\google\chrome[.]exe” (MD5 31385291c01bb25d635d098f91708905), nó sẽ tìm kiếm các tệp cơ sở dữ liệu Chrome chứa dữ liệu đăng nhập cho các trang web đã truy cập, bao gồm URL và tên người dùng được sử dụng để xác thực, cũng như mật khẩu người dùng. Dữ liệu thu thập được lưu trong tệp “google[.]txt” trong thư mục của mô-đun. Trình đánh cắp tìm kiếm các tệp sau:

- %LOCALAPPDATA%\Google\Chrome\User Data\Default\Login Data: Cơ sở dữ liệu SQLite với các bảng đăng nhập và thống kê. Có thể sử dụng cơ sở dữ liệu này để trích xuất URL và tên người dùng được sử dụng để xác thực. Mật khẩu được mã hóa và không hiển thị.

- %LOCALAPPDATA%\Google\Chrome\User Data\Local State: Tệp chứa khóa mã hóa cần thiết để giải mã mật khẩu đã lưu trữ.

Trình đánh cắp mật khẩu MS Edge

Trình đánh cắp Edge được đặt tại “%ALLUSERSPROFILE%\google\msedge[.]exe” (MD5 cdd5c08b43238c47087a5d914d61c943). Dữ liệu thu thập được lưu trữ trong tệp “edge[.]txt” trong thư mục của mô-đun. Mô-đun cố gắng trích xuất mật khẩu bằng cách sử dụng cơ sở dữ liệu và tệp sau:

- %LOCALAPPDATA%\Microsoft\Edge\User Data\Default\Login Data: Cơ sở dữ liệu SQLite “Login Data” lưu trữ thông tin đăng nhập Edge trong bảng “logins”.

- %LOCALAPPDATA%\Microsoft\Edge\User Data\Local State: Tệp này chứa khóa mã hóa được sử dụng để giải mã mật khẩu đã lưu.

AsyncRAT

Tệp DLL (MD5 605f25606bb925d61ccc47f0150db674) là một injector và lưu tại vị trí “%LOCALAPPDATA%\bugreport\LoggerCollector[.]dll” hoặc “%ALLUSERSPROFILE%\bugreport\LoggerCollector[.]dll”, nó xác minh rằng tên mô-đun khớp với “bugreport_[.]exe”. Sau đó, loader sẽ giải mã XOR shellcode nhúng bằng khóa “EG9RUOFIBVODSLFJBXLSVWKJENQWBIVUKDSZADVXBWEADSXZCXBVADZXVZXZXCBWES”. Sau khi giải mã, tệp DLL trừ khóa thứ hai “IUDSY86BVUIQNOEWSUFHGV87QCI3WEVBRSFUKIHVJQW7E8RBUYCBQO3WEIQWEXCSSA” khỏi mỗi byte shellcode.

Một phân vùng bộ nhớ mới được tạo, shellcode đã giải mã XOR sao chép vào đó và phân vùng này được ánh xạ vào bộ nhớ tiến trình hiện tại. Một luồng được khởi động để thực thi mã trong phân vùng này. Mã shellcode được sử dụng để chèn mã nhị phân C# AsyncRAT. Trước khi chèn, nó vá các hàm quét AMSI (AmsiScanBuffer, AmsiScanString) và hàm EtwEventWrite để bỏ qua các kiểm tra bảo mật.

AsyncRAT bao gồm một chứng chỉ nhúng với các thuộc tính sau:

Mã nguồn GodRAT client

Kaspersky phát hiện ra mã nguồn của GodRAT client trên một trình quét phần mềm độc hại trực tuyến phổ biến. Mã nguồn này được tải lên vào tháng 7/2024. Tệp có tên là “GodRAT V3.5_______dll.rar” (MD5 04bf56c6491c5a455efea7dbf94145f1). Kho lưu trữ này cũng bao gồm bản build GodRAT (MD5 5f7087039cb42090003cc9dbb493215e), cho phép người dùng tạo tệp thực thi hoặc tệp DLL.

Nếu chọn tệp thực thi, người dùng có thể chọn tên tệp hợp lệ từ danh sách (svchost[.]exe, cmd[.]exe, cscript[.]exe, curl[.]exe, wscript[.]exe, QQMusic[.]exe và QQScLauncher[.]exe) để chèn code vào. Khi lưu tệp payload cuối cùng, người dùng có thể chọn loại tệp (.exe, .com, .bat, .scr và .pif). Mã nguồn dựa trên Gh0st RAT, điều này được chỉ ra bởi thực tế là UID tự động tạo trong tệp “GodRAT[.]h” khớp với UID của “gh0st[.]h”, điều này cho thấy GodRAT ban đầu chỉ là phiên bản đổi tên của Gh0st RAT.

Hình 3. UID của GodRAT

Hình 4. UID của gh0st

KẾT LUẬN

Tham số dòng lệnh hiếm gặp “puppet”, cùng với những điểm tương đồng về code với Gh0st RAT và các thông tin chung như fingerprint header, cho thấy GodRAT có chung nguồn gốc với AwesomePuppet RAT, mà Kaspersky đã mô tả trong một báo cáo riêng năm 2023. RAT này cũng dựa trên mã nguồn Gh0st RAT và có khả năng liên quan đến các hoạt động APT của tin tặc Winnty. Dựa trên những phát hiện này, Kaspersky nhận định rằng GodRAT là một phiên bản cải tiến của AwesomePuppet. Tuy nhiên, vẫn có một số khác biệt. Ví dụ, gói tin C2 của GodRAT sử dụng trường “direction”, vốn không được sử dụng trong AwesomePuppet.

Các codebase cũ, chẳng hạn như Gh0st RAT, vẫn tiếp tục được sử dụng cho đến ngày nay. Chúng thường được tùy chỉnh và build lại để nhắm mục tiêu vào nhiều đối tượng nạn nhân. Những codebase này đã được nhiều tác nhân đe dọa sử dụng trong một thời gian dài, phát hiện về GodRAT cho thấy các codebase cũ như Gh0st RAT vẫn có thể tồn tại lâu dài trong “kho vũ khí” của những kẻ tấn công.

Để lại bình luận