新型爬虫如何重构「网站URL采集」这件小事?(内附视频演示)
随著 Web 发展的日益成熟,人们开始进入「数字化生存」时代。网上银行、电子商务、个人空间、云存储等不断涌入生活,Web 应用安全问题也日益凸显。
根据 Gartner 的调查,信息安全攻击有75%都是发生在 Web 应用而非网路层面上。同时,OWASP 发布的数据也显示,三分之二的 Web 站点都相当脆弱,易受攻击。
对 Web 应用的安全性进行手工测试和审计是一项复杂且耗时的工作,对于安全运维人员来说,基于安全的管理占用大量工作时间。自动化的 Web 漏洞扫描器能够大幅简化针对安全隐患的检测工作,有助于安全运维人员将精力转向如何处理安全风险上来。
Web 漏洞扫描器
一般来讲,Web 漏洞扫描器是基于 URL 的漏洞扫描工具,在工作时需要解决采集和核心检测两个关键问题:
如何采集输入源(即采集网站 URL)
如何调用扫描插件(即对 URL 进行扫描)
怎样去评价一个扫描器的好坏?首先要关注的就是:收集的 URL 够不够全面?资产搜集不全,检测准确率就无从谈起。
发现率低下 传统爬虫的技术之觞
在 Web 漏扫中,采集输入源的方式一般包括爬虫、流量、代理和日志,其中爬虫是获取扫描网站 URL 最常见的、不可或缺的一种主动采集模式。
Web 漏洞扫描器的爬虫面临著比其他网路爬虫更高的技术挑战,这是因为漏洞扫描器的爬虫不仅仅需要爬取网页内容、分析链接信息,还需要尽可能多的触发网页上的各种事件,从而获取更多的有效链接信息。
然而,现有的爬虫受限于其在技术上的先天不足,给使用 Web 漏洞扫描工具的安全运维人员造成了诸多困扰:
1、 极易触发 WAF 设置的 IP 访问上限
通常情况下,网站的防火墙会对某个固定 IP 在某段时间内请求的次数做限制,如果没有超过上限则正常返回数据,超过了,则拒绝请求。值得说明的是,IP限制大多数时候是出于网站安全原因针对 DOS 攻击的防御措施,而不是专门针对爬虫的。但是传统爬虫工作时,机器和 IP 有限,很容易达到 WAF 设置的 IP 上限而导致请求被拒绝。
2、 无法自动处理网页中的交互问题
Web 2.0 时代,Web 应用与用户交互十分频繁,给漏扫爬虫造成了干扰。以输入验证码登录为例,网站将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰像素(防止 OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。传统爬虫在遇到这种情况时,通常难以自动处理。
3、 无法全面爬取 JavaScript 解析的网页
JavaScript 框架的诞生是研发工程师在效率至上时代的一大福音,工程师们得以摆脱了开发与维护之苦。毋庸置疑,Angular、React、Vue 等单页应用的 Web 框架成了开发者的首选,JavaScript 解析的网页日益普及,所以网页中大多数有用的数据都是通过 ajax/fetch 动态获取后然后再由js填充到网页 DOM 树中,单纯的 HTML 静态页面中有用的数据很少,这也直接导致了 Web 漏扫爬虫的爬取不全面问题。
传统爬虫与聚焦爬虫
纵观市面上常用的漏洞扫描产品,所使用的爬虫通常包含以下两类,即传统爬虫和聚焦爬虫:
传统爬虫
它的工作流程是从一个或若干初始网页的 URL 开始,获得初始网页上的 URL,在抓取网页的过程中,不断从当前页面上抽取新的 URL 放入队列,直到满足系统设置的一系列停止条件,爬取操作停止。