Giới thiệu chung về dịch vụ Active Directory

Tổng quan

Active Directory (AD) là dịch vụ thư mục Windows trong môi trường mạng, có cấu trúc phân cấp và phân tán cho phép quản lý tập trung các tài nguyên của tổ chức bao gồm: người dùng, máy tính, nhóm người dùng (group), thiết bị mạng, chia sẻ tệp, chính sách nhóm (group policy) và trust.

AD có khả năng tương thích ngược, được cho là có nhiều điểm yếu theo mặc định và dễ dàng bị cấu hình sai (misconfigured). Do đó, nó dễ bị lợi dụng để tấn công theo chiều dọc và theo chiều ngang để truy cập bất hợp pháp trong môi trường mạng.

Về cơ bản, AD là cơ sở dữ liệu chỉ đọc có kích thước lớn mà tất cả người dùng trong domain có thể truy cập, bất kể cấp độ đặc quyền của họ. Một người dùng domain tiêu chuẩn đều có thể liệt kê hầu hết các đối tượng trong AD.

Các kiến thức chung

1. Kiến trúc

Active Directory là một kiến trúc cây phân cấp, với một forest là cấp cao nhất. Forest sẽ bao gồm các domain và các domain sẽ bao gồm các child hoặc sub-domain sau đó. Domain là kiến trúc chứa các domain controller, user, computer hoặc các OU (Organization Unit).

Ví dụ: INLANEFREIGHT.LOCAL là một root domain chứa 3 sub-domain (ADMIN.INLANEFREIGHT.LOCAL, CORP.INLANEFREIGHT.LOCAL, DEV.INLANEFREIGHT.LOCAL). Trong domain có thể chứa các object khác như Group Policy Object (GPO), OU,...

INLANEFREIGHT.LOCAL/
├── ADMIN.INLANEFREIGHT.LOCAL
│   ├── GPOs
│   └── OU
│       └── EMPLOYEES
│           ├── COMPUTERS
│           │   └── FILE01
│           ├── GROUPS
│           │   └── HQ Staff
│           └── USERS
│               └── barbara.jones
├── CORP.INLANEFREIGHT.LOCAL
└── DEV.INLANEFREIGHT.LOCAL

Ngoài ra, việc sử dụng trust relationship để liên kết các domain với nhau cũng rất thường xuyên.

Note

Trust Relationship được thiết lập giữa forest-forest hoặc domain-domain, cho phép user truy cập tài nguyên ở domain khác.

Link tham khảo: https://luanvan.net.vn/luan-van/de-tai-active-directory-tim-hieu-ve-trust-relationship-22562/

Có nhiều loại trust:

20250108140810.png

Ví dụ: trong hình dưới đây,

20250103141744.png

2. Các thuật ngữ liên quan

Object: Object bao gồm bất kỳ đối tượng nào trong AD như user, group, domain controller, OU,...

Attributes: mỗi object sẽ có các thuộc tính để diễn giải đặc trưng của object đó. Ví dụ: một máy sẽ có các thuộc tính như hostname và DNS name. Tất cả các thuộc tính trong AD sẽ liên kết với một LDAP name khi thực hiện truy vấn LDAP, chẳng hạn như displayName.

Schema: là bản thiết kế của AD, nó định nghĩa bất kì object với các attribute liên quan có thể tồn tại trong cơ sở dữ liệu của AD. Ví dụ, user thuộc về group User và máy tính thuộc về group Computer. Mỗi object có các attribute được định nghĩa trong schema (một số bắt buộc phải có khi tạo object), khi một object được tạo từ một class thì được gọi là một instance của class đó, ví dụ như máy THUNE là một instance nằm trong class Computer.

Tree: là tập hợp các domain bắt đầu từ root domain. Mỗi forest sẽ có nhiều tree. Một parent-child trust relationship được tạo khi có một domain được thêm vào dưới domain khác trong tree. Tất cả các domain trong tree cùng chia sẻ Global Catalog - chứa mọi thông tin về các object tồn tại trong tree.

Container: object chứa các object khác trong một tree.

Leaf: object không chứa các object khác và nằm ở phân cấp cuối của tree.

Global Unique Identifier (GUID): là giá trị 128 bits duy nhất được gắn cho một object khi nó được tạo, được thể hiện trong attribute ObjectGUID của mỗi object

Security principals: là bất kỳ thứ gì mà hệ điều hành có thể sử dụng để xác thực, bao gồm user, computer, hoặc thậm chí là các process/thread chạy dưới context của user/computer. Ví dụ: Tomcat server chạy dưới context của service account trong domain. Trong AD, security principal là các domain object có thể quản lý quyền truy cập của các tài nguyên trong miền, được quản lý bởi Security Accounts Manager (SAM).

