白帽汇龙专:Web扫描器的架构变迁之路

本文根据龙专老师于第九届中国数据库技术大会(DTCC 2018)的现场演讲《Web扫描器的架构变迁之路》内容整理而成。

讲师介绍:

43531

龙专,白帽汇CTO。

2009年,加入诺赛科技,主导iiscan——全球第一款网站在线扫描平台开发,2011年,加入360,网站安全部门后端核心研发人员;鹰眼产品的技术负责人。2015年,白帽汇公司联合创始人兼CTO。

 

分享大纲

1.背景

2.初代扫描器

3.Web2.0扫描器

4.云端扫描器

5.基于流量分析扫描器

6.全网漏洞专扫

 

正文:

我今天演讲的内容是告诉大家,在出现安全漏洞的时候我们应该使用扫描器这样一个东西来解决安全问题,所以我这个演讲主要是跟大家分享一下,各种不同的Web扫描器架构是一个怎么样变迁的思路。

  image.png

我先简单做个自我介绍,我从2009年到现在一直从事Web扫描器的研发工作,然后目前是白帽汇公司的联合创始人兼CTO,我负责的是FOFA和FOEYE这两款产品。

我今天的分享,主要是分这么几个方面:首先讲一讲安全背景,其次讲一讲五款扫描器的架构变迁之路。

一、背景

  image.png

从安全事件列表,我们可以看到,像这种安全事件:比如信用卡数据泄露、Cloudflare流量泄露、永恒之蓝的勒索病毒和美国的2亿选民数据泄露,其实对于美国来讲,他一共才3亿多的公民,所以2亿选民的泄露情况很大。

关于现状,尤其是互联网公司的现状是什么?运行在互联网上面的业务,大部分是以Web方式提供服务的。假设公司规模还很小的时候,这个Web直接使用CMS系统就完了;如果我是个人博客的话,我就采用论坛或者一个其他的类似于论坛的CMS系统来搭建网站。

而如果公司发展到了一定规模以后,可能会采用开源的框架来编写代码;再发展壮大以后,可能就会自主的研发代码了。进入自主研发这个阶段以后,一般情况下如果不是像BAT3、滴滴和美团点评这种大公司的话,我是不会过多的考虑安全问题的,只有公司上升到一定规模以后才会考虑安全问题。像一个小公司或小的创业公司,它可能编写的这个代码只会考虑:功能已经完成就告一段落了。

由于对于安全性的考虑不足,就会出现很多的安全问题,导致安全漏洞频发。

  image.png

其实有安全漏洞,第一个风险就是你的数据库可能被人偷走,如果我们对安全有一定了解的话,我们经常会听说一个什么什么库被人偷了;这种情况其实很常见,国内国外都会有。

第二种就是被挂后门了,什么是被挂后门了?就是你写的代码有一个安全漏洞,然后黑客可能会通过漏洞进到你的服务器里面;黑客会觉得你的漏洞迟早会补上,在漏洞补上之后黑客为了还能顺利进入你的服务器里面,他可能会在服务器上留一个可以执行命令的小程序,通过外网可以随意连接,这种就是后门。

第三种是比较严重的,就是你们公司的内网被黑客渗透了,可能会导致公司的一些核心资料、代码甚至商业机密等信息泄露出去,这种是最严重的。

image.png  

而风险产生的原因无非就是如下两种:程序缺陷和管理缺陷。

第一种我开发的程序是有安全缺陷的,写程序的时候我只管完成业务逻辑工作,而没有进行安全性的考虑;而一个程序的缺陷可能就会导致一个安全性的问题。风险发生的原因,可能是网站开发者缺乏基本的安全意识,也可能公司对安全没有强制性要求;所以由程序的缺陷可能会导致安全风险。

