通过 Pass-the-Cookie 攻击绕过 MFA
多因素认证(MFA)是提升本地和云端安全性的极佳方式。启用 MFA 后,当用户登录时,他们不仅需要提供用户 ID 和密码,还必须提供另一种认证因素,例如发送到手机的验证码。该过程通过阻止携带被盗用户凭据的对手登录,从而减少攻击面。
然而,MFA 并非网络安全的万能药。特别是,攻击者可以使用 Pass-the-Cookie 攻击,通过利用浏览器 Cookie 来绕过 MFA,并获取对云服务的访问权限。在这篇文章中,我们将探讨该攻击的工作原理,以及防御它的最佳安全实践。
浏览器 Cookie 使 Web 应用能够存储用户认证信息,因此用户可以保持已登录状态,而不必在每次访问网站的新页面时都输入用户名和密码。(这类似于 Kerberos 或 NTLM 认证:会在用户的系统本地保存某个凭据/制品,并用于未来的认证。)
Pass the Cookie 攻击是如何运作的
如果启用了 MFA,用户需要提供额外的身份证明,例如在其移动设备上接受推送通知。用户通过 MFA 后,将为你的 Web 会话创建并保存一个浏览器 Cookie。
尽管 Cookie 简化了用户体验,但它们也带来了一个显而易见的漏洞:如果有人能够提取到正确的浏览器 Cookie,那么他们就可以在另一台系统上、完全独立的 Web 浏览器会话中以其他用户进行身份验证。简而言之,他们可以使用该 Cookie 绕过通过 MFA 的身份验证。(这类似于 Pass the Hash attack 在 Active Directory 中的情况。)
攻击者如何提取浏览器 Cookie。
下面我们以 Google Chrome 浏览器为例,看看攻击者可能如何提取 Cookie。Chrome 会将 Cookie 存储在 SQLite 数据库的以下位置:
%localappdata%GoogleChromeUser DataDefaultCookies
The cookies for a given user are encrypted using keys tied to that user via the Microsoft Data Protection API (DPAPI). To access the cookie database and decrypt the cookies, an adversary can use the following mimikatz command:
dpapi::chrome /in:"%localappdata%GoogleChromeUser DataDefaultCookies" /unprotect
Alternatively, they could execute the following from the command line:
mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%googlechromeUSERDA~1defaultcookies /unprotect" exit
使用任一选项都将提供浏览器 Cookie:
Pass-the-Cookie 攻击场景
下面我们来了解在真实场景中 Pass-the-Cookie 攻击是如何运作的。
假设用户 Tobias 是一名 IT 管理员。Tobias 经常使用的一个 Web 应用程序是 Microsoft Azure 管理门户。由于启用了 MFA,当 Tobias 登录 Azure 时,他必须提供手机设备上身份验证器应用生成的代码,如下所示。
所以,只要没有人偷走他的 iPhone,他的 Azure 凭据应该就很安全,对吧?没那么快。假设 Tobias 点击了网络钓鱼邮件,或其系统通过其他方式被入侵,现在攻击者能够在 Tobias 的用户上下文中执行代码。由于 Tobias 在他的笔记本电脑上并不是管理员,损失应该会被控制住吧?
让我们看看。
步骤 1. 提取 Cookie。
如前所述,要获取 Tobias 的浏览器 Cookie,我们只需在以 Tobias 身份运行时执行以下命令:
mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%googlechromeUSERDA~1defaultcookies /unprotect" exit
在本例中,我们关注的是 Azure 身份验证 Cookie,包括 ESTSAUTH、ESTSAUTHPERSISTENT 和 ESTSAUTHLIGHT。 这些 Cookie 之所以唾手可得,是因为 Tobias 最近一直在使用 Azure:
步骤 2. 传递 Cookie。
看起来似乎是:既然我们不知道 Tobias 的用户 ID 或密码,也无法访问他的移动设备,我们就不能以 Tobias 的身份登录 Azure 这类 Web 应用。
但既然我们已经有了他的 Cookies,我们只需要把它们传到另一个会话中,就能接管 Tobias 的账户。这很容易做到:我们只需在另一台服务器上打开 Chrome,并使用“Inspect(检查)”界面插入一个 Cookie。
2.1. 首先,我们检查被盗的会话:
2.2. 接下来,我们进入 Application > Cookies。如你所见,当前的 Cookies 不包含 ESTSAUTH 或 ESTSAUTHPERSISTENT:“
2.3. 添加 ESTSAUTH 或 ESTSAUTHPERSISTENT Cookie。(如果有 ESTSAUTHPERSISTENT,则优先使用它,因为它是由“Stay Signed In(保持登录)”选项生成的。)
2.4. 刷新页面后,我们已经以 Tobias 身份登录到 Azure 了——不需要 MFA!
降低您的风险
Pass-the-Cookie 攻击之所以是一个严重威胁,原因有几点。首先,Pass-the-Cookie 攻击不需要管理员权限;无论用户在其工作站上是否拥有特权,所有用户都可以访问并读取、解密自己的浏览器 Cookie。其次,攻击者不必知道被入侵账户的用户 ID 或密码,因此攻击只需最少的信息就可能实现。第三,我们甚至在浏览器关闭之后也能够完成 Pass-the Cookie 攻击。
降低 Cookie 被盗风险的一种方法是更频繁地清除用户的 Cookie。不过,这会迫使用户在每次访问某个站点时都需要重新进行身份验证,从而让他们感到沮丧,并可能导致他们为了避免丢失 Cookie 而一直不去关闭浏览器。
更好的策略是实施身份验证监控以及这类威胁检测产品。 Netwrix Threat Manager 可以及时发现以意想不到方式被使用的账户,让您能够迅速终止恶意活动。
常见问题
分享到
滥用 Entra ID 应用权限——工作原理与防御策略
AdminSDHolder 修改——工作原理与防御策略
AS-REP Roasting 攻击:工作原理与防御策略
Hafnium 攻击——工作原理与防御策略
DCSync 攻击解析:对 Active Directory 安全的威胁
理解 Pass-the-Hash(PtH)攻击
什么是 Golden Ticket 攻击?工作原理、检测与防护
gMSA 利用攻击与 Golden gMSA 攻击详解
DCShadow 攻击——工作原理、真实案例与防御策略
ChatGPT 提示注入(prompt injection):了解风险、示例与防范
NTDS.dit 提取攻击详解
Kerberoasting 攻击——工作原理与防御策略
Pass-the-Ticket(传票)攻击解析:风险、示例与防御策略
理解密码喷洒(password spraying)攻击
明文密码提取(Plaintext Password Extraction)解析:风险、示例与防范
Zerologon 漏洞详解:风险、利用方式与缓解措施
勒索软件攻击完整指南
Skeleton Key 攻击:工作原理与检测方法
横向移动(Lateral Movement):它是什么、如何运作及防护措施
中间人(MITM)攻击:它们是什么,以及如何防范
Silver Ticket 攻击
4 种服务账号攻击及防护方法
为什么 PowerShell 对攻击者来说如此受欢迎?
如何防止恶意软件攻击影响您的业务
使用 PowerUpSQL 破坏 SQL Server
什么是 Mousejacking(鼠标劫持)攻击,以及如何防御
使用 Security Support Provider(SSP)窃取凭据
彩虹表攻击:工作原理与防御方法
深入了解密码攻击及其防止方法
LDAP Reconnaissance
什么是凭证填充(Credential Stuffing)?
Golden SAML 攻击终极指南