工作来源

CCS 2021

工作背景

在以往的僵尸网络清除行动中,政府首先监控 C&C 服务器证明恶意软件造成社会损失,随后获取法律许可进行定点清除。例如 2020 年微软清除了 TrickBot 在全球的 128 台 C&C 服务器中的 120 台。

  • 被动监测 C&C 服务器的方式,如节点注入,可能无法准确了解僵尸网络的规模并且需要大量的逆向分析工作。
  • 主动监测 C&C 服务器的方式,如渗透测试、域名扣押,通常容易被攻击者察觉。

监测需要保证收集的信息准确、合法而且尽可能地保持隐蔽。最理想的情况下,可以模拟正常 Bot 访问 C&C 服务器。攻击者会通过标准协议控制 Bot,如文件传输、数据存储和命令下发等。但标准协议有可能会提供了对服务器不受限制的访问,这超出了 Bot 包含功能的范围。这样就使得,伪装 Bot 通过协议对 C&C 服务器进行隐蔽监控提供了机会。

工作设计

设计 C3PO 分析恶意软件内存 Image,从中识别过度许可协议、Bot 到 C&C 服务器的身份验证信息(渗透向量),并持续进行 C&C 监控。后续与安全访问服务边缘(SASE)服务提供商 Netskope 合作,研究了 15 年来超过 20 万恶意样本过度许可协议使用的演变,并披露和修复已发现的 C&C 服务器。

自动化测量的四个阶段如下所示:

将恶意软件二进制文件作为输入,在执行时提取内存 Image。通过静态分析识别协议 API 或关键字/命令/Token 的调用点,再利用迭代选择性符号执行(iSSE)进行渗透向量的识别。最后,对 C&C 服务器的监控能力进行识别并进行隐蔽监控。

内存 Image 提取

为了应对加壳与混淆,在正常执行期间通过 Hook 网络 API 获取恶意软件的内存 Image。因为恶意程序一定会调用网络 API 与 C&C 服务器进行交互,并且研究表明加壳程序至少有两层封装,如果提取的时机错误仍然得不到正确的 Image。当 DLL 被加载时,使用 Trampoline 将 Hook 的 API 中的指令替换为自定义代码,将包含执行上下文的内存 Image 写入文件。

过度许可 Bot 识别

确认调用标识符(API、协议关键字或命令等)进行识别。

  • 协议使用低级函数(𝐿𝐿)或者高级内置库函数(𝐻𝐿)来实现。低级函数通常使用原始套接字 API(如 send)和官方协议 Token(如 IRC 协议的 NICK),而高级函数通常使用内置 API。
  • 标准协议可用于文件传输、数据存储以及消息通信。相关的研究工作如下所示:


  • 爬取相应的协议文档或者手动提取协议细节,形成协议标识符的数据库。

C3PO 解析内存 Image 并提取代码页,从而实现导入地址表和导出目录表(IAT 和 EDT)的重建。对代码页构造控制流图(CFG),再通过重构所有重叠块创建组合控制流图(C2FG),保证代码块不重叠。遍历 C2FG 识别所有函数调用点,并将其与重构的 IAT 和 EDT 进行比较获得匹配的 API。

渗透向量识别

C3PO 使用反向切片和迭代选择性符号执行(Iterative Selective Symbolic Execution,iSSE)组合来识别渗透向量。

反向切片

使用先前识别的 API、调用点和 Token 定位身份验证 API,C3PO 从 API 参数执行反向切片。值得注意的是,C3PO 会识别最后写入缓冲区所有字节的所有指令来生成目标指令以确保切片完整。

迭代选择性符号执行

受切片约束,选择性符号执行可以在保持准确性的同时尽可能降低路径爆炸的影响。符号执行到达身份验证 API 时提取参数,如果是具体参数解码为字符串,如果是符号用符号执行迭代探索。

上图显示了 C3PO 针对 Sanny 恶意软件的渗透向量识别步骤。首先从身份验证 API InternetConnect 执行反向切片,对于每个API 参数(例如 lpszServerName、nServerPort、lpszUserName、lpszPassword 等)进行反向切片。查找最后写入数据缓冲区每个字节的每条指令(图中左侧)。再使用这些目标指令,执行反向切片识别数据缓冲区的所有影响操作(图中中部通过 Sanny 的四个函数的蓝线)。使用迭代选择性符号执行遍历每个切片以提取所有参数的渗透向量。对于 Sanny,C3PO 在反向切片中的 4 个函数中的 3 个(图中右侧)提取了服务器主机名、用户名和密码。

C&C 监控

使用相同的方式定位数据泄露(如 HttpSendRequest)和代码执行(如 ShellExecute)的 API 与能力的关系。能力是通过专家分析经验总结的,一共映射了 6 类 16 种(浏览器密码窃取、服务密码窃取、受害者信息、监听/实时监控、文件窃取、代码反射)。


工作准备