第二个是管理上的缺陷,理论上来说,我一个公司的邮箱其实是不应该到各个网站去注册的。假如我是一个白帽汇公司的员工,我去外卖、打车和网购等其他网站上注册账号的时候,公司邮箱账号和其他的账号极有可能是同一个密码。这就会导致什么问题?由于其他网站可能由于安全问题泄露了你账号信息;所以黑客就可能拿着这些用户名和密码去做一个撞库的攻击,用来攻破我的公司邮箱,而公司邮箱里面的信息泄露是有很大安全风险的。

还有一种管理上面的缺陷,就是一个运营人员可能管理了几百台甚至几千台的服务器,他为了管理服务器更加方便和快捷,可能会采用一个统一的管理工具,如果这个统一的管理工具用户名、密码泄露的话,后果是非常严重的。

  image.png

如果有这些安全问题的话,应该怎么办?

其实也比较简单,第一我们肯定需要发现业务系统的脆弱点,发现脆弱点可以采用扫描器,也可以采用安全服务的方式。

第二我们发现这些脆弱点以后需要上防护方案,可以上WAF(WAF的全称是Web应用防火墙),也可以上防火墙之类的设备。

上完这两个防护方案之后,不代表我就真的安全了。还需要对安全情况做一个持续的监控,确认一下防护方案是否有效;只有这样才能保证业务系统的安全。

二.初代扫描器

下面的话我可会分享一下所有扫描器的架构。

image.png  

第一代扫描器非常的简单,就是一个简单的爬虫模块;这个爬虫是一个基于内容的爬虫,再加一个简单的JS解析引擎。基于内容的爬虫是什么意思?我们都会访问一些技术博客的网站,这些网站都会有一些链接。这个爬虫它可能会从首页开始抓取,网站首页可能会有20-30个链接,这个爬虫模块会判断一下你的链接是不是新的链接,如果是新的链接,又会进入一个新的爬虫,直到这个网站链接已经全部爬虫完以后它就会结束。

讲完爬虫,是扫描器的话,肯定会有一个扫描的模块,这个扫描模块,依赖一个简单的漏洞库(包括一些SQL注入、命令执行、文件包含等漏洞),这些漏洞库里面的内容,靠一个简单的漏洞执行引擎就可以执行漏洞扫描的工作了。

这就是最简单的初代扫描器。

三.Web2.0扫描器

   下面讲的是Web2.0技术的扫描器,它的特性是什么呢?Web2.0引入了Ajax的技术,Ajax的一个特性就是异步或者局部刷新,web2.0也会有很多的事件。这个事件是什么?好比某一个链接是触发某个动作才出现的,比如有一个页面,这个页面需要鼠标移上去之后,这个链接才会出现;还有某些页面的内容是需要点击某个按纽之后才会出现的,这些就是事件。还有就是Web2.0里面会有很多自动形成表单的需求。

  image.png

所以像Web2.0的爬虫会有一个什么特性?Web2.0爬虫就变成了一个基于浏览器的爬虫,基于浏览器的爬虫会有两个优点:支持Ajax和事件。

像基于浏览器的爬虫,一般情况下有这么几个流派:第一种我会直接去封装webkit这个内核,因为webkit本身是开源的,可控性很高,所以一部分人会基于webkit内核封装成一个爬虫的模块。

第二种使用IE浏览器作为内核,采用hook IE浏览器的方式来做Web2.0的爬虫,这种方式可控性是很低的,因为IE浏览器是不开源的,没有源代码控制性会受限。

还有一种就是用phatomjs这个工具加上一个JS的解析引擎。

这三种都可以做基于浏览器的爬虫,像Web2.0的爬虫和扫描这个模块,这一代扫描器的漏洞库或者漏洞解析引擎这一块会做一些强化,但是它的漏洞扫描模块跟第一代没有太大的区别。

image.png  

所以Web2.0的爬虫有哪些问题呢?像Web2.0的扫描器,形态不是一个硬件就是一个软件的形式;进行漏洞扫描的时候需要人工介入,自动化的程度很低;使用这种扫描器,需要把扫描的对象添加到我的软件或者我的硬件里面去,所以它需要手工添加这个动作,而且这种扫描器是无法支持大批量网站扫描的需求的。

