概述

Active Directory ( AD ) 是一个用于 Windows 企业环境的目录服务,于 2000 年随 Windows Server 2000 的发布正式实施,并且随着后续服务器操作系统的发布而逐步改进。

AD 基于其之前的 x.500 和 LDAP 协议,并且至今仍在某种程度上使用这些协议。

它是一个分布式、层次化的结构,允许对组织的资源进行集中管理,包括用户、计算机、组、网络设备、文件共享、组策略、设备和信任关系。AD 在 Windows 企业环境中提供 authentication, accounting, and authorization 功能。

1 Windows域简介

1.1 工作组

工作组:工作组是局域网中的一个概念,是长久的资源管理模式。默认情况下使用工作组方式进行资源管理,将不同的电脑按照不同的要求分类到不同的组

1.2 域

域:用来描述一种架构,和工作组相对应,由工作组升级而成的高级架构。域是一个有安全边界的计算机集合(安全边界,是指在两个域中,其中一个域的用户没办法访问另一个域的资源)。相比于工作组而言,域有一个更加严格的安全管理控制机制。

1.2.1 域的几种环境

  • 单域
    • 通常是一个小公司,一般一个域就可以,一个域内要至少两台域服务器,一台作为域控制器,另一台作为备份
    • 活动目录的数据库(包括用户的账号信息)是存储在域控制器中的
  • 父域和子域
    • 处于管理的要求,需要在网络中划分出多个域。第一个域称为父域,其他为子域
  • 域树
  • 域森林

1.2.2 域名服务器 DNS

是指用于实现域名与与之相对应的IP地址转换的服务器,从对域树的介绍中来看出,域树中的域名和DNS域名非常相似,实际上,因为域名的计算机是通过DNS来定位域控制器、服务器及其他计算机、网络服务的,所以域的名字就是DNS域的名字

在实际内网渗透测试中,大多数是通过寻找DNS服务器来确定域控制器的位置的(DNS服务器和域服务器通常配置在同一台机器中)

1.2.3 域术语

  • DC:域控,域的创造者
  • 域管理:域控上的管理者
  • AD:共享同一 AD 数据库、安全策略与信任边界的网络对象集合
  • NTDS dit:域用户账户以域数据库的形式保存在活动目录中
  • Ntdstuil.exe:是域控制器中自带的域数据库管理工具,因此可以从ntdsutil.exe提取域中的所有域用户信息
  • 常见结构:组织单元(OU)、域(DOMAIN)、域树(tree)、域森林(forest),在域树内所有域共享一个活动目录,这个活动目录内的数据分散地存储在各个域内,且每一个域存储该域内的数据

    1.2.3.1 域控DC

    在域架构中域控是用来管理所有客户端的服务器,它负责每一台连入的电脑和用户验证工作,域内电脑如果想相互访问首先得经过它的审核

域控是域架构的核心,每个域控制器上都包含了AD活动目录数据库

一个域中可能应该要有两个域控,一个DC,一个备份DC,如果没有两个DC,一旦DC瘫痪,则域内的其他用户就无法登录域了,因为活动目录的数据库(包括用户的账号消息)存储在DC中。当域中的一台计算机安装AD后,它就成了域控DC了

1.2.3.2 活动目录

  • 账号集中管理:所有账号均存在服务器上,方便对账号的重命名/重置密码
  • 软件集中管理:统一推送软件,统一安装网络打印机等。利用软件发布策略发布软件,可以让用户自由选择安装软件
  • 环境集中管理:利用AD可以统一客户段桌面,IE,TCP/IP等设置
  • 增强安全性:统一部署杀毒软件和扫毒任务,集中化管理用户的计算机权限、统一制定用户名密码策略等,可监控网络、资料统一管理。
  • 更可靠:;更少的宕机时间。
  • 活动目录为Microsoft统一管理平台的基础平台,其他ISA、Exchange、SMS等服务都是依赖于该平台

    1.2.3.3 NTDS.dit

    域用户账户以数据库形式保存在活动目录中,NTDS.dit是活动目录的数据库文件,由下列三个表:
  • Schema表:包含了所有可在活动目录创建的对象信息以及他们之间的相互关系,包括各种类型的可选以及不可选的各种属性,是最小也是最基础的一个表
  • Link表:包含所有属性的关联,包括活动目录中所有对象的属性的值,一个用户对象的所有属性的类型,包括每个属性的值以及用户所属于的组等信息都属于这个表,比Data表小
  • Data表:活动目录中用户、组、应用程序特殊数据以及其他数据全在Data表中,大量的活动目录资料实际上保存在这个表中

