浏览器动力扫描

自浏览器发行以来Burp Suite Professional 2020.8.1我们有很多客户询问我们选择与Chromium集成的动机以及有关该功能如何工作的更多信息。

在这篇文章中,我的目标是探讨我们在构建此功能时面临的一些技术挑战,分享有关集成在引擎盖下如何工作的细节,并突出显示我们计划在来年建立的一些酷炫功能。

找到攻击表面

15年前,当Netscape Navigator仍然是一件事情时,网络基本上是同步的。beplay体育能用吗单个HTTP请求通常会导致包含所有传出链接的HTML响应,并且一旦将响应发送给客户端,就很少更改。使用此模型,查找和映射攻击表面非常容易,因为应用程序中的每个位置通常都映射到单个HTTP请求和响应。由于通常在服务器端完全构造了DOM,因此找到可以访问的新位置就像刮擦DOM的所有链接并将其添加到将来访问的列表中一样简单。

传统的Web 1.0体系beplay体育能用吗结构
传统的Web 1.0应用beplay体育能用吗程序体系结构。

随之而来的是XHR,AJAX和微服务

随着客户端计算功率的增加和Web浏览器的增强功能,再加上XMLHTTPRequebeplay体育能用吗st(XHR)的引入以及异步JavaScript和XML(AJAX)构建Web应用程序的模式,构建DOM的责任越来越多被推入浏览器。微服务的普遍性是朝着基于浏览器的结构进行的又一次推动。

现代Web 2beplay体育能用吗.0应用程序体系结构
现代Web 2beplay体育能用吗.0应用程序体系结构。
beplay体育能用吗网络开发框架趋势
前端JavaScript框架的崛起。

尽管这种趋势在使Web应用程序响应迅速并且感觉就像一流的现代应用程序方面具有变革性,但在自动尝试发现攻击表面beplay体育能用吗时,它引入了重大挑战。如前所述,在传统的Web体系结构中,攻击表面主要仅限于主要文档HTTP请求。beplay体育能用吗在新世界中,攻击表面被分解并分布在所有单独的API呼叫和客户端JavaScript上,从而更难找到。

这种转变如何撰写爬行者?

One of the main guiding principles behind Burp’s new crawler is that we should always attempt to navigate around the web applications behaving as much as possible like a human user.. This means only clicking on links that can actually be seen in the DOM and strictly following the navigational paths around the application (not randomly jumping from page to page).Before we had browser-powered scanning, the crawler (and the old spider) essentially pretended to be a web browser. It was responsible for constructing the requests that are sent to the server, parsing the HTML in the responses, and looking for new links that could be followed in the raw response we observed being sent to the client. This model worked well in the Web 1.0 world, where generally the DOM would be fully constructed on the server before being sent over the wire to the browser. You could be fairly certain that the DOM observed in an HTTP response was almost exactly as it would be displayed in the browser. As such, it was relatively easy to observe all the possible new links that could be followed from there.Things start to break down with this approach in the modern world. Often the main HTML document returned when navigating to an application is a simple container, waiting for some JavaScript to run to populate the DOM - as shown in the example below.

React Dom容器
示例ReactJS容器。
示例ReactJS脚本。
示例ReactJS脚本。
示例渲染ReactJ我们应用。
示例渲染ReactJ我们应用。

在浏览器启动扫描之前,Web爬网通常只要求主文档,解析DOM,得出beplay体育能用吗结论,没有可以遵循的链接,并将此页面视为死角。要正确地围绕上面的简单示例导航,需要发生一些事情。我们必须加载初始DOM,获取React.js脚本,执行脚本,并等待新链接出现在DOM中。

什么是修复?

我们从本质上有两种选择,如何解决此问题,我们可以将JavaScript引擎直接嵌入轨道器中,并自己执行脚本,以试图像浏览器一样构建DOM,或者我们可以利用现有的浏览器来执行繁重的举重。这两个都不是简单的选择,但最终我们选择利用Chromium的力量,Chromium是Google Chrome浏览器的开源基础。

为什么要铬?

