在这篇文章中,我们将讨论不同的 Active Directory
对象及其基本概念,例如:
为什么域中需要 Active Directory
对象
如何创建它们?
如何枚举 Active Directory
对象
Active Directory 对象
Active Directory
对象是一组表示域中资源的属性。每个 Active Directory
对象都由唯一的 SID
(安全标识符)标识,被用来允许或拒绝对域中各种资源的访问。让我们讨论一些属于 Active Directory
的 AD
对象。
用户对象被分配给域用户帐户,用于获取域资源的访问权限。如果您拥有管理用户对象所需的权限,则可以从 Active Directory
用户和计算机控制台管理这些对象。用户帐户也用于运行程序或系统服务,并由用户SID
识别,这与域SID
类似,它由域SID
和用户RID
(相对标识符)组成。
PS C:\Users\scarred.monk> Get-ADUser Scarred.Monk
DistinguishedName : CN=Scarred Monk,CN=Users,DC=rootdse,DC=lab
Enabled : True
GivenName : Scarred
Name : Scarred Monk
ObjectClass : user
ObjectGUID : 2ba8220b-63db-4dda-b6de-095a7fa0da24
SamAccountName : Scarred.Monk
SID : S-1-5-21-580985966-2115238843-2989639066-1107
Surname : Monk
UserPrincipalName : [email protected]
用户对象的 SID
在用户的 SID
值中,S-1-5-21-580985966-2115238843-2989639066
是域 SID
(安全标识符),1107
是唯一标识它的用户 RID
(相对标识符)。
一个SID
可以分为以下几个部分:
(SID)-(Revision Level)-(Identifier-Authority)-(Sub-Authority1)-(Sub-Authority2)...-(RID)
微软对SID
组成部分的描述:
SID:SID
中的 S
将上述字符串标识为 SID
Revision level:SID
结构的修订版本。迄今为止,这从未改变过并且一直是 1
**Identifier-Authority: **一个 48
位的颁发机构标识符,用于标识发布/创建 SID
的机构。(在上述的例子中,标志符颁发机构的值为 5
Subauthority: 子颁发机构,这是一个变量编号,用于识别SID
所描述的用户或组与创建它的机构的关系。
**RID:**相对标识符(RID
),它能唯一标识相对于发布SID
机构的帐户和组。
在域环境中,你会在多个位置看到用户 SID
,例如在事件查看器或 ACL 中。SID
也被用于安全描述符中,以存储与权限有关的信息。
下面是事件日志中用户SID
的例子:
以下是注册表中用户SID
的一个例子:
你可以在 Microsoft Docs
中找到常见的 SID
列表。:https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/security-identifiers-in-windows#well-known-sids-all-versions-of-windows
然而,在企业环境中,一个用户可以有一个以上的用户账户来完成不同的任务。例如,一个组织中的系统管理员可以有多个不同的账户,如一个账户用于在分配给他们的笔记本电脑上工作,第二个账户用于在本地域工作,还有几个账户用于在AD林中的其他域工作。
要获取 Active Directory
域中所有用户帐户的详细信息,我们可以使用以下命令:
PS C:Usersscarred.monk> Get-ADUser -Filter *
这个命令的输出信息非常多,因为它包含了很多关于所有用户的细节。为了只获取用户的少数属性,我们可以使用cmdlet
的Select-Object
(它的别名是Select
),只选择我们感兴趣的属性,如SamAccountName
、SID
、enabled
(查看账户是否启用/禁用)。
PS C:\Users\scarred.monk> Get-ADUser -f * |select SamAccountName, SID, enabled
SamAccountName SID enabled
-------------- --- -------
Administrator S-1-5-21-580985966-2115238843-2989639066-500 True
Guest S-1-5-21-580985966-2115238843-2989639066-501 False
krbtgt S-1-5-21-580985966-2115238843-2989639066-502 False
MATRIX$ S-1-5-21-580985966-2115238843-2989639066-1103 True
darkvortex$ S-1-5-21-580985966-2115238843-2989639066-1104 True
SQLServiceAccount S-1-5-21-580985966-2115238843-2989639066-1105 True
Scarred.Monk S-1-5-21-580985966-2115238843-2989639066-1107 True
这里可以使用Filter
参数获取用户信息。Filter
参数使用PowerShell
表达式来编写 Active Directory
查询字符串。使用 -F
同-Filter
。
下面是使用 Filter
参数查找以 admin*
开头的用户帐户的示例:
PS C:\Users\scarred.monk> Get-ADUser -Filter 'Name -like "admin*"'
DistinguishedName : CN=Administrator,CN=Users,DC=rootdse,DC=lab
Enabled : True
GivenName :
Name : Administrator
ObjectClass : user
ObjectGUID : 061b1157-9a8d-4a34-9304-563a08e3883c
SamAccountName : Administrator
SID : S-1-5-21-580985966-2115238843-2989639066-500
当你以域用户身份登录时,域计算机(在其上进行登录尝试)将请求发送到域控制器以进行身份验证,并询问域控制器为用户帐户分配了哪些权限。验证后,计算机会收到来自域控制器的响应,并使用适当的权限和限制让你登录。这是因为域用户帐户的凭据信息存储在域控制器上,而不是用户登录的本地计算机上。
如果要创建新用户可以使用 Cmdlet
的New-ADUser
命令:
PS C:> New-ADUser -Name "AD User" -GivenName AD -Surname User -SamAccountName ad.user -UserPrincipalName [email protected] -AccountPassword (ConvertTo-SecureString [email protected] -AsPlainText -Force) -PassThru
计算机对象代表加入域并由用户用于登录域的机器。当用户以域用户身份登录计算机时,计算机对象将充当向域验证用户身份的媒介。因此,如果计算机对象从域中删除,用户将无法登录,因为计算机将无法访问域控制器。
PS C:\Users\scarred.monk> Get-ADComputer -f *
DistinguishedName : CN=RDSEDC01,OU=Domain Controllers,DC=rootdse,DC=lab
DNSHostName : RDSEDC01.rootdse.lab
Enabled : True
Name : RDSEDC01
ObjectClass : computer
ObjectGUID : 032428f5-d629-451b-9d1d-46fce3ec0677
SamAccountName : RDSEDC01$
SID : S-1-5-21-580985966-2115238843-2989639066-1000
UserPrincipalName :
DistinguishedName : CN=SQLSERVER,CN=Computers,DC=rootdse,DC=lab
DNSHostName :
Enabled : True
Name : SQLSERVER
ObjectClass : computer
ObjectGUID : d4a1bca9-d729-4d61-90d3-ff33ea9f0c1e
SamAccountName : SQLSERVER$
SID : S-1-5-21-580985966-2115238843-2989639066-1106
所有计算机对象都有自己的机器用户,以$
结尾。
在这个例子中,计算机对象RDSEDC01
的机器账户是RDSEDC01$
,这些帐户在域中执行自己的操作。
域中具有三种可以算作计算机对象的对象:
域控制器
域计算机(工作站)
成员服务器
域控制器
域控制器是一个集中式 Windows
服务器,它通过托管 Active Directory
域并向客户端提供身份验证和目录服务来管理域。域控制器只能处理单个域的身份验证请求,但它也可以存储来自林中其他域的对象的部分只读副本(如果它被启用为全局编录服务器)。
要检查域控制器,我们可以使用以下命令:
PS C:\Users\scarred.monk> Get-ADDomainController
ComputerObjectDN : CN=RDSEDC01,OU=Domain Controllers,DC=rootdse,DC=lab
DefaultPartition : DC=rootdse,DC=lab
Domain : rootdse.lab
Enabled : True
Forest : rootdse.lab
HostName : RDSEDC01.rootdse.lab
InvocationId : 85a56dee-48fe-4897-8941-50ed5a196849
IPv4Address : 192.168.209.110
IPv6Address :
IsGlobalCatalog : True
IsReadOnly : False
LdapPort : 389
Name : RDSEDC01
NTDSSettingsObjectDN : CN=NTDS Settings,CN=RDSEDC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=rootdse,DC=lab
OperatingSystem : Windows Server 2019 Datacenter
OperatingSystemHotfix :
OperatingSystemServicePack :
OperatingSystemVersion : 10.0 (17763)
OperationMasterRoles : {SchemaMaster, DomainNamingMaster, PDCEmulator, RIDMaster...}
Partitions : {DC=ForestDnsZones,DC=rootdse,DC=lab, DC=DomainDnsZones,DC=rootdse,DC=lab, CN=Schema,CN=Configuration,DC=rootdse,DC=lab, CN=Configuration,DC=rootdse,DC=lab...}
ServerObjectDN : CN=RDSEDC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=rootdse,DC=lab
ServerObjectGuid : d50faf97-ee22-4724-b248-bf8eeda85c92
Site : Default-First-Site-Name
SslPort : 636
域计算机(工作站)
域计算机可以由员工使用的个人计算机表示,例如属于域的台式机、笔记本电脑。就 Active Directory 而言,计算机对象与用户对象非常相似,因为计算机对象拥有用户对象的所有属性(计算机对象直接从用户对象类继承)。计算机出现在 Active Directory 中的原因很少,例如需要安全地访问资源、利用 GPO 并为其分配权限。
对象类会在后续的有关AD模式和LDAP的文章中详细解释
为了加入 Active Directory
域并允许域用户登录到该域,域计算机需要一个安全通道来与域控制器通信。安全通道是指可以传输加密数据的经过身份验证的连接。要创建安全通道,域计算机必须向域控制器提供域计算机帐户的密码。与用户帐户身份验证类似,Active Directory
使用 Kerberos
来验证计算机帐户的身份。域控制器通过关联的计算机对象及其存储的密码验证受信任的域计算机。
要检查域计算机,我们可以使用以下命令:
PS C:Usersscarred.monk> Get-ADComputer -Filter *
成员服务器
域环境中的成员服务器提供不同的服务。这些服务器根据需要提供的服务类型安装了一个或多个角色,例如 Exchange
服务器、Web
服务器、文件服务器、SQL
服务器等。它们可以是 Windows Server
操作系统或 Linux
操作系统。
要检查成员服务器,我们可以使用以下命令:
PS C:Usersscarred.monk> Get-ADComputer -Filter 'operatingsystem -like "*server*"'
让我们来谈谈下一种 AD 对象,即组对象。
组对象用于包含许多不同的 Active Directory
对象,例如用户、计算机和其他组。这样做是为了通过将权限分配给一组用户/计算机而不是单个帐户、为组创建委派组策略、创建电子邮件分发列表等,使系统管理员的管理更容易。
例如,在一个组织中,不同的团队有不同的组,并根据需要为这些组分配不同的权限。假设有一个名为“DB Admins”的组,该组有权登录并在多个 SQL 服务器上执行少量数据库操作、访问多个 DB 文件共享等。当新用户加入 DB 团队时,IT 团队会将用户添加到该组 (DB ADmins) 中,这将为新用户提供其团队成员拥有的所有访问权限。它节省了 IT 团队为每个用户单独配置权限的时间。
要获取 Active Directory
域中所有组的详细信息,我们可以使用以下命令:
PS C:\Users\scarred.monk> Get-ADGroup -f * | Select-Object name
name
----
Administrators
Users
Guests
Print Operators
Backup Operators
Replicator
Remote Desktop Users
Network Configuration Operators
Performance Monitor Users
Performance Log Users
Distributed COM Users
IIS_IUSRS
Cryptographic Operators
Event Log Readers
Certificate Service DCOM Access
RDS Remote Access Servers
RDS Endpoint Servers
RDS Management Servers
Hyper-V Administrators
Access Control Assistance Operators
Remote Management Users
Storage Replica Administrators
Domain Computers
Domain Controllers
Schema Admins
Enterprise Admins
Cert Publishers
Domain Admins
Domain Users
Domain Guests
Group Policy Creator Owners
RAS and IAS Servers
Server Operators
Account Operators
Pre-Windows 2000 Compatible Access
Incoming Forest Trust Builders
Windows Authorization Access Group
Terminal Server License Servers
Allowed RODC Password Replication Group
Denied RODC Password Replication Group
Read-only Domain Controllers
Enterprise Read-only Domain Controllers
Cloneable Domain Controllers
Protected Users
Key Admins
Enterprise Key Admins
DnsAdmins
DnsUpdateProxy
组类型
分发组(Distribution Group)
分发组(通讯组)是用来在一个组中包括多个用户。当一封电子邮件被发送到一个分发组时,它将被发送到该分发组中的所有用户。例如。名称为Corporate Office
的分发组将包括企业办公室的所有用户。当有人向该组发送电子邮件时,它将被发送给所有公司办公室员工。
安全组(Security Group)
与分发组类似,安全组可以包含用户/计算机帐户或组,用于向组中的用户/计算机提供跨域/林的不同访问和权限。例如,名为 DBAdmins
的安全组可以包含数据库操作团队的所有成员,这些成员可能有权访问多个 SQL 服务器和数据库团队的文件共享。当新的 DB 管理员加入团队时,将用户帐户添加到 DBAdmins
安全组将提供跨 SQL 数据库的所有权限。
要获取有关安全组的详细信息,我们可以使用GroupCategory -eq "security"
这样的过滤器:
PS C:Usersscarred.monk> Get-ADGroup -Filter {GroupCategory -eq "security"}
每个组类型有三个组作用域:
**Domain local(本地域):**用于仅在创建它的域中管理对不同域资源的访问权限。
**Global(全局):**用于提供对另一个域中资源的访问。一个全局组可以添加到其他全局和本地组。
**Universal(通用):**用于定义角色和管理分布在多个域中的资源。如果网络连接了多个分支,则最好仅对很少更改的组使用通用组。
Active Directory
中的一些重要组如下:
Admin groups(管理员组)
最重要的组是域管理员(Domain Admin)和企业管理员(Enterprise Admins):
Domain Admin
(域管理员组)为其域中的成员提供管理员权限。
Enterprise Admins
组提供整个林中的管理员权限。
AD中的其他重要群组
除了上面两个重要的组之外,还有其他一些重要的组,你应该注意:
Schema Admins:Schema Admins
组的成员可以修改 Active Directory
数据库架构。该组拥有对Acitve Directory
架构的完全管理权限
DNSAdmins:如果 DNS 服务器角色安装在域中的域控制器上,则 DNSAdmins
组的成员有权访问/修改网络 DNS 信息。Shay Ber 发表了一篇文章https://medium.com/@esnesenon/feature-not-bug-dnsadmin-to-dc-compromise-in-one-line-a0f779b8dc83,解释了 DNSAdmins
组的成员如何以 SYSTEM
用户身份在域控制器中执行代码(任意 DLL)。
Print Operators:如果您在 Print Operators
组中添加用户,则该用户帐户可以登录域控制器。
Protected Users:受保护的用户组允许强制实施帐户的安全。该组的成员在身份验证过程中获得了额外的保护,以防止凭据泄露。
Server Operators:Server Operators
组的成员可以登录到域控制器并管理其配置。它可以创建和管理该域中的用户和组,但不可以管理服务器管理员账户。
Account Operators:Account Operators
组的成员可以创建和修改大多数类型的帐户,包括用户、本地组和全局组的帐户,并且成员可以本地登录到域控制器。但是,帐户操作员组的成员无法管理管理员用户帐户或管理员、Server Operators
, Account Operators
, Backup Operators
,和 Print Operators
。
Backup Operators:Backup Operators
的成员有权登录、备份、恢复/修改域控制器中的文件。
Remote Desktop Users:该组的成员可以通过 RDP
登录到域控制器。如果用户已经有权在本地登录域控制器,则将其添加到该组可以允许用户通过 RDP
远程登录域控制器。如果未启用本地登录并将其添加到此组,则您将看到以下警告:
Group Policy Creator Owners:组策略创建者所有者的成员可以编辑域中的 GPO
。
以下是一些高价值组。这些组的成员默认拥有登录域控制器的权限。如果这些组的账户被入侵,那么AD域就很有可能被入侵。
Administrators Domain Admins Enterprise Admins Print Operators Backup Operators Account Operators
Custom groups(自定义组)
除此之外,组织还为 IT 管理员、IT 服务台、SQL 管理员、应用程序管理员等创建自定义特权组。此外,如果我们向服务器添加其他角色,则会创建组。就像我们添加 DHCP 角色时,创建了 DHCP 管理员组或安装 Microsoft Exchange 时,添加了 Exchange 组织管理员和 Exchange Windows 权限组。要获取详细信息,在微软的文档中还有许多其他组的描述:https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/active-directory-security-groups#replicator
Shared Folders(共享文件夹)
共享文件夹也是 Active Directory
中的对象。在 AD 中发布新共享时,会为其创建一个对象。这对于 AD 用户轻松找到所有共享非常有帮助。下面是在 AD 中发布的共享文件夹的屏幕截图:
对于渗透测试人员,可以枚举共享以查看哪些是可访问的以及存储在那里的数据。我们可以这样枚举共享:
PS C:\Users\scarred.monk> Get-ADComputer -f *
DistinguishedName : CN=RDSEDC01,OU=Domain Controllers,DC=rootdse,DC=lab
DNSHostName : RDSEDC01.rootdse.lab
Enabled : True
Name : RDSEDC01
ObjectClass : computer
ObjectGUID : 032428f5-d629-451b-9d1d-46fce3ec0677
SamAccountName : RDSEDC01$
SID : S-1-5-21-580985966-2115238843-2989639066-1000
UserPrincipalName :
DistinguishedName : CN=SQLSERVER,CN=Computers,DC=rootdse,DC=lab
DNSHostName :
Enabled : True
Name : SQLSERVER
ObjectClass : computer
ObjectGUID : d4a1bca9-d729-4d61-90d3-ff33ea9f0c1e
SamAccountName : SQLSERVER$
SID : S-1-5-21-580985966-2115238843-2989639066-1106
在第下次文章中,我们将介绍组策略,它是 Active Directory
的重要元素之一。我们将讨论什么是组策略、为什么需要它们、如何创建它们、使用组策略可以实现什么,并了解如何枚举和破坏组策略。
本文由笔者在原文上编译
原文出处:Active Directory Fundamentals (Part 2) - AD Objects
本文作者:合天网安实验室
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/181522.html