代理增强序列图(PESD):简化复杂Web流量分析与报告

本文介绍了Doyensec开发的代理增强序列图(PESD)工具,用于可视化复杂Web流量,支持OAuth2、SAML等模板,提升安全测试效率和报告质量,适用于多域和单域场景分析。

介绍代理增强序列图(PESD)

2023年2月14日 - 作者:Francesco Lacerenza

PESD导出工具现已公开!我们发布了一款内部工具,以加速复杂功能流中的测试和报告工作。我们兴奋地宣布,PESD导出工具现已在Github上可用。

现代Web平台设计涉及与其他应用程序和云服务的集成,以添加功能、共享数据并丰富用户体验。由此产生的功能流具有多个状态更改步骤,涉及复杂的信任边界和参与者之间的责任分离。

在这种情况下,Web安全专家如果希望通过可视化整个功能逻辑来支持分析,就必须手动建模序列图。我们都知道,手动构建序列图是繁琐、容易出错、耗时的,有时甚至不切实际(处理单个流中超过十条消息)。

代理增强序列图(PESD)是我们的内部Burp Suite扩展,用于以可视化Web流量的方式,促进复杂功能流场景中的分析和报告。

认识格式

代理增强序列图(PESD)是一种特定的消息语法,适用于序列图模型,旨在提供有关所表示HTTP流量的丰富信息。使用MermaidJS序列图语法来渲染最终图表。

虽然软件工程中的经典序列图用于抽象可视化,所有信息都由图表本身携带,但PESD设计用于以元数据形式包含与底层HTTP流量相关的详细信息。

格式名称中的“增强”部分源于图表与元数据的可链接性。实际上,图表中的HTTP事件被标记为标志,可用于从元数据中访问特定信息。

例如,URL查询参数将在箭头事件中找到,作为可点击展开的UrlParams。

格式的一些关键特性:

  • 可视化分析,特别适用于多参与者场景中的复杂应用程序流,其中列出的代理视图不适合可视化抽象逻辑
  • 测试人员特定的语法,以促进分析和整体可读性
  • 从Web流量解析的元数据,以支持分析的进一步自动化
  • 可用于报告目的,如当前实现的文档或概念验证图表

PESD导出工具 - Burp Suite扩展

该扩展处理Burp Suite流量到PESD格式的转换,并提供了执行模板以丰富导出结果的可能性。

一旦加载,将项目发送到扩展将直接导致导出所有活动设置。

目前支持两种操作模式:

  • 域作为参与者 - 流量中涉及的每个域在图表中表示为参与者。适用于多域流分析
  • 端点作为参与者 - 流量中涉及的每个端点(路径)在图表中表示为参与者。适用于单域流分析

导出能力

  • 可扩展元数据。可以点击带下划线的标志,以在可滚动的弹出窗口中显示来自流量的底层元数据
  • URL路径中的掩码随机值。在路径段中识别的UUID和伪随机字符串映射到变量名<UUID_N> / <VAR_N>。重新渲染将重塑图表以提高流可读性。每个具有相同值的出现保持相同的名称
  • 注释。Burp Suite中的注释转换为结果图表中的注释。在Burp Suite注释中使用
    以在PESD导出中获得多行注释
  • 保存为:
    • SVG格式的序列图
    • Markdown文件(MermaidJS语法)
    • JSON格式的流量元数据。在格式定义页面的“导出部分”阅读有关元数据结构的信息

使用模板扩展图表、语法和元数据

PESD导出工具支持通过模板执行来扩展语法和元数据。

目前支持的模板包括:

  • OAuth2 / OpenID Connect - 模板匹配标准OAuth2/OpenID Connect流,并添加相关标志和流框架
  • SAML SSO - 模板匹配SAML V2.0的单点登录流,并添加相关标志和流框架

