可视化技术|从零开始学习恶意软件聚类可视化


  • 0x00前言
  • 本文章数据集来自Mandiant对某APT组织样本的整理 , 分析结果仅做学习探讨之用 。
    • 0x01
    在本文开始之前 , 我们首先要明白为什么要做恶意样本的聚类分析 。 针对APT活动而言 , 我们需要知道一点 , 单纯的被动防御是没有胜算的 , 必须要学会主动防御 。 什么是主动防御呢?由于APT攻击的特性 , 总是一点点进行渗透 , 不会一下子造成大动静 , 我们要做的就是从其前期的攻击行为中归纳出攻击者的特征、行为 , 才能帮助我们可以进行更好的防御 。 而对恶意软件的聚类分析 , 就是其中不可或缺的一环 。 通过聚类 , 我们可以知道哪些恶意软件是属于同一家族的 , 知道他们可能是同属于某个APT组织等等 , 这样就方便我们之后针对性地防御、溯源 。
    • 那么如何进行恶意软件的聚类分析呢?
    最简单的 , 也是最容易想到的就是通过主机名 。 我们知道 , 被投递的恶意软件都必不可少的一个功能就是将窃取的信息回传到攻击者掌控的主机上 。 一般而言 , 这些回连的主机名都是硬编码在恶意软件中的 。 举个简单的例子 , 我们如果发现有两个恶意软件 , 都会回连到cfxvrdf@231$$%.dd域名(这个域名不常见又毫无规律可言) , 那么在相当大的概率上可以断定这两个软件出自同一拨攻击者之手 。
    根据这一简单的原理 , 接下来我们将分布介绍如何进行基于回连域名的恶意软件聚类可视化分析 。
    • 0x02
    第一步是明确如何从二进制文件中提取出主机名 。
    这里我们使用的是python库pefile从二进制文件中提取可打印的字符串

    可视化技术|从零开始学习恶意软件聚类可视化
    本文插图

    然后使用正则表达式进行匹配 , 从字符串中提取主机名 。
    可视化技术|从零开始学习恶意软件聚类可视化
    本文插图

    提取出主机名之后就需要进行可视化聚类操作了 。
    • 0x03
    第二步开始前 , 我们先来了解什么是二分网络 。
    二分网络 , 是一个所有节点可以划分为两个分区的网络 , 其中任何一个部分都不包含内部连接 。 这种类型的网络可以方便展现恶意软件样本之间的共享属性 。
    可视化技术|从零开始学习恶意软件聚类可视化
    本文插图

    如上所示 , A表示恶意软件 , P表示回连域名 。 上图中可以看到A1有P1域名和P2域名 , A3也有P1和P2域名 , 如果P1和P2还是不常见的较为特殊的形式 , 那么我们就可以在很大程度上认为A1和A3是属于统一家族的 , 可以将它们归类在一起 。
    再进一步看 , 如果从P的角度来看A , P1连到A1 , A3 , P2连到A1 , A3;我们自然也可以将P1 , P2聚类在一起 。
    对照着我们的研究而言 , 我们可以针对域名做聚类 , 也可以针对二进制文件做聚类 , 当然 , 也可以将两者统一在一起 。 如果用画图进行可视化表示的话 , 那么我们就可以画出三张图来 。
    那么问题来了 , 怎么画图呢?
    这里我们使用NetworkX进行画图 。 具体用法很简单 , 这里就用几行简单的代码进行说明 。
    可视化技术|从零开始学习恶意软件聚类可视化
    本文插图

    载入networkx库 , 然后在nodes列表中定义了5个节点 , 在for循环中调用add_node方法添加节点 , 然后调用add_edge方法在hello和word两个节点间添加一条边 。
    最后调用write_dot以dot格式将网络保存 。
    然后我们使用GraphViz对dot文件进行解析 , 将其呈现为png文件 , 命令如下
    可视化技术|从零开始学习恶意软件聚类可视化


    推荐阅读