导语:Mimikatz在内网渗透测试中发挥着至关重要的作用,它能够以明文形式从内存中提取明文密码,我们通过几种方法来防御Mimikatz攻击。
简单介绍Mimikatz攻击
Mimikatz在内网渗透测试中发挥着至关重要的作用,主要是因为它能够以明文形式从内存中提取明文密码。 众所周知,攻击者在他们的渗透中大量使用Mimikatz, 尽管微软推出了安全补丁,但是在较旧的操作系统(如Windows 2008 Server)中Mimikatz还是仍然有效,所以在很多情况下它可能导致横向移动和域权限提升。 值得注意的是,如果Mimikatz是从本地管理员等权限执行的,则它只能导出用户凭据和密码哈希值。下面通过几种方法来防御Mimikatz攻击:
Debug权限设置
根据Microsoft的调试权限确定哪些用户可以将调试器附加到任何进程或内核。默认情况下,此权限授予本地管理员。然而,除非他是系统进程,否则本地管理员极不可能需要此权限。
本地管理员–调试权限
在默认安装的Windows Server 2016系统中,未定义调试权限的组策略,这意味着只有本地管理员具有此权限。
调试权限–组策略
从攻击者的角度来看,可以通过使用Mimikatz以下命令执行此检查:
检查调试权限
Mimikatz需要此权限,因为它要与LSASS进程交互。 因此,将此权限仅设置为需要这权限的特定用户或组,并将其从本地管理员中删除是非常重要。 可以通过将策略定义为不包含任何用户或组来禁用SeDebugPrivilege。
Group Policy Management Editor -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment -> Debug programs -> Define these policy settings:
禁用SeDebugPrivilege
Mimikatz-禁用调试权限
WDigest
WDigest协议是在WindowsXP中被引入的,旨在与HTTP协议一起用于身份认证。默认情况下,Microsoft在多个版本的Windows(Windows XP-Windows 8.0和Windows Server 2003-Windows Server 2012)中启用了此协议,这意味着纯文本密码存储在LSASS(本地安全授权子系统服务)进程中。 Mimikatz可以与LSASS交互,允许攻击者通过以下命令检索这些凭据:
sekurlsa::wdigest
Mimikatz — WDigest
Microsoft在Windows8.1,Windows 10,Windows Server 2012 R2和Windows Server 2016系统中默认禁用此协议。但是,如果您的组织使用较旧的操作系统(如Windows 7和Windows Server 2008等),Microsoft已发布了一个补丁(KB2871997),允许管理员启用或禁用WDigest协议。打完补丁后,建议验证是否已经从注册表中禁用WDigest。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest
WDigest-禁用
Negotiate和UseLogonCredential注册表项值应设置为0可以完全禁用此协议。 应该注意的是,在较新的操作系统(Windows Server 2016,Windows 10等)中,UseLogonCredential注册表项不存在。 当然,具有本地管理员权限的攻击者可以修改注册表以启用WDigest并获取凭据,因为Dave Kennedy在他的博客中对此进行了大量解释。 因此,如果在禁用此协议后将这些值设置为1,则表明存在攻击。 应该不断监视注册表修改,以便在早期阶段获得警报并捕获威胁。
如果我们禁用此协议,攻击者尝试从WDigest检索纯文本凭据将失败:
Mimikatz-WDigest已禁用
LSA保护
本地安全权限服务(LSASS)验证用户是否进行本地和远程登录,并实施本地安全策略。 Windows 8.1及更高版本的系统中,Microsoft为LSA提供了额外的保护,以防止不受信任的进程读取内存或代码注入。Windows 8.1之前的系统,攻击者可以执行Mimikatz命令来与LSA交互并检索存储在LSA内存中的明文密码。
sekurlsa::logonPasswords
Mimikatz-与LSA交互
建议Windows Server 2012R2和Windows 8.1之前的系统应启用LSA保护,以防止Mimikatz访问LSASS进程的特定内存位置获取明文密码。可以通过创建注册表项RunAsPPL并设置其值为1来启用此保护。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA
LSA保护已启用
在启用了LSA保护的系统中,攻击者将收到以下错误:
Mimikatz-LSA保护
受限制的管理模式
Microsoft在WindowsServer 2012 R2中引入了一项额外的安全功能,可以有效的防止本地管理员的纯文本凭据在RDP会话期间存储在LSASS中。即使LSA保护可以阻止Mimikatz检索凭证,但建议在攻击者禁用LSA保护的情况下使用此安全功能作为额外的安全保护。
应在以下位置创建“DisableRestrictedAdmin”注册表项并且设置为0,这样可以通过网络RDP会话请求管理员登陆系统。 此外,创建“DisableRestrictedAdminOutboundCreds”注册表项值为1,可以禁止管理员执行RDP的系统内部的网络身份验证。 缺少此注册表项,管理员可以导出凭据。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa
已启用受限制的管理模式
需要在域中强制执行“对远程服务器的凭据限制委派”策略,以确保所有出站RDP会话都使用“RestrictedAdmin”模式,因此才不会泄露凭据。
组策略限制凭证授权
需要使用“Require Restricted Admin”设置启用该策略。
启用受限制的管理员–限制凭证授权
强制执行此策略后,管理员可以远程RDP到所需注册表权限的工作站和服务器,以便控制Windows运行一些程序。
运行–受限制的管理模式切换
或者直接从命令提示符执行它。
命令提示符–受限制的管理模式切换
对于Windows 2012 R2和Windows 8.1之前的旧操作系统,此选项是Microsoft补丁的一部分KB2871997。
凭证缓存
如果域控制器不可用,Windows将检查已缓存的最后一个密码哈希值,以便使用系统对用户进行身份验证。 这些密码哈希值缓存在以下注册表设置中:
HKEY_LOCAL_MACHINE\SECURITY\Cache
如果执行Mimikatz以下命令,可以检索这些哈希值:
lsadump::cache
默认情况下,Windows会缓存最后10个密码哈希值。 建议通过将以下安全设置来防止密码的本地缓存,将其值设置为0。
Computer Configuration -> Windows Settings -> Local Policy -> Security Options -> Interactive Logon: Number of previous logons to cache -> 0
交互式登录–不缓存登录
攻击者尝试使用Mimikatz检索这些密码哈希将失败:
Credential Caching禁用后Mimikatz出错
受保护的用户组
WindowsServer 2012及更高版本中的Microsoft引入了一个名为“Protected Users”的新安全组。 此组使域管理员能够保护本地管理员等有权限的用户,因为属于该组的任何帐户只能通过Kerberos对域进行身份验证。 这将有助于防止NTLS密码哈希值或LSAS中的纯文本凭据泄露给敏感帐户,这些帐户通常是攻击者的目标。
可以在“Active Directory用户和计算机”中找到“Protected Users”安全组。
ActiveDirectory-受保护的用户安全组
成为此安全组一部分的帐户将在身份验证方面自动归入Kerberos策略,默认情况下配置如下:
Kerberos默认策略
或者,可以通过执行以下PowerShell命令将帐户添加到“受保护的用户”组中:
Add-ADGroupMember –Identity 'Protected Users' –Members Jane
通过PowerShell添加受保护的用户组帐户
通过安装Microsoft的补丁KB2871997,WindowsServer 2008等较旧的操作系统可以拥有此安全组。
结论
通过使用有效的端点解决方案与AppLocker等应用程序白名单相结合来防止恶意的可执行文件,执行一些PowerShell命令和cmd命令,还可以加固安全性。即使网络攻击者已经实现绕过这些控制,执行注册表修改,以便充分利用Mimikatz进行凭证获取,在此过程中将会生成许多事件,管理员应该监视某些注册表项,这有助于检测攻击行为