DataCon大数据安全分析比赛冠军思路分享

DataCon大数据安全分析比赛冠军思路分享

赛题简介

本届比赛的指导单位为,2019中国国际大数据产业博览会组委会&贵州省公安厅;主办单位为北京奇安信科技有限公司(360企业安全)&清华大学,随着大数据和人工智能时代的到来,催生了很多新的安全技术方法,包括人工智能、机器学习、可视化分析等,这些技术方法有别于传统的安全检测等技术,此次比赛与攻防演练实战结合,重点考察选手利用这些新的技术方法对不同场景下的安全问题进行恶意流量分析、恶意代码分析、追踪溯源的能力。通过比赛丰富提升攻防演练的维度和价值,持续提升参赛者的安全能力和实战经验,有效培养选拔大数据安全人才。此次比赛有三个方向供参赛选手选择:1、DNS恶意流量检测2、恶意代码行为检测3、攻击源与攻击者分析。附上赛题地址DataCon大数据安全分析比赛

比赛排名

我选择的方向为恶意代码行为检测,该方向下又设有两个题目,题目一为恶意代码识别、题目二为恶意代码家族聚类,最后成绩为线上积分榜综合排名第一名,线下决赛冠军,详情参考比赛完整排行榜,相关代码见code

题目一恶意代码识别的解题思路

该问题下官方给出的训练集有20000个白样本和10000个黑样本,测试集为15000个,样本总量为20G左右。每一个样本的格式为xml文档,文档截图如下:

可以看出该文档记录了某软件的执行动作序列,包括了返回值、调用时间、调用的进程号、调用的API名字等信息。该问题的目的就是预测测试集中的xml文档代表的是黑样本还是白样本,简单讲就是一个二分类问题。

特征工程

如上图所示,通过抽取黑白样本中每个xml文件的api_name字段,然后通过统计分析出相关字段在黑白样本中出现的频率差异和存在差异,除了比较了api_name字段还抽取了call_pid、ret_value、exInfo_value字段进行统计分析。

在对call_pid字段的分析过程中我发现了一个有趣的现象,只要程序调用了pid为1244的进程,那么该程序一定是恶意软件;后续细分后还发现当程序调用了pid 为1396的进程时,如果特征出现的次数为254、256、257、258、259、262时必为正常程序。

exinfos字段代表的是原始程序执行过程中的额外程序调用信息,主观上讲该字段肯定是有助于区分出恶意程序和正常程序的,在统计分析阶段发现exinfos字段中如果特征reg出现的次数大于等于2 又或者特征add出现的次数大于等于6时,该程序必为恶意程序。

ret_value这个字段在比赛中并没发现什么特别有用的信息,也有可能后期在处理该字段时花的时间比较少,都在调整模型所以针对该字段做的特征比较少。

以上统计分析的结果表明黑白样本中这些字段不管是出现的频率还是字段名称的种类都有较为显著的差异,因此我的特征工程大致可以归纳为下图:

模型的构建

对于最后预测的模型则采用的是多模型融合策略,融合的规则是Stacking,完整流程见下图:

在比赛的过程中对Stacking的过程进行了一些微调,因为对于分类问题来说,如果所有测试集中的Predict取平均值的话可能会出现小数而不是离散的label值,为了和训练集中的Predict格式趋同,故取测试集中的五次Predict出现频率最多的label值为测试集最终的Predict,通过这样微调线上得分大概会比正常的Stacking模型提升0.2左右。

题目二恶意代码家族聚类的解题思路

该问题下官方给出的数据集全为恶意样本,数量为60000个xml文档,样本总量稍大于50G。每一个xml文档与题目一类似,这里不再赘述,该问题的目的是对这60000个恶意样本进行家族聚类,简单讲就是无监督聚类而且类别数未知。特征工程与第一题相同,只是在做TFIDF的过程中设置了最大特征数为100000,然后拼接所有特征后采取了SVD降维处理,最后降维到3000维,但是这60000x3000的数据矩阵还是很难探究其内在的模式,华罗庚先生就曾经说过,数无形时少直觉,型少数时难入微!如果能可视化这些数据,看看到底有多少个类别,那样就可以用K-means算法进行聚类了。遵循这个思路使用T-SNE算法对这60000x3000的数据进行处理(如果你对T-SNE算法不熟悉的话可以看我之前的文章高维数据可视化之t-SNE算法 ),可视化结果如下图所示:

通过这一步你大概就知道了恶意代码家族的类别非常多,后续只需要带入不同的算法进行测试比较即可,我测试了所有常见的聚类算法比如K-means、DBSCAN、层次聚类、谱聚类等,最后发现还是传统的K-means算法效果最好。这里贴出一张我在测试K-means算法对应不同clusters的对比图:

老实讲对于这一题的排名多少还是有点遗憾的,本来占据了榜首几天的,后面尝试其他算法耽搁了两天,分数并没有上升,现在想来如果一直用不同的cluster测试下去结果可能会更好。

思考

比赛结束后我突然有一个奇思妙想,之前所做的特征工程大都是围绕着文本数据的某些特定字段进行的,信息利用的并不全面,如果换一种思路把xml格式的文件用二进制读取后再转化成图片,这样就可以使用卷积神经网络等一系列的方法了,恶意代码识别问题也就转化为图片分类这一经典问题了,如果能够融合文本特征和图片特征那么我猜想分类准确率可能会进一步提升。

编辑于 2019-06-02

文章被以下专栏收录