攻击 EDR 第二部分
本帖最后由 kitty 于 2023-12-21 10:51 编辑英文原文:https://her0ness.github.io/2023-09-14-Attacking-an-EDR-Part-2/
一、介绍
继续我们上次的研究,我们探索了 EDR 解决方案的攻击面,STRANGETRINITY。上次重点关注识别 EDR 配置中的排除项,这些排除项使我们能够执行其他方式无法执行的操作。这一次,我们的重点将放在 EDR 代理与其租户之间的沟通渠道上。
对于那些不熟悉通用 EDR 架构的人来说,在大多数情况下,将部署在系统上的代理最终需要与集中式租户进行通信,通常这样做是因为 EDR 代理需要:
[*]从集中租户获取策略并应用新策略
[*]将遥测数据发送回来
这个组件特别重要,任何干扰或篡改都可能产生毁灭性的后果。正如上次所做的那样,我们将从制定一个假设开始,该假设将在本博文的其余部分得到验证。
在这种情况下,正如本节中预先宣布的那样,我们的假设如下:
处于有利网络位置的攻击者是否能够拦截和篡改 EDR 客户端 - 服务器通信?如果是这样,会造成什么危害?
二、漏洞
一般来说,为了拦截和篡改从一台主机到另一台主机的网络通信,必须满足以下条件之一:
[*]与受害者主机位于同一本地子网中,还可以利用 TLS 通信中的漏洞来拦截加密流量。这是不太可能发生的情况,因为我们很少 (如果有的话) 遇到类似的情况。
[*]在受害主机上有了立足点,这可能需要管理权限来修改网络配置或以某种方式转移特权进程 (在本例中为 EDR) 的流量。
第二种情况是最现实的情况,假设获得了主机的管理访问权限,并且以某种方式想要:
[*]篡改解决方案来执行恶意指令
[*]阻碍 EDR 的功能并阻止其执行其应执行的操作
命令执行总是很有趣,但是,我们也意识到管理访问与 EDR 解除之间的界限也非常相关,因为供应商似乎担心管理员用户能够在未经集中租户批准的情况下卸载其软件。在我们看来,随着为这次研究冲刺分配的时间,这个目标更容易实现,而且我们过去与该供应商的经验表明,该组件中的错误可能会给我们带来可观的回报。
对于不熟悉这些概念的读者来说,EDR 归根结底是像许多其他软件一样的软件。这意味着它们需要以某种方式安装,并且在某些时候需要卸载。在早期,可以使用与删除任何其他类型的已安装程序相同的命令从主机中删除 EDR。不久前发布的卸载 CrowdStrike 的原子测试证明了这是可能的。没过多久,攻击者就开始意识到这是一个东西,并将其实施到他们的武器库中。此外,出现了一整类旨在阻止防御产品功能的攻击,现在很常见的是采用多种策略来实现这一目标,从 BAT 脚本到利用易受攻击的驱动程序。另一方面,供应商开始实施一类通常被称为 "防篡改" 的功能,以防止任何未经授权的程序阻止防御软件的运行。 MITRE 在 ATT&CK 项目中一些此类知识:削弱防御:禁用或修改工具,子技术 T1562.001。对于许多 IT 人员来说,这个边界似乎很愚蠢,在我们担任顾问期间,我们多次被告知:"这是不可能的情况,我们不会向用户提供管理访问权限"。 尽管这是一个公平的声明,但证据再次比信念和偏见更重要,因为有无数的威胁情报报告记录了攻击者如何利用有效凭证、利用面向互联网的资产等等来最终达到这种境地;甚至不考虑在大多数组织中通过滥用 Active Directory 功能来提升权限是多么微不足道的事情,这一点往往是一个非常有效的反论点,几乎无可争议。整个段落本质上是重申这一概念,即该边界被认为很重要,并且理应如此。
一般来说,为了更改某些内容的配置,需要能够首先读取它 (或者在最坏的情况下,通过与特定组件交互来凭经验确定更改),本节的其余部分将描述如何提取 EDR 的配置。
三、提取配置
技术活动首先对产品暴露的攻击面进行彻底侦察,首先分析是否有任何 COM 服务器已注册。对我们来说幸运的是,这个假设被证明是正确的,EDR 实例化了两个 COM 类,我们将其称为 COMTRINITY_A 和 COMTRINITY_B 。
在仔细检查这些类之后,对它们公开的方法进行了分析,目的是检测是否存在可以利用的对我们有利的功能。不幸的是,由于 ACL 级别应用的限制,许多方法最终无法使用,仅允许属于 NT SERVICE\\STRANGETRINITYService 解决方案的虚拟服务帐户使用它们。
然而,我们设法发现了一个例外,管理员组中的每个用户部分都可以访问我们称为 StrangeTrinityAgentStatus() 的特定方法。
调用该方法会返回代理的状态、启用的安全功能以及远程租户的 URL。
以下是内容示例:
{
"agent-unique-id": "8fb4b3fc-4576-11ee-be56-0242ac120002",
"agent-last-checkin": "2020-02-12",
"tenant-url": "https://tenant-management.strangetrinity.com",
"anti-tampering": "TRUE",
"installed-site": "site123456",
"agent-version": "2.0",
"some-other-random-params": "foobar"
}
从上面的代码片段可以看出,存在一个名为 "anti-tampering" 的字段。这强化了我们的假设,即设置可以通过某种方式进行配置。此外,由于这是一项研究工作而不是黑盒测试,因此使用 EDR 的云租户来验证这一点。
对 EDR 基于 Web 的功能的非常简短的探索表明,确实可以从云控制台禁用防篡改功能。接下来的步骤是拦截从 EDR 代理到租户的通信,尝试对通信协议进行逆向工程,并最终尝试手动触发防篡改功能的解除。
四、通信拦截
对我们来说幸运的是,从代理到租户的通信是使用 HTTPS 协议完成的,这使我们能够依赖一套非常完善的工具进行测试。由于发现流量是使用普通 HTTPS 加密的 (已使用 Wireshark 验证),因此我们的想法是在主机上安装 rogue CA 并执行 SSL 检查和流量操纵。这是企业一直使用的一种非常常见的技术来监控网络流量。大多数供应商依靠在用户端点上安装受信任的 CA 来允许 SSL 拦截。为简单起见,攻击是使用拦截代理 (例如 BurpSuite 或 Zed Attack Proxy) 执行的,显然,没有必要强调所有这些都可以轻松地武器化,而无需安装额外的软件。
采取的设置步骤如下:
[*]在 hosts 文件中添加一个新条目,将管理租户的 DNS 记录解析为 localhost 地址
[*]在端口 443 上启动代理,启用隐形代理
[*]等待代理签入
关于如何配置 Burp 这个特定场景的更好解释可以在这里找到:Invisible proxying - PortSwigger。使用不可见代理是必要的,因为 EDR 代理不支持代理。
几秒钟后,代理签入并通过 REST API 向管理租户发送一堆 HTTP 请求。
使用的通信机制是典型的客户端-服务器轮询架构,EDR 传感器定期回调以请求租户更新,同时发送定期遥测数据,这与企业级命令和控制类似。
作为响应,它收到另一个包含附加设置和配置列表的 JSON。
"config-data": {
"sendingData": [
"sent.data"
],
"some": "some",
"other": "other",
"params": "params",
"engineData":{
"os.data" : "data",
"status.data" : "data",
"behavioural.data" : "data",
"reputation.data" : "data",
"exploit.data" : "data",
}
"agent-unique-id": "8fb4b3fc-4576-11ee-be56-0242ac120002",
"threat-hash": "hash",
"scanner-module": "behavioural",
"anti-tampering": "TRUE",
"installed-site": "site123456",
"agent-version": "2.0",
"agent-logging-event": "true",
"kernel-protection": "true",
"some-other-random-params": "foobar"
}
现在剩下的就是篡改请求,通过代理手动修改参数设置,将 anti-tampering 字段设置为 false 。
如前所述,防篡改功能通常包括保护 EDR 软件及其组件免遭未经授权的修改的措施。这可能涉及代码完整性检查、PPL 级别保护、敏感数据加密以及防止未经授权更改配置设置的控制等技术。防篡改功能的目标是确保 EDR 解决方案保持运行并抵御可能试图损害其功能的攻击。
此时,再次获取代理的配置以确认我们的操作是否有任何影响。令我们非常惊讶的是,如此小的更改有效地禁用了防篡改功能,这甚至反映在动态检索的配置中。
作为最终测试,我们生成了一个高度完整性的命令提示符,成功地停止了产品的多个组件。还修改了注册表项,确保在下次重新启动时,该解决方案将被彻底击败。为此,我们主要依靠用于停止服务的 sc.exe 二进制文件和用于暂停正在运行的进程的其他实用程序。
五、PoC
以下 Powershell 代码用于检索代理的配置:
$clsid = New-Object Guid “{GUID}”
$type = ::GetTypeFromCLSID($clsid)
$object = ::CreateInstance($type)
$object.StrangeTrinityAgentStatus()**
该披露还包括自定义 HTTPs 代理的代码,但考虑到使用 BurpSuite 等工具可以获得相同的效果,发布不会给这项研究带来任何价值。
六、结束
从分析中我们可以推断,租户和代理之间的沟通构成了任何 EDR 解决方案的关键方面。这种通信不仅允许从端点收集遥测数据并将其传输到集中式云以进一步分析,而且还可以快速实施需要在整个环境中级联的配置更改。
从攻击者的角度来看,拦截和任意修改这些参数的能力无疑可以提供战术和操作优势。这使他们能够获得足够的时间窗口来执行攻击后操作,而不会触发解决方案的警报,并随后快速恢复通信,使环境恢复到正常状态。事实上,通过篡改通信通道可以发现各种 Bug。据推测,该特定组件的开发没有适当地进行威胁建模,也没有进行适当的测试。
话虽如此,与本系列第 1 部分中所做的类似,供应商积极回应了披露并应用了补丁,以便执行相同的攻击不再是小事。
页:
[1]