189 8069 5689

如何检测Pass-the-Hash攻击

这篇文章将为大家详细讲解有关如何检测Pass-the-Hash攻击,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联建站长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为寿阳企业提供专业的网站建设、成都网站制作寿阳网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

横向渗透技术是攻击者用来渗透目标网络,获取凭据和数据特权访问的最常见方法之一。在最近发现的勒索软件(如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活动!

如何检测Pass-the-Hash攻击

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


   *[System[(EventID='4624')]
      and
     EventData[Data[@Name='LogonType']='9']
      and
     EventData[Data[@Name='LogonProcessName']='seclogo']
     and
     EventData[Data[@Name='AuthenticationPackageName']='Negotiate']
     ]
     
  
  *[System[(EventID=10)]]
    and
    *[EventData[Data[@Name='GrantedAccess'] and (Data='0x1010' or Data='0x1038')]]

  

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

关于如何检测Pass-the-Hash攻击就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


本文标题:如何检测Pass-the-Hash攻击
链接分享:http://cdxtjz.com/article/gcscdo.html

其他资讯