读书笔记2
《基于数据科学的恶意软件分析》
4.利用恶意软件网络识别攻击活动
4.1 节点和边
分析时,可以把单独的恶意软件文件定义为节点,讲感兴趣的关系(共享代码和网络行为)定义为边。
边有一个很重要的属性是权重,权重越大,两个点之间的关联性越强。
4.2 二分网络
所有节点可以划分为两个分区,每个分区内部不包含内部连接。
4.3 恶意软件网络可视化
当节点过多时,会有失真问题。可使用力导向布局算法
代码:
模块导入的时候出现了很多问题…为了不浪费时间决定掠过这一张的代码
5. 共享代码分析
也称相似性分析,通过估计它们共享的预编译源代码的百分比来分析比较两个恶意软件的样本。(不同于比较外部属性)
用这种方法可以知道新的样本和之前检查过的样本相似度高不高。如果很高,那很有可能是同一批作案团伙
5.1 通过特征提取对样本进行比较(我学习的重点)
在比较二进制文件共享代码之前,我们要对恶意软件样本进行“特征袋”(bag of features)提取
对于不同的恶意软件样本,我们可能不仅仅想要比较它们的共享行为,还要对他们的表现行为顺序进行比较(行为序列)
5.1.1 N-gram拓展特征包
指在某个较大时间序列中的一个特定长度N的事件子序列,通过滑动窗口操作。
e.g (1,2,3,4,5,6,7)被转换成五个长度为3的子序列:
(1,2,3)(2,3,4)(3,4,5)(4,5,6)(5,6,7)
5.1.2 使用Jaccard系数量化相似性
得到特征袋以后,需要度量两个特征袋之间的相似性程度。
5.2 使用相似性矩阵评价恶意软件共享代码
5.2.1 基于指令序列
即比较两个恶意软件的X86汇编指令
step1 反汇编
step2 使用N-gram提取指令序列(若N设置过大,会导致样本序列很难匹配)
step3 计算指令序列计算样本之间的Jaccard系数
局限
- 如果恶意软件被加壳,只有在执行样本让它自己解包后,它的大部分指令才会被显示出来。若不对恶意软件进行解包,这种方法可能收效不佳。
- 不同编译器形成的不同编译指令不同。
5.2.2 基于字符串的相似性
通过提取样本中所有连续的可打印字符序列来计算相似性。
优势
解决了编译器问题,编译器一般规则下不会对字符串进行转换。
5.2.3 基于导入地址表(DLL)的相似性
优势
即使恶意软件作者重新排序了指令,混淆了二进制文件的初始化数据部分等,他们也可能保留了完全相同的导入声明
5.2.4 基于API动态调用的相似性
优势
即使恶意软件被极度混淆或加壳,只要他们来自相同的代码或彼此借用代码,它们也会倾向于在沙箱虚拟机中执行类似的操作序列。
局限
一些样本检测到了沙箱,会立刻退出执行