Professional Documents
Culture Documents
AD Security 101 (译:半仙)
AD Security 101 (译:半仙)
介绍
Active Directory 101 快速回顾 AD 的工作
原理
Active Directory
存储有关用户、
通过组成员身
计算机、组、 验证身份 (user,
份审核和控制
首选项等的信 computer,…)
访问
息
Active Directory Components
Active Directory 数据存储
Domain controllers
Domain
森林
树 (DNS)
组织单元和站点
Group Policy
Active Directory Components
Active Directory 数据存储 数据存储是磁盘上的 Active
Domain controllers Directory 数据库,包含存储在
Domain
AD 中的所有内容(包括密码哈
希)
森林
树 (DNS) 默认路径 :
组织单元和站点 C:\Windows\NTDS\ntds.dit
Group Policy
Active Directory Components
Active Directory 数据存储 每个 DC 托管 Active Directory 数据存储和 相应
的服务 (LDAP, KDC, GC,…)
Domain controllers
换句话说: DC 是运行 AD 并提供对网络上其他
Domain
计算机的访问的服务器
森林
通常有多个(至少两个) DC 用于冗余,因为 AD
树 (DNS) 通常是企业网络中最关键的服务之一
组织单元和站点
从 Windows 2000 开始,域中的每个 DC 都可以
Group Policy 写入 AD 数据库(多主)——更改在 DC 之间同
步
Active Directory Components
Active Directory 数据存储 树是一个连续的 DNS 命名空间
Domain controllers • eg. „corp.contoso.com“
• DNS 是 Active Directory 中的关键组件
Domain
森林
域是一种 AD 管理结构,包含
• Users, groups, computers
树 (DNS)
• Policies (e.g. Password Policy)
组织单元和站点
一个林包含一个或多个 domain
Group Policy
Active Directory Components
Active Directory 数据存储
Domain controllers
Domain
森林
树 (DNS)
组织单元和站点
Group Policy
Active Directory Components
Active Directory 数据存储
组织单位就像文件系统中的文件夹 ; 用
Domain controllers 于组织用户、组 ,…
Domain
站点通常描述网络的样子
森林
Domain
组策略从中央控制台(组策略管理控制
森林 台)进行管理,并且可以限定于特定用户、
组、组织单位等
树 (DNS)
组织单元和站点 大多数组策略设置最终会变成在目标计算
机上设置的注册表项
Group Policy
Active Directory Components
Active Directory 数据存储 在每台 Windows 计算机上,专门的服务
(„Group Policy Client“) 检查是否有要应用
Domain controllers
的新设置
Domain
计算机设置在启动时和每 90-120 分钟后
森林 应用
树 (DNS)
高管
软目标(弱密码 , 旧密码,密码未改变,从未登录的帐
我们想知道什 户 ...)
网络拓扑(基于 AD 站点,确定 IP 拓扑 )
么?
我们在哪里可以找到它 ? 组策略(弱点和保护机制到位)
软件部署( SCCM 等)
服务和服务帐户
NTLM
NTLM
作为 MS-NLMP 身份验证协
用于在磁盘上存储密码的哈
议的一部分,用于通过网络
希算法
对用户进行身份验证
NTLM Intro
MS-NLMP 包含
• LM (Lan Manager)
• NTLM (NT Lan Manager Version 1)
• NTLMv2 (NT Lan Manager Version 2)
NTLM Summary
Protocol Hash 算法 Used for Security provided
LM 基于 DES 加密的伪哈希 - 密码存储 Extremely weak
very weak 网络身份验证
NTLMv1 MD4 密码存储 Very weak
网络身份验证
NTLMv2 MD5 网络身份验证 Weak – yeah, that's the best
we got :-(
Bottomline
NTLM 的所有口味都陈旧而弱,最好根本不要使用它们
然而,由于兼容性问题,这在现实生活中是一项非常复杂的工作
NTLM/MS-NLMP 基本认证流程
NTLM/MS-NLMP 基本认证流程
• 客户端将其 Username 发送到服务器
• 服务器生成一个随机的 16 字节数( challenge/nonce )并发送给客户端
• 客户端使用其密码的哈希值加密挑战并将结果发送到服务器(这是“响应”,我们
将在一分钟内跟进)
• 服务器将以下三项发送给 DC 进行验证
• Username
• 发送给客户端的 Challenge
• 从客户端收到的 Response
• DC 使用 Username 从 AD 数据库中检索相应的密码哈希并对服务器质询进行加
密
• 如果结果匹配(客户端的响应和 DC 计算的响应),则认证成功
LM/NTLM Response
请注意:为了演示目的,散列值被高度简化,并不代表真实值。
NTLMv2 Response
请注意:为了演示目的,散列值被高度简化,并不代表真实值。
NTLM Attack Vectors in a Nutshell
Pass-the-Hash
• 在不知道明文密码的情况下使用密码的哈希值对网络上的其他设备进
行身份验证。
Overpass-the-Hash
• 从 NTLM 哈希中获取 Kerberos 票证,同样在不知道明文密码的情况
下。
Relay
• 将传入的 NTLM 身份验证尝试中继到另一台主机。 可以混合使用协
议。
Pass-the-Hash Attack
• Pass-the-Hash 攻击滥用了前面描述的事实,即只要
密码的哈希值可用,就不需要用户的密码来成功通
过网络进行身份验证
• 不再需要破解密码(!)
• 典型的攻击向量是
• 本地管理员帐户的密码哈希值,只要它们在系统中
相同(例如所有客户端)
• 从内存中获取的特权帐户(例如服务帐户或管理
员)的哈希值
练习 2:
NTLM
在中继攻击中,攻击者将来自更高特权用户(中继帐户)的
传入身份验证请求重定向 / 中继到另一台计算机(中继目
标)
然后攻击者可以使用中继帐户的权限访问中继目标
NTLM Relay Attacks
由于协议的简单性, NTLM
身份验证得到了各种支持 支持 NTLM 的协议是(除其他外)
LDAP
„ transport protocols“ HTTP
SMB
SMTP
因此, NTLM 中继也可以跨 POP/IMAP
协议方式进行。 例如:通过
HTTP 传入身份验证,通过
SMB 传出身份验证
常见的中继向量
(1) 高特权服务帐户“ ServiceA” (通
常具有本地管理员权限)尝试访问攻 (2) 攻击者将传入的身份验证转发
击者主机 到目标主机
在这种情况下,攻击者可以在受感染的公司机器上进行操作,因为我们通过将受害者
重定向到 HTTP 来减轻最后一种情况的 SMB 警告
Common relay vectors
场景 #3 :中间人攻击
警告:中间人场景严重依赖于目标配置和网络邻接(例如相同的子网)
Kerberos 守护冥界之门的护卫
犬
This is Jack. Jack
attends
SecureCon – a
conference for
security experts.

初始身份验证后, AS 向 User 发出 Ticket-Granting Ticket
Optional (Step 6 / 7)
• 验证服务票证 PAC (VERIFY-PAC)
• 目标服务与 KDC 交叉验证 PAC 以验证用户信息
• 由于性能原因,通常不活跃
• Application Server Response (AP-REP)
• 用户可以在步骤 5 (相互认证)中请求对目标服务进行认证
• 服务使用会话密钥对时间戳进行加密,会话密钥应该只有用户
和服务知道,并发回给用户进行验证
Kerberos Attack Vectors in a Nutshell
Kerberoasting (TGSRoasting)
• 离线密码猜测您从网络或内存中获取的票证 .
ASREProasting
• 针对禁用(默认 = 打开)预身份验证的用户进行离线密码猜测
Pass-the-Ticket
• 类似 PTH 但是使用的是票证,仍然不知道所需的明文密码
Silver Ticket
• 针对单个服务的假票。 在一台主机上模拟任何用户
Golden Ticket
• 针对 DC 的假票。 模拟域中所有主机上的任何用户
Delegation
• 针对一位或多位房东故意伪造门票。 用一句话解释太复杂 - 稍后会详细介绍
Kerberoasting (TGSroasting)
Kerberoasting 最适合服务帐户
• 没有人敢动他们,所以他们很少更改密码,而且密码由于年龄而经常变坏
Kerberoasting 通常不能应用于随机用户,因为用户对象默认没有
SPN
如果预认证被禁用,攻击者可以为目标用
户请求 TGT ,并对票证中的加密材料进行
离线密码猜测攻击 (hashcat -m 18200)
这意味着您可以针对该帐户(或在该帐户的上下文中运行的应用程序)模拟任何帐户
Ticket
Silver Ticket
Example
泄露 krbtgt 帐户的密码并针对域中的任何主机冒充任何用户
Example
• 攻击者可以访问 DC 上的 AD 数据库并获取 krbtgt-hash
• 攻击者现在可以为域管理员创建一个有效的 TGT (500)
• 由于有效的 TGT ,攻击者可以使用正常程序为任何主体请求服务票证
• 因此,攻击者可以以域管理员身份访问任何域成员
Delegation
Delegation 允许主体(通常是应用程序或服务器)代表另一个主体(通常是用户)进行
操作
一言以蔽之,分为三种
• 无约束
• 约束
• 基于资源的约束 ( 由于时间限制,我们不会涵盖这个 )
Unconstrained Delegation
User01 针对计算机 SRV01 进行身份验证,该计算机已启用无约束
委派并请求该计算机的服务票证
域控制器放置一份使用副本
用户将服务票发送到计算机
唯一的例外是账户
• 标记为敏感的委派
• “Protected Users” 组的成员
Microsoft 建议保护任何启用无约束委派的主机,就像保护 DC 一样
Unconstrained Delegation
它可以为用户和计算机对象启用
由于无约束委派在很多情况下可能过于无约束,微软实施了约束委
派,以允许对委派过程进行更多控制
约束委托包含两个特性
• S4U2Proxy
• S4U2Self
出站配置经典约束委派(在允许委派的主体上)
Constrained Delegation / S4U2Proxy
User01 针对启用了约束委派的计算机 SRV01 进行身份验证,
并为该计算机请求服务票证
S4U2Proxy
Constrained Delegation / S4U2Self
“ 协议转换” 究竟是什么意思 ?
• 调用 S4U2Self 的主机基本上从身份验证服务向其自身请求随机用户的服务票证
• 然后主机使用这个服务票作为 S4U2Proxy 进程的输入
但是, DC 无法验证用户是否真的首先针对主机进行
了身份验证(!)
Constrained Delegation / S4U2Self
Since users might authenticate via many different protocols other than Kerberos
(e.g. web form, basic, ntlm,…) the S4U2Self allows a so called protocol transition
S4U2Proxy/S4U2Self 由两个属性控制
ACEs 将主体与访问权限相匹配,并允许或拒绝访问
http://www.selfadsi.de/deep-inside/ad-security-descriptors.htm#ACEInheritedTypeGUID
Access Control in Active Directory
• 复杂的访问权限允许进一步限制对某个属性或一组属性的访问。
• 这些属性由字段“ object type/object ace type” 定义
• 复杂权限的一个例子是“ Send-As” 权限
http://www.selfadsi.de/deep-inside/ad-security-descriptors.htm#ACEInheritedTypeGUID
ACL-based vectors
根据您可以访问的对象类型,可以使用不同的技术
• User: 重置用户密码或应用定向 kerberoasting
• Computer: 使用 RBCD 获取管理员权限
• Group Policy: 部署登录脚本,安装服务 ... 无限可能 ;-)
Neo4j 图数据
库
用于直接数据库访问的
Powershell 库
Bloodhound.exe (UI)
Sharphound
Windows 桌面应用程序(基于
压缩的 JSON Bloodhound User
bloodhound 的 C# 数据收集 Electron 的单页 .JS )
器 文件
练习 5: ACL-
based attacks
持久性描述了一种让攻击者在更长的时间范围内保持其访问权限和获
得的特权的方法
从攻击者的角度来看,一个很好的持久化方法
• 不容易被系统管理员 / 安全团队撤销或识别
• 提供对环境的长期访问( 6 个月或更长时间)
ACL-backdoors
对高特权组的写访问权限,这允许攻击者根据需要将自己添加到组中 / 从组中删除
对组策略对象的写访问权限,允许攻击者在受影响的计算机对象上将代码作为系统运
行
• 对计算机对象的写访问权限,允许攻击者通过基于资源的约束委派获得该计算机的
管理员权限
DCSync
攻击者可以访问域中所有帐户的密码哈希值,并可以使用其他技术
(例如 Pass-the-Hash/Overpass-the-Hash )来模拟它们