# Windows security

## 1. Thành phần bảo mật Windows

<figure><img src="/files/7vxC0FfHPH7jV2c0Ru2X" alt=""><figcaption><p>Sơ đồ tổng quát về mối liên hệ các thành phần của hệ điều hành</p></figcaption></figure>

## 2. Giám sát trạng thái bảo mật (SRM - Security Reference Monitor)

Các tính năng:

* xác định cấu trúc mã thông báo truy cập để xác định bối cảnh bảo mật
* Kiểm tra quyền truy cập vào các đối tượng
* điều khiển đặc quyền (quyền người dùng)
* tạo các thông báo kiểm tra bảo mật

## 3. Hệ thống con xác thực bảo mật cục bộ (LSASS - Local Security Authority Process)

File `lsass.exe` được đặt vĩnh viễn trong thư mục **`\Windows\System32\`** và được sử dụng để thực thi các chính sách bảo mật, có nghĩa là nó có liên quan đến những thứ như thay đổi mật khẩu và xác minh đăng nhập. \[1]

Các tính năng:

* Chính sách bảo mật hệ thống cục bộ (người dùng có quyền đăng nhập, chính sách mật khẩu, đặc quyền người dùng và nhóm, vài đặt kiểm toán bảo mật,..);
* Xác thực người dùng;
* Ghi nhật ký tin nhắn kiểm toán bảo mật.

<div align="center"><figure><img src="/files/Eo3hh1Sabm2h0lZgAOFs" alt=""><figcaption><p>hệ thống lsass.exe</p></figcaption></figure></div>

Hầu hết các chức năng của LSASS được triển khai trong thư viện `Lsasrv.dll` (The Local Secủity Authority service) với tên là `LSASS.exe`

<figure><img src="/files/AIzOD7EtPp9uF4ealH1F" alt=""><figcaption><p>LSA server dll</p></figcaption></figure>

## 4. Tương tác giữa SRM và LSASS

<figure><img src="/files/iK1E3UigdRbyOfkmIT7u" alt=""><figcaption><p>mô hình tương tác giữa SRM và LSASS</p></figcaption></figure>

Phần bên LSA: Thiết lập một sự kiện kiểm tra, tạo phiên đăng nhập, xóa phiên đăng nhập

Phần bên SRM: Ghi lại sự kiện kiểm toán, xóa phiên đăng nhập

<figure><img src="/files/BQcqJAWjVUCPRaavLdk5" alt=""><figcaption><p>Mô tả thao tác</p></figcaption></figure>

## 5. Các thành phần LSASS. Cơ sở chính sách

Находится в registry в ACL-защищенной ветке `HKLM\SECURTY` và chứa:

* Cài đặt chính sách bảo mật (tên miền nào được tin cậy để xác thực đăng nhập vào hệ thống);
* Ai có quyền truy cập vào hệ thống: \[2]
  * Đăng nhập loại tương tác: người dùng đăng nhập trực tiếp vào máy tính này;
  * Đăng nhập loại mạng: người dùng đã kết nối với máy tính này qua mạng và đăng nhập vào nó;
  * Đăng nhập loại gói:  khi bạn chạy các công việc hàng loạt mà không có sự tương tác trực tiếp từ người dùng.
  * Đăng nhập loại dịch vụ: Service Control Manager bắt đầu dịch vụ thay mặt người dùng
  * ...
* Ai được giao những đặc quyền gì?;
* Kiểm toán bảo mật nào nên được thực hiện?

<div align="center"><figure><img src="/files/I9fASaLheGojm2aQmTog" alt=""><figcaption><p>kiểm tra nội dung của thư mục SECURITY</p></figcaption></figure> <figure><img src="/files/4JTefZyuQFREVSIjF9Me" alt=""><figcaption></figcaption></figure></div>

* Thông tin đăng nhập vào hệ thống, được sử dụng để lưu trong bộ nhớ đệm;
* Tài khoản hồ sơ ngừo dùng dịch vụ windows;
* Nó thường là mục tiêu của kẻ tấn công vì nó cho phép họ trích xuất các giá trị băm của tài khoản dịch vụ và bộ nhớ đệm

### 5.1. Máy chủ quản lý tài khoản bảo mật (SAM - Security Accounts Manager Server)

Trình quản lý tài khoản bảo mật Windows vận hành cơ sở dữ liệu về các tài khoản

Nó thực hiện các nhiệm vụ sau:

* Nhận dạng đối tượng (chuyển tên để xác nhận (SID) và ngược lại);
* Kiểm tra mật khẩu, ủy quyền (tham gia vào quá trình người dùng đăng nhập vào hệ thống);
* Lưu số liệu thống kê (Thời gian đăng nhập gần nhất, số lần đăng nhập, số lần nhập mật khẩu sai);
* Lưu trữ cài đặt chính sách tài khoản và thực thi chúng (chính sách mật khẩu và chính sách khóa tài khoản);
* Lưu trữ cấu trúc logic của các nhóm tài khoản (theo nhóm, tên miền, bí danh);
* Kiểm soát quyền truy cập vào cơ sở dữ liệu tài khoản;
* Cung cấp giao diện phần mềm để quản lý cơ sở dữ liệu tài khoản.

Account database được lưu trữ trong sổ đăng ký (registry editor) (`HKEY_LOCAL_MACHINE\SAM\SAM`), quyền bị từ chối theo mặc định ngay cả quản trị viên.

<div><figure><img src="/files/qgDlbRUyNJ2ZAlbbLvjA" alt=""><figcaption><p>SAM</p></figcaption></figure> <figure><img src="/files/uIQPfThlbF7TlXAwlYjB" alt=""><figcaption></figcaption></figure></div>

Máy chủ SAM được triển khai dưới dạng thư viện DLL `samsrv.dll`, được tải bởi `lsass.exe`. Giao diện phần mềm để khách truy cập vào máy chủ được triển khai dưới dạng các hàm có trong thư viện DLL `samlib.dll`.

Thường bị kẻ tấn công nhắm tới vì SAM lưu trữ hàm bằm các tài khoản cục bộ.

### 5.2. Dịch vụ đăng nhập mạng (Network logon service, Netlogon.dll)

Thiết lập kết nối an toàn với bộ điều khiển miền để đăng nhập loại tương tác và đăng nhập khi thư mục hoạt động

Chịu trách nhiệm thiết lập kênh bảo mật cho bộ điều khiển miền mà các yêu cầu bảo mật được gửi qua đó (đây là yêu cầu kiểm tra xác thực LM và NTLM v1 / v2, đăng nhập loại tương tác nếu bộ điều khiển miền chạy NT 4)

<figure><img src="/files/wKysHP2Aq1nh5vrceofI" alt=""><figcaption><p>Kiểm tra xem lsass.exe có sử dụng dịch vụ đăng nhập loại mạng</p></figcaption></figure>

### 5.3. Dịch vụ Active Directory (ntdsa.dll)

<figure><img src="/files/kujyCiOg9MrqrPm6QxKn" alt=""><figcaption><p>Sơ đồ quá trình tương tác của dịch vụ AD</p></figcaption></figure>

DSA (Directory System Agent) liên quan đến giao thức LDAP (Lightweight Directory Access Protocol) đề cập đến phần mềm hoặc dịch vụ xử lý các yêu cầu truy cập thông tin trong cơ sở dữ liệu LDAP.

DSA hoạt động trên máy chủ và cung cấp giao diện cho các ứng dụng khách, cho phép chúng gửi các yêu cầu tìm kiếm, thêm, sửa đổi hoặc xóa bản ghi trong cơ sở dữ liệu;

Lớp cơ sở dữ liệu (Database Layer) cung cấp giao diện API để làm việc với kho dữ liệu Active Directory.

### 5.4. Database Active Directory

Kho dữ liệu Active Directory:

* Tệp chính `NTDS.dit (% SystemRot% \ NTDS \ ntds.dit)` - chứa tất cả nội dung của kho lưu trữ;
* `NTDS.dit` - đây là "slice of the cake" dành cho những kẻ tấn công vì nó chưa shàm băm của TẤT CẢ người dùng trong miền;
* Một số file bổ sung được sử dụng để đảm bảo tính toàn vẹn và nhất quán của cơ sở dữ liệu AD (nhật ký chuyển, file checkpoint)

### 5.5. Active Directory и domain Windows

AD - là việc triển khai dịch vụ thư mục windows thông qua giao thức LDAP (giao thức truy cập thư mục nhẹ)

Về cơ bản, AD là cơ sở dữ liệu lưu trữ các đối tượng đại diện cho tài nguyên do ứng dụng xác định trên mạng windows.

Mục đích chính là quản lý tập trung người dùng và nhóm và cấu hình hệ điều hành (bao gồm các chính sách bảo mật cũng như các cài đặt không liên quan trực tiếp đến bảo mật).

Cấu hình tập trung được thực hiện thông qua cái gọi là chính sách nhóm.

Để sử dụng nó, một hoặc nhiều bộ điều khiển miền (DC - Domain Controllers) phải được triển khai trên mạng. Bất kỳ máy tính nào cài đặt windows server đều có thể trở thành DC. Có thể có nhiều hơn 1 DC trên mạng;

DC lưu trữ các đối tượng trong cơ sở dữ liệu (`% SystemRoot% \ Ntds.dit`) và cung cấp dịch vụ xác thực cho các máy tính khác trên mạng;

Mọi thay đổi đối với tệp cơ sở dữ liệu miền Ntdis.dit đều được sao chép tới tất cả các DC;

Sau khi DC được triển khai, một miền sẽ xuất hiện trên mạng của bạn. Bất kỳ máy tính nào trên mạng đều có thể tham gia miền của nó;

Khi một máy tính được kết nối với một miền, nó có thể được cài đặt bằng chính sách nhóm và có thể sử dụng các nguyên tắc miền để truy cập cục bộ cũng như truy cập vào các máy tính và dịch vụ khác trên mạng.

#### 5.5.1. Quản lý tài khoản người dùng (Учетными записями пользователей)

<figure><img src="/files/49CDJqfauvII6WuXwti9" alt=""><figcaption><p>Quản ký tài khoản người dùng trong thư mục User</p></figcaption></figure>

<figure><img src="/files/Tgvb74P255VXldJeYFtn" alt=""><figcaption><p>Hiển thị chính sách mặc định của Bộ điều khiển miền</p></figcaption></figure>

### 5.6. Security Packages

Chịu trách nhiệm xác thực người dùng bằng cách kiểm tra xem tên người dùng và mật khẩu được chỉ định (hoặc các loại thông tin xác thực khác) có khớp hay không và nếu có thì quay lại thông tin LSASS trong đó nêu chi tiết ID bảo mật của người dùng mà LSASS sử dụng để tạo token truy cập;

Được triển khai dưới dạng thư viện DLL được thực thi trong bối cảnh của cả process LSASS và process máy khách thực hiện xác thực.

Gói chính:&#x20;

* `% SystemRot% \ System32 \ Kerberos.dll` dành cho đăng nhập loại tương tác miền
* `% SystemRot% \ System32 \ msv1_0.dll` dành cho đăng nhập loại tương tác vào hệ thống trên máy tính cục bộ, để đăng nhập vào domain, vào các domain đáng tin cậy trước windows 2000 và trong trường hợp không có DC nào khả dụng.

<figure><img src="/files/u9whG3Wikf3g5rv5erSy" alt=""><figcaption><p>Hiển thị các packages sử dụng nội trong lsass.exe</p></figcaption></figure>

## 6. Winlogon

Trả lời SAS (Trình tự xác thực an toàn - Ctrl - Alt - Del)

Quản lý các phiên đăng nhập vào hệ thống trước đó

Tạo process người dùng đầu tiên

Xử lý đăng xuất khỏi hệ thống

Được giới thiệu như là quy trình chế độ người dùng: `% SystemRot% \ System32 \ Winlogon.exe`

## 7. LogonUI

Giao diện người dùng đăng nhập vào hệ thống (LogonUI)

* Cung cấp cho người dùng giao diện, mà nso có thể sử dụng để xác thực vào hệ thống;
* Sử dụng nhà cung cấp chứng chỉ để yêu cầu thông tin xác thực của người dùng theo nhiều cách khác nhau;
* Được giới thiệu là quy trình chế độ người dùng: `% SystemRot% \ System32 \ LogonUI.exe`

## 8. Winlogon và LogonUI

<figure><img src="/files/XThSW0wzbCkgzXpfh2rb" alt=""><figcaption><p>Winlogon and LogonUI</p></figcaption></figure>

### 8.1. Credential providers

Credential providers (Nhà cung cấp chứng chỉ) là các thành phần phần mềm trong hệ điều hành Windows, được sử dụng để quản lý và cung cấp các phương thức xác thực cho người dùng khi đăng nhập vào hệ thống. Khi người dùng thực hiện quá trình xác thực, credential provider cung cấp giao diện và tương tác để thu thập thông tin xác thực từ người dùng và kiểm tra tính hợp lệ của thông tin đó.

Credential providers (Nhà cung cấp chứng chỉ) là các đối tượng COM trong tiến trình (được triển khai dưới dạng DLL) chạy trong quá trình LogonUI và được sử dụng để lấy tên người dùng và mật khẩu, mã PIN từ thẻ thông minh, dữ liệu sinh trắc học (như dấu vân tay) hoặc thông tin xác thực khác.

Các Credential provider tiêu chuẩn bao gồm `authui.dll`, `SmartCardCredentialProvider.dll`, `BioCredProv.dll` và `FaceCredentialProvider.dll`.

<figure><img src="/files/3GpeCUYkzZQe3k3Qcrxa" alt=""><figcaption><p>Giao diện nhà cung cấp chứng chỉ</p></figcaption></figure>

## 9. Windows Acess Control

Chủ thể là processes hoặc threads. Chúng được liên kết với token truy cập và hành động thay mặt cho mốt số người dùng;

Khi người dùng đăng nhập vào Windows (nghĩa là có xác thực), hệ điều hành sẽ tạo marker truy cập chứa mã định danh bảo mật (SID[^1]) được liên kết với tài khoản người dùng và bất kỳ tài khoản nhóm mà người dùng thuộc về. Marker cũng chứa danh sách các đặc quyền thuộc sở hữu của người hoặc nhóm người dùng.

Đối tượng là files, registry key, máy in, các quy trình hoặc mối đe dọa khác ... được liên kết với các bộ mô tả bảo mật;

&#x20;Khi một đối tượng được tạo, nó được gán một bộ mô tả bảo mật có chứa danh sách kiểm soát truy cập tùy ý (DACL[^2]). Nó xác định SID của người dùng và nhóm nào có thể truy cập đối tượng và cách thức (read, write, execute, ...);

**Danh sách kiểm soát truy cập:**&#x20;

* Danh sách SACL quản lý bởi quản trị viên hệ thống và nhằm mục đích kiểm toán bảo mật.
* Danh sách DACL quản lý bởi chủ sở hữu đối tượng và nhằm mục đích xác thực người dùng và nhóm được cấp hoặc bị cấm quyền truy cập vào một đối tượng.

<figure><img src="/files/qXOAGdDnJTbTZ1nIOOaA" alt=""><figcaption><p>sơ đồ mối liên hệ đối tượng và chủ thể</p></figcaption></figure>

### 9.1. SID - Security Identifier

Để nhận dạng duy nhất một người dùng trong hệ thống người ta sử dụng mã định danh bảo mật (SID)/ Ngoài người dùng, SID còn có sẵn cho nhóm người dùng, máy tính, domain và thành viên domain.

SID được hệ thống tạo ngẫu nhiên nên xác suất để trùng nhau gần như bằng 0

<figure><img src="/files/dw8yT6IHnXsuTQPXnLcb" alt=""><figcaption><p>Ví dụ về một SID</p></figcaption></figure>

#### 9.1.1. Ví dụ SID

`S-1-5-32-544` - Nhóm quản trị viên tích hợp sẵn:

* S: đây là tiền tố tường minh cho SID và chỉ định rằng đó là một SID
* 1: Đây là bản gốc (revision) của SID. Giá trị thường là 1 và chỉ rằng đây là phiên bản gốc của SID. (có thể gọi đây là Cấp độ sửa đổi)
* 5: là mã identifier authority (IA) và xác định nguồn tạo ra SID. Trong TH này thì 5 chỉ định rằng SID được tạo bởi máy chủ Security Authority (LSA) của windows.
* 32: domain ID, built-in, SID cho các tài khoản và nhóm cài đặt sẵn luôn có cùng một giá trị domain ID tồn tại trên mỗi máy tính.
* 544: Đây là gái trị cuối cùng trong SID và đại diện cho một số cụ thể cho đối tượng trong nhóm người dùng. Trong TH này đại diện cho Built-in Administrators Group, nhóm người dùng tích hợp sẵn trong hệ thống Windows.

`S-1-5-21-1004336348-1177238915-682003330-512` - ví dụ SID chủ thể domain «COMPANY \ Domain Admins»:

* Tương tự: `S`, `1`, `5`, `21-1004336348-1177238915-682003330`, `512`

### 9.2. Access Token

Mỗi process/thread có một Access Token. Token ban đầu được tạo khi đăng nhập thành công và được đính kèm vào quy trình đầu tiên trong phiên của người dùng;

Tất cả processes được tạo từ token đầu tiên, kế thừa bản sao của Token ban đầu. Đây là lý do tại sao tất cả các quy trình trong phiên người dùng đều chạy dưới cùng một token;

Theo mặc định bản copy access token được gắn vào mọi threads và process của người dùng, nhưng có thể được khởi chạy bằng một token khác, sử dụng chức năng "Run as another user".

<figure><img src="/files/xjLVMHb1V6QXnXwD4BOL" alt=""><figcaption></figcaption></figure>

Token chứa:

* SID người dùng
* SID của tất cả nhóm, mà người dùng thuộc về (đệ quy)
* Quyền của người dùng
* Mức độ toàn vẹn được xác định bới SID nhóm đặc biệt
* Kiểu mạo danh (ẩn dụ, giả mạo)
* ID phiên đăng nhập
* ...

**TOKEN KHÔNG BAO GIỜ THAY ĐỔI SAU KHI ĐƯỢC TẠO.**

#### 9.2.1. Creating the groups SIDs list

<div><figure><img src="/files/cpG4ktKNAtPMV1FYQpFJ" alt=""><figcaption><p>Thông tin user, SID, và nhóm mà user thuộc về</p></figcaption></figure> <figure><img src="/files/kOSbN2E3ziskOmkfr78X" alt=""><figcaption></figcaption></figure></div>

## 10. Impersonation (mạo danh)

Khi khách và máy chủ tương tác trong hệ điều hành Windows, cơ chế mạo danh có thể được sử dụng. Trong TH này, nếu cần đưa ra yêu cầu tới máy chủ, một threads sẽ được tạo trong process của máy khách, được gán marker truy cập của người dùng đã khởi tạo yêu cầu. Cơ chế này cho phép máy chủ hành động thay mặt máy khách khi truy cập vào các đối tượng mà bản thân máy chủ không có quyền truy cập.

Một thread có thể có access token riêng, khác với token quy trình của nó.

Khi process máy chủ chấp nhận khách, nó sẽ tạo ra một Worker thread để thực hiện công việc và liên kết marker truy cập máy khách với thread công việc. Sau khi bị ràng buộc theo cách này, access token client gọi là Impersonation Token, để xác định khách, nhóm khách và quyền của khách hàng.

<div><figure><img src="/files/cTwgTUvjDGbRK6Z8Eb6t" alt=""><figcaption><p>cơ chế mạo danh</p></figcaption></figure> <figure><img src="/files/dpyjcPDoRUjnfcuAcTqF" alt=""><figcaption></figcaption></figure></div>

### 10.1. Impersonation. Cấp độ

Mỗi cấp độ cho phép máy chủ thực hiện một nhóm hoạt động khác nhau liên quan đến bối cảnh bảo mật của máy khách:

* SecurityAnonymous - Đây là cấp độ hạn chế nhất, trong đó máy chủ không thể mạo danh hoặc nhận dạng client;
* SecurityIdentification - máy chủ có thể nhận SID và các đặc quyền client, nhưng không thể mạo danh client;
* SecurityImpersonation -  máy chủ có thể nhận dạng và mạo danh client trong hệ thống cục bộ;
* SecurityDelegation - cấp độ mạo danh ít hạn chế nhất. Nó cho cho phép máy chủ mạo danh client trong cả hệ thống cục bộ và từ xa. Windows NT 4 và các phiên bản cũ hơn chỉ hỗ trợ 1 phần mức độ mạo danh này.

### 10.2. Token stealing attack (Pass-the-Token)

<figure><img src="/files/NdwDaK6Tj3qa1Mf79KnL" alt=""><figcaption><p>Cuộc tấn công đánh cắp token</p></figcaption></figure>

Kẻ tấn công ban đầu có end-user account `MSAD2-USER1`, nhưng cần nâng lên `SYSTEM` để có thể thao tác với tokens.

Meterpreter thực hiện việc này dễ dàng bằng câu lệnh: `getsystem`

Kẻ tấn công sau đó có thể load module `incognito` và liệt kê các tokens có sẵn.

Nhận thấy pribiliged IR account `MSAD2\msad2-responder1` hiện có sẵn!

<figure><img src="/files/HO38J6Ze7cVGmy2Zxj1D" alt=""><figcaption><p>cuộc tấn công đánh cắp token</p></figcaption></figure>

Bây giờ bằng cách sử dụng chức năng mạo danh ẩn danh, kẻ tấn công trở thành `MSAD2\msad2-responder1`. Ban đầu thì kẻ tấn công là tài khoản người dùng `MSAD2-USER1` then local SYSTEM, thì giờ đây là a priviliged IR account!

Bây giờ thì kẻ tấn công sử dụng `shell` để get a CMD và thực hiện những gì mà kẻ tấn công mong muốn.

### 10.3. Impersonation privilege

<div><figure><img src="/files/6PT86rU5RxqYIyO9mxzI" alt=""><figcaption></figcaption></figure> <figure><img src="/files/uJRQqkzZvF02e0W9GfMt" alt=""><figcaption></figcaption></figure></div>

### 10.4. Disable delegation for sensitive accounts (vô hiệu hóa ủy thác cho các tài khoản nhạy cảm)

<figure><img src="/files/VEnlTYmh0KolK99CMsXv" alt=""><figcaption></figcaption></figure>

***

Nguồn:

1. Kiến thức về lsass: <https://quantrimang.com/cong-nghe/lsass-exe-la-gi-165664>
2. Loại đăng nhập: <https://eventlogxp.com/rus/blog/logon-type-what-does-it-mean.html>
3. Tài liệu học tại trường

[^1]: SID (Security Identifier) là một chuỗi số duy nhất được gán cho mỗi tài khoản người dùng, nhóm người dùng hoặc các đối tượng khác trong hệ thống Windows. Nó được sử dụng để định danh và xác định quyền truy cập của một thực thể trong hệ thống.

[^2]: DACL (Discretionary Access Control List) là một thành phần trong hệ thống Access Control (Kiểm soát truy cập) của Windows. Nó là một danh sách chứa các mục nhập quyền truy cập được gắn kết với mỗi đối tượng.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://viettaliii.gitbook.io/home/education/window-pe-.net/os-internals-security/windows-security.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
