基于指纹识别的漏洞扫描实践

百家 作者:滴滴安全应急响应中心 2020-06-02 17:43:54

1、扫描器设计

漏洞扫描器大家都不陌生,几乎是每家公司必备的安全产品。几乎早在快10年前,作为安全乙方,就需要扛着一台极光扫描器,到全国各地去做各种安服。在当时极光扫描器就是一款非常成熟的商业产品了,那么到现在为什么没有出现一款能够通杀的产品,大家还都要一直重复的造轮子呢。我想问题出在两个方面,一是扫描场景复杂,没有一款扫描器能否覆盖所有的场景,而是各有侧重。二是扫描器自身的保密需求,把防御能力完全暴露在外不是一个好主意,最多做到开源扫描框架,poc是万万不能全部开源的。

 --------------------

滴滴建设扫描器也已经好多年,并且去年作为滴滴云安全解决方案,实现了首次商业化输出。如何做扫描器,我比较推崇实用主义的理念,比较看重有利用价值的漏洞,有的扫描器扫完一看,一堆高危全是ssh版本漏洞,报告是好看,但实际利用价值不大(当然,版本漏洞也是有其价值的,我们也有购买商业扫描器,主要用于应付各种合规检查,自家扫描器人家可能不认)。自研的扫描器PoC数量至今也才不到500个。商业化扫描器则不同,没有几千个poc都不好意思说自己是做扫描器的。有时候大而全并不一定好,我在某云光一台vm,就给我推了80多个漏洞,客户要么无法处理,要么形成漏洞免疫,反而容易漏过真正的风险。


自研扫描器架构如下图:

1、 采用C-S架构,服务端分为3部分,WEB界面、交互API、调度控制等。数据存储采用mysql,队列服务redis 。

2、WEB界面主要负责与人的交互,包括资产管理、任务管理、Agent管理、插件管理、漏洞管理等模块。

3、交互API 主要负责与Agent的交互,Agent主动拉取任务并推送扫描结果。生产网、办公网、测试网等公司内部属于不同的安全域,是有网络隔离的,但只要Agent与服务端WEB端口做到单向通信,就能解决一个服务端打通多个扫描安全域的问题。

4、控制调度模块负责 任务调度、维护redis队列、轮询更新任务状态。

5、客户端主要分为指纹识别、spider、WEB扫描、主机扫描四部分。Agent 架构很方便做到横向扩容。

6、web扫描分为两类,一种是基于spider的扫描,Web扫描依赖于spider 爬取的结果,瓶颈在spider,注定效果有限。第二是基于url的扫描。大的公司一般会建设URL库,汇聚来自访问日志,流量镜像、测试agent 三者所采集到的url。

7、主机扫描是基于指纹的扫描,扫描效果就要看插件的质量和数量了。所有基于特征性的扫描都可以放到这里,例如对于discus扫描插件,虽然属于web服务,但应该放到主机扫描这里,因为它的明确的指纹特征,而WEB扫描主要基于URL,大多是针对参数的。

2、指纹识别的实现

今天先谈谈指纹识别吧,最简单的指纹识别方法就是Nmap,它的服务指纹真的很强大,但不适用于大规模的扫描任务,你会发现扫描1-65535个端口实在太慢了。于是拆分成两部分的任务,端口扫描和服务识别,nmap加 -sV选项只负责识别开放端口是什么具体服务。

端口扫描首选要确认是否探活以及扫描范围,例如内网等不大会禁icmp的场景,建议进行ping探活,对于有资产完备且安全性要求较高的场景如外网边界建议不探活直接进行1-65535全端口扫描。

其实最纠结的是扫描方法的选择,我们尝试过nmap、masscan、python、go开发tcp扫描、tcp-syn扫描等,最后的结论是go语言实现的扫描效率最佳。过程就不多说了, 有兴趣的朋友可以参考小伙伴的博客(https://thief.one/2018/05/17/1/)

  --------------------

再说服务识别,世间服务千万种,但大致可以分为web服务和其他服务。非web服务识别主要依赖于nmap,对于少量未识别的,也支持自定义扩展指纹。而对于WEB指纹,主要依赖于自建指纹库,web服务非常规范,http header、title、body、robots.txt等都可以很方便的自定义指纹规则。自建指纹是个逐步积累的过程,在未完善之前,可以依赖于开源的服务如whatsweb,cms规则非常丰富,完善后再逐步淘汰。


3、指纹识别的作用

指纹联动扫描插件

标题为基于指纹识别的漏洞扫描,主要是说扫描条件是由指纹决定的。扫描插件只对匹配到指纹条件的目标进行扫描,编写扫描插件时就要同步check下指纹规则,两者联动更新,这样就可以做到有针对性的扫描效率。有很多漏洞社区收poc,可从未见到有提交相应的指纹规则,这样就会存在一定的gap,  有时候使用简单的默认端口会造成漏扫,有时候又扩大了扫描范围,例如一个wordpress漏洞插件需要对所有http服务进行扫描。有了指纹识别则不同,可以精准的只对wordpress服务发起扫描。

指纹识别漏洞

指纹即漏洞:部分漏洞不需要经过漏洞扫描,直接在指纹识别阶段就筛选出来了。

对于公司外网扫描,有安全规范的公司一般会要求禁止高危端口开放外网,禁止使用高危框架,后台要有双因素等。这些都可以通过指纹识别来探测到。另外常规的主页信息泄露漏洞也可以探测到,如列目录,报错,敏感信息泄露等。

  --------------------

指纹无漏洞:即指纹白名单的概念,以外网为例,我们已知SSO是安全的,那么一旦指纹探测到接入了SSO,就可以打个标签。其他白名单也类似,我们若是已知某个服务是安全的,就不用去反复扫描了。


0day应急响应

有了完备的指纹库,当发生0day漏洞的时候,就能够迅速排查到可能受影响的资产。当然公司可以有两个指纹库,扫描器探测属于黑盒指纹库,还有主机agent采集上来的“白盒”指纹库。


————— End —————

    关于漏洞    

滴滴出行相关漏洞请提交至

https://sec.didichuxing.com/

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接