像这三个问题的话,其实也能够解决,我接下来讲的这个基于云端的扫描器,就能够很好的解决这些问题。

四.云端扫描器

  image.png

基于云端的扫描器的背景是,前几年云计算火起来以后,扫描器也跟着这个热点:云平台化了,像这个云端的扫描器架构是怎样呢?

  image.png

它已经把一个硬件或者软件的形态,切换成分布式的架构了。那像这个分布式的架构,它首先要支持多台服务器的部署;在前端会有一个任务下发或者用户界面的服务器。前端服务器会下发扫描任务,后面有一个任务的调度服务器,任务调度是一个分布式的调度,在出现故障的时候会自动做一个切换。

任务调度完了以后,会把任务下发到扫描服务器,扫描服务器是什么?是一个大的集群,这个集群的扫描配置会自动的做一个控制,然后扫描服务器会对扫描任务做一个切分,它从传统的软件型的扫描器切分成异步、分布式的扫描架构。每个扫描服务器会分为一个爬虫的模块和高并发的HTTP模块,既然是扫描器的话肯定是有一个漏洞库来做支持。这个漏洞库的来源有两种方式,一种是通过自主挖掘,另一种是通过漏洞平台来做同步。

  image.png

那像这个云端的扫描器,难点在哪里?我的云端服务器要支持百万级的用户的扫描,所以说它要设计一个很良好的架构,这是一个难点。然后像云端的、分布式的架构,要确保它的稳定性。还有就是云端的扫描节点是分布到各个不同机房的,所以对服务器需要做一个自动化的运维。

五.基于流量分析扫描器

然后讲完了云端服务器,那后面我们讲一讲基于流量分析的一个扫描器。

image.png  

基于流量分析扫描器的需求背景是:现在很多网站会跟各个不同的合作伙伴做一个合作,这个合作很多是通过API这种方式;还有现在是移动互联网的时代,各种APP会连接后端的服务器;还有互联网公司会举行各种各样猝不及防的活动,像这种活动的话,可能只是在微信或者微博上面做一个宣传推广,可能连一个入口页面都没有。上面这些情况有一个名词描述:叫孤岛页面。支持孤岛页面的抓取和漏洞扫描,就是这个扫描器跟前面的几种扫描器不同的地方,前面的扫描器都是通过一个爬虫能够爬到的页面去做一个漏洞的扫描,包括API、APP连接的后端的服务器和一些突发的活动页面,其实通过爬虫是没法爬到的,所以我们需要一款新的扫描器来解决这个问题。

image.png  

像这种基于流量分析的扫描器,它的架构是怎么样的?首先分成三层,最底下这一层是支持层,它必须有一个网络的支持,首先需要在核心交换机上配置流量镜像,还有就是业务有访问的流量。那这个爬虫模块的话,就不仅仅是一个主动的爬虫了,它会通过流量分析的方式来获取链接,还可以配置采集的Agent,还有通过日志导入的方式,所有的这些组成流量分析扫描器的爬虫模块。这一代的扫描器跟上一代的扫描器最大的区别就是爬虫模块,像扫描那些模块跟之前的web2.0或者云端的扫描器,它的结构是类似的。

这种扫描器当时我们团队是第一个做的。我们团队在360的时候专门做了一款产品,叫360鹰眼,这款产品已经在很多互联网公司使用了,效果特别好。

  image.png

这个扫描器它的难点在哪?就是怎么样处理一个巨大的流量,就好比一个规模很大的互联网公司,它的流量可能是10个G或者是几十个G的时候,怎么样把这个流量做一个汇总?因为单台设备的处理能力是有限的,最多能够支持10个G的带宽,所以汇总完了之后还要做分流。

还有在交换机上面做流量镜像的话,默认是只支持http的,如果要支持https,可以通过把https的证书导进去来支持。

