利用人工智能增强渗透测试方法 - 第一部分:Burpference
人工智能(AI)在信息技术和信息安全领域一直是热门话题。虽然我一直关注AI的发展,但直到最近才真正开始探索如何将AI融入我的渗透测试工作流程。在一次关于渗透测试方法的网络研讨会后,有人问我如何使用AI,当时我的回答是“我不使用”。
长期以来,我认为AI虽然有趣但并不实用。然而,随着技术进步,AI已经成熟到足以帮助我们作为渗透测试人员的工作。那么,具体如何实现呢?本博客系列将描述我尝试将AI集成到渗透测试方法中的初步经验。
在探索新技术并将其融入方法时,最好先了解同行如何使用该技术。当我开始这条路径时,我的BHIS同事Derek Banks向我介绍了一个名为burpference的项目。Burpference是一个Burp Suite插件,它将进出范围内Web应用程序的请求和响应发送到LLM进行推理。在人工智能的背景下,推理是使用训练好的模型,提供新信息,并要求其基于训练分析这些新信息。
在Burp Suite中安装burpference扩展是一项简单的任务。该扩展使用Jython独立JAR。下载JAR后,我将Burp Suite Python环境配置为指向该JAR。此设置可以在扩展选项卡中的“扩展设置”中找到。
配置Python环境后,我下载并解压了最新的burpference版本。Burpference在扩展目录中生成日志文件,因此我需要确保Burp Suite对该位置具有写入权限。接下来,我打开扩展选项卡的“已安装”页面,单击“添加”按钮,并从扩展目录中选择burpference.py文件。
我检查了Burp Suite扩展加载器的输出部分以确保没有错误。扩展加载后,我打开了新的burpference选项卡,并选择了一个指向我的LLM的配置文件。对于burpference的初步实验,我在实验室的一台旧游戏PC上使用Ollama设置了一个小型(70亿参数)的deepseek-r1模型。
为了测试扩展功能,我安装并运行了OWASP故意易受攻击的Juice Shop应用程序的本地实例。
为了减少噪音和LLM上的不必要负载,burpference仅发送范围内请求和响应。因此,我将Juice Shop应用程序添加到Burp Suite的项目范围中。这可以从目标选项卡中通过右键单击应用程序并选择“添加到范围”来完成。
在配置扩展时,我遇到了两个需要排除的陷阱:
- 我在实验室中一个物理分离的主机上运行模型。默认情况下,Ollama绑定到localhost,我最初无法从运行burpference的测试主机与模型通信。我通过在主运行Ollama的主机上设置OLLAMA_HOST环境变量为0.0.0.0来解决此问题。
- 一旦能够与模型通信,burpference开始记录“General Error: cannot make memory view because object does not have the buffer interface”错误消息。这是扩展的一个已知问题,我通过将Jython独立JAR从版本2.7.3更新到版本2.7.4来修复它。
扩展成功与模型通信后,我开始手动浏览Juice Shop应用程序。在浏览应用程序时,我注意到burpference将每个请求和响应发送到LLM,并附带以下提示:
“您是一名Web应用程序渗透测试人员,在参与的攻击阶段对应用程序进行全面操作,并专注于利用安全漏洞。
您的目标是检查通过Burp Suite代理历史记录可用的Web应用程序的HTTP请求和响应,因为我们测试应用程序。
- 请求和响应评估:仔细检查HTTP请求和响应中的安全配置错误、敏感数据暴露和其他漏洞。
- 身份验证和会话管理:评估身份验证机制和会话处理实践的有效性。
- 输入验证和输出编码:识别可能导致注入攻击或跨站脚本(XSS)的输入验证弱点。
使用推理和上下文通过提供可能导致成功利用的示例有效负载和PoC来查找应用程序中的潜在缺陷。
如果您认为存在任何漏洞,请在响应中包含发现的严重性作为前缀(区分大小写),使用以下任何级别:
“CRITICAL” “HIGH” “MEDIUM” “LOW” “INFORMATIONAL”
对于任何信息级发现或观察,例如cookie中缺少“secure”标志。
并非每个请求和响应都可能有任何指示符,在您的方法中要简洁但确定和创造性。
HTTP请求和响应对在以下行下方提供:
[请求和响应JSON below]”
我注意到的第一件事是模型响应缓慢。这可能是由于运行模型的主机的硬件限制。我决定稍后尝试使用更强大的远程OpenAI模型的扩展。扩展发送完整的请求和响应,几乎肯定包含敏感信息,如凭据、会话令牌、响应数据等。在执行渗透测试时,维护客户数据的机密性是高度优先事项,这使得使用您没有完全控制的远程模型成为一个严重问题。因此,我想首先验证扩展的功能并评估其与本地、内部部署模型的性能。在浏览应用程序一段时间后,我花了一些时间在burpference日志页面中查看推理结果。
虽然缓慢,但扩展似乎成功与模型通信并记录推理结果。我观察到LLM审查了请求动词、参数、标头、cookie等,并从安全角度评估了它可以告诉关于应用程序的内容。最终,它没有报告任何我在手动审查请求和响应时不会识别的内容。然而,它确实识别了一个有趣的cookie值welcomebanner_status,设置为dismiss,它甚至构思了一个可能的攻击向量!
即使使用在不太出色的硬件上运行的小型本地模型,我至少可以看到扩展作为第二双眼睛的价值。我继续重新配置扩展以使用远程OpenAI gpt-4o-mini模型。正如您可能期望的那样,我看到更大模型的性能更好。除了识别与CORS和安全标头配置相关的问题外,它还识别了一个它认为易受跨站脚本(XSS)攻击的请求参数。模型甚至提供了一个概念验证有效负载。
我在浏览器中尝试了概念验证请求。虽然XSS有效负载没有触发,但应用程序返回了HTTP 500内部服务器错误。
通过经验丰富的Web应用程序测试人员的眼睛观察此错误响应,似乎很明显我应该在这里查找SQL注入漏洞,但我们的AI助手呢?我很高兴发现burpference在另一个我更冗长的错误消息中识别了SQL语法,我最初忽略了这一点。它确定同一参数可能易受SQL注入攻击,并提供了另一个概念验证利用。
我在浏览器中尝试了此PoC,应用程序响应了包含所有应用程序产品信息的JSON。这表明有效负载成功,应用程序易受SQL注入攻击。
在评估burpference时,我注意到每个推理请求的上下文仅包含单个请求和响应。我认为这可能是扩展当前存在有用性的限制因素。较小的本地模型的响应明确表示,如果提供更多上下文,它可能能够告诉我更多有用信息。我认为很可能有机会扩展扩展的功能,以选择性地在同一推理请求中向模型发送一系列请求和响应,以提供更有用的上下文。
总体而言,我发现扩展作为第二双眼睛查看我的Web流量是有用的,并且它成功引导我发现了有效的漏洞。我喜欢它在后台被动工作,我肯定可以看到自己在Web应用程序渗透测试方法中利用此扩展与内部部署模型。具体来说,我认为在执行新Web应用程序渗透测试开始的手动枚举时启用burpference会很有用。
阅读本系列的第二部分 here: Part 2 – Copilot