TryHackMe | Active Directory Basics
本节主要介绍了 Windows 活动目录 (Active directory, AD) 相关的内容,似乎是最近更新的。
AD 可以说是企业的支柱,它简化了企业环境中设备和用户的管理。而在了解 AD 之前,我们得先了解 Windows 的 域。
Windows Domains
Windows domains 就是 Windows 域 的意思。
假如面对一个只有 5 台电脑和 5 个用户的小型企业网络时,管理人员可以手动单独给这些用户和电脑进行配置;但如果这个企业网络扩充了规模,变成了 500 台电脑和 500 个用户,并且它们分布在不同的办公室时,手动配置变得不太现实。这种情况下,Windows 域 的作用就展现出来了。
Windows 域 是由特定企业管理的一组用户和计算机。域 背后的主要理念是 将 Windows 计算机网络中的常用组件的管理集中到一个名为 Active directory (AD) 的单一存储库中,而运行 AD 服务的服务器被称为 域控制器 (Domain controller, DC)。
配置 Windows 域 的优点有:
- 集中身份管理。只需要最小的工作量,就可以通过 AD 配置整个网络的所有用户。
- 管理安全策略。管理人员能直接从 AD 配置安全策略,并根据需要将其应用于整个网络的用户和计算机。
Active Directory
任何一个 Windows 域 的核心都是 active directory domain service (AD DS,活动目录域服务)。该服务就像一个目录,保存着网络上所有“对象”的信息。
在 AD 支持的众多对象中,包括了 用户 (users)、组 (groups)、机器 (machines)、打印机、共享等。
Users
用户是 AD 中最常见的对象类型之一,同时用户也是被称为 security principals (安全负责人) 的对象之一,这意味着用户可以通过 域 进行身份验证,并可以被分配文件或打印机等权限。可以说,security principals 是可以对网络资源采取行动的对象。
用户可以用两类实体代表:
- 人员 (people),用户通常代表组织中需要访问网络的人员,比如企业员工。
- 服务 (services),诸如 IIS 或 MSSQL 等服务也可以被定义为 用户。每项服务都需要用户才能运行,但服务用户与普通用户不同,前者只拥有运行特定服务所需的权限。
Machines
机器是 AD 中的另一种对象类型,每台加入 AD 域 的计算机都会被创建一个 machine 对象。
机器也被视为 security principals,与普通用户一样被分配一个账户。机器账户 本身是指定计算机上的本地管理员,一般除了机器自身,不允许其他任何人访问。但和其他账户一样,如果你有密码,你可以用该账号登录。
注意:机器账户的密码会自动轮换,一般由 120 个随机字符组成。
机器账户的识别相对容易,因为它们遵循特定的命名方案,即 计算机名称后面加个美元符号 $。比如一台计算机名为 DC01,那么它的机器账户名称就是 DC01$。
Security Groups
在 Windows 中,我们可以定义用户组,这方便了将文件或其他资源的访问权限分配给整个组,而不是某个用户。当用户被添加进某个组之后,该用户会自动继承该组的所有权限。
Security groups 也被视为 security principals,因此它拥有对网络资源的权限。组 的成员既可以是用户也可以是机器。在 域 中,默认创建了几个组可用于向用户授予特定权限,下面是几个 域 中最重要的组:
Security Group | 描述 |
Domain admins | 该组的用户拥有整个 域 的管理权限。默认情况下,他们可以管理 域 上的任何计算机,包括 DC。 |
Server operators | 该组的用户可以管理 DC,但不能更改任何管理组成员。 |
Backup operators | 该组的用户可以访问任何文件,无需考虑其权限。它们用于执行计算机数据备份。 |
Account operators | 该组的用户可以创建或修改 域 中的其他账户 |
Domain users | 包括了 域 中所有存在的用户账户 |
Domain computers | 包括了 域 中所有存在的计算机 |
Domain controllers | 包括了 域 中所有存在的 DC |
AD Users & Computers
要在 AD 中配置用户、机器或组,我们需要登录到 DC,并从开始菜单中运行 Active Directory Users and Computers。
在这里,可以看到 域 中存在的用户、计算机和组的层次结构,这些对象在 Organizational Units (OU,组织单位) 中进行组织。组织单位 OU 是一种容器对象,可对用户和机器进行分类。OU 主要定义具有相似监管要求的用户集,一个用户同一时间只能属于一个 OU。
在图中有一个名为 THM 的 OU,其下有四个子 OU。这种模拟企业业务结构的 OU 是非常经典的做法,因为这样可以高效部署适用于整个部门的基线策略。点开对应 OU,会展示其中包含的用户,可以根据需要创建、删除、修改用户,甚至可以重置密码。
而图中除了 THM OU 之外,还有几个由 Windows 自动创建的容器:
- Builtin:包含任何 Windows 主机都能使用的默认组
- Computers:任何加入网络的计算机都会默认放在这里。如有需要,可以移动它们
- Domain Controllers:包含网络中 DC 的默认 OU
- Users:适用于全域上下文的默认用户和组
- Managed Service Accounts:保存 Windows 域中的服务使用的账户
Security Groups vs OUs
乍一看,前面提到的 security groups 和 OU 似乎蛮像的,它们都能用在用户和计算机上,但它们的目的截然不同:
- OU 可以方便地将策略应用到用户和计算机,其中包括根据用户在企业中的特定角色对其进行特定配置。再次注意,一个用户同一时间只能是一个 OU 的成员。
- Secrity groups 用于授予资源权限。比如要允许某些用户访问共享文件夹或网络打印机时,就需要使用 组。一个用户可以是多个组的成员,这保证了用户可以访问到多个资源。
在 AD 中管理用户
假如现在企业架构发生了改变,由原先的 4 个部门缩减为 3 个部门:
此时,为了贴合企业架构,就需要域管理员对 AD OU 和用户进行管理。
删除多余的 OU 和用户
惯性思维下,直接右键要删除的 OU,找到删除选项,就可以删掉它了。但实际上,这样做只会受到一个报错:
在权限允许的前提下出现这种情况,那就是 OU 的保护机制导致的。默认情况下,OU 都被保护起来,防止被意外删除。
因此要删除它就需要关闭保护措施。关闭步骤:
1. 菜单栏--> view --> Advanced Features,通过这一步会显示一些额外容器,同时也能让管理员禁用意外删除保护。
2. 右键要删除的 OU,点击"Properties",选择其中的 “Object” 栏,取消勾选 “Protect object from accident deletion”。
现在,就可以删除该 OU 了。删除 OU 后,该 OU 下的所有用户、组或者 OU 都会被删除。
Delegation
我们可以让特定用户在 AD 中对某些 OU 享有一定的控制权,这个过程称为 Delegation (授权)。它允许授予权力的用户在 OU 上执行高级任务,而不需要域管理员介入。
要想把某个 OU 的控制权委托给指定用户,需要进行下述步骤:
1. 右键要被委托的 OU,点击 "Delegate Control"
2. 在弹出的窗口中,点击 “Add”,添加指定用户。建议输入完用户名后点击 “Check Names”检查是否有误。
3. 在授予的权限列表中选择要授予的权限,此处设置的权限是重置密码
这样,指定用户就被授权可以重置该 OU 中用户的密码了。
在 AD 中管理计算机
默认情况下,除了 DC 之外,所有加入域的计算机都会被放入名为 “Computers” 的容器中。
在图中我们看到,系统默认将个人电脑、服务器全部放在一起,有时候我们会想对个人电脑和服务器分别采用不同的策略,最好的方法就是根据设备用途将其隔离。一般来说,设备至少分为以下三类:
- Workstations。工作站是 AD 域中最常见的设备之一。域 中的每个用户都可能登录到工作站,这是他们用来工作或进行正常浏览活动的设备,这些设备绝不能有特权用户登录。
- Servers。服务器是 AD 域中第二常见的设备。服务器通常用于为用户或其他服务器提供服务。
- Domain Controllers。域控制器是 AD 域中第三种最常见的设备。DC 允许管理员管理 AD 域。这些设备通常被视为网络中最敏感的设备,因为它们包含了环境中所有用户账户的散列密码。
要想整理 AD 中的计算机,我们就为 Workstations 和 Servers 创建两个独立的 OU:
接着将 Computers 中的计算机按照用途移动到这些 OU 中即可。
Group Policies
在前面为了方便,我们将用户和计算机组织到了 OU 中,但这背后的主要目的是为了能够对每个 OU 单独部署不同的策略。
Windows 通过 Group Policy Objects (GPO,组策略对象) 来管理此类策略。GPO 是一组可应用于 OU 的设置集合,它包含了针对用户或计算机的策略,允许为特定的机器和身份设置基线。
要想配置 GPO ,首先要去 “开始” 菜单找到 Group Policy Management:
打开后,可以看到之前定义的完整 OU 层次结构。要想配置组策略,首先要在 Group Policy Objects 目录下创建 GPO,然后将其链接到要应用策略的 OU 上。任何 GPO 都将应用于链接的 OU 及其下任何子 OU。
上图中显示,现在已经创建了三个 GPO,有两个链接到根域,剩下一个链接到 域控制器 OU。而因为 “任何 GPO 都将应用于链接的 OU 及其下任何子 OU”,所以根域下的 GPO 也对 域控制器 OU 起作用。
GPO 内部有多个选项栏可供查看其内容。在“Scope”界面中,显示了该 GPO 在 AD 中的链接位置,并且在 Security Filtering 中定义了该 GPO 只应用于 OU 中的某个特定用户或计算机。默认情况下,它们将应用于 Authenticated users 组,其中包括所有的用户或计算机。
在“Settings”界面中展示了 GPO 的实际内容,让我们知道它适用于哪些特定配置,就如前文所述,每个 GPO 都有只适用于用户和只适用于计算机的配置。
我们可以右键 GPO,选择“Edit”来编辑其中的配置。
比如上图就修改了 GPO 对计算机的配置,它规定链接了该 GPO 的 OU 中的计算机的密码最小长度为10.
GPO 分发
GPO 通过名为 SYSVOL 的网络共享分发到网络,该共享存储在 DC 中。域 中的所有用户通常都可以通过网络访问该共享,以定期同步他们的 GPO。SYSVOL 共享默认指向网络中每个 DC 上的 C:\Windows\SYSVOL\sysvol\ 目录中。
一旦对任何 GPO 进行了更改,计算机可能需要长达 2 个小时的时间才能同步完成。如果需要强制指定计算机立即同步 GPO,可以在该计算机上执行 C:\> gpupdate /force 命令。
创建 GPO
接下来是创建两个 GPO:
- 限制访问“控制面板”
- 自动锁屏
限制访问“控制面板”
首先我们要在 Group Policy Objects 目录下新建一个 GPO。由于限制访问“控制面板”是为了控制用户,所以我们要在用户配置中进行配置。
在将对应配置设置完之后,将该 GPO 链接到指定 OU 中。在这里,我们想让除了 IT 部门的人员都不能访问“控制面板”。
创建完成。
自动锁屏
为了保障安全,我们会为 域 中的机器设置定时锁屏,以防一些敏感信息泄露。锁屏是作用在机器上的,所以我们要在计算机配置中进行配置。
首先新建一个 GPO,然后在 计算机配置 中寻找相应配置。
设置好定时锁屏时间后,将该 GPO 链接到 根域 中,因为我们希望让域中所有计算机都能遵循这项配置。
认证方式
使用 Windows 域时,所有凭据都存储在 DC 中。每当用户尝试使用域凭据对服务进行身份验证时,服务都需要请求 DC 验证该凭据是否正确。
在 Windows 域 中,有两种协议用于网络身份验证:
- Kerberos:最新版本 Windows 所使用的,是任何最新域的默认协议。
- netNTLM:为兼容起见而保留的传统身份验证协议。
Kerberos 认证
Kerberos 认证是 Windows 最新版本的默认身份验证协议。使用该验证方式的用户将会被分配一个 Ticket,持有 Ticket 的用户可以向服务出示它,以证明他们之前已通过网络的验证,可以使用该网络。
Kerberos 验证步骤如下:
1. 用户向密钥分发中心 (Key Distribution Center, KDC) 发送自己的用户名和使用来自用户密码的密钥加密后的时间戳。KDC 一般安装在 DC 上,负责在网络上创建 Kerberos tickets。
KDC 收到用户请求后,会创建并发回一张票证授予票证 (Ticket Granting Ticket, TGT),来允许用户申请更多 ticket 来访问特定服务。TGT 允许用户请求服务票证,而无需每次连接服务时都传递凭据。除了 TGT,用户还将获得一个 Session Key (会话密钥),用户需要用它生成请求。
此处需要注意,TGT 是使用 krbtgt 账户的密码哈希值加密的,因此用户无法访问其内容。必须知道的是,加密的 TGT 中包含了 Session Key 副本作为其内容的一部分,因此 KDC 无需保存 Session Key,因为它可以通过解密 TGT 获取副本。
2. 当用户想连接网络上的服务 (比如共享、网站或数据库)时,会使用 TGT 向 KDC申请票证授予服务 (Ticket Granting Service, TGS)。TGS 是只允许连接到为其服务的特定服务的 ticket。要申请 TGS,用户需要发送用户名、使用 Session Key 加密的时间戳、TGT 和 服务主名称 (Service Principal Name, SPN)。
收到请求后,KDC 会向用户发送 TGS 和一个 Service Session Key (需要用它验证我们要访问的服务)。TGS 被来自服务拥有者哈希(Service Owner Hash)的密钥加密,其中服务拥有者是服务运行的用户或机器账户。 TGS 加密内容中包含了 Service Session Key 副本,因此服务拥有者可以通过解密 TGS 来获得 Service Session Key。
3. 然后,将 TGS 发送给所需的服务,以进行身份验证并建立连接。服务将使用其配置的账户密码哈希值(这就是前面的 服务拥有者哈希)来解密 TGS 并验证 Service Session Key。
NetNTLM 认证
NetNTLM 认证采用 挑战-回应 (Challenge-response) 机制。整体过程如下:
注意,为了安全起见,用户密码(或哈希值)绝不会通过网络传输。
上述过程适用于使用 域账户 的情况。如果使用的是本地账户,服务器可以自行验证对挑战的响应,不需要与 DC 交互,因为它的 SAM 上本地存储有密码哈希值。
树、森林 和 可信性
目前讨论的都是如何管理单个域、DC 的作用 以及如何连接计算机、服务器和用户。
一个企业可能在刚起步时只用一个 域 就足够,但随着发展壮大,一些额外需求可能会使其拥有多个 域。
树
AD 支持整合多个域,这样可以将网络划分为可以独立管理的单元。如果企业拥有两个共享相同名称空间的域,那么这两个域可以连接成一个树状结构:
这种结构可以使管理人员更好地控制管理。比如 UK 域的管理人员只用专注 UK 域的配置,但它无法管理 US 域的配置。同时这种结构也引入了新的安全组,即 Enterprise Admins (企业管理员),企业管理员将授予用户对企业所有域的管理权限。此时,每个域仍有域管理员,他们只负责自己的域,但是企业管理员可以控制企业的一切域。
森林
树状结构是在同一个名称空间下出现的结构,森林则是在不同的名称下出现的:
将多个不同命名空间的域树合并到一个网络上,就组成了 森林。
信任关系
将多个域以树或森林形式组织起来,可以在资源和管理上形成良好的分隔网络。但某些情况下,A 域中的用户可能需要访问 B 域中的某个共享文件。为此,以树状或森林状组织的域需要通过 信任关系 (Trust Relationships) 连接在一起。
如图所示,假如域 AAA 信任 域 BBB,那么这意味着两个域之间构建了单向信任关系 (one-way trust relationship),域 BBB 的用户可以被授权访问 域 AAA 的资源。
有 单向信任关系 就有 双向信任关系 (two-way trust relationship),它允许两个域相互授权对方的用户。默认情况下,将多个域连接到一棵树或者一个森林时,会形成双向信任关系。
需要注意的是,域 之间建立信任关系并不代表自动授予域用户访问其他域上所有资源的权限。建立信任关系只是有机会授权不同域的用户访问资源,但实际是否授权仍取决于管理员。