由于它依赖流量,就有一个特性:正常的流量和无效的流量。什么叫无效的流量?有可能我随便输入一个网址,但是这个网址在服务器上是不存在的,所以这就是一个无效的流量。还有一种流量是广大的爬虫(就是搜索引擎,类似于百度,谷歌这种搜索引擎)产生的;搜索引擎可能会使用某些特定词汇的链接来进行探测,而这些链接在你的服务器上可能是不存在的,所以搜索引擎可能也会产生无效的链接。

还有我的扫描器扫描的链接也可能会导入到流量里面去,而像一般的扫描器,漏洞特征库会有成千上万条。在一条链接经过扫描器扫描完成之后,可能会产生成千上万的扫描链接。这会造成一个什么后果呢?扫描器扫描的流量其实95%以上是无效的(就是无效的流量)。开启一个扫描器去扫描你的网站,然后去查看你的Web日志,日志里面会有大量的404链接。扫描器在工作的时候,假设我原来只访问了一条链接,等扫描器扫描完成以后,会增加到1000个链接,假设一次扫描会增加1000个链接,那下次我又扫描的时候,基于这1000个链接,又会新增1000个链接,这个数量级就达到百万级了。所以说像这种扫描器必须处理循环扫描的问题。

六.全网漏洞专扫

讲完了上面的几个扫描器,后面会讲一讲全网的漏洞专扫,这个需求的背景是什么?

  image.png

