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