学习二进制数据表示的流行机器学习无监督方法是什么?

逆向工程 二元分析 二进制
2021-06-17 02:59:12

这是一个有点开放式的问题,所以请耐心等待。

无论是您从网络数据包中提取的二进制有效负载,还是您从一些 EPROM 中提取的固件 blob 或直接从物理总线截获的数据 - 这里有人使用机器学习模型来学习数据表示吗?

这里的问题是我们有大量已知长度的二进制数据序列,它具有某种尚未被理解的结构(想想 IP 数据包流)。

假设我们有足够的数据,我们可以以无监督的方式推断数据表示,例如,如果我们在以太网网络上捕获了网络数据包流的 pcap,我们可以推断出以太网标头是什么,它通常后跟诸如 IP 标头之类的东西,然后是 UDP/TCP 标头,最后是一些paylond。

图片

您可以将“分类器”替换为我们现在使用的其他机器学习模型(在这种情况下可能是 RNN-GRU/LSTM)(除了分类,它可能会生成虚假流量等)。但关键是,与常见的 ML 领域(如自然语言处理)不同,我不知道有任何模型可以用来替代手动解析。现在最流行的学习单词在序列上下文中的含义的 NLP 模型是 word2vec,但是有没有类似的东西来表示二进制序列?

PS:我在图像中使用示例只是为了演示问题,这很可能是未知架构的二进制代码、USB 请求块或其他任何东西,重点是它通常是高度结构化的、不透明的和顺序的二进制输入。

我想真正的问题是,有人使用 ML 进行逆向工程吗?如果是这样,您介意分享您的经验吗?

2个回答

推断未知二进制流的结构是一项非常艰巨的任务,我知道只有几次尝试解决:

  1. Pulsar是一个示例项目,但我怀疑它并不真正成熟。
  2. Netzob是另一个项目,它似乎更完整。
  3. Radamsa是第三个项目。看起来比 Pulsar 更完整,并且比两者都更积极维护。

我不相信现有的“机器学习”模型和方法目前能够从统计推断二进制数据的结构信息。您将不得不求助于更基本的统计推断,并且该过程可能应该从头到尾设计,并牢记最终目标(似乎是“恶意分类”)。

现在的大多数方法都没有解决恶意软件分类过程中的协议推理任务(也可以提出一些反对这样做的任何优势的论据)。

与恶意软件分类相比,我会说协议结构推断的任务更难实现,如果这确实是您想要尝试满足的要求,我建议重新评估。

全面披露:我受雇于“下一代 AV”,它利用 ML 进行恶意软件分类,并且过去一直在修补协议推理。

首先,您拥有的离散消息样本越多越好。

其次,一种算法适合所有方法是行不通的。使用小型简单识别器的集合。

第三,它来自记忆,所以从学习特定事物的记忆表示开始,例如 unint32。

第四,这项任务最困难的部分是拥有纯数据。您可以将字符串字节与 int 字节进行比较,但一无所获。如果您有纯字符串字节或纯浮点字节,您将取得进展。