故障诊断平台在渗透测试中的应用技巧
0x00 前言
近日,Proofpoint的Matthew Mesa和Axel F发现了一种新型钓鱼方式,攻击者将故障排除包(troubleshooting pack)作为邮件附件,欺骗用户运行,隐蔽执行Payload。他们在文章中介绍了攻击者采用的方法和隐藏手段,提示用户对此提高警惕。
文章链接:
本文将站在技术研究的角度,介绍如何开发一个包含payload的故障排除包,并结合攻击思路分析防御方法,希望能帮助大家对这项技术有进一步的认识。
0x01 简介
Windows故障诊断平台:
英文翻译Windows Troubleshooting Platform,缩写为WTP
开发商可基于该平台编写故障排除包(troubleshooting pack),帮助用户解决遇到的PC问题
WTP结构如图
图片引用自https://msdn.microsoft.com/en-us/library/windows/desktop/dd323706(v=vs.85).aspx
简要流程如下:
检查故障排除包的数字签名,如果不可用,直接退出
依次执行检测脚本(detection scripts)、解决脚本(resolution scripts)、验证脚本(verification scripts),尝试解决故障
生成结果报告和调试报告
故障排除包:
由五个组件构成:
故障排除清单(Troubleshooting manifest)
检测脚本(detection scripts)
解决脚本(resolution scripts)
验证脚本(verification scripts)
本地化资源(localized resources)
详情如图
引用自https://msdn.microsoft.com/en-us/library/windows/desktop/dd323706(v=vs.85).aspx
0x02 开发故障排除包
官方开发工具:
TSPDesigner
注:
该工具包含于Windows 7 SDK中
实际测试只有v7.0和v7.1包含此工具
Windows 7 SDK version 7.0需要搭配.NET Framework 3.5 SP1,下载地址如下:
https://www.microsoft.com/en-us/download/details.aspx?id=3138
Windows 7 SDK version 7.1需要搭配.NET Framework 4,下载地址如下:
https://www.microsoft.com/en-us/download/details.aspx?id=8279
TSPDesigner位于默认目录C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\TSPDesigner
下,包含以下内容:
如图
详细开发介绍可参照:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd323712(v=vs.85).aspx
下面实例演示如何通过TSPDesigner生成测试故障排除包
1.设置属性,也就是故障包的第一页
Project Name: testwtp
Project Description: troubleshooting pack test
Privacy URL: https://3gstudent.github.io/
如图
2.添加root cause,点击Add New Root Cause,设置故障信息
Root Cause ID: ServiceIsStopped
Root Cause Name: The service is stopped.
Root Cause Description: The service is stopped.You need enable it.
如图
3.设置Troubleshooter
如图,指定需要提升权限,关闭交互
4.设置Resolver
Resolver Name: StartTheService
Resolver Description: Start the service.
Prompt the User: No
Elevation: Yes
Interactions: No
如图
指定需要提升权限,关闭用户警告,关闭交互
5.设置Verifier
选择No,不需要确定故障被解决
6.设置Scripts
如图
注:
由于在步骤3、4指定了提升权限,所以此处的Troubleshooter Script和Resolver Script已经具有管理员权限
可在此处添加payload
7.设置数字签名
选择Project-Options,找到Code Signing
如图
可选择使用Test Certificate或是指定一个证书
测试默认选择Use Generated Test Certificate
8.生成
选择Build-Build Pack
生成如下文件:
如图
1.
TS_ServiceIsStopped.ps1对应Troubleshooter Script
RS_ServiceIsStopped.ps1对应Resolver Script
注:
查看这两个ps脚本可以发现其中包含的payload
2.
testwtp.diagpkg为清单文件,包含troubleshooting pack中的参数,格式为xml,具体语法可参考:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd323781(v=vs.85).aspx
3.
DiagPackage.cat保存该troubleshooting pack的数字签名
注:
DiagPackage.cat文件中的数字签名可通过双击查看
如图
4.
cab目录下的testwtp.diagcab为封装好的troubleshooting pack,包含以上文件的信息
如图,运行过程中执行payload,弹出管理员权限的cmd.exe
0x03 测试运行故障排除包
将生成的.diagcab文件放到另一个测试系统
报错,如图
这是由于使用的默认Test Certificate在新系统无法被识别,可在TSPDesigner同级目录下找到证书文件TestWindowsTroubleShooting.cer
,安装至受信任的根证书颁发机构,如图
数字签名成功识别,如下图
注:
此处显示的发布者名称对应签名证书使用的颁发者,为TestCertforWindowsTroubleShooting
当然,如果使用一个默认可信的证书,那么该故障排除包默认被信任,可直接运行
点击隐私声明,弹出步骤1中设置的Privacy URL:https://3gstudent.github.io/
如图
至此,成功实现测试故障排除包
0x04 小结
在渗透测试中,使用troubleshooting pack有如下好处:
更加隐蔽,.diagcab文件不常见
更具欺骗性,用户往往对故障排除功能失去警惕
可直接获得管理员权限
内嵌钓鱼页面,可指定隐私声明的链接
防御建议:
微软在一开始就已经注意到了这个问题,所以为troubleshooting pack添加了数字签名验证,所以当遇到troubleshooting pack时(比如某个操作触发了故障修复),首先要对发布者的身份进行判断。
注:
微软提供的troubleshooting pack中发布者名称默认为Microsoft Corporation