1.2.3.4 逻辑结构

活动目录的逻辑结构主要由以下四个层级的组件构成,它们决定了如何对资源进行组织、管理以及如何应用安全策略:

  • 组织单位
    • 概念:活动目录中最小的、可以指派组策略 (GPO) 或委派管理权限的容器对象。
    • 作用:可以将用户、组、计算机以及其他的 OU 放入其中,形成层次结构。它的主要目的是方便管理员对不同部门或层级进行精细化管理和权限下放。
    • 概念:活动目录逻辑结构的核心单位,是一个基本的管理边界安全边界
    • 作用:每个域都有自己独立的安全策略和访问控制列表。在同一个域内,对象可以被集中管理。上文提到的域控 (DC) 就是基于“域”这个级别的。
  • 域树
    • 概念:由一个或多个共享连续命名空间的域组成。
    • 作用:例如,根域为 example.com,其子域可以是 sales.example.comhr.example.com。域树中的所有域通过“双向传递信任关系”自动连接,使得跨域资源访问成为可能。
  • 域森林
    • 概念:由一个或多个不共享连续命名空间的域树组成的集合。它是活动目录中最高级别的逻辑结构和最大的安全边界。
    • 作用:例如,example.comtest.net 可以在同一个森林中。森林中的所有域共享同一个架构 (Schema,即 NTDS.dit 中的 Schema 表) 和全局编录 (Global Catalog)。森林内的不同域树之间也存在传递信任。

1.2.3.5 DNS域名服务器

在Windows域环境中,DNS(域名系统)扮演的角色远比在普通互联网中进行简单的网址解析重要得多。它是活动目录(Active Directory)赖以生存的基础设施,可以说,没有DNS,整个域环境就无法正常运作。

  • 定位域控制器,也就是通过SRV(服务位置)记录实现服务发现。当一台普通域成员电脑开机并尝试登录域时,它本身并不知道域控的具体网络位置。此时,它会向DNS服务器发送查询请求,寻找负责该域的域控制器。DNS服务器通过读取内部的SRV记录,将域控制器的IP地址返回给客户端计算机,客户端随后才能向域控准确提交账号和密码进行身份验证。
  • 域名解析:它将域内的计算机名映射为对应的内网IP地址,确保域内的服务器、工作站和共享资源之间可以通过易记的主机名进行顺畅的通信。为了降低网络维护成本,域环境中的DNS通常支持动态更新机制。这意味着当域内的客户端计算机通过DHCP获取到新的IP地址或更改了主机名时,它们会自动向DNS服务器注册并更新自己的解析记录,无需管理员进行繁琐的手动修改。

1. 独立于活动目录的 DNS(标准区域模式)

  • 存储位置:在这种模式下,DNS 的解析记录(包括 A 记录、SRV 记录等)不存储在活动目录的 NTDS.dit 数据库中。相反,它们被保存在 DNS 服务器本地的传统文本文件(通常是 .dns 区域文件)里。
  • 完全解绑:这个 DNS 服务器甚至不需要是 Windows Server。您完全可以使用一台搭建了 BIND 服务的 Linux 服务器 来作为整个 Windows 域环境的 DNS 服务器。
  • 前提条件:虽然 DNS 是独立的,但为了让活动目录能正常工作,这个独立的 DNS 服务器必须支持两点:支持 SRV 资源记录(用于定位域控)和 支持动态更新(RFC 2136标准,让域内机器能自动注册IP)。
    • SRV服务记录时DNS服务器的数据库中支持的一种资源记录的类型,它记录了哪台服务器提供哪个服务这么一个简单的信息
    • SRV服务记录:一般是作为活动目录AD设置的应用。DNS可以独立于活动目录,但是活动目录必须有DNS的帮助才能工作。为了活动目录能够正常的工作,Dns服务器必须支持服务定位资源记录,资源记录把服务名字映射为提供服务的服务器名称。域主机和域控制器使用SRV资源记录决定域控制器的IP地址和提供服务的服务器IP地址
      2. 与活动目录集成的 DNS(主流推荐模式)
  • 存储位置:这就是我上一条回复中提到的情况,管理员在配置时选择将 DNS 区域与 AD 集成。此时,传统的区域文本文件被废弃,所有的 DNS 记录都变成了活动目录中的对象,直接写入 NTDS.dit 数据库。
  • 优势:这种做法的目的是为了利用 AD 的多主复制机制来实现 DNS 数据的安全同步,方便管理,因此成为了绝大多数企业内网的首选方案。

