思考:恶意软件的相似度比较

2020/05/19 -
之前在那本《数据科学:恶意软件分析》中看到过。就是说,利用里面的字段什么的,来进行相似度比较,使用了杰西卡系数来判断。不过,我反过来想了想,这些二进制文件真的可以在编译后保持吗?
同样,这些相似度比较的方式还有别的吗?
这个其实就是跟系统调用序列一样。


我刚才冒出来一个想法,就是说那种按照块来对恶意软件进行对比相似的方式。
不知道这种是不是有人做过。感觉其实更像是图的方式。


2020/05/26 -
我就在想,有没有一种算法,就类似度量学习一样,可以训练这个模型,这个模型自己可以训练,让相似得样本相似,但是不相似得拉开呢?

2020/05/28 -
其实再具体看这个文章的时候,我就就感觉有写不对了。因为我思考的这个是说怎么来进行相似度的比较。
这就让我想起了我平时时候的这个聚类问题的思考,我总感觉好像缺了他们之间的关联分析。

这个其实跟我昨天还是前天思考的这个powershell的内容很相似。(我个人感觉就是对于这部分内容的思考比较少导致的)
如果我什么也不思考,我就只单纯的思考这个东西,他是干什么的?
(哦,可能是因为,他书中只是提到这个恶意软件的相似度问题,没有说聚类)

我有点感觉了,就是之前在学习各种聚类或者什么算法的时候,都是用数值型的数据,这种数据在理解上就比较好理解,他们就是数值相似就可以了。但是这里呢,他是要进行恶意软件相似度的比较,他并不是数值型,这就涉及到你需要自己思考,然后将这部分内容给进行问题转化。所以我才会有这种不适应的感觉。或者说,还是这一块比较空白。
也说不好,我就是感觉这个部分,让我心里有些膈应,就是感觉不舒服。
可能是因为他这种是利用只要有的方式,而不是说那种直接数值型的比较。


2020/05/29
我仔细思考了一下, 仿佛有点明白了,这里我的疑惑的原因是,对于这个方面问题的思考一直都没有很深入。然后都是一知半解, 这样的结果就导致,我在看这个问题的时候,本身就是云里雾里。这样就更不可能深入进去思考。
我觉得,还是那句话,我应该把我所知道的,所有的东西都记录下来,然后有了问题注意解决。


在这里,他提出了距离函数应该满足的要求:

  1. 可以返回归一化的数值,一般为0-1,1代表非常完全一致,0代表不相似
  2. 第二个我感觉说法没有意义,就是要计算相似度
  3. 方法能够简单,不复杂,我感觉说的也不是非常明显

基于汇编指令的方法,使用n-gram的方法来测试。只测试.text段的代码,不测试别的
然后提出了一个问题,就是说这些可能导致不同的。

  1. 恶意软件可能加壳了
  2. 不同的编译器,不同的编译器选项都会导致代码不一样
  3. 不同的编程语言,例如C#

这些都算是属于外界的因素。

在获取这个相似度比较之后,可以通过图来可视化他们之间的关系。
这个感觉可以好好学学,比较不错。

他这里为了描述,使用了四种比较方式,都是按照杰西卡系数来进行比较,不过使用的数据源有所不同。
数据源包括直接的汇编语言、导入的库、使用的字符串,使用沙箱运行得到的具体报告。
同时,在可视化相似度的时候,使用了类似混淆矩阵的方式,他这里比较出彩的方式就是,在进行标记的时候,属于同一个病毒家族的样本被归类一起,这样,在进行对比的时候,就会形成一个矩形。类似下图

相似度比较

如果让我弄的时候,我可能不关注这些内容,直接就将样本画上去了。
注意,这里存储这种相似的过程,应该就是使用二维数组这样的数据结构。

然后就介绍了这四种方法的具体结果。
然后比较关键的地方,就是后续的minihash算法的时候。

这里他说的是,minihash是一种近似比较的算法。

来介绍一下动机,现在不管怎么样,如果要进行这个相似度的比较,那么必然要使用两两比较的方法。这种方法在数据量增的时候,就会出现运算量非常大的问题,怎么来降低这个东西是minihash来解决。同时,他的主张就是,使用这种方法,通过牺牲一些精确度,来提高计算性能。
而且,你要注意到,他并不是说减少了这个两两相比的过程,而是通过这种手段,实现了只比较肯定相似的东西。
不过,我这里对这个东西还是不够理解,感觉还是很欠缺。

