Malware Persistence

Tiếp tục bài Malware Persistence part 1 lần trước, ở bài này mình sẽ viết thêm về vị trí mà Mã độc thường tìm cách “lẩn trốn” trên máy của nạn nhân. Ở phần trước mình đã nói đến Autostart Registry Key, Windows Services và Scheduled Tasks, bài này mình sẽ dành để viết về WMI Persistence.

Trước khi đi vào kỹ thuật Persistence dựa vào WMI, mình sẽ nói qua một chút về WMI.

WMI là cách quản lý hệ thống doanh nghiệp dựa trên web (WBEM) của Microsoft. Nó cung cấp một bộ công cụ cho phép quản trị viên quản lý hệ thống Windows. Kể từ Windows 2000 thì WMI được cài đặt mặc định trên Windows OS. 

Đây cũng là một lựa chọn ưa thích của mã độc để có thể đạt được persistence trên hệ thống của nạn nhân. Một vài lý do để giải thích cho điều này: 

  • WMI là một tính năng mặc định của Windows: có nghĩa là nó sử dụng các tệp nhị phân có chữ ký, đáng tin cậy. Điều này giúp mã độc tránh bị whitelist và tránh bị phát hiện bởi các tool host-based.OBN 
  • WMI cung cấp khả năng thu thập và thay đổi thông tin cấu hình hệ thống. 
  • WMI có thể tương tác thông qua nhiều nhiều cách bao gồm Windows WMI command line (wmic.exe), script và API. 
  • WMI cho phép tương tác remote. 

Bên cạnh những lý do liệt kê ở trên, bài blog này muốn đề cập đến tính năng WMI event subscription, đây là tính năng được sử dụng rất nhiều bởi mã độc để có thể đạt được persistence.

Một số khái niệm để chúng ta có thể tìm hiểu rõ hơn: 

  • WMI class: được dùng để truyền dữ liệu đến dịch vụ WMI bởi các nhà cung cấp dịch vụ WMI. Mỗi lớp sẽ có các sự kiện (Events) và thuộc tính (Property) để thu thập và thiết lập dữ liệu thực tế. 
  • WMI event subscription: kích hoạt hành vi một cách tự động khi sự kiện được quy định trước xảy ra. Nó sử dụng 3 lớp sau để có thể làm được điều này: 
  • EventFilter: Quy định điều kiện để kích hoạt Event consumer. 
  • EventConsumer: Hành vi sẽ thực hiện nếu điều kiện của Event filter được đáp ứng. 
  • FilterToConsumerBinding: Cầu nối giữa Event filter và event consumer 

Khi tạo một WMI event subscription thì sẽ tạo ra một object được lưu trong WMI repository. 

WMI repository là một cơ sở dữ liệu chứa thông tin về các class của WMI, được lưu tại %windir%System32\Wbem\Repository.  Nó gồm các file sau: 

  • OBJECTS.DATA: Những object mà WMI quản lý 
  • INDEX.BTR: Mục lục các file được import và objects.data 
  • MAPPING[1-3].MAP: Thông tin chỉ mục cho phép WMI nhanh chóng định vị dữ liệu trong OBJECTS. DATA 

Để cho dễ hiểu thì chúng ta sẽ thực hiện một demo đơn giản, khi khởi chạy calc.exe thì chương trình notepad.exe sẽ khởi chạy theo. Đương nhiên trong thực tế không attacker nào lại làm như vậy, mà khi đạt được điều kiện của event filter thì sẽ tạo backdoor chẳng hạn.  

Đầu tiên chúng ta tạo một event filter tên là CalculatorFilter. Filter này là điều kiện kiếm tra có tiến trình CalculatorApp.exe có đang chạy hay không. 

Tiếp theo chúng ta sẽ tạo event consumer. Notepad.exe sẽ được khởi chạy nếu đạt được điều kiện của event filter.  

Cuối cùng là kết nối event filterevent consumer với nhau. 

Kết quả sau khi thực thi các lệnh trên:

Có thể kiểm tra lại bằng autoruns:

Cuối cùng là khởi chạy calc.exe. Kết quả là một tiến trình notepad được tạo ra theo. Điều đáng chú là tiến trình calculator chỉ chạy với quyền user bình thường còn notepad lại chạy dưới quyền System. 

Bên trên là một ví dụ khá đơn giản về WMI persistence, tiếp theo mình sẽ viết thêm về cách phát hiện được persistence này như thế nào.

Cách phát hiện

Đầu tiên, một trong những nơi hữu ích để phát hiện đó là kiểm tra các event log của WMI trong Microsoft-Windows-WMI-Activity%4Operational :

 

Một phương pháp nữa, chúng ta có thể sử dụng WMI Explorer để rà quét. WMI Explorer hỗ trợ đọc các file trong WMI repository nên ta có thể tìm các class cũng như các instance, đồng thời xem được cả các thuộc tính. 

Bên cạnh đó, powershell cũng hỗ trợ các câu lệnh để kiểm tra EventFilter, EventConsumerFilterToConsumerBinding.

Kiểm tra EventFilter:

Kiểm tra EventConsumer:

Kiểm tra FilterToConsumerBinding:

 

Cách gỡ bỏ :

Có thể gỡ bỏ các EventFilter, EventConsumerFilterToConsumerBinding với các lệnh powershell sau. 

Kiểm tra lại với autoruns thì không còn thấy nữa:

Vậy chúng ta đã gỡ bỏ thành công!

WMI không còn quá mới mẻ nhưng vẫn luôn là lựa chọn yêu thích của attacker để có thể đạt được persistence trên hệ thống của nạn nhân. Hi vọng bài viết này giúp mọi người có thể hiểu hơn về WMI để có thể đảm bảo an toàn cho hệ thống của mình. Cảm ơn các bạn đã đọc! 

By,

BLUE_TEAM

 

1.355 lượt xem