使用SARIF Explorer简化静态分析结果分类流程

本文介绍了Trail of Bits发布的SARIF Explorer工具,这是一个VSCode扩展,用于高效处理静态分析结果。它支持多文件浏览、结果分类、过滤、GitHub问题创建以及与weAudit的集成,显著提升代码审计效率。

使用SARIF Explorer简化静态分析分类流程

今天我们发布SARIF Explorer,这是我们开发的VSCode扩展,旨在简化静态分析结果的分类过程。在审计过程中,我们大量使用静态分析工具,但分类过程一直很痛苦。我们设计SARIF Explorer在VSCode内提供直观的用户界面,具有以下功能:

  • 打开多个SARIF文件:一次性分类所有结果。
  • 浏览结果:点击结果在VSCode中打开关联位置,还可浏览数据流步骤(如果存在)。
  • 分类结果:通过将结果分类为“bug”、“false positive”或“TODO”并添加自定义文本注释来为每个结果添加元数据。支持键盘快捷键。
  • 过滤结果:按关键词、路径(包含或排除)、级别(“error”、“warning”、“note”或“none”)和状态(“bug”、“false positive”或“TODO”)过滤结果。
  • 打开GitHub问题:复制与结果关联的GitHub永久链接,并直接从SARIF Explorer创建GitHub问题。
  • 发送bug到weAudit:完成分类后,将所有bug发送到weAudit,并继续weAudit工作流。
  • 协作:与同事分享.sarifexplorer文件(例如在GitHub上),以共享注释和分类结果。

您可以通过VSCode市场安装它,并在我们的vscode-sarif-explorer仓库中找到其代码。

为什么我们构建SARIF Explorer

您是否曾经不得不分类数百个静态分析结果,其中许多可能是误报?在Trail of Bits,我们广泛使用Semgrep和CodeQL等静态分析工具,有时规则会产生许多误报,因此这是我们非常熟悉的经历。作为安全工程师,我们使用这些低精度规则,因为如果有一个我们可以自动检测到的bug,我们希望知道它,即使这意味着要筛选大量的误报结果。

很久以前,您会发现我通过费力地查看文本文件或查看小终端窗口来分类这些结果。这是我不喜欢的艰苦工作。您阅读结果的描述,复制代码路径,转到该文件,并分析代码。然后,在另一个文本文件中注释您的结论,并重复。

几年前,我们开始在Trail of Bits使用SARIF Viewer。这是一个巨大的改进,因为它允许我们浏览按规则组织的整洁结果列表,并点击每个结果跳转到相应的代码。然而,它缺乏我们想要的几个功能:

  • 直接在UI中将结果分类为bug或误报的能力
  • 更好的结果过滤
  • 将结果导出为GitHub问题的能力
  • 与weAudit更好的集成——我们的工具用于标记代码区域、将文件标记为已审查等(查看我们最近宣布发布此工具的博客文章!)

这就是为什么我们构建了SARIF Explorer!

SARIF Explorer设计时考虑了用户效率,提供直观的界面,以便用户可以轻松访问我们内置的所有功能,并支持键盘快捷键来浏览和分类结果。

SARIF Explorer静态分析工作流

但为什么我们想要所有这些新功能,以及我们如何使用它们?在Trail of Bits,我们在使用静态分析工具时遵循以下工作流:

  1. 运行所有静态分析工具(配置为输出SARIF文件)。
  2. 打开SARIF Explorer并打开步骤1中生成的所有SARIF文件。
  3. 过滤掉嘈杂的结果。
    • 是否有您不感兴趣的规则?隐藏它们!
    • 是否有您不关心结果的文件夹(例如./third_party文件夹)?过滤掉它们!
  4. 分类结果。
    • 确定每个结果是误报还是bug。
    • 相应地向左或向右滑动(即点击左或右箭头)。
    • 必要时添加注释以提供额外上下文。
    • 与其他团队成员合作?通过将.sarifexplorer文件提交到GitHub来分享您的进度。
  5. 将所有标记为bug的结果发送到weAudit,并继续weAudit工作流。

SARIF Explorer功能

现在,让我们仔细看看SARIF Explorer的功能,这些功能支持此工作流:

  • 打开多个SARIF文件:您可以同时打开和浏览多个SARIF文件的结果。使用“Sarif files”选项卡浏览已打开的SARIF文件列表,并关闭或重新加载任何文件。如果您在工作区中打开SARIF文件,SARIF Explorer也会自动打开它。
  • 浏览结果:您可以通过在“Results”选项卡中点击结果来导航到结果的位置。结果的详细视图包括数据流信息,您可以从源到汇点导航(如果可用)。在下面的GIF中,用户从源(事件消息)跟踪XSS漏洞到汇点(DOM解析器)。
  • 分类结果:您可以通过将结果分类为“bug”、“false positive”或“TODO”并添加自定义文本注释来为每个结果添加元数据。您可以使用鼠标或键盘执行此操作:
    • 使用鼠标:选择结果后,点击“bug”、“false positive”或“TODO”按钮之一进行分类。这些按钮出现在结果旁边和结果的详细视图中。
    • 使用键盘:选择结果后,按右箭头键将其分类为bug,按左箭头键将其分类为误报,按退格键将分类重置为TODO。此方法更高效。
  • 过滤结果:您可以按关键词、路径(包含或排除)、级别(“error”、“warning”、“note”或“none”)和状态(“bug”、“false positive”或“TODO”)过滤结果。您还可以隐藏来自特定SARIF文件或特定规则的所有结果。例如,如果您想删除来自test和extensions文件夹的所有结果,并仅查看分类为TODO的结果,您应该:
    • 将“Exclude Paths Containing”设置为“/test/, /extensions/”
    • 在“Status”部分勾选“Todo”框并取消勾选“Bug”和“False Positive”框
  • 复制GitHub永久链接:您可以复制与结果关联位置的GitHub永久链接。这需要安装weAudit。
  • 创建GitHub问题:您可以为特定结果或给定规则下的所有未过滤结果创建格式化的GitHub问题。这需要安装weAudit。
  • 发送bug到weAudit:您可以将所有分类为bug的结果发送到weAudit(如果发送两次,结果会自动去重)。这需要安装weAudit。
  • 协作:您可以与同事分享.sarifexplorer文件(例如在GitHub上),以共享注释和分类结果。该文件是一个美化后的JSON文件,有助于解决多人并行写入文件时的冲突。

尝试它!

SARIF Explorer和weAudit极大地提高了我们审计代码的效率,我们希望它也能提高您的效率。

去尝试这两个工具,并告诉我们您的想法!我们在vscode-sarif-explorer和vscode-weaudit仓库中欢迎任何错误报告、功能请求和贡献。

如果您对VSCode扩展安全性感兴趣,请查看我们的“Escaping misconfigured VSCode extensions”和“Escaping well-configured VSCode extensions (for profit)”博客文章。

如果您需要保护VSCode扩展或任何其他应用程序的帮助,请联系我们。

如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

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