Security Identifier (SID): là giá trị duy nhất được gắn cho một security principal hoặc security group bởi domain controller và lưu trong database an toàn. SID chỉ được sử dụng một lần, dù nó bị xoá đi chăng nữa, cũng không thể sử dụng lại. Khi một user đăng nhập vào hệ thống, một access token được tạo bao gồm SID, quyền của user được cấp và SID của bất kỳ group nào user thuộc về. Mỗi khi thực hiện một hoạt động nào trên máy tính, giá trị token này sec được xem xét để kiểm tra quyền truy cập của user. Các user và group mặc định trong AD có SID có thể tra cứu ở đây

Distinguished Name (DN): đường dẫn đầy đủ đến domain object. Ví dụ, cn=bjones, ou=IT, ou=Employees, dc=inlanefreight, dc=local

Relative Distinguished Name (RDN): là thành phần duy nhất của DN, ví dụ: DN là cn=bjones, ou=IT, ou=Employees, dc=inlanefreight, dc=local thì RDN là bjones. AD không cho phép 2 objects có cùng RDN dưới cùng một parent container nhưng có thể trùng trong cả domain. Ví dụ:
cn=bjones,dc=dev,dc=inlanefreight,dc=localcn=bjones,dc=inlanefreight,dc=local.

sAMAccountName: tên đăng nhập của user, là duy nhất và ít hơn 20 ký tự.

userPrincipalName: tên của user có dạng username@domain

FSMO Roles: để quản lý nhiều DC trong môi trường, Microsot sử dụng một node duy nhất làm master để có thể quản lý và áp dụng các thay đổi một cách tập trung đến các DC khác. Nhưng điều này không đảm tính sẵn có, vì nếu master node dừng sẽ ảnh hưởng toàn bộ môi trường. Do đó, Microsoft chuyển qua sử dụng FSMO, chia thành nhiều vai trò khác nhau bao gồm: Schema Master, Domain Naming Master (mỗi forest có 1), Relative ID (RID) MasterPrimary Domain Controller (PDC) Emulator, và Infrastructure Master (mỗi domain có 1). Năm vai trò này được gán cho DC của root domain đầu tiên trong AD forest mới. Các domain khác được tạo sau đó sẽ được gán cho 3 vai trò là Primary Domain Controller (PDC) Emulator và Infrastructure Master. FSMO được cấu hình tự động khi DC được tạo, nhưng có thể thay đổi sau đó. Các role này giúp cho việc sao lưu (replication) giữa các AD và đảm bảo các dịch vụ quan trọng thực thi chính xác.

Global Catalog: là một tính năng của DC, lưu trữ bản sao đầy đủ của các object trong domain hiện tại và một phần bản sao của các object thuộc domain khác. Trong khi đó, DC tiêu chuẩn chỉ lưu trữ bản sao đầy đủ. Theo mặc định, GC được thêm vào ở các DC trong root domain của một forest, được xử dụng trong quá trình xác thực và tìm kiếm object một cách nhanh chóng.

Read-Only Domain Controller (RODC): là DC chỉ có quyền đọc. Không có mật khẩu tài khoản AD nào được lưu vào bộ nhớ cache trên RODC (ngoại trừ mật khẩu của tài khoản máy tính RODC và mật khẩu RODC KRBTGT). Không có thay đổi nào được đẩy ra qua cơ sở dữ liệu AD, SYSVOL, hoặc DNS của RODC. RODC cũng bao gồm một máy chủ DNS chỉ đọc, cho phép phân tách vai trò quản trị viên, giảm lưu lượng sao chép trong môi trường và ngăn chặn việc thay đổi SYSVOL được sao chép tới các Domain Controller khác.

Replication: việc sao lưu có thể xảy ra khi một object được thay đổi thông tin, nhưng việc sao lưu ở thành phần và cấp độ như nào phụ thuộc vào domain mà object thuộc về. Ví dụ, user object thuộc về một domain, mà domain này có nhiều sub-domain khác, thì khi user đổi mật khẩu, quá trình replication sẽ tiến hành giữa domain và các sub-domain của nó. Tuy nhiên, nếu object thay đổi là scheme, thì bắt buộc mọi domain trong forest phải replicate. Điều này tạo ra tính nhất quán của toàn bộ forest. Khi một DC được thêm vào.

