二进制之图论与威胁情报

华盟原创文章投稿奖励计划

*本文作者:GeekOnline,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

什么是网络安全?怎么和非IT人士阐述网络安全的重要性?其实《黑客帝国》已经给我们构建了一个很好的例子,而我在阐述的时候都会举人类社会的例子。计算机中每个软件都像一个个体即人,人都会有自己的属性,比如身份证ID、身高、体重、爱好等,同样每个软件或病毒,也会有一些属性,例如sha1、文件名、文件大小、调用API、行为等。

人会有健康与生病之分或好人坏人之分,生病了就要吃药或去医院检查,坏人的话可能被通缉或被警察抓捕、判刑。同样计算机个体也会有健康或者异常之分,软件也会有非恶意和恶意之分。对于异常的计算机就需要做检查、修理,恶意软件就会有杀毒软件等进行查杀。每一个具像的人组成了庞大的社会,人们生活在社会里,就会有社交,而通过这种关系构建成了巨大的社交网络。而每个软件、硬件个体则构建了更加庞大的网络空间,在这个空间中软件互相通信,产生比人类社会社交更加纷繁的连接。人类生存就会产生社会活动,产生社会活动就要有一定的规范,例如道德、法律等。而软件进行功能实现等也会产生一系列行为,而这些行为也有一些网络安全法来约束。然而相对人类社会,网络空间似乎更加复杂。

人类文明发展了这么长时间,仍然存在很多问题,对与人类个体健康,我们会有食品安全法,我们会定期做检查,会有相关医护人员保障我们的健康。对于你的资产,也会有相关的法律保障。对于城市、交通,部署在城市各个角落视频监控设备保障了24小时的出行安全。诸如种种我们会发现人类社会在创建价值的同时,同时投入巨大人力物力保障各类安全问题。而计算机网络短短几十年时间,是否存在同样或者更糟糕的问题,我们是否已经很好的解决了人类社会也会遇到的问题?

在网络空间中,网络安全人员的角色就如人类社会中的医生、警察、交警等,对于这些职业可能只能从事一种,但作为安全人员有时却身兼多职,不仅要懂计算机原理、二进制分析、网络通信、Web安全等等。故作为一名安全从业者,我们需要掌握这么多东西,而且相比传统行业技术更新迭代又如此快,我们如何从纷繁的信息中抽取更有价值的数据,如何更加高效的发现网络威胁是我们面对的挑战。

如上所述,人与人通过社交产生联系,而网络世界中病毒与病毒之间也会有产生联系,正如社交网络Facebook、Twitter、Weibo、WeChat等将有一定社会关系,诸如家庭、同事、同学、共同爱好人联系在一起,软件也会一些列属性联系在一起。那么怎么构建这些联系呢?图论是组合数学的一分支,与其他的数学分支,如群论、矩阵论、概率论、拓扑学、数值分析等有着密切的联系。对于基础图论来说,它不要求有高深复杂的数学工具,只需要一些集合、二元关系和线性代数等知识,并可用一般的逻辑推理解决若干问题。图论看起来离我们很远,但其实在网络安全中已经大量用于识别僵尸网络、风控、威胁情报等领域。本文就简单的介绍下怎么运用图论知识解决二进制的一些问题。

语言: Python

工具: Spark, Networkx, Neo4j, ssdeep

1.特征提取

上面提及过每个人个体或者病毒个体都有自己的属性,人与人建立连接可能通过多种方式建立联系,但是对于病毒个体,自己不会通过某种方式自动建立关系,需要通过数据的挖掘的方法来实现相关性。对于建立相关性有很多途径,比较有名的是Kill chain,这个模型列出了大量的属性,我们这里只拿相似度来做演示。同样求两个病毒的相似度也有多种方式,例如通过动态跑沙箱得到相关API,通过API分析相似度,或者通过对比两个静态文件函数相识度等等。同样对于求相似度也有多种算法,这里选取比较简单且运用广泛的ssdeep。

如图我们通过两个函数提取了get_features_static_imports、get_feature_static_pef来提取我们想得到的PE静态信息。

二进制之图论与威胁情报

运行以上代码后我们会得到一个JSON文件,即对应于这个文件的特征。

二进制之图论与威胁

如图这是一个PE可执行文件的静态特征。

2.数据加载

由于我们需要大量的数据才能构建比较全面的图谱,通常我们会构建分布式系统,例如使用Hadoop等,在通过MapReduce、Spark等进行数据分析,或者SOC使用splunk、ELK等。这里我采用Spark加载本地JSON数据来做演示。

二进制之图论与威胁情报

3.用Networkx构建威胁情报图谱

通过特征提取工程,我们可以得到每个PE文件的模糊哈希值,在构建两个病毒文件联系的时候,我们可以使用模糊哈希来计算相似度,将相似度大于零的两个病毒样本做关联,建立所谓的社交关系。

二进制之图论与威胁情报

如图,通过函数ssdeep.compare函数得到两个PE文件的相似度,通过判断相似度是否大于零,来建立两个文件是否产生关联,通过函数add_weighted_edges_from来为这个关联做权重。

二进制之图论与威胁情报

通过以上处理我们可以得到我们目录下样本的整个“社交关系”。当数据量比较大的时候,这个图会非常大,数十亿或上百亿等,那我们需要通过其他方式来做数据挖掘。

二进制之图论与威胁情报

这里我们试图找出相识度大于10个节点的PE文件,最终发现子图4存在11个节点,并输出PE文件的sha1值。通过这个简单的例子,我们就可以将我们数据样本进行简单的分类。

二进制之图论与威胁情报

4.用Neo4j构建威胁情报图谱 

同样通过前步特征提取工程,我们通过Spark选取了sha1、ssdeep、peid_signature、pe_imphash等特征作为用Neo4j构建威胁情报图谱的属性。同样通过两个样本的相似度作为联系构建图谱。

二进制之图论与威胁情报

最终生成的效果如下图,从下图我们可以很清晰的看出有很多样本已经自动聚类了,有两个节点的,也有三个、四个、五个等节点的,在右下角我们发现上述我们用代码挖掘11节点簇类的,通过Neo4j客服端似乎更好的做了展示。

二进制之图论与威胁情报

由于我们对每个节点插入了很多属性,所以可以很方便的通过Neo4j中的查询语句得到更多我们想要挖掘的信息。如下图我们想知道Armadillo壳的信息,那我们可以构造以下的查询语句。

二进制之图论与威胁情报

通过查询语句我们得到了以下的样本,其样本都是加了Armadillo壳的。

二进制之图论与威胁情报

以上只是简单的例子,在得到大量的文件特征属性之后,其实我们可以做数理统计、数据挖掘、机器学习等等一系列我们在人类社会应用到相关知识。在构建完威胁情报图谱后我们也可以使用类似Louvain等算法做社区发现,或者构建用户画像、IP画像等等功能。当然很多做威胁情报的厂商已经将这些功能做的比较完备了,并且都实现了图形化。

代码链接地址:

https://github.com/GeekOnlineCode/Code.git

参考与鸣谢:

《图论及其应用 第2版》卜月华、王维凡、吕新忠 编著

《Web安全机器学习入门》 刘焱 编著

*本文作者:GeekOnline,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

本文原创,作者:AlexFrankly,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/187522.html

发表评论