安全扫描自动化:黑盒漏洞检测技术探索

正文

在刚刚过去的RSA Conference 2020,专注于漏洞管理的Vulcan Cyber 获得Innovation Sandbox 第三名。漏洞,这一网络安全行业的永恒存在,随着网络技术与线上业务变化,不断要求安全从业人员拿出新的更配适当前业务类型和网络变化的解决方案。

发现漏洞,永远是对其进行管理的前提条件。作为重要的漏洞发现手段,黑盒检测工具当前的能力边界在哪里?

 

要使系统固若金汤,首先必须知道系统的弱点位置分布,然后进行针对性的加固或修复,发现这些弱点的有力工具就是扫描器。然而在很多现实情况中,企业部署的一些自动化黑盒检测工具往往表现得不尽人意。

自动化测试与人工渗透测试的差距在哪里,如何去缩小甚至补全这些差距?面对日益严峻的安全形势,黑盒检测工具应当如何进化来满足企业自动化测试的需求?围绕这些问题,我们尝试探索黑盒检测技术的改进方法。

纵观整个安全测试流程,无论是手工测试还是自动化测试,大致都分为两步,一是资产收集,二是对资产的漏洞检测。资产收集是漏洞检测的前提,而漏洞检测是资产收集的主要目的。接下来,我们就从这两部分入手,分别介绍黑盒检测技术在应对复杂多变的企业环境时的解决办法。

 

追求全面的资产收集

所谓“巧妇难为无米之炊”,信息收集越全面,发现漏洞的可能性也就越高。对于自动化工具而言,在面对体量庞大、应用框架各异的企业系统时,单一的信息收集手段很难覆盖全面,这时可以向人类攻击者学习,从多种途径,对多种数据源进行解析。

从数据源获取方式来看,大致分为两类,一类是主动式获取,一类是被动式获取。

图:资产嗅探方式

1. 主动式

主动式获取是扫描器根据输入的目标主动发出请求获取信息,包括Web爬虫、子域名收集、端口探测、服务识别等方式,其中的Web爬虫技术在近几年有了很大进步。随着各类Web开发技术的出现,越来越多的企业采用了前后端分离的模式构建业务应用,在全球17亿多的网站中更是有95%的站点使用了JavaScript技术。

传统的爬虫在处理这类网站时往往是心有余而力不足,而浏览器爬虫这时就可以大显身手了。所谓浏览器爬虫,就是结合了浏览器渲染技术的爬虫,浏览器爬虫本身不是一项新技术,早在十年前就有企业尝试使用Webkit内核来做页面渲染,但这些工具由于存在先天性的缺陷一直没有得到广泛使用,不过这些问题随着Chromium无头浏览器的诞生都得到了很大程度上的改善。在使用无头浏览器时,通过控制CDP(Chrome DevTools Protocol)协议中的数据就可使浏览器访问指定的网页并渲染,同时配以合适的页面遍历算法,就可以解决新兴Web应用的爬取问题了。

 

2. 被动式

被动式嗅探这种方式是基于已有的流量、日志等数据去分析资产,常见的形式有HTTP代理、镜像流量、日志、VPN等。这种模式可以和企业的其他安全机制相配合,方便打造企业自己的DevSecOps,比如可以下载WAF日志并导入扫描器进行测试,也可以和CI/CD流程相结合,为测试人员配好代理在业务上线前对资产进行安全测试。除此之外,被动获取还有个优势在于,数据源中的请求或服务信息大都是真实存在的业务数据,这可以和主动式的资产获取形成互补,达到更为全面的资产覆盖效果。

追求准、全、快的漏洞检测

如果说资产收集是扫描过程的开端,那么针对这些资产的漏洞扫描便是整个扫描过程的核心点。要想在这一阶段取得更好的效果,可以从三个方面来提升——检测精度、漏洞覆盖、检测速度。

漏洞扫描核心维度

1.使用更加科学的算法,提高漏洞检测准确度

自动化检测插件背后的算法本质上是对安全经验的抽象,因此这个问题的解决其实依赖于检测算法的优化。传统扫描器最喜欢做的一件事是堆Payload,但Payload的数量从来不该是评判一个扫描器好坏的标准。