去年我在DTCC的搜索专场上面讲过一个新时代的搜索引擎,那个搜索引擎产品叫佛法(https://fofa.so)。在国外有一款同类型的产品,也是使用网络空间测绘的技术来解决安全应急的问题,并且那款产品对华是禁售的。

安全发展到现在,各种各样的网络空间测绘平台出来以后,攻击趋势从使用一个扫描器漫无目的的扫描,变成了使用单个漏洞针对特定目标的精准打击。

我们都是从事技术的人员,知道Java有一个框架叫Struts2,这个框架有什么特性?这个框架每年都会爆发很多起高危安全漏洞,并且都是命令执行。这种安全漏洞爆发以后就是黑客的狂欢了,为什么狂欢呢?因为有网络空间测绘平台,首先黑客能准确的知道:各个企业有哪些域名和IP。然后这个漏洞出来以后会做什么事情?黑客把事先搜索好的各个互联网公司的资产,加上这个漏洞的PoC,快速的做一个扫描,然后把发现的漏洞提交到各个公司的SRC,赚取收益。在这个过程中黑客还要比拼时间差,可能A黑客发现了某个互联网公司的一个漏洞,B黑客可能在1分钟以后也发现了,像这种大型的互联网公司的SRC平台(安全应急响应中心),它一般认可的是你第一个提交漏洞的人,只有第一个提交者才可以获得奖励。

image.png

对网络空间测绘做了一个简单的定义:网络空间测绘是通过识别联网的对象,获取IP、端口、协议和产品的信息,同时网络空间测绘是以搜索引擎的方式提供服务的,它是一种资产建模的技术;同时网络空间测绘还支持一个快速轻量级的漏洞专扫服务。国外有一个专有名词叫Cyberspace Mapping,也叫网络空间测绘。

  image.png

我们把网络空间测绘需要做的事情概括为四个部分,叫网络空间测绘的四要素。最里面这个产品是我们公司针对企业开发的网络空间测绘产品(叫FOEYE)。网络空间第一个要素是什么?就是它需要要有一个端口扫描的技术,这个我们采用的是异步无状态的扫描技术,它的扫描速度很快,目前我们能够识别260多个端口,并且端口是可以扩展的。

然后第二个部分,扫描完端口以后,会知道这个企业或者单位有哪些存活的IP和端口,知道这些远远不够,还需要知道一个端口上面开放的协议到底是什么?假设一个服务器开放了80端口,但是这个80端口就一定是http服务吗?不一定,因为80端口也可以用来做SSH的服务;或者说一个21端口,它就一定是ftp吗?也不一定,所以需要一个协议识别程序来进行准确的识别。我们自己研发了一套协议识别的引擎,目前支持130多个协议,能够识别企业里面95%以上的开放端口。

识别完端口和协议以后,第三个部分需要对产品做一个识别。现在我们能够识别36000多种产品。我们公司也提出了一个小小的目标:任何互联网上面存在的产品,在我们平台里面都有收录!我们要做一个网络产品的百科全书。

其实在前三步完成以后,我们就能知道企业到底有哪些资产,资产的用途是什么(属于什么分类、什么公司的产品)。所以这三个部分完成了资产建模的过程。

最后资产建模完成以后,还得解决安全问题,这个依赖漏洞专扫。漏洞专扫的PoC一部分是我们自己挖掘的,还有我们会向广大的白帽子征集PoC,现在有超过1000个PoC。

image.png  

这是我们产品的展示,前面是IP地址,是一个什么操作系统,它开放了什么端口,每个端口上面对应的是什么服务。组件这一块是很关键的,我们可以简单的看一下,其中有一个TP-Link的无线路由器(这个通过一个telnet的协议就能发现它是一个TP-Link的无线路由器),然后他属于路由器的二级分类,路由器属于一级分类网络交换设备。

其中还有一个资产我们识别出来,装了数据库,装了web服务器。我们可以通过这些信息发现这是一个NAS(存储设备),同时它使用的是windows系统;我们都把它完整的展现出来。

image.png  

什么是网络资产建模技术?我们把它总结为四个部分:

最底下的话是一个硬件的层面,硬件就包括浪潮、华为、戴尔等等。

硬件上面的是操作系统,操作系统是windows、Linux和Unix等,也有部分人会用MacOS系统来做服务器使用。

然后是一个Web服务器或者web中间件层,包括Apache、Nginx、IIS、weblogic、Websphere,最后这两个就是中间件。

在中间件上面,我们要识别真正的应用系统,这个应用系统有可能是我们自研的、也有可能是我们使用的一些第三方应用系统。这个应用系统包括CRM系统、OA系统、邮件系统、CMS系统等等。

从下到上这四个步骤构成了网络资产建模的步骤。

image.png  

假设说现在有一个高危漏洞爆发了,我的企业资产有超过10万的话,如何在几分钟之内对这么多资产做一个全面快速的扫描呢?假设我们使用前面的那几款传统型的扫描器(不管是Web2.0还是云端的还是基于流量分析的扫描器),很显然都没法做到这个的。那我们应该怎么办?其实很简单,就是使用全网漏洞专扫的技术,它可以在很轻松的解决这个问题(能在几分钟内完成10万资产的漏洞专扫)。

那什么是一个全网漏洞专扫的过程呢?其实像全网漏洞专扫,它跟传统扫描器最大的区别是:它需要提取一个扫描PoC的产品特征,假设说一个Struts2漏洞爆发了,提取受影响对象的产品特征,意思是把这个Struts2框架的特征把它提取出来。

漏洞专扫分为如下五个步骤

image.png  

第一个步骤要找到一个可以扫描的漏洞,比如Struts2又爆发了一个0day,这个0day在网上公布了PoC以后,我就找到这个漏洞的PoC。第二步需要提取这个受影响对象的产品特征(Struts2)。第三步提取完特征后,我们会编写一个漏洞扫描的规则(PoC)。第四步是关键,如果说使用一个传统扫描器扫这个Struts2漏洞,如果这个企业有10万资产的话,我就要对这10万资产做一个全部的扫描。像全网漏洞专扫在这个步骤,由于有Struts2的产品特征,所以可以直接提取全网满足特征的对象,这个可以极大的缩小需要扫描的目标(根据我们分析,大部分企业某一个业务系统的使用情况,不会超过10%,甚至是不到5%这样一个比例)。假设我的企业还是10万资产,但是由于我有Struts2的识别特征,就可以把扫描的目标缩小到1万或者5000的规模。再对筛选出来的资产做扫描,就能够实现资产的快速扫描了。

image.png  

 那要需要多长时间完成一次全网漏洞的专扫呢?,20分钟就行。通过17分钟编写PoC(PoC是安全行业的术语)。PoC写什么内容呢?简单的PoC只需要编写一个http的交互流程就可以了。并且我们公司把编写PoC这个很专业的工作,把它变成一个可视化的产品了;在没有这个产品之前,编写一个漏洞,可能就是直接写一个脚本(这个需要安全研究人员有很深的程序功底,门槛高)。我们把这个很专业的事情,变成了只要了解http协议的人都会做,编写一个PoC只需要在这个产品上写一个简单的http交互流程,再写一个判断这个漏洞是否存在的条件就可以了;代码生成是这个可视化的产品自动完成的,这就极大降低了编写PoC的难度。

然后我们在写出来这个PoC之后,在3分钟之内就可以完成全网漏洞的扫描。

我们为什么能够做到这个事情?其实是依赖于网络空间测绘的技术。这之前讲了很多传统的漏扫,那后面比较一下全网漏洞专扫和传统漏扫的区别。

  image.png

它的区别主要分四个部分:第一个是触发的方式,第二是扫描的方式,第三个是依赖的方式,第四个是扫描的速度。

像传统漏扫的话,如果需要对某一个网站做全面安全检查的时候,就需要传统的漏扫。然后像全网专扫的话,触发方式是漏洞,就是某一个漏洞爆发了以后,我需要使用一个全网扫描技术,对企事业单位资产的安全状况做一个快速的筛查。

还有扫描方式,像传统扫描器它依赖全漏洞的集合;像全网扫描它只需要一个漏洞。

另外两者的依赖关系也是不一样的。像传统扫描器的话,是依赖漏洞库的完整程度,举一个比较通俗的比方,传统扫描就好比说我要去一个医院去做一个全身的体检,这个体检就依赖于我选择的这个体检的内容是不是覆盖全的。像全网的扫描的话,假设我有点咳嗽,需要看一下感冒或者呼吸科之类的,这属于专病专治,全网扫描干的就是这样的事情。

速度的话,由于传统扫描器要做好多好多的扫描,所以它的速度会很慢;全网扫描的话是单个漏洞,并且是有针对性的扫描,所以扫描速度是会很快。 

下面那一段话其实是一个补充,就是说像全网漏洞专扫其实不是为了替换掉现有的传统漏洞扫描器,它是作为一个传统扫描器的补充,它解决的是一个什么样的诉求?就是有一个漏洞突发的情况,像这种具有很大规模的互联网企业,资产会很多很多;如果某个漏洞真的突发的时候,这个企业也想对这个漏洞做一个提前的筛查,而不是说等着黑客来上报漏洞。

所以企业也需要在漏洞突发的时候,对资产做一个快速的扫描,这个扫描时间希望从几天的时间减少到几分钟。这就是全网漏洞专扫和传统漏洞扫描器的一个对比和说明。

几个应用案例

43555  

image.png

这是一个Struts2命令执行的漏洞,Struts2漏洞好像今年还没有爆发,我觉得今年迟早也会有;Struts2漏洞我们也可以利用网络空间测绘技术来做一个全面分析。

从报告里面可以看出来,在我们fofa系统里面,一共是开放了几百万台,美国开放最多接近100万,中国第二,德国是第三,韩国是第四,这个数据跟互联网IP地址的分布类似,像互联网的IP地址也是美国第一,中国第二。既然我们能统计哪一个国家的系统使用情况,当然也能够分析全国的分布情况;我们可以可以看到浙江第一,北京第二,广东第三,上海第四,其实这个和中国的经济发展状况基本上也类似,这是我们能够通过网络空间测绘技术能够做的一些事情。

好,我这次分享到此就结束了,谢谢大家!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31510736/viewspace-2212776/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31510736/viewspace-2212776/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值