1.2.3.6 域信任关系

域之间的信任关系,相当于是不同的域之间的桥梁,域信任分为单向信任和双向信任

单向信任:只能是受信任域访问信任域,而信任域不能访问受信任域。双向信任是相互都信任

父子关系:父域和子域自动建立起双向信任关系,并且信任关系可以传递

树信任:同一个林中,林根域与其他根域自动建立双向信任关系,可传递

AD中的用户成员权限

AD包括很多团体,这些团体赋予成员强大的权利和特权。许多漏洞可被滥用以提升域内权限

团队 描述
默认管理员 域管理员和企业管理员“超级”组
服务器管理员 可以修改服务、访问SMB共享和备份文件
备份操作员 成员可以本地登录域控制器 (DC),并被视为域管理员。他们可以创建 SAM/NTDS 数
据库的卷影副本、远程读取注册表,并通过 SMB 协议访问 DC 上的文件系统。有时,该组会被添加到非 DC 服务器上的本地备份操作员组中
打印操作员 可以本地登录到域控制器,并“欺骗”Windows 加载恶意驱动程序。
Hyper-V管理员 如果存在虚拟域控制器,则任何虚拟化管理员(例如 Hyper‑V 管理员组成员)都应被视为域管
理员
账户操作员 可以修改域中未受保护的账户和组
远程桌面用户 默认情况下,成员不会被授予任何有用的权限,但通常会被授予额外的权限,例如允许通过
远程桌面服务登录,并且可以使用 RDP 协议进行横向移动。
远程桌面管理员 成员可以使用 PSRemoting 登录到 DC(该组有时会被添加到非 DC 上的本地远程管理组)。
组策略管理员 成员可以创建新的 GPO,但需要被委派额外的权限才能将 GPO 链接到容器(例如域或
OU)。
架构管理员 可以修改 Active Directory 架构结构,并且可以通过将受损帐户添加到默认对象 ACL 来为任何要创建的组/GPO 添加后门。
DNS管理员 成员可以在域控制器上加载 DLL 文件,但没有重启 DNS 服务器所需的权限。
他们可以加载恶意 DLL 文件,并等待服务器重启以达到持久化的目的。

用户权限分配

根据组成员身份以及其他因素而定。根据策略,用户可以被分配各种权限

在windows系统中,输入命令whoami /priv列出分配的当前用户的所有用户权限。一些权限只对管理员用户可用,且只有管理员授权的cmd或powershell回话中列出、利用

微软远程服务器管理工具(RSAT)

介绍

远程服务器管理工具(RSAT)自 Windows 2000 时代起就是 Windows 的一部分。RSAT 允许系统管理员从运行 Windows 10、Windows 8.1、Windows 7 或 Windows Vista 的工作站上远程管理 Windows Server 角色和功能。RSAT 只能安装在 Windows 专业版或企业版上。在企业环境中,RSAT 可以远程管理 Active Directory、DNS,以及 DHCP。RSAT 还允许我们管理已安装的服务器角色和功能、文件服务以及 Hyper-V。RSAT 包含的工具完整列表是:

  • SMTP服务器工具
  • Hyper-V管理工具
  • Hyper-V 模块 for Windows PowerShell
  • Hyper-V GUI 管理工具
  • Windows Server Update Services 工具
  • API 和 PowerShell cmdlets
  • 用户界面管理控制器
  • 活动目录用户和计算机插件
  • 活动目录站点和服务插件
  • 活动目录域和信任插件
  • Active Directory 管理中心插件
  • ADSI 编辑扩展
  • Active Directory 架构插件(未注册)
  • Active Directory 命令行工具
  • Active Directory Windows PowerShell 模块
  • IIS 管理工具
  • IIS 管理控制台
  • IIS 管理兼容性
  • 功能工具
  • 远程桌面服务工具
  • 角色工具
  • 更新服务工具
  • 组策略工具

