2021年DataFountain恶意软件分析初次提交思路

本文内容是记录之前在做360的DataFountain恶意软件方向比赛时第一次分析和提交采用的分析思路。整体倾向按照以往分析经验构建有价值特征单模型分类,没有采用“广泛提取特征然后交给深度学习模型进行学习,最后通过组合模型修正精度。”的套路。

数据说明

一共包含3个文件

tarin_label.csv 训练集的标签
train.zip 训练数据 5841个asm和无头PE
test.zip 测试数据

赛题数据集包含了来自10个恶意软件家族,10000多个恶意软件的PE文件(No header)和使用IDA Pro生成的asm文件,并将其分为训练集与测试集两部分。

-PE:抹除头部信息的PE文件,将原本PE头数据全部变成连续的0x00。
-ASM: 使用IDA Pro生成的PE源文件对应的.asm文件
-train_label.csv: 标签文件,标记文件所属家族。

采用多分类对数损失函数对结果进行评价。

数据分析

观察数据,训练集包含PE、ASM和train_label三类,测试集只包含PE和ASM数据。PE和ASM是没有处理过的原始数据不是数据集,需要自己建立特征,可选择的维度比较多。train_label说明和标签显示一共需要区分10个家族,标号从0开始,到9结束。

待分析的样本全部为PE文件。根据数据推测asm和无头PE的关系:asm文件是原始的PE经过IDA的引擎分析出来的结果(没有使用高级分析器),然后保存了asm之后,再处理掉了头部的数据形成了bin文件。

抹掉PE头部的意图比较明显,对抗样本动态分析和PE头分析,覆盖内容和长度的不确定性导致基本不可能恢复头部。同时,一些针对前n byte的特征方法不能直接套用。没有了PE头部,一些基于头部分类的特征也没法生成和使用。

不同的家族在数据集中存在数据分布不均匀,训练时需要平衡下权重。

bin文件

  • 暴力破解功能

肉眼观察asm文件,有些样本中是含有字典字符串,应该是这些样本具备暴力破解的功能,大概是类似可自动传播的蠕虫或者挖矿攻击类样本。这里考虑提取特征:字符串的计数向量。

  • 反杀毒软件功能

asm文件的数据中同样有杀毒软件名称的字典,属于比较典型的反杀毒软件功能。

asm文件

  • UPX壳

UPX是一种压缩壳,一般使用的结果是二进制结构发生了变化,并且可能会使字节频率分布应该更加平均。目的是为了躲避特征检测机制,比如YARA的检测。

asm文件里显示的UPX壳没脱掉,文件里的特征会有UPX0、UPX1这样的区段。同时在bin文件的十六进制转ASCII结果里可以看到特征会有UPX!这样的字符串。

测试集有壳大约 1169 个。

  • 函数调用

没有PE头,没办法直接生成imphash,只能看函数的静态地址和call调用信息。

集合去重数量
训练集159
测试集416
测试集&训练集105

同类编译时静态函数地址可能是相似甚至相同的。

特征工程

文件大小

这个特征在解压bin文件后就可以比较明显看到,有些文件集中分布在特定的大小。

字符串特征

程序字符串取词

直接使用strings取字符串生成效果不好,比如段的名称可能被取出来。

精细化提取字符串,对asm文件的特定数据段里的进行了基于正则的ASCII可见字符的取词。 目的主要是取暴力破解时用的字典和硬编码的一些字符串。

SSDEEP

分片模糊哈希是解决二进制文件分类、相似性计算比较等问题有效办法,算法通过对二进制进行分块计算局部模糊哈希,形成最后的字符串。这种算法得出的哈希值可以一定程度抵抗局部的修改,被破坏的PE头的影响也可以被降低。

ssdeep的值本身会根据输入内容长度发生变化。满足一定长度的数据后,ssdeep的值长度就会固定下来。题目给出的样本基本都能满足产出一个长度相对有效的ssdeep值。

处理时,先通过ssdeep对bin文件进行哈希计算,得出块大小和一短一长两个哈希值。

N-gram处理

以一个字符为单位向后滑动窗口的方式取定长字符串的形成特征。对长哈希hash1结果进行比较,测试取的6位定长字符串,给模型观察的内容是公共高频部分的分布。

ssdeep自带的相似性比较也可以使用,或者使用其他字符串相似度比较。

函数调用

提取asm文件中每个函数里的函数静态位置,还取了函数中call的地址的关系,调用call的数量。

是否使用UPX

单独处理是否有UPX作为一个特征,有UPX置1,没有的为0。

模型训练

随机森林

RF应该是比赛中单一模型效果比较好的选择了,使用random_state比不用得分稍微好一些。

自测score结果

0.9965772960638904

根据提交要求,最后导出predict_proba进行提交,最后loss将近0.7。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值