通过一些高阶检测算法,漏洞检测其实可以化繁为简,以不变应万变。以反射型XSS的检测为例,传统的检测方式是通过发送大量Payload,观察响应中Payload的触发情况,这种检测方式像是无头苍蝇般没有目标性,扫描效果也完全取决于Payload是否全面,而且还可能因为WAF被拦导致漏报。而当这一漏洞的检测在使用语义分析技术后,将首先对漏洞输出点进行定位,再针对性的分析输出点的位置特性、闭合特征等构造一个只适用于当前位置的靶向Payload,这样就可以完全规避掉Fuzzing过程,整个检测过程可以从数十个请求缩减为3~5个请求,在检测质量和效率上均有质的提升。

 

2.全面覆盖可检测的漏洞

扫描器的漏洞库就像是军人的武器库,覆盖的类型越多在检测时才可能发现更多的漏洞。而扩充漏洞库的方式有两个,一方面要把常见的通用型漏洞覆盖,如SQL、XSS、OpenRedirect等,这些检测模块可以以一敌百,甚至具备挖掘“未知”漏洞的能力;另一方面是非通用型漏洞的覆盖,如框架漏洞、服务漏洞等,可是其中的问题在于,这部分漏洞实在是太多了。

2019年共计出现了18938个CVE漏洞,这些漏洞中可以被通用检测模块扫出来的寥寥无几,而想要手工实现这些漏洞的检测是一件不可能完成的工作,面对这令人畏惧的数量,有一条捷径是版本匹配技术。简单来讲,版本匹配就是基于应用版本去漏洞库检查当期版本有无漏洞。这里的漏洞库可以由NVD和CVE的公开数据构建而来,而版本的识别就需要自行实现了,不同的服务有截然不同的版本获取方式,在确认版本之后就可以构建CPE信息去漏洞库查询,如此便能实现数万漏洞的快速集成。

综合来看,通过提高漏洞覆盖面,可以在同样的资产下扫出尽可能多的漏洞。

 

3.分布式+增量,提升大规模扫描速度

在一家中大型企业中,机器数量成千上万,每日新增业务不计其数。在这种情况下,如果扫描速度很慢以至于扫不完,那即使算法再高效,漏洞覆盖再全面也无济于事。当高危漏洞爆发时,企业希望能赶在攻击者之前发现业务薄弱点,那么扫描速度就成了与攻击者赛跑的制胜因素。

在这种场景下,可以采用“分布式扫描+增量扫描”的解决方案。分布式扫描通过添加扫描节点,根据调度算法将任务分配到不同的节点上,整体算力大致与节点数量成正比,如此便能极大提升企业安全巡检的速度。不过每次都进行全量的扫描不仅浪费资源而且容易产生大量的垃圾数据给业务造成困扰,增量扫描便有效补足了这个缺陷。增量扫描是指每次只扫描相比上次新增的业务,在这种模式下,系统管理员需要定期为增量扫描设置“零点”,比如可以每周做一次完整扫描,后续扫描便能以此为基准只做增量扫描,大大提升整体效率。

 

小结

回顾全文,我们在资产收集阶段力求“全”,而漏洞检测阶段在“全”的基础上,还提出了“快”和“准”的要求。那么当一款黑盒检测工具实现了上述所有要求后,能否比肩一名经验丰富的渗透测试人员?从辩证的角度看,这个问题没有绝对的答案。

自动化检测在既定的逻辑下,无法像人一样去思考和决断,但是自动化工具擅长处理大量重复性任务,在对已知漏洞的快速审查上,人的速度又落于下风。人工检测与自动化检测都是企业不可或缺的安全保障。未来,自动化工具将不断模仿学习渗透测试人员的行为,变得更加智能和人性化,同安全测试人员一起为企业安全保驾护航。

 

—————————————————————————-

 

本文首发于《2019长亭年度漏洞威胁分析与2020安全展望》。报告从“漏洞”和“攻防演练”两个维度解构攻防,抽样来自金融、互联网、通信、能源、医疗、教育、传媒等多个行业的223家企业/机构,透过数字背后的逻辑,尝试梳理安全从业人员的操作方法论,将漏洞关注优先级和修复的经验复制成能力象限,帮助从业人员的部分能力碎片找平水位。

 

 

扫码阅读报告,解锁安全新姿势

(完)