故障诊断平台在渗透测试中的应用技巧

0x00 前言


近日,Proofpoint的Matthew Mesa和Axel F发现了一种新型钓鱼方式,攻击者将故障排除包(troubleshooting pack)作为邮件附件,欺骗用户运行,隐蔽执行Payload。他们在文章中介绍了攻击者采用的方法和隐藏手段,提示用户对此提高警惕。

文章链接:

https://www.proofpoint.com/us/threat-insight/post/windows-troubleshooting-platform-leveraged-deliver-malware

本文将站在技术研究的角度,介绍如何开发一个包含payload的故障排除包,并结合攻击思路分析防御方法,希望能帮助大家对这项技术有进一步的认识。

0x01 简介


Windows故障诊断平台:

英文翻译Windows Troubleshooting Platform,缩写为WTP

开发商可基于该平台编写故障排除包(troubleshooting pack),帮助用户解决遇到的PC问题

WTP结构如图

Alt text

图片引用自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)

详情如图

Alt text

引用自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下,包含以下内容:

如图

Alt text

详细开发介绍可参照:

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/

如图

Alt text

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.

如图

Alt text

3.设置Troubleshooter

如图,指定需要提升权限,关闭交互

Alt text

4.设置Resolver

Resolver Name: StartTheService

Resolver Description: Start the service.

Prompt the User: No

Elevation: Yes

Interactions: No

如图

Alt text

指定需要提升权限,关闭用户警告,关闭交互

5.设置Verifier

选择No,不需要确定故障被解决

6.设置Scripts

如图

Alt text

注: 由于在步骤3、4指定了提升权限,所以此处的Troubleshooter Script和Resolver Script已经具有管理员权限

可在此处添加payload

7.设置数字签名

选择Project-Options,找到Code Signing

如图

Alt text

可选择使用Test Certificate或是指定一个证书

测试默认选择Use Generated Test Certificate

8.生成

选择Build-Build Pack

生成如下文件:

如图

Alt text

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文件中的数字签名可通过双击查看

如图

Alt text

4.

cab目录下的testwtp.diagcab为封装好的troubleshooting pack,包含以上文件的信息

如图,运行过程中执行payload,弹出管理员权限的cmd.exe

Alt text

0x03 测试运行故障排除包


将生成的.diagcab文件放到另一个测试系统

报错,如图

Alt text

这是由于使用的默认Test Certificate在新系统无法被识别,可在TSPDesigner同级目录下找到证书文件TestWindowsTroubleShooting.cer,安装至受信任的根证书颁发机构,如图

Alt text

数字签名成功识别,如下图

注:

此处显示的发布者名称对应签名证书使用的颁发者,为TestCertforWindowsTroubleShooting

Alt text

当然,如果使用一个默认可信的证书,那么该故障排除包默认被信任,可直接运行

点击隐私声明,弹出步骤1中设置的Privacy URL:https://3gstudent.github.io/

如图

Alt text

至此,成功实现测试故障排除包

0x04 小结


在渗透测试中,使用troubleshooting pack有如下好处:

  • 更加隐蔽,.diagcab文件不常见

  • 更具欺骗性,用户往往对故障排除功能失去警惕

  • 可直接获得管理员权限

  • 内嵌钓鱼页面,可指定隐私声明的链接

防御建议:

微软在一开始就已经注意到了这个问题,所以为troubleshooting pack添加了数字签名验证,所以当遇到troubleshooting pack时(比如某个操作触发了故障修复),首先要对发布者的身份进行判断。

注:

微软提供的troubleshooting pack中发布者名称默认为Microsoft Corporation


LEAVE A REPLY

Written on October 13, 2016