# Windows Registry

## 1. Windows Registry là gì?

* Windows Registry là một cơ sở dữ liệu phân cấp được sử dụng để lưu trữ thông tin cấu hình cho hệ thống Windows và các ứng dụng trên đó. Nó chứa các khóa (keys) và giá trị (values) được tổ chức thành một cấu trúc cây phân cấp, giúp người dùng và hệ thống truy xuất và thay đổi các thông tin quan trọng.
* Ngoài ra Registry còn hỗ trợ cấu trúc multi-profile lưu trữ cài đặt của người dùng, mỗi người dùng sẽ có cấu hình khác nhau dành riêng cho tài khoản của họ, ví dụ như người dùng A cài đặt Unikey khởi động cùng Windows còn người dùng B thì không cài chương trình đó, Registry sẽ ghi lại những điều này và lưu thư mục riêng của mỗi người dùng.

## 2. Cấu trúc của Windows Registry

Windows Registry được tổ chức thành nhiều hạng mục (hives) và các khóa con (subkeys) bên trong chúng. Các hạng mục quan trọng nhất (Root keys) trong Registry bao gồm:

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

> \+ HKEY\_CLASSES\_ROOT (HKCR): chứa thông tin về các loại tệp tin và các tiện ích tương ứng với chúng
>
> \+ HKEY\_CURRENT\_USER: lưu trữ các thông tin cấu hình đối với người dùng đang đăng nhập hiện tại
>
> \+ HKEY\_LOCAL\_MACHINE: chứa thông tin cấu hình cho máy tính cụ thể
>
> \+ HKEY\_USERS: lưu trữ thông tin cấu hình cho tất cả người dùng trên hệ thống
>
> \+ HKEY\_CURRENT\_CONFIG: chứa thông tin về cấu hình hiện tại của phần cứng

Mỗi hạng mục trong Registry chứa các khóa (keys). Các khóa là các thư mục trong cây Registry và có thể chứa khóa con và giá trị. Khóa thường được đặt tên theo đường dẫn, ví dụ: `HKEY_LOCAL_MACHINE\Software\Microsoft\Windows`

Mỗi khóa trong Registry có thể chứa một hoặc nhiều giá trị (values). Giá trị là các thông tin cụ thể được lưu trữ trong khóa và được sử dụng để lưu trữ các cấu hình và tùy chỉnh. Các gái trị có thể là các kiểu dữ liệu khác nhau như chuỗi kí tự (string), số nguyên (integer), boolean (true/false), nhị phân (binary) và nhiều kiểu dữ liệu khác.

Ví dụ:

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

> `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` chứa một loạt các giá trị là file thực thi được khởi động tự động khi người dùng đăng nhập. Root key là HKCU (HKEY\_CURRENT\_USER), key này lưu trữ các subkey Software, microsoft, windows, currentVersion và Run. và key Run chứa các Value. Với mỗi root key nói tiêng và các key nói chung, sẽ chỉ có những phần mềm nhất định được truy cập vào vì lý do bảo mật. Chính vì thế mà mỗi người dùng, phần mềm, dịch vụ sẽ chỉ thấy những key mà chúng được phép xem mà thôi.

Cấu trúc của Windows Registry cho phép các ứng dụng và hệ thống truy cập và lưu trữ thông tin cấu hình và tùy chỉnh một cách có tổ chức và hiệu quả, việc hiểu cấu trúc này giúp người dùng và nhà phát triển hiểu và tương tác với Registry một cách chính xác và an toàn.

## 3. Cách hoạt động của Windows Registry

Khi hệ thống windows khởi động, Registry sẽ được tải vào bộ nhớ. Khi các ứng dụng hoạt động, chúng sẽ truy cập và thay đổi Registry để lấy thông tin cấu hình hệ thống hoặc lưu trữ thông tin mới. Dưới đây là các hoạt động cơ bản của Registry:

### 3.1. Lưu trữ cấu hình

Khi hệ thống windows hoạt động, nó sẽ đọc và ghi thông tin cấu hình vào Registry. Điều này bao gồm các cấu hình hệ thống như các thiết lập mạng, cấu hình đồ họa, cấu hình âm thanh và nhiều thông tin khác. Mỗi ứng dụng cũng có thể lưu trữ các cấu hình riêng của nó trong Registry

### 3.2. Truy cập và sửa đổi Registry

Các ứng dụng và hệ thống Windows có thể truy cập Registry thông qua API cung cấp bởi hệ điều hành. API này cho phép các ứng dụng đọc, ghi, sửa, xóa các khóa và giá trị trong Registry. Các ứng dụng có thể truy cập và cập nhật Registry để lấy thông tin cấu hình, tùy chỉnh hành vi hoặc thay đổi các thiết lập.

### 3.3. Sao lưu và khôi phục

Windows cung cấp công cụ Registry Editor (regedit) để truy cập và quản lý Registry. Nó cho phép người dùng sao lưu và khôi phục Registry, để đảm bảo tính ổn định và an toàn của hệ thống. Việc sao lưu Registry trước khi thay đổi là rất quan trọng để có thể khôi phục lại trạng thái trước đó nếu cần thiết.

