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