这里来引用一下原文:

To scale malware similarity comparisons, we need to use randomized comparison approximation algorithms. The basic idea is to allow for some error in our computation of comparisons in exchange for a reduction in computation time. For our purposes, an approximate comparison approach known as minihash serves this purpose beautifully. The minihash method allows us to compute the Jaccard index using approximation to avoid computing similarities between nonsimilar malware samples below some predefined similarity threshold so that we can analyze shared code relationships between millions of samples.

再来看一下他的好处。

The benefit of using minhash instead of literal computation of the Jaccard index is that it's much faster to compute.

通过这里的描述,大致上可以看出来,我这里来说一下我的理解。本来呢,就不是与完全提到这个两两比较的过程。
因为本身他用一定系数来进行比较的时候,越是按照一定的阈值来判断的,那么通过这种方法,如果能够达到这个阈值上的相似度了,就利用这个东西来进行判断。也就是说,其实他本身还是要对最后的哈希值进行比较,也是一个两两比较的过程。
然后,
如果是达到了一定的标准,那么再利用相似度系数进行比较。
意思就是通过这种方式,降低了比较的次数。大致上就是这么一个过程。

不过,我感觉我只是理解了这个东西的大致思路,还是感觉没有完全了解。
同时,我记得我看的那篇论文里面还提到了其他的四种哈希算法方式。
经过这个思考之后,我倒是对这个聚类的算法产生了兴趣,那么他们是怎么工作的,是不是也需要两两比较的过程呢。

我是觉得,应该从根本上来思考思考,就是说,因为数量增加,导致我没有办法解决由于两两相比较导致的大量时间需求。
那么就需要一些解决方案,这里提出的就是,尽可能减少一些,然后让那种肯定不相似的,就直接不比较了。

不过,我还想起来了之前的东西,就是那个类似kd树一样的东西。

我有点那种感觉了,就是这是一个大系统的流程,我这里可能只是一个简答的环节,还有非常多的东西需要添加,并不是说到这里就结束了。

我简单看了她的介绍,感觉还是不够清晰,根本没有吧完整的步骤说明清楚,k-time k-hash,没有说的很明白,不过这里给出的一个结论倒是说,并不是说还要去计算杰西卡系数,而是说, 这里直接用这个minhash数值的比对作为杰西卡系数的比较。
然后这里的话,如果你想使用这个东西来加速的加速的话,就吧他防止到数据库中。估计是排序的过程吧。
我个人感觉,他这里说的并不是非常清楚。总感觉有些不对劲。
首先最大的问题,就是他的这个计算过程,我根本没弄明白,他到底是要计算的是什么,他的示意图中,好像是每个特征计算一次,而并不是说全部的特征一起计算,这也是我很疑惑地地方。

他这里提出的假设或者说,自认为正确的地方,就是在最左边的元素相等的可能性,等于杰西卡系数,就是这样的假设来引发后面的使用过程。

其实说白了,你仔细想想,这个东西不就跟正常的字符串一样,就是要进行比较。
比如说你把这个二进制完全拉平,就变成了一个行向量。
那么为了比较这两个东西你应该怎么办。

我今天看了一下这个《Malware Classification using Locality Sensitive Hashing and Neural Networks》
就是之前说的,比较了多种哈希算法的过程,不知道前面提到的这个minhash是不是也属于这种呢?

不过,就是感觉有些不对劲。这篇硕士论文呢,他是通过将这种hash算法的数值作为特征输入到后续的分类中。这种跟我一直在看的这个minhash好像不太一样。
其实我没有太理解,就是说为什么要使用这种东西作为方法呢。

我仔细思考了一下, 还是觉得就是没有把这个背景完整的理解清楚。然后左一下,右一下看些东西,就导致了记忆的 不连贯性。
然后整体上就是一种不理解的情况。

我觉得,我还是需要明确一下,不要有太多的乱七八糟的想法,这个是关键。
因为你有了太多想法之后,就容易找不到主题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值