使用ZAPR:OWASP ZAP API与R接口的完美结合

本文详细介绍了如何通过R语言调用OWASP ZAP API进行安全扫描数据的获取与可视化分析,包括API的基本使用、JSON数据解析、Shiny仪表板构建以及rCharts交互式图表生成,为安全研究人员提供了高效的数据处理与报告方案。

Toolsmith #125: ZAPR - OWASP ZAP API R接口

衷心希望当我说OWASP Zed Attack Proxy(ZAP)时,你会说“太棒了!”而不是“那是什么?”。本出版物长期支持OWASP ZAP,除了@psiinon的卓越项目领导外,许多杰出的贡献者和实践者也促进了OWASP ZAP的发展。在过去的四年中,OWASP ZAP在@ToolsWatch最佳工具调查中一直名列第一或第二,这是有充分理由的。多年来,OWASP ZAP的使用已经得到了充分的记录和展示,wiki为您提供了大量内容,供您探索OWASP ZAP用户场景。

我最近试图探索的一个较新的场景是使用OWASP ZAP API。OWASP ZAP API也有详细的文档,足以让您入门,但请考虑几个用例场景。

首先,有一个功能齐全、简洁的OWASP ZAP API UI,为您提供了查看者的视角,以便您考虑编程机会。OWASP ZAP API交互是基于URL的,您可以调用访问视图和操作。探索任何组件,您都会立即找到相关的视图或操作。通过http://localhost:8067/UI/core/(我在8067端口运行OWASP ZAP,您的安装可能会有所不同)深入核心,给了我很多选择。

您需要API密钥来构建查询。您可以通过Tools | Options | API | API Key找到您的密钥。例如,深入numberOfAlerts(baseurl),它获取警报的数量,可选地按URL过滤。然后您将看到查询构建器,您可以在其中输入密钥、定义特定参数,并决定您喜欢的输出格式,包括JSON、HTML和XML。

当然,您会在浏览器中收到结果,此查询将以HTML表格形式提供答案,但这些不一定最适合程序化数据消费和操作。也就是说,您学到了本课最重要的部分,一个完全填充的OWASP ZAP API GET URL:http://localhost:8067/HTML/core/view/numberOfAlerts/?zapapiformat=HTML&apikey=2v3tebdgojtcq3503kuoq2lq5g&formMethod=GET&baseurl=。

此请求将以HTML返回结果。非常直接且易于根据您的偏好修改,但HTML结果不太适合机器处理。想要JSON结果吗?只需在URL中将HTML替换为JSON,或在构建器中选择JSON。我会告诉您,当我通过R等工具使用OWASP ZAP API时,我更喜欢使用JSON。这无疑是最干净、机器可消费的选项,尽管其他人可能会与我争论支持XML。

请允许我为您提供一个可以实验的示例,我可能会继续开发它,因为它对于正在进行的OWASP ZAP扫描或会话完成时的结果进行主动报告非常酷。请注意,我所有的代码,无论多么糟糕,都可以在GitHub上找到。我的意思是,这真的是v0.1的东西,所以请根据您的需要进行贡献和调试。同样重要的是要注意,OWASP ZAP需要正在运行,无论是具有活动扫描会话还是您之前保存的存储会话。我扫描了我的网站holisticinfosec.org,并保存了会话以供编写时定期使用。您甚至可以通过下面的位置看到保存会话的引用。

R用户可能知道Shiny,一个用于R的Web应用程序框架及其仪表板功能。我还发现rCharts设计用于在Shiny中交互且美观地工作。

R包含使从JSON解析变得相当直接的包,正如我从Zev Ross那里学到的。RJSONIO使得从OWASP ZAP API拉取数据变得像fromJSON(“http://localhost:8067/JSON/core/view/alerts/?zapapiformat=JSON&apikey=2v3tebdgojtcq3503kuoq2lq5g&formMethod=GET&baseurl=&start=&count=")一样容易。我们使用fromJSON“函数及其方法读取JSON格式的内容并将其反序列化为R对象”,其中ZAP API URL是该内容。

我使用Zev的grabInfo函数进一步解析了警报数据,并将结果组织成一个数据框(ZapDataDF)。然后,我将来自ZapDataDF的警报内容进一步排序为可用于报告和可视化的对象。在每个警报对象中,有风险级别、警报消息、CWE ID、WASC ID和插件ID等值。使用以下代码将这些值中的每一个定义为对R有用的参数完成:

然后,我将所有这些结果组合到另一个我称为reportDF的数据框中,其结果如下图所示。

reportDF结果

现在我们有一些可以围绕其进行旋转的内容。

首先,让我们总结发现并通过ZAPR:OWASP ZAP API R接口展示它们的辉煌。

代码优先,真正简单的东西是:

摘要概述API调用

您可以看到,我们只是使用RJSONIO的fromJSON进行特定的ZAP API调用。结果非常整洁,如下所示。

ZAPR概述

Shiny中我最喜欢的功能之一是renderDataTable函数。当在Shiny仪表板中使用时,它使过滤结果变得轻而易举,因此被用作ZAPR中的第一个真正功能。代码很繁琐,请从GitHub查看或使用它,但结果应该不言自明。我按CWE ID 89过滤了视图,在这种情况下有点误报,我有一个非常平坦的网站,没有数据库,非常感谢。尽管如此,有一个肯定是高风险发现的例子是好的。

警报过滤

警报过滤很好,随着我进一步开发,我会添加更多结果功能,但可视化也很重要。这就是rCharts在Shiny中真正发挥作用的地方,因为它们是交互式的。我使用了最简单的例子,但您会明白的。首先,几行R代码,如下所示。

图表代码

结果看起来更令人满意,并允许交互性。Ramnath Vaidyanathan在这里做了非常好的工作。首先,通过API拉取的OWASP ZAP警报按风险在条形图中计数。

警报计数

当我鼠标悬停在Medium上时,我们可以看到我的OWASP ZAP扫描holisticinfosec.org specifically有17个结果。

我们的第二个可视化是按计数显示的CWE ID结果,在一个经常被鄙视但交互式的饼图中(是的,我在布局方面还有一些工作要做)。

按计数的CWE ID

正如我们之前学到的,我在会话期间只有一个CWE ID 89命中,可视化支持了我们在数据表中看到的内容。

从OWASP ZAP API拉取数据并将结果纳入任何数量的应用程序或报告场景的可能性是无限的。我感觉这里有一个丰富的机会与PowerBI,我打算探索。所有代码都在这里,以及我提到的OWASP ZAP会话,所以您可以自己使用它。您需要OWASP ZAP、R和RStudio来使它们一起工作,如果您有问题或建议,请告诉我。

干杯,下次见。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计