# Bypass McAfee Application Control--Write&Read Protection

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-12-23T07:24:00Z
Canonical: https://wepostx.com/topics/1259

> 乌云历史资料归档
>
> **原始作者：** 三好学生
> **原始编号：** superkieran-wooyundrops:961
> **原始发布时间：** 2015-12-23 15:24
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 前言

上篇我们成功在McAfee Application Control保护的系统上实现了代码执行，而McAfee Application Control的其他保护功能同样很强大，其中对文件读写操作的拦截很有特色，这一次我们接着试试能不能绕过：D

![原文图片](/media/2016/06/c81673d4c2f591ae3af05ab37809be2a)

# 0x01 简介

当McAfee Application Control开启了文件写入保护和读取保护，可以阻止任何对受保护文件的修改，具体保护细节如图

![原文图片](/media/2016/06/b2cb290ea7a7add360d258ca5f8ae6ea)

简单的说，如果开启了写入保护，那么对文件的任何修改操作都会被阻止并被日志记录。
如果开启了读取保护，那么无法读取受保护文件的内容。
可是深入了解之后，有趣的事情发生了。

# 0x02 配置Write Protection

操作系统：win7x86
首先学习一下如何设置以及使用文件写入保护。
写入保护可以指定文件夹、文件或者是驱动文件
测试使用指定文件夹c：\test\write
里面包含test.txt

### 1.指定保护路径

```text
#!bash sadmin write-protect -i c:\test\write
```

### 2.查看保护路径

```text
#!bash sadmin write-protect -l
```
如图
![原文图片](/media/2016/06/68e3e36eb80f2a802ca3f0f84b19a5d3)

随后我们尝试在c：\test\write下新建文件、删除文件、修改文件，均失败
如图
![原文图片](/media/2016/06/351709fe5ae4c14b542714c111f73361)

![原文图片](/media/2016/06/60a2990b3632ab718cb90f8c79e908e1)

### 3.删除保护路径

```text
#!bash sadmin write-protect -r c:\test\write
```

# 0x03 配置Read Protection

接着测试读取保护
测试使用指定文件夹c：\test\read
下面包含test.txt，里面保存有加密信息
注：
写入保护默认开启，而读取保护默认关闭，所以先要开启读取保护功能

### 1.开启读取保护功能

```text
#!bash sadmin features enable deny-read
```

### 2.指定读取保护路径：

```text
#!bash sadmin read-protect –i c:\test\read
```

### 3.查看读取保护路径：

```text
#!bash sadmin read-protect -l
```
如图
![原文图片](/media/2016/06/42ade3393cd91004961482f1a3e4b631)

尝试读取文件内容，失败，如图
![原文图片](/media/2016/06/990ecb10635c048d034322b033d6ca40)

# 0x04 权限分配漏洞

通过以上的测试可以发现：

- 写入保护阻止用户对文件进行写入操作

- 读取保护阻止用户对文件进行读取操作
但是:
McAfee Application Control会默认设定白名单进程用来为系统进行更新
所以这些进程都具有操作文件的权限
如果你仔细阅读了上一篇文章并能加以思考
那么其中的漏洞也显而易见
如果能够利用白名单进程执行文件读写操作，那么自然能够绕过防护

# 0x05 漏洞利用

利用思路：

- 查找默认白名单进程

- 找到可利用进程

- 使用进程注入

- 操作文件

### 1.查看白名单进程列表
执行

```text
#!bash sadmin updaters list
```
如图
![原文图片](/media/2016/06/c494a853eab46fb896c1ba7b64c2fe7c)

![原文图片](/media/2016/06/f83f278d6f27da1887fda8f6b63a24ce)

![原文图片](/media/2016/06/7bbbff3392e9ac177ef97d4ec19f2eb0)

### 2.找到可被利用进程
以下是我找到的比较通用并能被利用的进程：

- GoogleUpdate.exe

- scsrvc.exe

- spoolsv.exe