Service Principal Name (SPN): giá trị duy nhất dùng để định danh một service instance, sử dụng bởi Kerberos. Mỗi tài khoản cũng có một SPN dùng để xác thực, cho phép ứng dụng yêu cầu xác thực tài khoản mà không cần biết tên tài khoản.

Group Policy Object (GPO): tập hợp các cấu hình policy, GPO có thể chứa local file system hoặc cấu hình AD, có thể áp dụng cho OU hoặc domain.

Access Control List (ACL): tập hợp các ACE

Access Control Entries (ACEs): mô tả quyền truy cập của người dùng hoặc nhóm đối với một tài nguyên trong hệ thống bảo mật. ACE cho phép cấp hoặc từ chối quyền truy cập, và mỗi ACE áp dụng cho một đối tượng cụ thể, giúp quản lý bảo mật và quyền truy cập trong hệ thống.

Discretionary Access Control List (DACL): định nghĩa security principal được cấp quyền hoặc bị từ chối truy cập vào một object (thư mục), bao gồm một danh sách ACE. Khi một process truy cập một object, hệ thống kiểu tra các Ace trong DACL để quyết định cấp quyền hay không. Nếu object không có DACL thì hệ thống sẽ cấp full quyền cho mọi người, nhưng nếu object có DACL và DACL không có ACE nào thì hệ thống từ chối mọi truy cập. Các ACE được kiểm tra theo thứ tự cho đén khi tìm thấy sự trùng khớp cho phép các quyền được yêu cầu hoặc cho đến khi quyền truy cập bị từ chối.

System Access Control Lists (SACL): cho phép admin ghi log các access attempt vào các đối tượng được bảo mật. ACE sẽ chỉ định loại access attempt sẽ tạo ra log.

Fully Qualified Domain Name (FQDN): tên đầy đủ của một máy, có dạng [hostname].[domain name].[tld], sử dụng trong DNS.

Tombstone: container lưu trữ các AD object bị xoá. Sau khi bị xoá, object vẫn sẽ tồn tại trong database trong một khoảng thời gian là Tombstone Lifetime (có thể là 60 hoặc 180 ngày) với attribute isDeletedTRUE, phần lớn các attribiute khác sẽ bị mất. Nếu object bị xoá thuộc về domain không AD Recycle Bin, nó sẽ trở thành tombstone object. Các object này có thể được phục hồi nhưng các thuộc tính bị mất không thể khôi phục.

AD Recycle Bin: nếu được cấu hình, các object bị xoá sẽ được lưu trữ ở đây trong một thời gian với các thuộc tính gần như nguyên vẹn, giúp việc khôi phục dễ dàng, đồng thời cũng tránh việc sử dụng các bản backup, dẫn đến việc phải reboot. Sau khi hết thời gian lưu giữ trong trạng thái Deleted Object, đối tượng chuyển sang trạng thái "Recycled Object". Trong trạng thái này, hầu hết các thuộc tính của đối tượng (ngoại trừ một vài thuộc tính nhận dạng cơ bản) bị loại bỏ, khiến việc khôi phục đối tượng về trạng thái ban đầu trở nên khó khăn hoặc không thể.

SYSVOL: một thư mục chia sẻ, lưu trữ các tệp liên quan đến system policy, Group Policy settings, logon/logoff scripts và các loại script khác cho nhiều task trong môi trường AD. SYSVOL là thư mục công khai, mọi người đều có thể xem thư mục này, nó được sao chép giữa tất cả các DC.

AdminSDHolder: là object được sử dụng để quản lý ACLs cho các thành viên trong các built-in group có đặc quyền cao như Domain Admins group... Nó chứa Security Descriptor bao gồm các thông tin như Owner, DACL, SACL. Mỗi khi process SDProp được lên lịch chạy (mỗi tiếng một lần), nó sẽ kiểm tra các thành viên trong group để đảm bảo ACL được gắn đúng. Ví dụ, attacker có quyền tạo ACL entry để cấp cấp cho người dùng một số quyền nhất định đối với thành viên của nhóm Domain Admin, các quyền này sẽ bị xoá khi SDProp chạy.

dsHeuristics: là thuộc tính của Domain Controller, không dành cho user hay group. Một trong các thiết lập của thuộc tính này là exclude built-in group khỏi Protected Group (được bảo vệ bởi AdminSDHolder).

adminCount: là thuộc tính xác định SDProps process có bảo vệ user này không, nếu giá trị là 0, user không được bảo vệ, còn 1 thì ngược lại.