铬是大规模发展努力的结果,远远超过了港口港口规模的任何公司所能提出的要多得多。beplay官网可以赌浏览器实质上定义了网络技术中现代游戏的现代状态,并将Burp Suite与Chromium联系起来,确保Burp对网络对beplay体育能用吗我们的影响不利。如果我们选择了替代方案,我们将永远与开发铬及其构建的许多其他图书馆的小型开发人员组成的小型开发人员组成新的网络技术。beplay体育能用吗更不用说创建不容易受到问题的JavaScript渲染引擎的复杂性。

铬代码库以令人震惊的速度发展,作为一家较小的独立公司,我们无法与所有新功能保持最新状态 - 甚至Microsoft也承认在浏览器战争中失败了边缘浏览器本质上只是铬顶上的皮肤。

样品承诺铬
在2021年的一周内授予Chromium Code Base的承诺样本

Burp Suite的铬整合

将铬与Burp Suite整合到远非一项艰巨的任务。将浏览器直接嵌入BURP不起作用:任何浏览器崩溃也会崩溃。集成使构建过程变得不可接受。安全性也是一个问题:BURP需要确保安全,并且几乎不可能及时应用安全补丁。

为了解决这些缺点,我们提出了另一种方法。我们决定,而不是试图将浏览器直接嵌入打bur,而是尝试使用DevTools协议,这是Chromium的Inspector选项卡中使用的技术,可用于控制浏览器的几乎每个方面。

这种方法大大简化了我们的构建过程。现在,我们可以在发布时立即自动触发嵌入式浏览器的新构建,并通常可以在同一天将其更新。我们还定期构建铬的beta和开发版本,以便如果DevTools协议发生任何破坏的更改,我们可以预警。

浏览器动力扫描

现在,我们可以轻松地了解最新稳定的铬构建,我们着手将其集成到轨道中。DevTools协议本身相对简单地设置并连接到。它由JSON命令组成,可以通过Websocket发送到浏览器,以及有关浏览器正在做什么的响应事件:所有熟悉的技beplay体育能用吗术。

我们在Burp扫描仪中的整合看起来与此相似:

Burp Suite的铬整合
Burp Suite的铬整合

  1. 一旦我们启动了铬实例并通过Websocket连接到DevTools,我们将指示浏览器导航到目标Web应用程序。beplay体育能用吗
  2. Chromium构建了它将向目标提出的HTTP请求,并将该请求发送回Websocket以burp套件。beplay体育能用吗
  3. 该请求通过Burp Suite的常规网络堆栈发送到目标,尊重正常的范围和节流规则。
  4. Burp Suite收到其回应。
  5. 并将其转回Websocket到铬。beplay体育能用吗
    步骤2至4重复页面上加载的所有资源。
  6. Chromium通过Websocket告诉我们该页面beplay体育能用吗已充分加载。(大致等同于“ Onload” DOM事件)。
  7. Chromium通过Websocket告诉我们DOMbeplay体育能用吗准备就绪。(大致等同于Domcontentloaded事件)。
  8. 一旦Burp Suite认为DOM已安顿下来,并且不再突变,我们通过Websocket向DOM的快照询问。beplay体育能用吗这简化了实际上是一个非常具有挑战性的问题。我可能可以填写整个博客文章,讨论我们在这里遇到的一些问题。正如软件工程中常见的那样,这要复杂得多,并且花费的时间比预期的要长得多!
  9. 铬返回当前正在浏览器中显示的确切DOM。

一旦我们有了DOM的快照,它就会被送入爬行者并以与非浏览器驱动扫描相同的方式处理。当爬虫已决定下一个链接时,希望遵循该过程的重复,并以一个较小的差异重复。我们不用指示浏览器导航到下一页(例如直接将URL键入地址栏键入),而是使用DevTools模拟用户单击链接,这样我们确保在将任何请求发送到发送到该请求之前,请确保调用任何ONCLICK处理程序目标。

下一步

既然我们已经获得了集成工作的基础知识,那么我们所有人都对这种开放的可能性感到非常兴奋。我们有雄心勃勃的计划,大大改善了现代单页应用程序的爬行和审计覆盖范围API端点整个2021年,正如我们在我们的公共路线图。我们还希望通过一些新的手动工具进一步利用浏览器集成的功能,并继续为Burp Scanner功能提供更多信息。

了解更多有关打扫扫描仪,还有我们的JavaScript扫描功能