### 3.进程注入
选取GoogleUpdate.exe
使用《Powershell tricks::Code Execution & Process Injection》提到的Process Injection-Meterpreter.ps1
可以在powershell的环境下粘贴代码执行
向GoogleUpdate.exe进程注入meterpreter
如图
![原文图片](/media/2016/06/5c0b725b9835f4e5ab0131704109c6fd)

注：
注入系统权限的进程需要管理员权限

如图
![原文图片](/media/2016/06/59452fa4133d59595f19d2618b0187ce)

弹回meterpreter
发现没有直接注入到GoogleUpdate.exe
接着进程注入，如图
![原文图片](/media/2016/06/c1681f8015afab1763b190d70cdacf18)

成功注入到GoogleUpdate.exe，理论上已经有了权限可以操作受保护的文件
我们接着测试，如图
![原文图片](/media/2016/06/82cc0b33ca2c659d2e46b6d420e4d793)

成功修改文件和删除文件
接着测试读取文件，如图
![原文图片](/media/2016/06/3cf3ce9cad4c46dcd23faf93a0d3ede4)

成功读取被保护的内容
注： 通过进程注入获得的权限可以用来执行脚本

# 0x06 补充

### 1.设置密码
McAfee Application Control可对操作设置密码，增强其安全
设置密码：

```text
#!bash sadmin passwd
```
去掉密码：

```text
#!bash sadmin passwd -d
```
密码文件保存在C:\Program Files\McAfee\Solidcore\passwd

### 2.获取密码文件
正常情况下C:\Program Files\McAfee\Solidcore\passwd无法被读取、无法被复制，即使进程注入到白名单进程内也无法实现，如图

![原文图片](/media/2016/06/2ffe1788007e49b69e98256ac771c607)

但是我们依然有办法：D
这里可以借鉴导出域控ntds.dit文件的方法，使用NinjaCopy.ps1
下载链接：
[https://github.com/3gstudent/NinjaCopy](https://github.com/3gstudent/NinjaCopy)
指定路径为：

```text
#!bash Invoke-NinjaCopy -Path "C:\Program Files\McAfee\Solidcore\passwd" -LocalDestination "C:\test\trust\passwd"
```
管理员权限运行NinjaCopy.ps1，成功复制passwd文件
如图
![原文图片](/media/2016/06/025e52fde835874fb33201a813bb0338)

### 3.解析密码文件

![原文图片](/media/2016/06/541b3fcfa86c6891d80606875fda2cab)
 上图为passwd的内容
查看资料得知此处使用的是sha-512加密（mcafee-application-control-product-guide/Page68）
如图
![原文图片](/media/2016/06/7089fe0900282503fa2b5ea703e1f92f)

推断cryptographic salt为88daf0b4-790e-4eae-a926-b08788fbd1cb
在[http://www.convertstring.com/Hash/SHA512](http://www.convertstring.com/Hash/SHA512)验证推断
输入cryptographic salt和明文对比测试
如图
![原文图片](/media/2016/06/1cb35bb730974e979c7590d58bda4aef)

passwd中的内容和我们自己加密的密文相同，判断正确

### 4.信任路径
McAfee Application Control为方便使用，可以指定信任路径，在里面的所有操作均不会被拦截
如果McAfee Application Control未设置密码或者密码被获得，可以建立一个信任路径，里面的操作均不会被拦截
建立：

```text
#!bash sadmin trusted -i c:\test\trusted
```
查看：

```text
#!bash sadmin trusted -l
```
如图程序成功执行
![原文图片](/media/2016/06/ef029932965d9762f0a22b108a8a8f53)

### 5.日志
日志默认被保存在C:\ProgramData\McAfee\Solidcore\Logs
通过进程注入获得的权限可以修改此文件

### 6.防护建议

- 为McAfee Application Control设置强密码

- 禁用powershell

- 禁用hta、js

- 禁用信任路径

- 白名单+黑名单结合使用

# 0x07 小结

“未知攻 焉知防”，即使做到以上几点，我相信依然有绕过的方法：）
本文由三好学生原创并首发于乌云drops，转载请注明

## Replies