sIDHistory: giữ các SID cũ của user, thường được sử dụng khi di chuyển chuyển user từ domain cũ sang domain mới, lúc này, nếu SID Filtering không được bật, các quyền mà user được cấp trong SID ở domain cũ vẫn sẽ giữ nguyên. Do đó, sIDHistory thường bị lạm dụng.

NTDS.DIT: database lưu trữ thông tin của user và group object, là thành phần cốt lõi của AD. Khi domain bị compromised hoàn toàn, đây là đối tượng được attacker nhắm đến để dump và thực hiện bẻ khoá offline bằng công cụ như Hashcat.

MSBROWSE: một giao thức mạng của Microsoft được sử dụng trong các phiên bản đầu của mạng cục bộ (LAN) chạy trên Windows để cung cấp dịch vụ duyệt. Giao thức này được sử dụng để duy trì danh sách các tài nguyên, chẳng hạn như máy in và tệp dùng chung, có sẵn trên mạng và cho phép người dùng dễ dàng duyệt và truy cập các tài nguyên này.

3. Active Directory Objects

20250108104651.png

Users: là leaf object trong cấu trúc phân nhánh của AD, vừa có SID, vừa có GUID.

Contacts: thường được sử dụng cho các external user và chứa các thông tin về first name, last name, email address, telephone number... Chúng cũng là leaf object và KHÔNG có SID, chỉ có GUID.

Printers: các máy in có thể truy cập trong mạng, nó là leaf objetc, không có SID, chỉ có GUID.
Computers: là leaf object, có cả SID và GUID.

Shared Folders: trỏ đến một shared folder trên máy cụ thể nơi thư mục đó nằm, có thể là thư mục công khai hoặc được áp dụng quyền kiểm soát nghiêm ngặt chỉ cho phép một số người truy cập. Nó không có SID, chỉ có GUID.

Groups: là container object, có cả SID và GUID. Group là đối tược được sử dụng để quản lý quyền của user. Trong AD, group có thể chứa các group object khác, gọi là nested group. Nếu cấu hình không đúng, sẽ dẫn đến cấp các quyền không mong muốn. Ví dụ, group A chứa group B, group B bao gồm các user có permission đặc biệt trên một tài nguyên quan trọng mà group không có, nhưng do group B nằm trong group A nên dẫn đến việc user trong group A cũng có quyền này.

Organizational Units (OUs): là container được sử dụng để lưu trữ các AD object khác, thường được sử dụng để phân quyền quản trị các tác vụ đặc biệt như cấp lại mật khẩu, thêm user,... mà không cần phải cấp toàn bộ quyền admin cho user. Ví dụ, tạo OU IT Help Desk chứa các user không phải admin nhưng có quyền reset password cho user.

Domain: mỗi domain có database riêng biệt và các policy.

Domain Controllers: bộ não của mạng AD có chức năng xử lý yêu cầu xác thực và điều khiển phạm vi truy cập tài nguyên.

Sites: một tập hợp các máy chủ (domain controllers)máy tính trong một hoặc nhiều subnets (mạng con) được kết nối với nhau qua các liên kết mạng tốc độ cao. Mục đích của việc sử dụng site là để tối ưu hóa quá trình replicationxác thực trong môi trường AD.

Foreign Security Principals: biểu diễn một security principal thuộc về một forest bên ngoài có liên kết trust với forest hiện tại. Mỗi foreign security principal là một đối tượng giữ chỗ chứa SID của đối tượng bên ngoài (một đối tượng thuộc về forest khác.) Windows sử dụng SID này để giải quyết tên của đối tượng thông qua mối quan hệ tin cậy.

4. Active Directory protocols

Kerberos

Kerberos là giao thức được sử dụng để xác thực trong môi trường AD, sử dụng port 88 cho cả TCP và UDP.

Khi một user đăng nhập vào một máy tính joined-domain, Kerberos giúp hai bên xác thực lẫn nhau.

Quá trình xác thực Kerberos bắt đầu bằng việc, user gửi một request đến Kerberos Key Distribution Center (cũng là một phần của Domain Controller) được mã hoá bằng mật khẩu của user. Khi KDC nhận được request, nó tiếng hành sử dụng mật khẩu thật sự của user để giải mã request, nếu nó thành công, một TGT ticket được cấp cho user.