我们可以使用 PowerShell 检查是否已安装任何 RSAT 工具。

1
Get-WindowsCapability -Name RSAT* -Online | Select-Object - Property Name, State

同时,我们可以使用以下命令选择安装所有可用工具:

1
Get-WindowsCapability -Name RSAT* -Online | Add-WindowsCapability –Online

LDAP概述

轻量级目录访问协议(LDAP)是活动目录(AD)的重要组成部分。最新的 LDAP 规范是版本 3,发布为 RFC 4511。深入理解 LDAP 在 AD 环境中的工作原理对于攻击者和防御者都至关重要。

LDAP 是一种开源的跨平台协议,用于对各种目录服务(如 AD)进行身份验证。如前一节所述,AD 存储用户账户信息和安全信息(如密码),并促进与其他网络上的设备共享这些信息。LDAP 是应用程序用来与其他提供目录服务的服务器进行通信的语言。换句话说,LDAP 是网络环境中的系统与 AD 进行“交流”的一种方式。

LDAP 会话首先通过连接到 LDAP 服务器(也称为目录系统代理)开始。AD 中的域控制器会积极监听 LDAP 请求,例如安全认证请求。

AD LDAP 身份验证

LDAP 配置为使用”绑定”操作来验证对 AD 的凭据,以设置 LDAP 会话的认证状态。LDAP 身份验证有两种类型。

  1. 简单认证:这包括匿名认证、未认证认证和用户名/密码认证。简单认证意味着用户名和密码会创建一个 BIND 请求来认证 LDAP 服务器。
  2. SASL 身份验证:简单身份验证和安全性层(SASL)框架使用其他身份验证服务,如 Kerberos,绑定到 LDAP 服务器,然后使用此身份验证服务(在本例中为 Kerberos)对 LDAP 进行身份验证。LDAP 服务器使用 LDAP 协议向授权服务发送 LDAP 消息,该服务启动一系列挑战/响应消息,从而导致成功或失败的身份验证。由于身份验证方法与应用程序协议的分离,SASL 可以提供更高的安全性。

LDAP 认证消息默认以明文发送,因此任何人都可以在内部网络上嗅探 LDAP 消息。建议使用 TLS 加密或类似方式来保护传输中的信息。

LDAP查询

我们可以使用 LDAP 查询与目录服务进行通信,以向服务请求信息。例如,以下查询可用于查找网络中的所有工作站(objectCategory=computer),而此查询可用于查找所有域:controllers: (&(objectCategory=Computer))(userAccountControl:1.2.840.113556.1.4.803:=8192)

LDAP 查询可用于执行与用户相关的搜索,例如 “ (&(objectCategory=person)(objectClass=user)) “ 搜索所有用户,以及将相关的搜索分组,例如 “ (objectClass=group) “ 返回所有组。这里是一个使用 “ Get-ADObject “ cmdlet 和” LDAPFilter 参数 “ 查找所有 AD 组的简单查询示例。

与用户相关的搜索

1
Get-ADObject -LDAPFilter '(objectClass=group)' | select name

我们还可以使用 LDAP 查询来执行更详细的搜索。此查询搜索域中所有管理员禁用的账户。

1
Get-ADObject -LDAPFilter '(&(objectCategory=person) (objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))' Properties * | select samaccountname,useraccountcontrol

LDAP 查询是查询 Active Directory 的极其强大的工具。我们可以利用它们的力量收集各种信息,规划 AD 环境,并寻找配置错误。LDAP 查询可以与过滤器结合使用,以执行更细粒度的搜索。接下来的两个部分将深入介绍 AD 和 LDAP 搜索过滤器,以便我们在后续模块中介绍各种 AD 列举工具。