第七天的笔记主题是“域”。做安全这行,尤其内网方向,域这个字基本决定了你能走多远。一套网络安全视频课程学到第七天,正好卡在从单机渗透转向域环境的关键节点上。如果你只是想打靶机、挖点Web漏洞,域可能暂时用不上;但只要接触真实办公网、企业内网、攻防演练,域环境就是默认战场。
这天的学习给我最大的感受是:域不是一个“功能”,而是一整套身份与策略管理架构。学它的价值不只在于会搭建、会维护,更在于理解了企业网里常见的攻击路径是怎么一步步走通的。下面把我第七天笔记里记录的完整内容做一个整理,包含实操命令、踩坑记录、以及一些课程之外我自己补的资料。如果你也正在学这一块,这篇可以当一份精简版的学习地图用。
1. 第七天要解决的认知问题:什么是域,为什么安全人员离不开它
1.1 从工作组到域:认证方式的根本变化
课程的第一部分没有急着敲命令,而是先讲清楚了工作组和域的区别。很多人第一次听到“加域”“域控”时很懵,其实就是没搞清楚组网模型。工作组(Workgroup)是典型的对等网络,每台机器自己维护本地账户,A机器上的账户到了B机器,除非B机器上也有完全一样的用户,否则登录不了。早期的办公室、小店基本都是这种模式,适合机器少、人少的场景。
域(Domain)则完全不同。它引入了一个集中管理节点——域控(DC,Domain Controller)。所有域成员机器和用户账户的密码哈希、权限、策略都存放在域控的活动目录(AD,Active Directory)数据库里。你在一台域内电脑上输入域账号登录,本机其实不验证密码,而是把认证请求交给域控去处理,验证通过后才分配会话和权限。
这个转换非常关键。打个比方:工作组像合租房的几个房间,每个房间的钥匙各自配,室友之间是否信任、能不能进彼此房间,全靠口头上约定;域则像公司办公楼的统一门禁卡,所有房间的锁都归物业统一管理,谁有哪几间房的权限,物业后台说得算。安全人员研究域,本质上研究的就是这套“物业后台”的设计缺陷和防护方式。
1.2 域环境必须先认识的几个核心名词
第七天课程里反复出现的术语,我整理下来主要是这几个。
- 域控(Domain Controller,DC):域环境里的核心服务器,负责存储AD数据库、处理认证与授权。一个域可以有多台域控互相复制,学习阶段一台就够。
- 活动目录(Active Directory,AD):域里的“数据库”,保存用户、组、计算机、密码策略、组策略等所有对象数据。AD不只是“目录”,它同时承担了认证、授权、配置管理多种职责。
- 组织单位(OU,Organizational Unit):AD里的容器,用来分门别类地放用户、计算机、组。OU是组策略和权限委派的主要挂载点。
- 组策略(GPO,Group Policy Object):域控批量下发配置的机制,可以统一桌面壁纸、密码策略、软件安装、脚本等。安全配置大多也靠它下发。
- DNS:AD域服务正常运转的基础。域成员要通过DNS找到域控,域控也要通过DNS发布服务定位记录(SRV记录)。DNS配错,域基本起不来。
- Kerberos:域环境默认的认证协议,涉及TGT、TGS票据等概念。第一天提到域攻击,很多都和票据伪造、票据滥用有关。
这六个名词是后面所有内容的骨架。如果只看一遍记不住,可以再回到这节,对照后面每个实操步骤复看一遍。至少对我个人来说,把“DNS是定位器、AD是数据库、DC是服务器”这三句话刻进脑子之后,后面的命令就都顺了。
2. 从零搭建域环境:DNS、域控、加域三步走
第七天的实操环节从一台全新的Windows Server开始。课程里强调的是“理解每一步为什么这么配”,而不是单纯一顿Next到底。我复现下来,整个流程大致分成三步:规划与固定IP、安装AD域服务并提升域控、客户端加域。每一步都有容易踩坑的地方,下面按顺序拆开说。
2.1 实验环境规划与IP固定
我这里准备了三台虚拟机:两台Windows Server 2019、一台Windows 10专业版。实验域打算叫corp.local,域控主机名DC01,客户端主机名CLI01。规划信息如下:
| 角色 | 主机名 | 系统 | IP地址 | DNS指向 |
|---|---|---|---|---|
| 域控 | DC01 | Windows Server 2019 | 192.168.8.10/24 | 127.0.0.1(自身) |
| 普通域成员 | CLI01 | Windows 10 专业版 | 192.168.8.21/24 | 192.168.8.10 |
| 第二台备选域控 | DC02 | Windows Server 2019 | 192.168.8.11/24 | 192.168.8.10 |
有一点第一天课程里明确强调过:域控的IP必须固定,绝对不能使用DHCP自动分配。原因不复杂,域成员加入域后要把域控的IP当作DNS服务器,如果域控IP经常变化,客户端解析不到域控,认证就会失败。客户端加入域之后,也会把计算机账户信息和域控IP建立信任关系,IP一变,这种信任关系很容易出问题。
固定IP和主机名的PowerShell操作如下,接口名字以本机实际为准,我这边是Ethernet0:
# 设置静态IP和默认网关 New-NetIPAddress -InterfaceAlias "Ethernet0" -IPAddress 192.168.8.10 -PrefixLength 24 -DefaultGateway 192.168.8.1 # 设置DNS指向自身,这是域控安装前的临时方案 Set-DnsClientServerAddress -InterfaceAlias "Ethernet0" -ServerAddresses 127.0.0.1, 192.168.8.10 # 修改主机名,重启后生效 Rename-Computer -NewName "DC01" -Restart先固定IP、再改主机名,顺序最好不要反过来。如果机器名在IP固定前就参与了某些网络操作,后续可能会导致身份记录异常。主机名改完重启,再开始安装域服务。
2.2 安装AD域服务的完整命令与验证
在Windows Server上装AD角色,现在推荐直接用PowerShell。先安装AD域服务角色和相应的管理工具:
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools这条命令执行后系统会安装AD DS角色。接着需要把这台服务器提升为域控。因为当前环境没有任何已有域,所以要新建一个森林根域。我用的命令如下:
Import-Module ADDSDeployment Install-ADDSForest ` -DomainName "corp.local" ` -DomainNetbiosName "CORP" ` -InstallDns:$true ` -SafeModeAdministratorPassword (ConvertTo-SecureString "请换成你自己的强密码" -AsPlainText -Force) ` -Force:$true这里有几个容易混淆的概念,课程里专门停下来解释过。一个是NetBIOS域名,老式程序解析用的短名称,实验环境写CORP就行。另一个是DSRM密码,即目录服务还原模式密码,它不是平时登录域控用的管理员密码,只在紧急还原AD数据库时才用。DSRM密码忘了不影响日常使用,但真到需要还原的时候会非常麻烦,所以实验笔记里最好单独记录。
为什么要同步安装DNS?因为AD域必须要靠DNS来发布SRV记录,客户端通过SRV记录才能定位域控。把DNS服务和AD集成,可以让DNS区域自动写入AD相关记录,省去手动维护的麻烦。对学习环境来说,直接勾选一起装是最省心的选择。
提升过程大概几分钟,完成后系统自动重启。重启后再登录,需要打开PowerShell做一轮验证:
# 查看当前域中的域控列表 Get-ADDomainController -Filter * # 测试客户端是否能定位到域控 nltest /dsgetdc:corp.local # 完整诊断AD和DNS状态 dcdiag /v验证命令各有侧重。Get-ADDomainController -Filter *能看到当前域里有哪些域控、是不是GC(全局编录)角色;nltest /dsgetdc:corp.local是模拟客户端找域控;dcdiag /v属于全面体检,如果DNS注册有问题、AD复制有问题,它一般都能报出来。第一次搭建时见到红色提示不用慌,绝大多数都和DNS配置或时间不同步有关,后面小节会专门排查。
2.3 客户端加域的实操与时间同步
域控搭好后,把Windows 10客户端加入域。客户端第一件事是改DNS,必须指向域控IP。GUI设置在“网络和Internet设置 → 更改适配器选项 → IPv4属性”里改就行。不理解为什么要先改DNS的话,可以回忆一下公司办公场景:员工电脑不开“自动获取DNS”,而是填内网DNS地址,才能解析到内网的各种服务器,包括域控。
DNS改完后,在Windows 10上执行加域命令:
Add-Computer -DomainName corp.local -Restart -Credential CORP\Administrator执行后会要求输入域管理员密码,验证通过后自动加域并重启。命令行方式不弹窗、出错信息更完整,比图形界面更适合做实验记录。当然,图形界面也可以,路径是“系统属性 → 计算机名 → 更改 → 域”,输入域和管理员凭据即可。实际练习时建议两种都试一次,因为工作中遇到的机器新旧系统都有,图形界面在某些精简版系统上入口位置会变。
加域成功之后,还需要检查一下客户端时间。第七天课程特别讲过:Kerberos认证对时间非常敏感,客户端和域控的时间差默认超过5分钟,认证直接失败。域成员默认会向域控做时间同步,但如果客户端手动改过时间,或者虚拟机休眠恢复异常,时间偏移随时可能出现。实验时可以用命令核对:
w32tm /query /status w32tm /resync/resync表示强制重新同步时间。遇到“目标主体名不正确”“找不到登录服务器”这类报错,先查DNS,再查时间,基本能解决八成加域问题。系统时间这件事容易忽略,但它在Kerberos认证里的优先级非常高,我把这点记在了笔记最前面。
3. 用户、OU与组策略:把域管起来
域控搭建只是骨架,真正让域“运转”起来的是用户、OU和组策略。第七天课程在这部分花了很多时间,因为攻击者后续利用的,往往就是OU结构和GPO配置里暴露出来的问题。我们在学习阶段把管理逻辑理解透,后面分析攻击路径才会顺。
3.1 创建用户和OU的两种方式
图形界面里,打开“Active Directory 用户和计算机”就能创建OU和用户,命令方式更适合批量操作和笔记记录。先创建两个OU,比如按部门划分:研发部和运维部。
New-ADOrganizationalUnit -Name "研发部" -Path "DC=corp,DC=local" New-ADOrganizationalUnit -Name "运维部" -Path "DC=corp,DC=local"创建一个普通域用户,放在研发部OU下:
New-ADUser -Name "张同学" ` -SamAccountName "zhang" ` -UserPrincipalName "zhang@corp.local" ` -Path "OU=研发部,DC=corp,DC=local" ` -AccountPassword (ConvertTo-SecureString "Passw0rd!" -AsPlainText -Force) ` -Enabled $true有一点课堂上没有细讲,但我做实验时发现很重要:OU的规划最好在创建用户之前。OU不只是文件夹,它还是组策略、权限委派的挂载点。如果所有用户一股脑放在内置的Users容器里,后面想按部门下发不同策略、按岗位做权限分级,就要重新搬移用户,很容易漏。实践中应该先设计好OU结构,再批量建用户。
账号密码策略也要注意。实验环境为了省事,可以把“Passw0rd!”这种密码视为临时密码;真实生产环境绝对不能用这种弱密码。课程里提过一个原则:高权限账户(域管、服务账户)和普通用户密码必须分层管理,尤其是服务账户的密码,经常被写成脚本里的明文,是内网横向移动的重要突破口,这个点后面安全部分再展开。
3.2 GPO组策略继承顺序与几个经典问题
GPO是域批量配置的核心机制。它挂在不同的层级上,分别是:本机策略(Local)→ 站点(Site) → 域(Domain) → 组织单位(OU)。一条GPO如果同时作用于域和某个OU,实际生效顺序是“后应用的覆盖先应用的”,优先级可以简记为LSDOU:Local最低,OU最高。
但这个顺序不是绝对,还有两个开关会打乱它:一是OU上的“阻止继承”,子级OU可以拒绝来自父级的GPO;二是GPO本身上的“强制”,强制GPO优先级最高,即使下级OU设置阻止继承也拦不住。课程里有一句总结我记在笔记里了:“默认情况下,OU赢;如果开了强制,强制赢;如果开了阻止继承,OU的本地策略赢。但强制永远是老大。”
GPO不生效是学习阶段最容易遇到的问题,排查时可以从三方面入手:
- 检查GPO作用域:安全过滤里如果只加了某几个用户,那其他用户就不会收到该GPO。默认情况应该加上“Authenticated Users”组,只对特定人群生效时再单独设置例外。
- 检查链接位置:GPO必须链接到对应的域或OU上,光创建不链接等于白建。
- 刷新策略再验证:客户端执行
gpupdate /force,然后执行gpresult /r看实际应用了哪些GPO。看不清细节时可以用gpresult /h report.html导出HTML报告。
还有一个细节容易被新手忽略:组策略分为“计算机配置”和“用户配置”。计算机配置在开机时加载,用户配置在用户登录时加载。如果两者冲突,最终不一定是用户配置生效,还要看“环回处理”(Loopback)的设置。环回处理常用于教室电脑、机房等公共终端:机器本体是给特定用户专用的,但使用者可能任意换人,需要强制使用某套用户配置,此时可以设置环回处理为“替换”或“合并”。第七天课程没有展开环回处理,我是在后续做公共终端实验时补学的,这里把笔记一并放上。
3.3 建议优先配置的几项GPO
如果自己搭实验环境练手,可以优先配置下面这几项,它们同时也是安全加固里最常见的GPO:
| 策略项目 | 推荐配置 | 作用 |
|---|---|---|
| 密码策略 | 最小长度14、复杂度要求启用 | 提高本地爆破难度 |
| 账户锁定策略 | 5次错误锁定30分钟 | 防止在线口令爆破 |
| 禁止访问命令提示符 | 启用 | 降低交互式攻击便利性 |
| 限制本地管理员 | 移除普通用户本地管理员权限 | 防止普通用户提权 |
| 禁止域管登录普通机器 | 拒绝Domain Admins组从普通机器登录 | 缓解凭据窃取横向移动 |
密码策略在域环境里有特殊性,值得单独说一句。默认情况下,域级密码策略是整个“Default Domain Policy”里配置的,它对所有域用户生效,比较“一刀切”。Windows Server 2008之后引入了“细粒度密码策略”(FGPP,Fine-Grained Password Policy),可以为不同用户或组设置不同的密码策略。学习阶段建议把默认密码策略调严格,再做实验验证它真正生效的方式,会发现它和我们想象的不完全一样。
禁止域管登录普通机器这条,是视频课后面安全章节反复强调的。表层原因是防止域管账户在普通电脑上留下凭据缓存,深层原因是攻击者在拿下一台普通电脑后,会试图通过LSASS进程抓取登录过的账号哈希,如果域管曾在那台机器上登录,哈希一旦被抓,整个域都可能陷落。第七天可以先在GPO里配好,后面的课程还会从攻击视角验证这条策略的价值。
4. 安全视角:域攻击面到底在哪,防御要盯哪些点
第七天课程前半部分都在搭建和管理域,后半部分开始转换视角,聊攻击面。这也是我把这节课单独拿出来写笔记的原因:域环境的安全问题,和单机时代完全不同。一台电脑中毒可能只是数据被加密;域里一台电脑被控,攻击者却可能用它作为跳板,逐步摸到域控,最终控制整个企业网络。
4.1 从攻防演练中总结的常见攻击路径
课程总结了域环境下几条非常经典的攻击路径。它们的共同点是:不是靠单个漏洞打穿,而是靠一系列合法的、非法的操作逐步叠加。这部分内容涉及的工具只做原理层面说明,千万不要在未授权环境里测试。
Kerberoasting。如果域里有服务账户注册了服务主体名称(SPN),那么任何普通域用户都能向域控申请该服务账户的服务票据(TGS)。域控生成票据时会把服务账户密码哈希加密到票据里,攻击者拿到票据后就能在本地离线爆破,因为密码是用服务账户的密码派生的密钥加密的,爆破成功就相当于拿到了这个服务账户的明文密码。常见破解工具是hashcat和john,防御方向是让服务账户密码足够复杂、尽量使用托管服务账户。
AS-REP Roasting。默认情况下,域用户向域控请求初始票据(TGT)时需要先提供密钥加密的时间戳,这叫预认证。如果某个用户的属性里“不需要预认证”,攻击者就可以直接为该用户申请TGT票据,拿到加密材料后离线爆破。这类用户的密码强度如果也不高,被破解速度会比想象快得多。
票证伪造。黄金票据和白银票据是域环境内网渗透的经典话术。黄金票据利用的是域控上krbtgt账户的密码哈希,攻击者拿到后可以伪造任意域用户的TGT,包括域管理员。白银票据则是伪造针对某个服务(如文件服务、计划任务服务)的服务票据。两种攻击都强调“已经拿到域控或目标服务账户凭据”,本质是后渗透阶段的特权维持,而不是初始攻击手段。
委派攻击。Windows服务在用户请求资源时,经常需要“代表”用户去访问其他服务,这个过程叫委派。非约束委派、约束委派、基于资源的约束委派各有滥用姿势。普通用户如果控制了一台配置了非约束委派的服务器,就可能截获经过这台机器转发认证的其他用户的TGT,从而冒用高权限用户身份。这部分在视频里是作为扩展内容讲的,我自己的笔记里只记了原理和检测思路,详细实验放到后续课程继续做。
DCSync与NTDS导出。如果攻击者拿到了具有域控复制权限的账户,就能模拟域控向其他域控发起目录复制请求,从中提取所有用户的密码哈希,包括域管理员。这类操作在日志里留痕相对明确,事件ID 4662目录服务访问是最直接的线索。
4.2 防御侧可以落地的七件事
第七天视频课最后给了一套防御清单,我把它总结成七件事。
第一,最小化特权账户数量。Domain Admins组越少越好,这组里每多一个人,风险面就扩大一分。实际管理时,域控运维用单独的高权限账户,不允许用普通电脑和私人电脑登录。
第二,启用LAPS管理本地管理员密码。域内电脑的本地管理员密码不应相同,否则攻击者拿到一台机器的本地Administrator哈希,等于能登录全网后台机器。LAPS能让每台机器自动生成独立复杂密码,并安全存储在AD中。
第三,服务账户密码强制复杂化。能不用独立服务账户就不用,能用gMSA托管服务账户就不用普通服务账户。托管服务账户的密码会自动轮换,并且默认只有特定主机才能使用,Kerberoasting攻击面会大幅缩小。
第四,定期重置krbtgt密码。黄金票据依赖krbtgt哈希,定期重置这个密码会让已泄漏的票据失效。注意不是一次性改完就结束,重置krbtgt密码要在两次密码生命周期里分步完成,否则可能影响域内验证。网上有专门的重置脚本,做之前最好在测试环境演练。
第五,监测特权组变更与高权限登录。对Domain Admins等特权组的成员变更、异机登录行为进行告警。很多攻击链条都会在某个环节触发这些事件。
第六,检查SYSVOL里的明文配置。组策略的脚本、配置文件经常会保存密码,攻击者会通过检索SYSVOL共享来寻找这些历史残留。
第七,把日志集中收集。单台机器日志里找不到全貌,必须汇总到日志平台统一关联分析,才能从全局发现异常。
4.3 日志审计需要关注的事件ID速查
安全部分最实用的一份参考资料是域控上的事件ID速查表。第七天课程给出一部分,我后续又补充了几个,现在整理如下:
| 事件ID | 含义 | 关注点 |
|---|---|---|
| 4624 | 登录成功 | 结合登录类型,重点看10(远程交互)、3(网络) |
| 4625 | 登录失败 | 大量失败说明可能存在口令爆破 |
| 4672 | 为登录授予特殊权限 | 高权限账户登录时出现,追踪管理员行为 |
| 4768 | Kerberos TGT请求 | 关注请求来源IP和账户,异常请求可能是票据攻击前兆 |
| 4769 | Kerberos TGS请求 | 重点关注请求SPN的服务账户,Kerberoasting会大量出现 |
| 4740 | 账户被锁定 | 锁定次数频繁说明密码错误或爆破 |
| 5136 | 目录服务对象被修改 | 关注AD对象被改,尤其权限属性和组成员关系 |
| 1102 | 审计日志被清除 | 明显的反取证行为,需要第一时间告警 |
这些事件ID不需要背下来,但要知道哪里能查。实际做日志分析时,我一般先在SIEM里建几条关联规则:比如“单账户短时间内多次4769 + 多次4625”,或者“特权组出现4732添加成员”,命中后优先排查。
5. 第七天踩坑实录:域搭建中的问题排查与经验
最后这部分是当天的实战问题记录。视频课虽然给了标准流程,但自己上手敲命令时总会遇到一些意想不到的小毛病。把这些问题和排查思路记录下来,会让后面几天的学习顺畅很多。
5.1 加域失败的两类关键原因
我当天实际遇到的第一类问题是DNS解析不到域控。报错信息大概是“找不到域corp.local的域控制器”或者“找不到网络路径”。当时客户端DNS没有指向域控,还保留着默认的自动获取,结果域名解析到了外部公共DNS,自然找不到内网域控。解决方法是把客户端DNS固定为域控IP,然后在客户端上验证:
nslookup corp.local nslookup -type=SRV _ldap._tcp.corp.local第一句能解析出域控IP,第二句能看到SRV记录,说明DNS侧没问题。SRV记录看不到,很可能就是DNS区域里没有AD相关记录,或者AD集成DNS区域建立失败。如果是后者,回到域控上执行dcdiag /test:dns,看具体报错。
第二类问题是时间同步异常。我有一台虚拟机开了快照回滚,恢复后时间比域控慢了将近十分钟,尝试加域时直接提示Kerberos认证失败。排查方法是先在客户端的“设置 → 时间和语言”里观察时间差异,然后用w32tm /resync强制重新同步。如果系统时间偏差过大,可以先手动改成接近正确时间,再做一次强制同步。
有一件事也要留意:克隆虚拟机后直接加域容易出SID重复问题。实验环境如果要大量复制同一台镜像,必须先执行sysprep重新封装,或使用完整克隆而不是链接克隆。否则加域后计算机身份可能出现冲突,具体的报错形式五花八门,比较常见的是“无法与域控制器建立信任关系”或加入域后又掉域。这块虽然不是第七天课程主要内容,但我认为学习阶段提前了解,能省下很多不必要的折腾。
5.2 GPO和账号管理的常见问题
做GPO实验时,我遇到的第一个问题就是策略完全不生效。原因是在作用域安全过滤里只添加了“Domain Admins”,导致普通用户登录时无法读取该GPO。解决方法是把安全过滤改为“Authenticated Users”,然后再针对不需要应用策略的特例做拒绝。
第二个问题是,修改密码策略后并没有立刻看到效果。这里需要提醒自己:密码策略不是“下一次修改密码立即生效”的策略,它作用于后续设置的密码,当前已存在的密码不会被动要求符合新规则。另外,如果配置了细粒度密码策略(FGPP),它的优先级高于域默认密码策略,配置时要先确认有没有FGPP叠加生效,否则会看到“改了密码复杂度怎么没反应”的现象。
账号锁定问题也值得记一笔。域控上默认并不开启账户锁定阈值,如果只改了普通的GPO而忘了启用账户锁定策略,暴力破解工具就可以无限尝试密码,这个隐患在安全检查里很容易被问到。配置路径是“计算机配置 → 策略 → Windows设置 → 安全设置 → 账户策略 → 账户锁定策略”。
还有DSRM密码的问题。我一开始没记DSRM密码,后面想用目录服务恢复模式时完全进不去。重置DSRM密码的方法是:在Windows Server的安装介质或系统修复环境里打开命令行,然后执行ntdsutil里的“set dsrm password”选项。学习阶段不怎么用得到,但建议把密码记在本地实验笔记里,避免关键时刻卡住。
5.3 学完第七天之后怎么继续
整理完当天的笔记,我自己又做了几件扩展练习,觉得对后续课程帮助很大。
第一,反复练习“从零重建域环境”。不只是看视频,而是真的把域控删干净、重新搭一遍。第一次搭用了将近两个小时,第二次半小时内能完成。熟练之后,后面课程里的攻击实验才有稳定可靠的基础环境。
第二,补了一遍Kerberos认证流程。课程里只是提了TGT、TGS,我把完整的请求流程、票据结构、加密密钥来源又单独梳理了一遍。弄懂Kerberos,再回头看黄金票据、白银票据、委派攻击,思路会清晰很多,不再是一堆孤立名词。
第三,把GPO实验扩展到了安全加固场景。我给实验域配置了账户锁定、密码复杂度、LAPS试点和审计策略,再用攻击工具做一轮自查,看哪些配置能拦住、哪些拦不住。这个过程比纯粹看视频更能加深印象。
第七天的内容量不小,但如果能手动完成一遍完整的域搭建和策略配置,再对照日志观察一次异常事件的变化,这一天的学习就扎实了。后面几天的课程大概率还要继续在域环境里做攻防实验,现在多花点时间把基础打好,后面会轻松得多。