freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

如何检测Pass-the-Hash攻击?
2019-03-20 13:00:22

横向渗透技术是攻击者用来渗透目标网络,获取凭据和数据特权访问的最常见方法之一。在最近发现的勒索软件(如Samsam和Ryuk)中,就说明了这一点。

最近我们研究了如何通过蜜罐检测pass-the-hash攻击,在研究检测此类攻击的最有效方法时,我发现了其它几种有趣的方法。我认为非常有必要对它们进行测试,并进一步的研究pass-the-hash行为。

本文我将教大家如何使用本机Windows事件日志检测pass-the-hash,以及一些关于如何实现的实用建议。在这里我不会讨论有关什么是pass-the-hash的问题,如果你愿意你可以阅读这篇文章以及观看它的演示视频

基线正常事件

Pass-the-Hash依赖于NTLM身份验证。为了可靠地创建NTLM身份验证,我使用Sqlcmd实用程序通过其IP地址连接到Microsoft服务器。此命令将为SQL数据库生成NTLM身份验证:

Sqlcmd –S [IP ADDRESS]

在查看如何检测pass-the-hash攻击之前,让我们先来获取执行NTLM登录活动时通常会生成的事件基线。要从我的PC工作站执行此操作,我将首先使用管理用户的实际密码启动一个新的命令提示符:

如何检测Pass-the-Hash攻击?

现在,在新的命令提示符下,我将使用Sqlcmd连接到SQL主机,并运行SELECT SYSTEM_USER命令查看我被认证为的用户:

如何检测Pass-the-Hash攻击?

很好,一切正常!现在让我们看看生成的日志。

工作站日志

在我的本地工作站上我看到以下事件。

4648事件:试图使用显式凭据登录(A logon was attempted usingexplicit credentials)

如何检测Pass-the-Hash攻击?

4624事件:成功登录帐户(An account was successfully logged on)

4624事件显示登录类型为2,这意味着交互式登录。这符合我使用runas的方式,我以交互方式输入凭据。

如何检测Pass-the-Hash攻击?

4672事件:分配给新的登录特权

由于我使用的Franklin Bluth帐户是一个管理帐户,因此会记录4672显示正在分配的权限。这是跟踪管理帐户活动的非常实用的方法。

如何检测Pass-the-Hash攻击?

目标服务器日志

在我的SQL服务器上我看到以下事件:

4624事件:成功登录帐户(An account was successfully logged on)

现在,在SQL Server上你会看到4624事件,此事件的登录类型为3,即网络登录。

如何检测Pass-the-Hash攻击?

更重要的是,这表明使用的身份验证包( Authentication Package)是NTLM。也证实了我们正在使用此方法执行NTLM身份验证。

如何检测Pass-the-Hash攻击?

我们还将看到4672事件,因为我们利用的用户帐户是一个特权帐户。

域控日志

在域控制器上,我将看到用户Franklin Bluth被验证的迹象。在本例中,我将看到Kerberos和NTLM身份验证。首先发生Kerberos身份验证,这是Active Directory的默认身份验证方式。这将生成两个事件:

4768事件:Kerberos 身份验证票证 (TGT) 请求

如何检测Pass-the-Hash攻击?

以上显示了我们模拟的用户对域控制器的TGT请求。

4769事件:Kerberos 服务票证请求

一旦我们有了TGT,我们就会为我们模拟用户的主机请求TGS。有了这个,我们的用户Franklin现在可以与PC交互并启动命令提示符。

如何检测Pass-the-Hash攻击?

4776事件:域控试图验证帐户凭据

4776事件特定于NTLM,并将在最后。 当我们使用强制NTLM身份验证的Sqlcmd执行命令时会发生这种情况。

如何检测Pass-the-Hash攻击?

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

源主机目标主机域控制器
4648事件:试图使用显式凭据登录4624 – 帐户已成功登录。登录类型为3,NTLM4768 – Kerberos 身份验证票证 (TGT) 请求。
4624 - 帐户已成功登录。登录类型为24672 – 分配给新的登录特权。4769 – Kerberos 服务票证请求。
4672 – 分配给新的登录特权。 4776 – 计算机试图验证帐户的凭据。

现在,让我们来看看我们在Pass-the-Hash时看到的内容。

Pass-the-Hash 事件

为了执行pass-the-hash测试,我们将做同样的练习,只是这次我们将使用mimikatz和pass the hash命令,而不是使用runas作为用户启动进程。

