针对文章《Password Filter DLL在渗透测试中的应用》中wyzzoo的回复,提醒注意高版本系统上考虑的问题,地址如下:
https://github.com/3gstudent/feedback/issues/13#issuecomment-371694931
于是我对这部分内容进行研究,整理成文
本文将要介绍以下内容:
参考官方文档:
Windows8.1系统开始,为LSA提供了额外的保护,以防止由未受保护的进程读取内存和代码注入
要求加载到LSA的任何插件都使用Microsoft签名进行数字签名
具体的说,数字签名指的是catalog签名,签名需要满足WHQL认证
参考资料:
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/whql-release-signature
关于catalog签名有过文章介绍:《CAT文件数字签名使用技巧》
测试系统: Win8.1 x64
Win8.1或者更新的系统
注册表位置HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe
,新建DWORD项AuditLevel
,值为00000008
对应cmd命令如下:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe" /v "AuditLevel" /t REG_DWORD /d "00000008" /f
查看日志Event 3065和Event 3066
Event 3065:此事件记录代码完整性检查确定进程(通常是lsass.exe)试图加载不符合共享段的安全要求的特定驱动程序。但是,由于设置了系统策略,图像被允许加载。
Event 3066:此事件记录代码完整性检查确定进程(通常是lsass.exe)试图加载不符合Microsoft签名级别要求的特定驱动程序。但是,由于设置了系统策略,图像被允许加载。
位置:Applications and Services Logs\Microsoft\Windows\CodeIntegrity
能够记录不符合条件的dll,但并未阻止加载dll,如下图
通过命令行查询日志Event 3065和Event 3066:
获取日志分类列表:
wevtutil el >1.txt
找到CodeIntegrity
对应的为Microsoft-Windows-CodeIntegrity/Operational
查找Event 3065和Event 3066:
wevtutil qe Microsoft-Windows-CodeIntegrity/Operational /rd:true /f:text /q:"*[system/eventid=3065 and 3066]"
如下图
补充:
删除日志CodeIntegrity:
wevtutil cl "Microsoft-Windows-CodeIntegrity/Operational"
一个Password Filter DLL的利用思路——利用Long UNC文件名欺骗实现DLL的“隐藏”
具体隐藏细节可参考文章《Catalog签名伪造——Long UNC文件名欺骗》
%windir%\system32\
下lsass.exe进程默认加载scecli.dll,所以选择将dll伪装成scecli.dll
命令行:
type Win32Project3.dll > "\\?\C:\windows\system32\scecli.dll "
注:
scecli.dll名称后面有一个空格
命令行:
dir /x scecli*.dll
获得短文件名SCECLI~1.DLL
,如下图
读取键值:
REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Notification Packages"
添加dll:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Notification Packages" /t REG_MULTI_SZ /d "scecli\0SCECLI~1.DLL" /f
使用Process Explorer查看lsass进程加载的dll
显示加载两个同样的scecli.dll,具体属性存在差别,如下图
Event 3066成功检测,如下图
1、为Password Filter DLL添加一个伪造的微软Authenticode签名,并且修改证书验证机制使其生效,仍无法绕过Additional LSA Protection的监控,因为Password Filter DLL需要合法的catalog签名,而不是Authenticode签名
2、自己为Password Filter DLL制作一个catalog签名并将其添加到系统的安全编录数据库中,仍无法绕过Additional LSA Protection的监控
本文介绍了配置Additional LSA Protection监控Password Filter DLL的方法和检测效果,如果Password Filter DLL未获得合法的catalog签名,系统能绕成功检测,但默认不会阻止加载