Kỹ thuật tấn công Process Doppelgänging
Kỹ thuật Process Doppelgänging đã được các nhà nghiên cứu bảo mật của enSilo (Mỹ) là Tal Liberman và Eugene Kogan trình bày lần đầu tiên tại Hội thảo Black Hat vào tháng 9/2017. Kỹ thuật tấn công này ảnh hưởng đến tất cả các phiên bản của hệ điều hành Windows. Process Doppelgänging lợi dụng 2 tính năng của Windows để thực hiện tấn công:
- Windows NTFS Transaction (tính năng cho phép tạo, chỉnh sửa, đổi tên và xóa nguyên bản các tập tin và thư mục).
- Windows process loader cũ (process loader ban đầu được thiết kế cho Windows XP, nhưng được sử dụng trên tất cả các phiên bản Windows mới hơn).
Process Doppelgänging là một kỹ thuật tấn công không dùng tập tin (fileless attack) và hoạt động theo 4 bước chính:
Bước 1: Transact – quá trình thực thi hợp pháp bên trong NTFS Transaction, sau đó ghi đè lên với một tập tin độc hại.
Bước 2: Load – tạo một phần bộ nhớ từ tập tin đã được sửa đổi (độc hại và không lưu vào ổ đĩa).
Bước 3: Rollback – rollback transaction, để loại bỏ tất cả những thay đổi trong các thực thi hợp pháp (khiến nó giống như không tồn tại).
Bước 4: Animate – Sử dụng Windows process loader cũ và phần bộ nhớ được tạo ra trước đó (trong bước 2) để tạo ra một tiến trình, khiến nó trở nên vô hình đối với hầu hết các công cụ ghi log như EDR.
Kỹ thuật Process Doppelgänging qua mặt các sản phẩm antivirus (tính tới tháng 9/2017)
Mã độc SynAck
Các nhà nghiên cứu bảo mật của Kaspersky Lab phát hiện ra SynAck vào tháng 9/2017. Tháng 4/2018, biến thể của mã độc này phát tán trở lại và được định danh là Trojan-Ransom.Win32.Agent.abwa, Trojan-Ransom.Win32.Agent.abwb và PDM:Trojan.Win32.Generic. Các đặc tính của SynAck bao gồm:
Sử dụng kỹ thuật Process Doppelgänging
SynAck sử dụng Process Doppelgänging để che giấu các hành vi độc hại, sử dụng các NTFS Transaction để khởi chạy một tiến trình độc hại.
Một phần của các thủ tục thực hiện Process Doppelgänging
Làm rối mã nhị phân
Để công việc của nhà phân tích mã độc gặp khó khăn, những người phát triển phần mềm độc hại thường sử dụng trình đóng gói PE tùy chỉnh để bảo vệ mã nguồn ban đầu của tệp thực thi. Tuy nhiên, cách thức này có thể dễ dàng tiết lộ tệp gốc (không thay đổi), từ đó có thể tiến hành phân tích.
Với SynAck thì lại khác, SynAck không được đóng gói, mà được làm rối trước khi biên dịch. Điều này dẫn tới việc khó khăn trong quá trình dịch ngược - kỹ thuật này phức tạp hơn so với các mã độc tống tiền được phát hiện trong thời gian gần đây.
SynAck sử dụng hầu hết các CALLs gián tiếp và các địa chỉ đích được tính toán bằng phép tính số học từ hai hằng số DWORD.
Tất cả địa chỉ của hàm WinAPI được import từ bảng export của các file DLL của hệ thống và tính một giá trị băm CRC32-based của một hàm. Cách thức này không phải là kỹ thuật mới và khó phân tích, tuy nhiên các nhà phát triển SynAck đã làm phức tạp cách tiếp cận này bằng cách che giấu cả các địa chỉ của thủ tục truy xuất địa chỉ hàm API và giá trị băm đích.
Cách gọi hàm WinAPI của SynAck
Hình trên mô tả cách lấy giá trị DWORD ở 403b13, trừ đi hằng số 78f5ec4d với kết quả là 403ad0 và gọi thủ tục tại địa chỉ này.
Thủ tục này đẩy hai hằng số (N1 = ffffffff877bbca1 và N2 = 2f399204) vào ngăn xếp và chuyển thực thi đến hàm 403680, nó sẽ tính kết quả của N1 xor N2 = a8422ea5.
Đây là giá trị của tên hàm băm API mà SynAck muốn gọi. Hàm 403680 sau đó sẽ tìm địa chỉ của hàm này bằng cách phân tích cú pháp các bảng export của các DLL hệ thống, tính toán giá trị băm của mỗi tên hàm và so sánh với giá trị a8422ea5. Khi địa chỉ hàm API được tìm thấy, SynAck sẽ truyền thực thi đến địa chỉ này.
Thay vì chỉ sử dụng CALL, SynAck còn sử dụng các lệnh PUSH, RET để làm phức tạp việc phân tích.
Kiểm tra ngôn ngữ
Mã độc tống tiền SynAck nhắm mục tiêu tới người dùng tại Hoa Kỳ, Kuwait, Đức và Iran. Tuy nhiên, tại các quốc gia Nga, Belarus, Ukraine, Georgia, Tajikistan, Kazakhstan và Uzbekistan mã độc này không thực hiện lây nhiễm.
Để lây nhiễm có chủ đích vào người dùng tại các quốc gia, SynAck sẽ căn cứ trên thông tin thu thập được về bố cục của bàn phím được cài đặt trên máy tính của người dùng và so sánh với danh sách mã hóa được lưu trữ trong phần mềm độc hại. Nếu tìm thấy một kết quả phù hợp, SynAck gọi tính năng ExitProcess để ngăn việc mã hóa các tệp.
Một phần của thủ tục kiểm tra bàn phím trên máy tính bị lây nhiễm
Xác định tên thư mục
Mã độc SynAck ngăn việc phân tích sandbox tự động bằng cách kiểm tra thư mục từ nơi SynAck lưu trữ. Nếu mã độc này phát hiện thấy nỗ lực khởi chạy các tập tin thực thi độc hại từ một thư mục “không chính xác”, SynAck sẽ không thực thi và thay vào đó tự kết thúc.
Đối với các API được import, SynAck sẽ không lưu trữ các chuỗi nó muốn kiểm tra, thay vào đó là lưu trữ hàm băm của nó. Đây là một chiến thuật cản trở nỗ lực tìm kiếm các chuỗi gốc. SynAck có chứa 9 giá trị băm mà các nhà nghiên cứu đã thử vét cạn đc 2 giá trị trong số đó bao gồm:
0x05f9053d == hash("output")
0x2cd2f8e2 == hash("plugins")
Lược đồ mã hóa
Giống như các mã độc tống tiền khác, SynAck sử dụng kết hợp thuật toán đối xứng và bất đối xứng. Phần lõi của thuật toán SynAck nằm trong lược đồ Hybrid ECIES (lược đồ lai ECIES). Thuật toán này bao gồm các khối xây dựng tương tác với nhau: ENC (thuật toán mã hóa đối xứng), KDF (hàm dẫn xuất khóa) và MAC (mã xác thực thông báo). Lược đồ ECIES có thể được thực hiện bằng cách sử dụng các khối xây dựng khác nhau. Để tính toán giá trị của một khóa cho thuật toán đối xứng ENC, lược đồ này sử dụng giao thức ECDH (Diffie-Hellman trên một đường cong elliptic đã chọn).
Các nhà phát triển SynAck đã chọn cách triển khai sau: Đầu tiên, SynAck sẽ tạo ra một cặp khóa bất đối xứng ecies_private_key và ecies_public_key.
Sử dụng ecies_private_key và input_public_key được tạo ra, SynAck sẽ tính toán cách chia sẻ bí mật theo giao thức ECDH.
ecies_shared_secret = ECDH(ecies_private_key, input_public_key)
Sử dụng hàm PBKDF2-SHA1 với một lần lặp, Trojan phát sinh hai mảng byte, key_enc và key_mac, từ ecies_shared_secret. Kích thước của key_enc bằng kích thước của bản rõ (bản rõ là XORed byte thành byte với key_enc). Trojan tính toán MAC (mã xác thực thông điệp) của bản mã thu được bằng thuật toán HMAC-SHA1 với key_mac làm khóa.
Sau khi lây nhiễm, mã độc SynAck mã hóa nội dung của mỗi tệp bị nhiễm bằng thuật toán AES-256-ECB và chỉ cung cấp cho nạn nhân một khóa giải mã cho đến khi họ liên lạc với những kẻ tấn công và đáp ứng nhu cầu của chúng.
Một vài tính năng khác
SynAck cũng chứa một vài đặc tính khác:
- Tắt các tiến trình và dịch vụ: Trước khi mã hóa tập tin, SynAck liệt kê tất cả các tiến trình đang chạy, dịch vụ và hàm băm tên của chúng so sánh với 2 danh sách các giá trị băm được mã hóa. Nếu tìm thấy một kết quả phù hợp, SynAck sẽ cố gắng kết thúc tiến trình (sử dụng hàm TerminateProcess API) hoặc dừng các dịch vụ (sử dụng ControlService với tham số SERVICE_CONTROL_STOP).
- Xóa nhật ký sự kiện: Để cản trở việc phân tích, SynAck xóa các bản ghi sự kiện được lưu trữ trên hệ thống. SynAck sử dụng 2 phương pháp.Đối với các phiên bản trước Windows Vista, nó liệt kê các khóa registry SYSTEM\CurrentControlSet\Services\EventLog và sử dụng OpenEventLog/ClearEventLog API functions.
Đối với các phiên bản Window cao hơn, nó sử dụng chức năng từ EvtOpenChannelEnum/EvtNextChannelPath/EvtClearLog và Wevtapi.dll.
- Gửi thông báo tiền chuộc trên màn hình đăng nhập: Hiển thị một ghi chú mã độc trên màn hình đăng nhập Windows bằng cách sửa đổi các khóa LegalNoticeCaption và LegalNoticeText trong registry.
Thông báo mã độc tống tiền trên màn hình đăng nhập Windows
Mặc dù các nhà nghiên cứu không chỉ rõ cách thức lây nhiễm của mã độc SynAck, nhưng phần lớn các mã độc tống tiền thường lây nhiễm qua email lừa đảo, quảng cáo độc hại trên trang web, các ứng dụng và chương trình của bên thứ ba. Do đó, người dùng cần thận trọng khi mở các tài liệu được gửi qua email và nhấp vào các liên kết bên trong các tài liệu đó khi chưa xác minh nguồn gốc. Đồng thời, người dùng cần sử dụng các phần mềm antivirus và cập nhật thường xuyên. Cuối cùng, nhưng không kém phần quan trọng, người dùng cần bảo vệ dữ liệu bằng cách sao lưu dự phòng trên các thiết bị lưu trữ ngoài.