### 3.4. Tương tác với ứng dụng và hệ thống

Thông tin trong Registry được ứng dụng và hệ thống sử dụng để lấy cấu hình và thiết lập tùy chỉnh. Khi ứng dụng hoặc hệ thống cần truy cập một giá trị trong Registry, nó có thể truy vấn khóa và giá trị tương ứng để lấy thông tin cần thiết.

## 4. Sử dụng Windows Registry

Người dùng có thể truy cập Registry thông qua Registry Editor (một công cụ tích hợp trong hệ thống Windows, cho phép thay đổi các thông số cấu hình, tắt hoặc bật tính năng và tùy chỉnh hành vi của hệ thống và ứng dụng. Ngoài ra có thể sử dụng các công cụ của bên thứ ba để quản lý và tối ưu hóa Registry, nhằm tăng hiệu suất hệ thống.

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

## 5. Tối ưu hóa và sửa chữa Windows Registry

* Xóa các khóa và giá trị thừa: trong quá trình sử dụng hệ thống, có thể có các khóa và giá trị không còn cần thiết nữa. Việc xóa chúng sẽ giảm kích thước của Registry và cải thiện hiệu suất hệ thống. Tuy nhiên, cần thận trọng và chỉ xóa các khóa và giá trị mà bạn hiểu rõ và không cần thiết.
* Sử dụng công cụ tối ưu hóa Registry: có nhiều công cụ tối ưu hóa Registry có sẵn để giúp bạn tự động tìm và xóa các khóa và giá trị thừa, sửa chữa các lỗi và tối ưu hóa cấu trúc của Registry. Các công cụ này có thể giúp bạn tiết kiệm thời gian và đảm bảo tính ổn định của hệ thống.
* Sao lưu và khôi phục Registry: trước khi thực hiện bất kỳ thay đổi nào trên Registry nên tạo một bản sao lưu của nó để đảm bảo rằng bạn có thể khôi phục lại trạng thái trước đó nếu cần thiết. Windows cung cấp công cụ Registry Editor để sao lưu và khôi phục Registry.
* Sửa chữa lỗi Registry: nếu hệ thống gặp phải lỗi liên quan đến Registry, có thể sử dụng công cụ System File Checker(SFC) để kiểm tra và sửa chữa cá tệp tin hệ thống bị hỏng. SFC cũng có khả năng kiểm tra và sửa lỗi Registry.

## 6. Một số thủ thuật với Registry

### 6.1. Tắt màn hình khóa

* Màn hình khóa là một lớp bảo mật được thêm vào trên PC windows, yêu cầu mật khẩu hoặc mã PIN để bạn đăng nhập lại. Nếu bạn cảm thấy an toàn, thì bạn có thể tắt hoàn toàn màn hình khóa.
* Mở Registry Editor, vào thư mục `HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows`, nhấp chuột phải vào windows trong bảng điều khiển bên trái, chọn `New` > `Key` và đặt tên mới là `Personalization`. Chọn `Personalization`, sau đó trong bảng điều khiển bên phải, nhấp chuột phải vào một chỗ trống và chọn New > `DWORD (32-bit) Value`, đặt tên cho giá trị là `NoLockScreen`, thay đổi Value data thành 1 rồi chọn OK

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

### 6.2. Thêm ứng dụng của riêng bạn vào menu ngữ cảnh (phần chuột phải)

Menu ngữ cảnh rất thú vị, nhưng để kiểm soát nó thì cần tạo các registry key để thêm các ứng dụng cụ thể vào đó. ở đây ta sẽ lấy Notepad làm ví dụ:

* B1: Mở regedit, điều hướng đến `Computer\HKEY_CLASSES_ROOT\Directory\Background\shell`
* B2: trong thư mục shell, nhấp chuột phải và tạo một key mới có tên `Notepad` trong đó tạo ra một key có tên là `command`. Trong thư mục key command, nhấp chuột phải vào chuỗi Default, sau đó trong hộp `Value`, nhập `notepad.exe`

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

Kết quả nhận được:

<figure><img src="/files/7njXDzMeLtbXQXmWOz8Z" alt=""><figcaption></figcaption></figure>

### 6.3. Tăng tốc độ mạng

Nhiều chỉnh sửa Registry trong danh sách sẽ liên quan đến những thay đổi về thiết kế hoặc thẩm mỹ, có thể khiến Windows trở nên mượt mà và tốt hơn. Nhưng cũng có một số loại các thủ thuật registry được thiết kế để cải thiện tốc độ internet. Dưới đây là một số cách sử dụng registry để cải thiện tốc độ internet:

Cách 1: IRPStackSize: điều hướng đến `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters`, thêm IRPStackSize làm giá trị DWORD ở bên phải cửa sổ regedit và sửa đổi giá trị thành 32

Cách 2: MaxFreeTcbs: điều hướng đến `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters`, tạo hoặc chỉnh sửa MaxFreeTcbs và đặt giá trị của nó là 65536. Nếu bạn đang sử dụng một máy tính cũ với phần cứng hiệu suất thấp, thì có thể đặt giá trị này ở một số thấp hơn, chẳng hạn như 16000

## 7. Một vài cách mà hacker có thể tấn công

### 7.1. Sử dụng khóa Registry cho các cuộc tấn công bằng malware

Ví dụ như là truy vấn Registry từ xa để xem xem có công cụ truy cập từ xa nào được cài đặt hay không như TeamViewer, VNC, hoặc đươn giản là Terminal Services. Với thông tin đó, kẻ xấu có thể tận dụng các công cụ này làn truyền xa qua một môi trường hoặc tìm đường đến các hệ thống có giá trị hơn.

Một cách thức ngày càng phổ biến là sử dụng các khóa Registry để lưu trữ và ẩn các mã lệnh tiếp theo cho phần malware sau khi nó được thả vào hệ thống. Hơn nữa, malware sử dụng các công cụ Windows để thực hiện các câu lệnh nên nó không thể bị dò ra bởi phần mềm bảo mật dựa trên chữ kí như phần mềm diệt virus (antivirus)

### 7.2. Sử dụng các khóa chạy và các thư viện khởi động của Windows để thiết lập tính bền vững

Một khi kẻ tấn công hoặc phần mềm malware đến được điểm cuối, chúng thường sẽ đảm bảo có thể tiếp tục sử dụng tài nguyên qua cơ chế bền vững. Hầu hết chúng ta đều hiểu rõ khóa chạy và việc sử dụng thư mục khởi động của Windows để tạo ra tính bền vững trên một điểm cuối bị nhiễm. Nhưng cách thức tấn công này vẫn tồn tại và nên được để ý và tập trung vào khi điều tra về quá trình bị nhiễm.

Trong 2 cách trên, cách đơn giản hơn là sử dụng thư mục khởi tạo Windows ở `C:\User\<username>\AppData\Roaming\Micrsoft\Windows\Start Menu\Programs\Startup`. Đường dẫn shortcut (đuôi .lnk) đặt ở trong thư mục này sẽ khiến cho Windows chạy ứng dụng mỗi lần người dùng đăng nhập vào Windows. Điều này được sử dụng bởi nhiều dạng malware, nhưng cũng có thể dễ dàng phát hiện và khắc phục bằng cách xóa shortcut/

Khóa chạy Registry thực hiện hành đọng tương tự, nhưng có thể được đặt ở các đường dẫn khác nhau:

* HKEY\_LOCAL\_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
* HKEY\_CURRENT\_USER\Software\Microsoft\Windows\CurrentVersion\Run
* HKEY\_LOCAL\_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
* HKEY\_CURRENT\_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

Sự khác nhau giữa HKEY\_LOCAL\_MACHINE và HKEY\_CURENT\_USER là liệu file thực thi được tham chiếu có khởi chạy cùng hệ thống cho tất cả người cùng đăng nhập hay chỉ cho một người dùng cụ thể (current\_user được sao chép vào "user hive" được lưu trữ và tải mỗi khi người dùng ID đó đăng nhập). Và một khác biệt nữa là Run và RunOne, RunOne sẽ tự động xóa entry khi thực hiện thành công.

Nếu phương pháp này thành công, phần malware sẽ tiếp tục thực thi mã của nó để đảm bảo việc truy cập vào các trang quảng cáo (trong trường hợp nhấp chuột vào các malware, gửi tín hiệu đến máy chủ điều khiển và điều phối (trong trường hợp botnet nơi các lệnh tiếp thoe cần được gửi đến các máy nạn nhân), hoặc liên tục cố gắng khiến người dùng cuối nhấp vào các liên kết trong các cửa sổ bật lên với bất kỳ mục đích nào.

### 7.3. Tận dụng nhược điểm trong quyền của Registry Service để thiết lập tính bền vững

Một phương pháp khác để thiết lập tính bền vững đồng thời cho phép tiến hóa đặc quyền thông qua việc sửa đổi các tham số của các dịch vụ được khởi động mỗi khi Windows được khởi chạy. Nếu quyền không được cấu hình đúng (hãy nhớ nguyên tắc của quyền ít nhất), và cho phép sửa đổi các khóa Registry của dịch vụ, khóa ImagePath hoặc binPath có thể được sửa đổi để trỏ tới một tệp nhị phân độc hại hoặc một tệp mới được tạo ra. Điều này không chỉ cho phép phần malware khởi chạy khi Windows khởi động, mà còn có thể chạy dưới tài khoản hệ thống cục bộ với đặc quyền cao hơn. Hãy nhớ rằng hành vi này phổ biến đối với nhiều chương trình cài đặt phần mềm và, nếu theo dõi các thay đổi, có thể là nguồn gây ra các lượt truy cập giả mạo. Tuy nhiên, đây vẫn là một vị trí tuyệt vời để phần mềm độc hại xâm nhập vào điểm cuối của bạn. Bất kỳ phần mềm không rõ nguồn gốc nào nên được kiểm tra kỹ nếu nó thay đổi phần này của Registry.

***

Nguồn:

1. <https://sec.vnpt.vn/2023/05/lam-chu-windows-register-part-1/>
2. <https://sec.vnpt.vn/2023/06/lam-chu-windows-register-part-2/>


---

# 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-registry.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.