我可以使用mimikatz命令,从内存中轻松获取用户Franklin的NTLM哈希值:

获取哈希后,我将使用以下命令执行pass-the-hash攻击:

sekurlsa::logonpasswords
Sekurlsa::pth /user:Franklin.Bluth /ntlm:[ntlm] /domain:jefflab.local

这将打开一个新的命令窗口,如果我使用相同的Sqlcmd命令连接到我的SQL Server的IP地址,你可以看到我现在被验证为Franklin Bluth:

如何检测Pass-the-Hash攻击?

那么,让我们看看在执行pass-the-hash之后会生成什么事件:

工作站日志

在我的本地工作站上,我看到了事件4648,4624和4672与我正在进行合法的NTLM身份验证相同,但有一些关键的区别。

首先,4624事件的登录类型为9。这是一种NewCredential登录类型,是识别pass-the-hash的非常有用的方法。这是由安全研究人员确定的,我在我的测试中再现了它。

如何检测Pass-the-Hash攻击?

登录类型9非常罕见。但是,我能够生成一些运行使用模拟的应用程序的误报。关键的主要区别是登录进程对于pass-the-hash(来自我的测试)始终是“seclogo”,所以你可以过滤掉它以减少误报率。你可以在这里看到我能够让StealthAUDIT生成Logon Type 9事件,但它使用了Advapi登录进程。

如何检测Pass-the-Hash攻击?

另外,我注意到了4672事件的不同之处。此前,这确定了我模拟帐户Franklin Bluth的特权登录。这将为我登录到我的工作站的用户注册。

如何检测Pass-the-Hash攻击?

除此之外,SQL服务器上的日志是相同的。在域控制器上,关键区别在于你不会看到Kerberos身份验证。但是,这不是检测pass-the-hash的可靠方法,例如源自非受信任域的身份验证也会发生这种情况。

以下是我们在执行hash-hash时所看到的内容摘要。

源主机目标主机域控制器
4648事件:试图使用显式凭据登录4624 – 帐户已成功登录。登录类型为3,NTLM474776 – 计算机试图验证帐户的凭据。
4624 - 帐户已成功登录。 (Logon type = 9 Logon Process = Seclogo)4672 – 分配给新的登录特权。 
4672 – 分配给新的登录特权。 (登录用户,而不是模拟用户) 

Sysmon

为了最终检测pass-the-hash我使用了Sysmon,这有助于监视进程访问事件。我们在蜜罐检测中使用了它,你可以阅读这篇文章了解如何对它进行设置

当发生pass-the-hash时,你将看到事件ID 10显示从Mimikatz或你选择使用的pass-the-hash工具访问LSASS进程。

如何检测Pass-the-Hash攻击?

构建 Pass-the-Hash 检测

现在,我们已经查看了所有有关pass-the-hash攻击的证据,构建检测pass the hash攻击的最简单方法是查找:

你工作站上的4624个事件

Logon Type = 9

Authentication Package = Negotiate

Logon Process = seclogo

LSASS进程访问关联Sysmon 10事件

通过自定义事件日志过滤器,当这两件事同时发生时,你可以很容易地看到你网络上的pass-the-hash活动!

16image-18.png

以下是一个自定义事件过滤器,可用于显示特定信息。

<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>

希望通过本文的学习,能让你掌握学到如何通过事件日志检测pass-the-hash攻击。这需要在所有端点上启用日志记录。为了更简单地检测使用更高级技术的pass-the-hash攻击,你可能需要借助第三方威胁检测产品,如StealthDEFEND

在下一篇有关横向渗透的文章中,我将介绍pass-the-ticket的攻击及相关检测方法。欢迎大家阅读!谢谢!

参考文献

在撰写这篇文章时,我对该主题进行了大量的研究。以下内容可进一步的为你提供,有关如何理解和检测pass-the-hash的更多信息:

www.cyberark.com/threat-research-blog/detecting-pass-the-hash-with-windows-event-viewer/

https://www.optiv.com/blog/pass-the-hash

https://cyberwardog.blogspot.com/2017/04/chronicles-of-threat-hunter-hunting-for.html

jblog.javelin-networks.com/blog/detecting-pass-ticket-pass-hash-attack-using-simple-wmi-commands/

silentbreaksecurity.com/windows-events-sysmon-elk-part-2/

https://www.sans.org/cyber-security-summit/archives/file/summit-archive-1536265369.pdf

*参考来源:stealthbits,FB小编secist编译,转载请注明来自FreeBuf.COM

# pass-the-hash
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者