首先,让我们对这种攻击有一个高层次的概述。 Pass-the-hash 是一种技术,攻击者在获得本地管理员权限之后,通过这种技术从被入侵的工作站或服务器上的内存中捕获 NT (LM) 哈希。 使用这些被盗用的凭据,他们可以代表受到威胁的用户打开一个新的身份验证会话,以后还可以这样做。 使用 PsExec、 WinRM、 RDP 等按照该用户的侧向移动。
对于 Pass-the-Hash 攻击并没有真正的修复,因为它利用了 SSO (Single-Sign On)协议。 任何使用 SSO 的系统都容易受到类似的攻击,比如 PtH。 因为大多数组织都使用活动目录作为其身份服务,而 AD 将 SSO 作为其主要特性。这意味着许多组织必须处理这个问题,否则,它们就不能很好地抵御“传递哈希”攻击。
SSO 是一个身份验证过程,允许用户使用一组凭据登录,以访问网络上的资源,而无需再次输入密码。
假设你以用户 Bob (DBA)的身份登录,并希望访问 SQL 服务器上的 SQL 数据库。 而不是再次输入你的密码。 你只需要点击“连接”。
按下连接按钮后。 你已经进入并且可以访问所有被监听的 SQL 数据库。
你不必再次键入密码的原因是,因为 Windows 将你的凭据缓存在内存中,以提供 SSO 体验。
这也是为什么你不能完全防止哈希传递攻击,因为这意味着你必须干掉单点登录。 然而,因为很难防止这种攻击,这并不意味着你对此无能为力。 事实上,微软已经在这方面提供了很多指导,可以减轻这种攻击。
凭证存取 -T1003
在攻击者可以执行传递哈希攻击之前。首先需要获得凭证,并且所有凭据都存储在 LSASS 进程内存中,因此每次用户登录时,他或她的凭证被缓存在内存中,以提供我们前面讨论过的 SSO 体验。 当用户登录到一台机器时,无论是通过 RDP 本地登录,还是通过 Runas 在另一个帐户下执行操作,凭证都会被缓存。
下面是一个示例,其中我们从 WINDOWS2012 机器上的内存中提取凭据。
现在让我们假设我们已经设法欺骗 Alice 登录到我们已经入侵的机器上,那么会发生什么呢?
因为Alice已经登录了我们的跳板机器。 她的凭据已经丢失,这意味着我们现在可以从内存中提取凭据并开始模拟 Alice 以代表她访问资源。
哈希传递 – T1705
我们现在已经从 Alice 那里获得了凭据,因此我们现在可以开始执行 哈希传递攻击以模拟她并代表她访问所有资源。
现在,由于 Alice 可以访问 FILESERVER,我们可以作为用户 Alice 横向移动到这个服务器。
由于我们对 FILESERVER 拥有完全的管理特权,现在我们也可以将凭据转储到这台服务器上。
现在我们已经设法从 Bob 那里获得了凭据,因为他最近登录了这个服务器。 Bob 是域管理员,所以如果我们模仿Bob。 我们可以接触到任何东西。
与前面一样,我们现在要执行哈希传递攻击来模拟 Bob 并代表他访问资源。