这是由 David A. Wheeler 开发的“flawfinder”。
Flawfinder 是一个简单的程序,用于扫描 C/C++ 源代码并报告潜在的安全缺陷。它可以作为检查软件漏洞的有用工具,也可以作为静态源代码分析工具的简单入门。它设计为易于安装和使用。Flawfinder 支持通用弱点枚举(CWE),并已正式成为 CWE 兼容工具。它支持多种输出格式,包括 SARIF、SonarQube 和 HTML。
Flawfinder 可以与基于 AI 的代码分析工具结合使用。Flawfinder 的输出可用于快速识别哪些代码区域值得更仔细地关注,然后 AI 系统可以对这些区域进行更详细的分析。
更多信息,请参阅项目网站。
Flawfinder 设计用于 Unix/Linux/POSIX 系统(包括 Cygwin、基于 Linux 的系统、MacOS 和各种 BSD)作为命令行工具。它需要 Python(我们使用 Python 3 进行测试;Python 2.7 应该可以工作,但越来越缺乏测试)。
如果你只是想使用它,你可以通过 Python 的 "pip" 或系统的包管理器安装 flawfinder(flawfinder 在多个系统上都有软件包)。它也支持按照常规的 make install 源码安装方式进行简单安装。文件 INSTALL.md 提供了更详细的安装说明。你不必安装它才能运行它,但安装后使用最方便。
要运行 flawfinder,只需给它一个源文件或目录列表。例如,要递归检查 "src/" 中的所有文件:
flawfinder src/
要递归检查当前目录中的所有文件:
flawfinder ./
命中结果(发现的问题)被赋予风险等级,从 0(非常低风险)到 5(高风险)。默认情况下,显示风险等级 1 或更高的结果。你可以这样只显示当前目录及其子目录中风险等级 4 或更高的结果:
flawfinder --minlevel 4 ./
手册页(flawfinder.1 或 flawfinder.pdf)描述了如何使用 flawfinder(包括其各种选项)以及相关信息(例如如何支持 CWE)。例如,--html 选项以 HTML 格式生成输出。--help 选项给出选项的简要列表。
Flawfinder 必须能够正确解释源代码的字符编码。在绝大多数情况下,这不是问题,特别是如果源代码正确地使用 UTF-8 编码,并且你的系统配置为使用 UTF-8(这是迄今为止最常见的情况)。
然而,如果你运行 Python3 并且存在字符编码问题,flawfinder 可能会停止。常见的症状是如下错误消息:
Error: encoding error in FILENAME 'ENCODING' codec can't decode byte ... in position ...: invalid start byte
不幸的是,Python3 未能提供有用的内置功能来处理这种情况。因此,在不依赖外部库(我们试图避免)的情况下处理这个问题并非易事。
如果你遇到这个问题,请参阅 flawfinder 手册页以获取各种解决方案。最简单的解决方案之一是将源代码和系统配置转换为 UTF-8。你可以使用工具如系统工具 iconv 或 Python 程序 cvt2utf 将源代码转换为 UTF-8;你也可以使用 pip install cvt2utf 安装 cvt2utf。
更技术地说,flawfinder 使用词法扫描来发现可能表明漏洞的令牌(如函数名),估计其风险等级(例如,通过函数调用的文本),并报告结果。Flawfinder 不使用或无法访问大部分关于控制流、数据流、数据类型、命名空间和作用域的信息。因此,flawfinder 必然会产生许多误报,并且无法报告许多漏洞。另一方面,flawfinder 可以在无法构建或无法链接的程序中发现漏洞。flawfinder 也不会像更复杂的工具那样被大多数宏定义和其他怪异之处所困扰。
对于使用 GitHub 的用户,有一个可用的 GitHub Action。
请参阅 action.yml
在 .github/workflows 下创建一个 .yml 文件,内容如下:
- name: flawfinder_scan
uses: david-a-wheeler/[email protected]
with:
arguments: '--sarif ./'
output: 'flawfinder_results.sarif'
你可以向参数添加许多其他选项。例如,--error-level=4 会在 flawfinder 发现等级 4 或更高的漏洞时返回错误。注意 @ 符号后的版本号;你可以选择不同的版本。
你可以在 Marketplace 中找到 action 名称和版本字符串,方法是点击“Use latest/xxx version”按钮。
Flawfinder 与 SonarQube 的 cxx 插件集成。通过在 SonarQube 中“Administration > CXX External Analyers > Other Rule Definitions”下添加 Flawfinder 规则,方法是使用以下选项运行一次 Flawfinder。
flawfinder --listrules --sonar [...]
然后,在 CI/CD 中这样运行 Flawfinder 以生成 SonarQube 可以理解的输出:
flawfinder -CDQ --sonar [...]
你需要将输出重定向到一个文件,然后通过 sonar.cxx.other.reportPaths 选项将该文件加载到 SonarQube 中。
我们欢迎贡献!有关贡献的更多信息,请参阅文件 CONTRIBUTING.md。
Flawfinder 根据 GNU GPL 许可证版本 2 或更高版本(GPL-2.0+)发布。请参阅 COPYING 文件了解许可证信息。