模板引擎还确保在交叉流和不良实现的情况下的一致性。当前检查防止嵌套流框架,因为它们在真实场景中找不到。结果markdown中的嵌套或未关闭框架被删除和合并,以允许MermaidJS渲染。

注意:每当涉及受支持框架的导出中未显示流框架时,强烈建议手动审查。此行为应被视为应用程序使用非标准实现的警告。

您想通过编写自己的模板来贡献吗?请遵循模板实现指南。

为什么选择PESD?

在测试计划和审计期间

PESD导出允许可视化复杂功能的全部内容,同时仍然能够访问其底层逻辑的核心部分。每个参与者的角色可以轻松推导,并用于在深入Burp Suite之前构建测试计划。

它还可以用于通过与标准框架的差异,得益于HTTP消息语法以及OAuth2/OpenID和SAML SSO模板。

特别是,模板使测试人员能够通过在结果图表中匹配标准流来识别不常见的实现。通过这样做,可以一目了然地发现自定义变体。

以下详细示例摘自我们的测试活动:

  • SAML响应双重支出。SAML响应被发送两次,其中一次提交发生在流框架之外
  • 带有后续OAuth2的OIDC。在这种情况下,CLIENT.com是第一个流中的SP(与Microsoft的OIDC),然后在第二个流(OAuth2)中是与租户子域的IdP。

在报告期间

研究输出的主要好处是将PESD生成的图表与漏洞分析相结合。在报告中包含PoC特定导出允许以直接的方式描述问题。

导出使测试人员能够通过指定图表中的请求ID并在描述中链接它来引用流中的请求。

漏洞描述可以适应不同的测试方法:

  • 黑盒测试 - 描述可以引用流中感兴趣的序列号以及观察到的行为和缺陷
  • 白盒测试 - 描述可以直接引用代码库中识别的端点处理函数。此结果特别有助于帮助读者将代码片段与它们在整个流中的位置联系起来。

在这个意义上,PESD可以积极影响复杂功能流中漏洞的报告风格。

以下基本示例摘自我们的客户参与之一。

报告示例 - 通过未经身份验证的内部API端点任意用户访问

超级管理员使用的内部(Intranet)Web应用程序允许应用程序内的特权用户获取对面向Web平台中客户帐户的临时访问。

为了限制对客户数据的访问,支持访问必须由面向Web平台中的租户管理员授予。通过这种方式,内部应用程序的管理员仅通过有效授权获得对组织的用户访问。

以下序列图表示在内部应用程序中用户模拟访问期间截获的流量:

处理第一个请求(1)的函数检查所请求用户租户的访问授权是否存在。如果有有效授权,则返回为AWS API Gateway中定义的内部API的重定向URL。该API仅在可通过VPN访问的内部网络中公开。

第二个请求(3)指向AWS的API Gateway。端点由AWS Lambda函数处理,该函数将包含tenantId、user_id等的URL参数作为输入。返回的输出包含所请求模拟会话的身份验证详细信息:access_token、refresh_token和user_id。应注意,内部API Gateway端点未强制执行调用者的身份验证和授权。

在第三个请求(5)中,获得的身份验证详细信息提交到web-facing.platform.com,并设置会话。在此步骤之后,内部管理员用户在面向Web平台中作为指定目标用户进行身份验证。

在所描述的流中,身份验证和授权检查(请求1的处理)与实际创建模拟会话(请求3的处理)解耦。

因此,任何可以访问内部网络(VPN)的员工都能够调用负责发布模拟会话的内部AWS API,并获取对面向Web平台中任何用户的访问。通过这样做,绕过了对内部应用程序的有效超级管理员访问(身份验证)和特定目标用户访问授权(授权)的需求。

敬请期待!

更新即将到来。我们期待收到新的改进想法,以进一步丰富PESD。

欢迎通过拉取请求、错误报告或增强功能做出贡献。

这个项目是在Doyensec研究岛上由Francesco Lacerenza用爱制作的。该扩展是在他实习期间用50%的研究时间开发的。

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