C3PO 通过 C++ 和 Python 实现,总计 1.1 万行代码,且为开源(https://cyfi.ece.gatech.edu/)。

  • 利用 Detours 进行内存 Image 提取
  • 利用 angr 以支持二进制分析以及协议识别、反向切片和符号执行的特定应用
  • 利用 AVClass2 标记恶意软件

工作评估

从 2006 年 4 月到 2020 年 6 月间收集的 20 万样本中,确定有 62202 个为过度许可的 Bot,在 8512 个家族中发现 65739 个过度许可协议的使用。平均每个 Bot 包含 7 个 C&C 监控能力。

使用来自 13 个不同家族的 35 个手动逆向分析的 Windows 恶意软件评估 C3PO。

协议识别评估

C3PO 的协议识别如下所示,C3PO 总体识别准确率超过 94%。

当 C3PO 错误识别 Token时会产生误报,以及自定义 C&C 命令可能和标准协议有重合也会导致误报。

C&C 监控能力评估

如下所示,C3PO 正确识别了 100 项 C&C 监控能力,总体准确率超过 94%。

受害者信息提取占比最多(29%),监听/实时监控(27%)、文件窃取(25%)。

其中的部分误报是由于 angr 遇到了问题,如 CFG 生成未解决符号约束或临时变量重用导致反向切片的虚假依赖。

大规模部署

超过 30%(62202 个)恶意软件使用一种或多种过度许可协议。

下图显示了从 2006 年到 2020 年使用的过度许可协议变化趋势。使用过度许可协议的数量总体在增长,且每个 Bot 使用的协议数量也有所增加。

其余的恶意软件仅基于 HTTP 进行 C&C 通信,此前 Peredisci 的研究表明有 75% 的恶意软件通过 HTTP 进行通信。

下图是总览情况:

C3PO 发现 65739 次过度许可协议的使用。

FTP 在所有协议中占主导地位,共计 53687 个,占已识别协议的 81%。15 年来 8512 个恶意软件家族中有 88% 一直使用 FTP。

值得注意的是,Cstealer 恶意软件中使用了 MongoDB,后来又放弃使用,导致出现了单次峰值。

Expiro 是唯一使用 MQTT 协议检测到的恶意软件,在 2015 年归于沉寂,2017 年复苏后不再使用 MQTT 协议。

大规模监控

C3PO 在超过三分之一(62202 个)的 Bot 中识别出 443905 项监控能力,平均每个 Bot 有 7 项能力。受害者信息提取占到 56%,实时监控占 27%,文件泄露占 15%。在 16 种能力中,88% 在 FTP 中、10% 在 IRC 中。

家族排名

Dinwod 恶意软件家族以 9713 个 Bot 排名第一,Dinwod 仅使用 FTP。

前十的家族中有 9 个都使用了 FTP,每个家族最多使用 3 个协议。

加壳

对壳也使用 Ugarte-Pedrero 提出的分类法,一共脱壳 10237 个样本。

毕竟虚拟化加壳在恶意软件中不到 2%,Ⅰ类加壳程序占到 55% 以上。

应用一:Sanny

Sanny 在2013 年的清除行动中存活下来,后来又发现了新的 Sanny 变种。对样本文件进行了逆向工程,发现了新的 FTP API 和登录凭据。

而通过 C3PO 对过度许可协议(本例为 FTP)的监控,可以发现更新的 Sanny C&C 服务器,如下所示。

Sanny 会通过 FTP 泄露受害者所在区域信息、文件和密码(Firefox 和 Microsoft Outlook)。

应用二:Steam

Steam RAT 在 2016 年首次发现,使用 FTP 协议如下所示:

在其 5 个目录的 522 个文件(大约 50 MB)中,27% 与游戏有关,确实是为 Steam 量身定制的。随着传播,这个比例应该会继续增长。

在服务器上有两个文件名以 ssfn 开头的数据文件(Steam 平台的授权文件),从熵值看应该是加密了。

有几个文件以俄文命名,攻击者是说俄文的。还包括一个 JavaScript 文件,包含 XSS 攻击代码,攻击者进一步可能还会有其他攻击行动。

应用三:Deptlock

Deptlock RAT 在 2016 年首次发现,使用 FTP 协议如下所示:

服务器域名 .ko.cr 可能是在韩国,其中有 47 个目录中的 2500 多个文件(大约 640MB) ,在发现的 31 个文件扩展名中,最常见的扩展名是 PNG (44%)、HTML (34%)、TXT (8%) 和 EXE (6%)。

PNG 图片较多是因为 Detplock 通过屏幕截图对失陷主机进行监控。

158 个 EXE 文件和 2 个 BIN 文件中有 7 个包含可疑元数据。样本使用 ASPack v2.12 加壳。

工作思考

工作是遵循道德守则的,只检索正在调查服务的元数据并且不写入数据。这样不仅是道德的,也可以避免像 Mouton vs. VC3 卷入侵权索赔,对安全研究人员也是一种保护。网络安全领域的研究中,尤其是测量类的工作,必须重视隐私保护等道德类的守则。近几年对于此类要求比较严格,相关工作中都对此进行了解释与负责的沟通响应。

利用样本分析得到的凭据,查看 C&C 服务器上的情况是一个常见的操作,本文对其进行了自动化识别与运营。另外,恶意软件使用自定义协议进行 C&C 通信的也很多,这种情况实际上更适合在网络侧进行检测。加密流量越来越多,甚至说流量全密化的趋势是不可逆转的,恶意软件中应用的情况也难言乐观。对加密的恶意流量的识别与检测也是近年来比较热点的议题,感兴趣可以拓展阅读相关内容。