Tiếp theo, user gửi TGT vừa được cấp đến Domain Controller để yêu cầu TGS ticket (được mã hoá với NTLM password hash của service muốn truy cập.

Cuối cùng, user yêu cầu truy cập vào service mong muốn bằng TGS ticket. Service tiến hành giải mã TGS ticket với password của nó. Nếu thành công thì cấp quyền truy cập.

Note

KDC hay DC đều không lưu bất kỳ TGT hay TGS nào của user sau khi cấp. Mỗi user tự lưu trữ TGT và TGS của chính bản thân mình, mỗi loại ticket đều có thể sử dụng lại trong thời gian còn hiệu lực (time expire), điều này giúp tiết kiệm nguồn tài nguyên cho KDC/DC vì tính toán giải mã là một công việc tốn kém. Do đó, Kerberos là giao thức xác thực không trạng thái (stateless). Thêm vào đó, service không thực hiện việc kiểm tra các thông tin trong ticket, tạo điều kiện cho các loại tấn công Kerberos.

20250109113120.png

DNS

Active Directory Domain Services (AD DS) sử dụng DNS để cho phép các client (workstation, server và các hệ thống khác giao tiếp với domain).

AD duy trì một database của service chạy trong network với SRV (service) record. Các record này cho phép client xác định các service mà họ muốn kết nối đến như là server, printer hoặc Domain Controller.

Khi một client tham gia vào mạng, nó cần xác định vị trí của DC bằng cách gửi SRV record đến DNS database bao gồm hostname của DC.

DNS sử dụng port 53 cho TCP và UDP.

20250109114501.png

LDAP (Lightweight Directory Access Protocol)

Giống như Kerberos, LDAP cũng là giao thức dùng để xác thực người dùng, đặc biệt là dùng để query thông tin của domain object trong mạng, là cách mà các hệ thống trong mạng giao tiếp với AD.

Có 2 loại xác thực LDAP:

LDAP sử dụng port 389 và 636 (SSL). Nếu không sử dụng SSL, các giao tiếp xác thực của LDAP hiển thị dưới dạng cleartext.

20250109135113.png

MSRPC(Microsoft's implementation of Remote Procedure Call)

MSRPC là một kỹ thuật giao tiếp giữa các process được sử dụng cho các ứng dụng dựa trên mô hình client-server, tương tự concept API call. Windows sử dụng MSRPC để truy cập các hệ thống trong Active Directory bằng bốn giao diện RPC chính.

Interface Mô tả
lsarpc Quản lý local security policy trên một máy, điều khiển audit policy và cung cấp tương tác dịch vụ xác thực.
netlogon Process sử dụng để xác thực user và các thiết bị khác trong domain, là một deamon.
samr Cung cấp các function để quản trị cơ sở dữ liệu của domain từ xa (thêm/xoá user, reset password, đọc thông tin...). Attacker thường sử dụng công cụ như BloodHound để trace ra toàn bộ cấu trúc của domain. Do đó, cần cấu hình trong registry chỉ cho phép admin được thực hiện samr.
drsuapi Triển khai dịch vụ liên quan đến sao chép qua DC, thường được attacker lợi dụng để tạo bản copy của NTDS.dit database, sau đó bẻ khoá offline thông qua Hashcat.

NTLM

NTLM thường được sử dụng là phương pháp xác thực fallback của Kerberos, trong trường hợp nào đó khi máy không thể giao tiếp với KDC.

Note

Lưu ý, LM và NT là hai thuật toán hashing, còn NTLMv1 và NTLMv2 là hai giao thức xác thực dựa trên hai thuật toán này.

LM Hashing: mật khẩu có độ dài tối thiểu 14 ký tự, hashing bằng cách chia chuỗi mật khẩu thành hai phần, mỗi phần 7 ký tự, nếu mật khẩu ít hơn 14 thì thêm ký tự null vào bổ sung, hai phần này trở thành 2 key của DES, rồi mỗi key dùng để mã hoá chuỗi KGS!@#$%, tạo ra 8 bytes ciphertext. Cuối cùng, ghép hai phần lại và được LM hash.
=> Đã ngưng sử dụng vì dễ bị bẻ khoá.

NT Hashing: hay còn gọi là NTLM hashing, được tính bằng công thức MD4(UTF-16-LE(password)). Dù đã cải tiếng nhưng với mật khẩu có độ dài 8 ký tự, NT Hashing dễ dàng bị bẻ khoá bởi công cụ Hashcat trong 3 tiếng. Với các mật khẩu dài hơn thì khó hơn để bẻ khoá nếu không có bất kỳ thông tin vì về format của mật khẩu.

Rachel:500:aad3c435b514a4eeaad3b935b51304fe:e46b9e548fa0d122de7f59fb6d48eaa2:::

NTLMv1 (Net-NTLMv1): là giao thức xác thực dạng challenge/response. Trong đó, máy chủ gửi cho client một challenge (random number). Client mã hoá challenge cùng với LMNT hash của mật khẩu do user nhập vào và gửi response. Server tính toán với LMNT hash mật khẩu thật sự của user và so sánh với response, nếu giống nhau thì xác thực thành công.

C = 8-byte server challenge, random
K1 | K2 | K3 = LM/NT-hash | 5-bytes-0
response = DES(K1,C) | DES(K2,C) | DES(K3,C)

NTLMv1 sử dụng cả NT và LM hash nên dễ dàng bị capture hash qua các công cụ như Responder hay NTLM relay, rồi thực hiện pass-the-hash để bẻ khoá offline.

u4-netntlm::kNS:338d08f8e26de93300000000000000000000000000000000:9526fb8c23a90751cdd619b6cea564742e1e4bf33006ba41:cb8086049ec4736c

NTLMv2 (Net-NTLMv2): mạnh mẽ hơn NTLMv1, challenge được kết hợp với các thông tin như thời gian hiện tại, domain name và sử dụng thuật toán hashing HMAC-MD5. Do đó, khó bị bẻ khoá hơn.

SC = 8-byte server challenge, random
CC = 8-byte client challenge, random
CC* = (X, time, CC2, domain name)
v2-Hash = HMAC-MD5(NT-Hash, user name, domain name)
LMv2 = HMAC-MD5(v2-Hash, SC, CC)
NTv2 = HMAC-MD5(v2-Hash, SC, CC*)
response = LMv2 | CC | NTv2 | CC*

Domain Cached Credentials (MSCache2)

Microsoft đã phát triển thuật toán MS Cache v1 và v2 (còn được gọi là Domain Cached Credentials (DCC)) để giải quyết vấn đề tiềm ẩn khi một máy tính tham gia miền không thể giao tiếp với domain controller (ví dụ: do sự cố mạng hoặc vấn đề kỹ thuật khác), và do đó, xác thực NTLM hoặc Kerberos không thể thực hiện được để truy cập vào máy tính đó.

Các máy chủ lưu trữ 10 hash cuối cùng của bất kỳ người dùng miền nào đăng nhập thành công vào máy tính trong HKEY_LOCAL_MACHINE\SECURITY\Cache của registry. Những hash này không thể được sử dụng trong các cuộc tấn công pass-the-hash. Hơn nữa, hash này rất khó để bẻ khóa bằng một công cụ như Hashcat, ngay cả khi sử dụng một hệ thống GPU cực mạnh để bẻ khóa, vì vậy, các nỗ lực bẻ khóa các hash này thường cần phải cực kỳ nhắm mục tiêu hoặc dựa vào mật khẩu yếu đang được sử dụng. Những hash này có thể bị kẻ tấn công hoặc người kiểm tra xâm nhập lấy được sau khi có quyền local admin trên máy và có định dạng như sau:
$DCC2$10240#bjones#e4e938d12fe5974dc42a90120bd9c90f.

5. Active Directory Users

User

Local Accounts: những account chỉ tồn tại dưới máy cụ thể và không thể sử dụng bởi bất kỳ máy nào khác trong mạng. Có nhiều loại local account mặc định, ví dụ:

Domain Users: khác với local account, domain account có thể truy cập vào bất cứ domain-joined host nào trong mạng AD và bất kỳ tài nguyên, dịch vụ nào nằm trong quyền truy cập mà nó có. KRBTGT là một tài khoản cục bộ đặc biệt được tạo ra trong hạ tầng Active Directory. Tài khoản này đóng vai trò là tài khoản dịch vụ cho Key Distribution Center (KDC) trong quá trình Kerberos authentication.

Note

Machine account trong môi trường AD có thể có các quyền tương đương với một domain user tiêu chuẩn, do đó, attacker có thể không cần phải tìm kiếm thông tin của domain user để có thể tiến hành thu thập thông tin và tấn công domain, chỉ cần đạt quyền SYSTEM trên một máy domain-joined.

Groups

Group là object quan trọng trong môi trường AD, thường được sử dụng để cấp quyền trên diện rộng cho các user trong group mà không cần thêm quyền riêng lẻ cho từng user.

Group là một container có thể chứa group khác, user và computer. Điều quan trọng ở đây cần phân biệt OU và group, vì hai container này có chức năng khác nhau:

Mỗi Group có 2 đặc điểm cơ bản: typescope.

Group Type:

  1. Security Group: dùng để gán quyền cho các user trong cùng một lúc.
  2. Distribution Group: sử dụng bởi Microsoft Exchange để phân phát tin nhắn đến các user trong group (group mail).

Group Scope:

  1. Domain Local Group: có thể chứa user từ domain khác nhưng chỉ dùng để cấp quyền truy cập cho tài nguyên nằm trong chính domain mà nó nằm trong.
  2. Global Group: có thể chứa user từ domain khác và dùng để cấp quyền truy cập cho tài nguyên nằm trong domain khác.
  3. Universal Group: có thể chứa user từ bất kỳ domian nào, được sử dụng để quản lý các tài nguyên phân tán ở mọi domain trong forest. Universal Group được lưu trữ trong Global Catalog (GC) nên mỗi một thay đổi của user (thêm/sửa/xoá) sẽ kích hoạt replication toàn forest, do đó nên sử dụng Universal Group để chứa group khác như Global Group, vì thành phần này có ít thay đổi hơn, giảm việc kích hoạt replication cả một forest, gây tiêu tốn tài nguyên.

Thiết kế: Mô hình AGDLP (Accounts → Global groups → Universal groups → Domain Local groups → Permissions.)

Rights and Privileges

Quyền (rights) và đặc quyền (privileges) là hai khái niệm khác nhau. Quyền liên quan đến việc gán quyền cho user/group truy cập vào một object như file, folder,... Trong khi đó, đặc quyền cho phép user thực hiện action như chạy chương trình, tắt hệ thống, reset mật khẩu,...

AD có nhiều nhóm mặc định (built-in), một số trong đó cấp cho thành viên các quyền và đặc quyền mạnh mẽ có thể bị lạm dụng để tăng đặc quyền trong một miền và cuối cùng giành được vị trí trong Domain Admin hoặc SYSTEM.

Group Name Description
Account Operators Members can create and modify most types of accounts, including those of users, local groups, and global groups, and members can log in locally to domain controllers. They cannot manage the Administrator account, administrative user accounts, or members of the Administrators, Server Operators, Account Operators, Backup Operators, or Print Operators groups.
Administrators Members have full and unrestricted access to a computer or an entire domain if they are in this group on a Domain Controller.
Backup Operators Members can back up and restore all files on a computer, regardless of the permissions set on the files. Backup Operators can also log on to and shut down the computer. Members can log onto DCs locally and should be considered Domain Admins. They can make shadow copies of the SAM/NTDS database, which, if taken, can be used to extract credentials and other juicy info.
DnsAdmins Members have access to network DNS information. The group will only be created if the DNS server role is or was at one time installed on a domain controller in the domain.
Domain Admins Members have full access to administer the domain and are members of the local administrator's group on all domain-joined machines.
Domain Computers Any computers created in the domain (aside from domain controllers) are added to this group.
Domain Controllers Contains all DCs within a domain. New DCs are added to this group automatically.
Domain Guests This group includes the domain's built-in Guest account. Members of this group have a domain profile created when signing onto a domain-joined computer as a local guest.
Domain Users This group contains all user accounts in a domain. A new user account created in the domain is automatically added to this group.
Enterprise Admins Membership in this group provides complete configuration access within the domain. The group only exists in the root domain of an AD forest. Members in this group are granted the ability to make forest-wide changes such as adding a child domain or creating a trust. The Administrator account for the forest root domain is the only member of this group by default.
Event Log Readers Members can read event logs on local computers. The group is only created when a host is promoted to a domain controller.
Group Policy Creator Owners Members create, edit, or delete Group Policy Objects in the domain.
Hyper-V Administrators Members have complete and unrestricted access to all the features in Hyper-V. If there are virtual DCs in the domain, any virtualization admins, such as members of Hyper-V Administrators, should be considered Domain Admins.
IIS_IUSRS This is a built-in group used by Internet Information Services (IIS), beginning with IIS 7.0.
Pre–Windows 2000 Compatible Access This group exists for backward compatibility for computers running Windows NT 4.0 and earlier. Membership in this group is often a leftover legacy configuration. It can lead to flaws where anyone on the network can read information from AD without requiring a valid AD username and password.
Print Operators Members can manage, create, share, and delete printers that are connected to domain controllers in the domain along with any printer objects in AD. Members are allowed to log on to DCs locally and may be used to load a malicious printer driver and escalate privileges within the domain.
Protected Users Members of this group are provided additional protections against credential theft and tactics such as Kerberos abuse.
Read-only Domain Controllers Contains all Read-only domain controllers in the domain.
Remote Desktop Users This group is used to grant users and groups permission to connect to a host via Remote Desktop (RDP). This group cannot be renamed, deleted, or moved.
Remote Management Users This group can be used to grant users remote access to computers via Windows Remote Management (WinRM)
Schema Admins Members can modify the Active Directory schema, which is the way all objects with AD are defined. This group only exists in the root domain of an AD forest. The Administrator account for the forest root domain is the only member of this group by default.
Server Operators This group only exists on domain controllers. Members can modify services, access SMB shares, and backup files on domain controllers. By default, this group has no members.

Các đặc quyền (privileges) trong Windows có thể được cấp hoặc quản lý thông qua Group Policy Object (GPO). Windows cung cấp chính sách User Rights Assignment trong GPO để gán các đặc quyền cho người dùng hoặc nhóm.

Privilege Description
SeRemoteInteractiveLogonRight This privilege could give our target user the right to log onto a host via Remote Desktop (RDP), which could potentially be used to obtain sensitive data or escalate privileges.
SeBackupPrivilege This grants a user the ability to create system backups and could be used to obtain copies of sensitive system files that can be used to retrieve passwords such as the SAM and SYSTEM Registry hives and the NTDS.dit Active Directory database file.
SeDebugPrivilege This allows a user to debug and adjust the memory of a process. With this privilege, attackers could utilize a tool such as Mimikatz to read the memory space of the Local System Authority (LSASS) process and obtain any credentials stored in memory.
SeImpersonatePrivilege This privilege allows us to impersonate a token of a privileged account such as NT AUTHORITY\SYSTEM. This could be leveraged with a tool such as JuicyPotato, RogueWinRM, PrintSpoofer, etc., to escalate privileges on a target system.
SeLoadDriverPrivilege A user with this privilege can load and unload device drivers that could potentially be used to escalate privileges or compromise a system.
SeTakeOwnershipPrivilege This allows a process to take ownership of an object. At its most basic level, we could use this privilege to gain access to a file share or a file on a share that was otherwise not accessible to us.

Khi đăng nhập vào một máy chủ hoặc máy tính và chạy lệnh whoami /priv, ta sẽ nhận được danh sách tất cả các quyền (rights) được gán cho người dùng hiện tại. Những quyền này xác định các hành động mà người dùng có thể thực hiện trên hệ thống.

Tuy nhiên, có một số quyền chỉ khả dụng đối với người dùng thuộc nhóm quản trị (administrative users) và chỉ có thể được hiển thị hoặc sử dụng khi bạn chạy CMD hoặc PowerShell với quyền elevated (quyền quản trị).

Điều này là do User Account Control (UAC), một tính năng bảo mật được Microsoft giới thiệu từ Windows Vista. Tính năng này mặc định giới hạn quyền của các ứng dụng để đảm bảo rằng chỉ những tác vụ thực sự cần thiết mới được thực thi với quyền cao nhất.

Domain Admin Rights Non-Elevated

20250114113113.png

Domain Admin Rights Elevated

20250114113130.png

Note

20250114113506.png

6. Group Policy Objects

Group Policy Object là một tập hợp các cấu hình policy gán cho user hoặc computer. Ví dụ: screen lock timeout, chặn USB port, password policy, cài đặt phần mềm/ứng dụng,... Mỗi GPO có một tên duy nhất và GUID, được linked đến nhiều container (OU, domain, site) và ngược lại.

Thứ tự thực thi của các GPO: Policy ở level thấp sẽ thực thi trước policy ở level cao hơn dẫn đến việc policy ở level thấp có thể bị ghi đè bởi policy ở level cao hơn.

20250114134210.png

Note

Cấu hình policy trong Computer policy sẽ có ưu tiên cao hơn so với User policy.

Enforced (No override): để tránh việc policy bị nghi đè, có thể sử dụng cài đặt này, dù policy ở level thấp hơn cũng được giữ nguyên cài đặt.

Block inheritance: chặn việc thừa hưởng policy từ container cấp cao hơn. Nhưng nếu cả 2 cài đặt Block inheritance và Enforced được cài đặt thì Enforced được ưu tiên.

Ví dụ: hình thứ nhất dưới đây là của OU Computers khi chưa có cài đặt Block inheritance, GPO Logon Banner có số thự tự là 1, được đặt Enforced và được thừa hưởng từ domain chứa OU này sẽ thực thi đầu tiên và không bị ghi đè, Computers là child-OU của OU Corp nên nó cũng thừa hưởng 3 policy 3,4,5 từ OU này, còn pocily Disabled Forced Restarts là policy của chính OU Computers nên có precedence cao hơn 3 policy của OU Corp.

20250114135805.png

Sau khi cài đặt Block inheritance: Policy trong OU Computers sẽ không thừa hưởng bất kỳ policy nào, trừ policy được cài đặt Enforced.

20250114135821.png