利用python搭建威胁情报平台

(1)前言(废话)

在nuke的推动下,安全威胁情报早已在安全圈尽人皆知,安全威胁情报联盟微信群也非常热闹,讨论不断,收获良多。

废话不多说了,出于工作需要,要对安全事件或可疑日志进行溯源或分析,经常需要查询IP地址、邮件、域名、手机号、身份证号、各种ID、等各种信息,之前的方法是通过google、duckduckgo等搜索引擎、ipip.net、virustotal、virusbook、各种passive dns查询、社工库、各种开源威胁情报feed等各种渠道来对实现对目标对象掌握更多数据,并逐步挖掘出更多信息。各种库、API查询起来不是太方便,就想把这些在分析过程中用到的情报源整合起来,在一个统一平台上查询,并可以进行关联分析。由于是个人大部分业余零散时间弄,所以也是边做边思考,边调整,很多技术也是刚刚入门,所以架构、性能、易用啥的就不用说了,考虑不多,更多的出发点是学习和把想法做出来。

安全威胁情报源

了解安全威胁情报有一段时间了,也一直在思考情报源的问题,也有一些想法,不过都不是一个人能干的事,先看看有哪些类情报并免费可查询的(目的不同,对安全威胁情报源的需求和使用方法将会不同):

IP/passive dns/sample等:首选virustotal了,有web界面可以查询,有API可以调用,为了方便,我用了public key 查询API,每分钟4次查询限制,自己用也算够了。对比了下virusbook,结果信息还是有些差别的,这块其实可以做多源查询,整合输出,查询其他各种免费API来整合输出结果(精力有限,就只做了virustotal的)。

工具/Exploitkit之类的:这个其实是要收集起来做特征的,工作量太大,暂时可以做的是先自动化收集exploitdb之类的。

身份相关信息查询:在分析过程中可能会逐步收集到一些身份相关信息,可以一些API查询来获得进一步信息,比如身份证号查询、电话号码所属地、收集所属地、手机号注册网站等等。百度上有些免费API可以查询。

社工库、各种可能记录攻击者相关身份信息、行为信息、关系信息等系统:这部分太敏感了,但对掌握攻击者信息非常有用。

平台搭建

个人精力有限,只实现了前面1、2、3的部分功能。整个平台采用了如下相关技术(选型更多出于学习目的):

·语言:后台python、前台javascript、html

·Web相关框架:flask、JQuery、d3.js、bootstrap、echarts

·数据库:Elasticsearch

IP信誉库的收集和查询feed,选了一个相对合适的列表,他们将feeds放到了github上,挨个下载即可,因为是blocklist,里面包含了大量的无用数据,如不可抵达IP等等,清除了这部分数据,还有些属于blacklist的数亿条IP的大表,也没有下载。有些feed里的IP是网段的形式,为了查询,还需要转换为IP在入库(比较笨,没仔细思索查询算法)es,具体就不说了,写了一个update程序,定期download feed然后按每个feed为一个doc保存到es里,数据量大的feed保存会出错,内存消耗急剧上升,后来将大的feed又按20万ip分割了下就没出问题了。这里要说的是,feed比较坑,更新的feed并不是全新的,会新增一部分,删除一部分,我当前是根据版本save的,大大的浪费了存储空间,数据多了查询也会很慢,因为历史数据实际也有很大用处,后面需要去重处理,按版本和时间储存新数据。实际一次更新存储的数据量大约几千万。echart里的玫瑰图,直观展示ip的基本属性。

这个列表的遗憾就是少了具体信息,只有分类了,鼠标点到分类上可以显示具体feed来源信息。

2.IP/passive dns/sample,这里只做了通过IP查询域名、通过域名查询IP、相关url、子域名等等信息。此处通过virustotal的Public key查询API。

IP查域名为例:

)返回相关url信息

)解析到此IP的域名信息

查询域名解析历史

子域名信息

表格方式不便于分析,通过力导向图来梳理域名/ip的关系(这里可以不断扩展,域名/ip/email等等)

这里只做了域名/ip相关连查询,数据依然来自VT的API。

D3.js实现的力导向图,之前使用arbor.js实现,数据量稍大,浏览器就崩溃了。D3.js数据量稍大还好,不过效果就打折扣了,实际可视化展示/分析,对于大数据量需要细化展示效果或者行驶,否则就没意义了。数据量太多,根本无法分析。对于数据量大的,可以进行关键词filter、时间轴区间filter等手段。其实利用VT的API这里还能将样本等信息进行关联,精力有限就没有实现了。

IP地理位置信息:地理位置信息就简单了,直接调用API,处理结果展示即可。随便输个IP地址,查询结果:

IP地理位置信息:地理位置信息就简单了,直接调用API,处理结果展示即可。随便输个IP地址,查询结果:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180104G05RF500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券