是从网络数据包中提取的二进制有效载荷,还是从某些EPROM中提取的固件blob或直接从物理总线截取的数据-这里的任何人都使用机器学习模型来学习数据表示吗?
这里的问题是,我们有一个已知长度的二进制数据的大序列,这些序列具有某种结构(例如IP流)。
假设我们有足够的数据,我们可以以无监督的方式推导数据表示,例如如果我们对以太网网络上的网络数据包流进行了pcap捕获,则可以推断出什么是以太网报头,通常在其后跟IP报头,UDP / TCP报头以及最后的一些paylond。
<如今,您可以用我们使用那些ML模型(在这种情况下,可能是RNN-GRU / LSTM)使用的其他任何模型替换“分类器”(除分类外,它可能会产生假流量等) 。但是要点是,与自然语言处理之类的常见ML域不同,我不知道有任何模型可以用来代替手动解析。现在,最流行的用于学习单词在序列上下文中含义的NLP模型是word2vec,但是有什么类似的东西来表示二进制序列? ,这很可能是未知架构的二进制代码,USB请求块或其他任何东西,要指出的是它通常是高度结构化,不透明和顺序的二进制输入。
我想真正的问题是,有人使用ML进行逆向工程吗?
如果这样,您介意分享您的经验吗?
#1 楼
推断未知二进制流的结构是一项非常艰巨的任务,据我所知,只有少数尝试解决该问题的方法:怀疑它还不是真的成熟。Netzob是另一个项目,它似乎更完整。与Pulsar相比,它看上去更完整,而且对两者的维护也更积极。您将不得不诉诸更基本的统计推断,并且该过程可能应该从头到尾的设计考虑到最终目标(似乎是“恶意分类”)。不要在恶意软件分类过程中解决协议推理的任务(也可以针对这样做的任何优势提出一些论点)。
与恶意软件分类相比,我要说的是协议结构推断更难实现,我建议您重新评估一下是否确实要满足这个要求。 ML用于恶意软件分类,并且过去一直在修改协议推断。
评论
那就是我一直在寻找的东西,我只是希望有人想出比HMM更好的东西。目前,我已经编写了简单的模糊器,它会生成随机的http数据包,并会测试一些模型以尝试学习底层结构。感谢您的链接。
– Tomas Pruzina
18年4月4日在23:28
您应该看看“ radamsa”。它尝试从您提供的数据中推断出语法,然后根据推断出的语法生成输出。
– joxeankoret
18年6月6日在15:10
#2 楼
首先,离散消息的样本越多越好。其次,一种适合所有方法的算法将行不通。使用小型简单识别器的集合。
第三,它来自内存,因此首先要学习特定事物的内存表示形式,例如unint32。
第四,此任务最困难的部分是纯数据。您可以将字符串字节与int字节进行比较,却无济于事。如果您具有纯字符串字节或纯浮点字节,则将取得进展。
评论
目前,我正在考虑将字节级别的VAE / LSTM作为上半部分。