作者:广州大学 loom战队

比赛排名

这是我第二次参加DataCon比赛了,去年有幸获得恶意行为分析赛道的冠军,加上今年赛程紧而且实习工作也比较忙,所以综合考虑今年选择的赛道为方向五:恶意代码分析,该方向分为综合初赛(初赛和附加赛,初赛成绩占0.2,附加赛成绩占0.8)、复赛、决赛答辩四个阶段,最后取得的成绩为综合初赛排名第一,复赛排名第三,获得该方向季军。相关代码见code

解题思路

冬奥会期间各类体育赛事一票难求,暗网中出现了很多高价倒卖门票的不法行为,一度使得虚拟货币市场交易十分火爆,挖矿型恶意代码的数量也呈爆发式增长,不少个人用户、企业用户受到感染,沦为免费矿工。为对抗挖矿木马,需要针对近期互联网上流行的恶意软件进行深入分析,研究并设计挖矿型恶意代码的检测方法,保卫广大用户的财产安全!恶意代码分析赛道官方给出的训练集有4000个白样本和2000个黑样本(挖矿代码),测试集为6000个,每一个样本的格式为损坏的PE文件。其实我的解题思路和代码实现方案可以说都极其的简单,但简单的步骤都分析的很详细。

特征工程

img

因为官方给出的数据为损坏的PE文件,故不能使用一些成熟的PE解析工具提取特征,故仅仅把PE文件当作一种二进制文件看待!通过以二进制字节码的形式读取文件,然后再解码成字符串,期望黑白样本中的字符串分布存在一些显著特征。

img

从上面图中可以分析出一些简单的结论,黑白样本中的字符串不论是种类上还是数量上确实存在一些差异,这也初步的验证了我的猜想,字节码直接解码成字符串这一操作可能有效,接下来就是详细分析黑白样本字符串分布情况。

img

在详细分析阶段发现,黑样本包含网络、系统、读写文件之类的字符串偏多;白样本包含成功、本地、注册等相关的字符串偏多。到这里可以得出一个很重要的结论,黑白样本中字符串的分布情况存在显著差异!因此我的特征工程为

img

为了验证上述特征工程的有效性,使用t-SNE算法可视化特征矩阵

img

从图中可以看出,本方案的特征工程基本上使得所有的数据点呈现两个类簇,这说明该特征工程十分有效,而且就算主办方没有给出数据的标签,本方案也能使用无监督的聚类算法使得数据分为两个类簇,换句话说如果要解决原始问题可以把有监督学习转化为无监督学习,这一点我觉得是比较兴奋的。

算法的设计与结果展示

因为特征工程已经做的比较好了,所以对于模型的选择上不用过于纠结,选择一个比较擅长的模型即可,我这里选择了XGBoost模型。

img

因为主办方给出的数据才6000,训练样本还是比较小的,在本地实验的过程中发现,使用不同的随机种子,auc值在千分位点抖动的比较厉害。

img

XGBoost模型以拟合残差为目的,所以在训练样本量比较小的情况下容易导致方差较大,根据方差偏差均衡理论,为了解决抖动这个问题,选择采用Bagging集成学习来减小方差,期望达到方差偏差均衡。

img

Bagging的主要思想就是,从训练数据集里随机抽取样本,用抽取到的样本训练模型,通过所有模型一起投票来确定最终的预测值。

img

从提交结果的得分情况来看,前7次提交使用的都是单模型,也同样占据着排行榜第一,最后一次提交使用的是集成模型的结果,可以发现得分进一步的提升。

方案小结

  1. 特征工程简单,普适性很强,适用于EXE文件、ELF文件、dll文件等多种恶意代码存在的形式;
  2. 模型设计简单,搭配上述特征工程训练、推理速度超快,而且效果良好
img

可改进的方向

img

通过进一步弱化基模型的拟合能力,最后采用集成学习来提升整体模型的泛化能力。

Categories:

Comments are closed