英语法语西班牙语

Ad


OnWorks 网站图标

探伤者 - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行缺陷查找器

这是可以使用我们的多个免费在线工作站之一(例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器)在 OnWorks 免费托管服务提供商中运行的命令缺陷查找器

程序:

您的姓名


缺陷查找器 - 从词法上查找源代码中的潜在安全缺陷(“命中”)

概要


探伤者 [ - 帮帮我|-h[- 版[--列表规则]
[--允许链接[--followdotdir[--无链接]
[--补丁=文件名|-P 文件名]
[--输入|-I[ --最低级别=X | -m X [- 假阳性|-F]
[--从不忽略|-n]
[--正则表达式=模式 | -e 模式]
[- 语境|-c[- 列|-C[--仅数据|-D[--html|-H[- 即时|-i]
[- 单线|-S[--省略时间[- 安静的|-Q]
[--加载命中列表=F[--保存命中列表=F[--diffhitlist=F]
[--] [ 资源 文件 or 资源 目录 ]+

商品描述


Flawfinder 搜索 C/C++ 源代码,寻找潜在的安全漏洞。 到
运行缺陷查找器,只需给缺陷查找器一个目录或文件列表。 对于每个目录
给定,在该目录中具有 C/C++ 文件扩展名的所有文件(及其
子目录,递归)将被检查。 因此,对于大多数项目,只需给出
缺陷查找器源代码最顶层目录的名称(使用``.''表示当前
目录),而缺陷查找器将检查项目的所有 C/C++ 源代码。 如果你
只想拥有 变化 审查,保存这些更改的统一差异(由 GNU 创建
"diff -u" 或 "svn diff" 或 "git diff") 并使用 --patch (-P) 选项。

Flawfinder 将生成一个“命中”(潜在的安全缺陷)列表,按风险排序; 这
首先显示最危险的命中。 风险级别显示在方括号内并有所不同
从 0,很小的风险,到 5,很大的风险。 该风险水平不仅取决于
函数,但取决于函数参数的值。 例如,常数
在许多情况下,字符串通常比完全可变的字符串风险更小,并且在那些
命中将具有较低风险级别的上下文。 Flawfinder 知道 gettext(一个常见的
国际化程序库)并将处理通过的常量字符串
gettext 就好像它们是常量字符串一样; 这减少了错误命中的数量
国际化的程序。 Flawfinder 将使用 _T() 和
_TEXT(),用于处理国际化程序的通用 Microsoft 宏。 探伤者
正确忽略注释和字符串中的大多数文本。 通常探伤仪显示所有
风险级别至少为 1 的命中,但您可以使用 --minlevel 选项仅显示
如果您愿意,可以点击更高的风险级别。 命中描述还注明了相关的 Common
弱点枚举 (CWE) 标识符在括号中,如下所述。 探伤者
正式 CWE 兼容。

并非每次命中实际上都是安全漏洞,也不是每个安全漏洞
必然被发现。 然而,探伤仪可以帮助寻找和去除
安全漏洞。 使用探伤仪的一种常见方法是首先将探伤仪应用于
一组源代码并检查风险最高的项目。 然后,使用 --inputs 来检查
输入位置,并检查以确保只有合法和安全的输入值
从不受信任的用户接受。

一旦你审计了一个程序,你就可以标记那些实际上很好但是的源代码行
引起虚假警告,以便探伤者停止抱怨它们。 标记一个
行,以便抑制这些警告,在
同一行(在源代码之后)或全部在前一行中。 评论
必须具有以下两种格式之一:

· // 探伤者:忽略

· /* 缺陷查找器:忽略 */

出于兼容性考虑,您可以将这些中的“Flawfinder:”替换为“ITS4:”或“RATS:”
特殊格式的评论。 由于这些行可能是错误的,您可以使用
--neverignore 选项,这会导致探伤者无论如何都不会忽略任何行
注释指令说(更令人困惑的是,--neverignore 忽略了忽略)。

Flawfinder 使用称为“规则集”的内部数据库; 规则集标识
是导致安全漏洞的常见原因的功能。 标准规则集包括一个大的
不同的潜在问题的数量,包括可能影响任何问题的一般问题
C/C++ 程序,以及许多特定的类 Unix 和 Windows 函数
特别有问题。 --listrules 选项报告当前规则的列表和
他们的违约风险水平。 如上所述,在给定的环境中发现的每个潜在的安全漏洞
源代码文件(与规则集中的条目匹配)称为“命中”,并且
在程序的任何特定运行期间发现的命中称为“命中列表”。
可以保存(使用--savehitlist),重新加载以重新显示(使用--loadhitlist),以及
您只能显示与另一次运行不同的命中(使用 --diffhitlist)。

Flawfinder 是一个简单的工具,导致一些基本的优点和缺点。 探伤工程
通过进行简单的词法标记(跳过注释并正确标记字符串),
寻找与数据库匹配的令牌(特别是寻找函数调用)。
因此,Flawfinder 类似于 RATS 和 ITS4,它们也使用简单的词法标记化。
Flawfinder 然后检查函数参数的文本以估计风险。 不像
夹板、gcc 的警告标志和 clang 等工具,ffectfinder 可以 不能 使用或拥有
在搜索时访问有关控制流、数据流或数据类型的信息
潜在漏洞或估计风险水平。 因此,探伤者将
必然会对漏洞产生许多误报,并且未能报告许多
漏洞。 另一方面,缺陷查找器可以发现程序中的漏洞
无法构建或无法链接。 它通常可以与甚至无法运行的程序一起使用
编译(至少通过审阅者的工具)。 Flawfinder 也不会被混淆
更复杂的工具有问题的宏定义和其他奇怪的东西。
Flawfinder 也可用作对静态分析工具的简单介绍
一般,因为它易于开始使用且易于理解。

命令行上给出的任何文件名都将被检查(即使它没有通常的
C/C++ 文件扩展名); 因此,您可以强制探伤者检查您的任何特定文件
欲望。 在递归搜索目录时,缺陷查找器仅打开并检查
具有 C/C++ 文件扩展名的常规文件。 Flawfinder 假定文件是
C/C++ 文件,如果它们具有扩展名“.c”、“.h”、“.ec”、“.ecp”、“.pgc”、“.C”、“.cpp”、
“.CPP”、“.cxx”、“.cc”、“.CC”、“.pcc”、“.hpp”或“.H”。 文件名“-”表示
标准输入。 为防止安全问题,特殊文件(如设备特殊文件
和命名管道)总是被跳过,并且默认情况下符号链接被跳过(
--allowlink 选项遵循符号链接)。

在命中列表之后是​​结果的简短摘要(使用 -D 删除此
信息)。 它将显示命中数、分析的行数(由 wc -l 报告),以及
分析的物理源代码行 (SLOC)。 物理 SLOC 是一个非空白、非
评论行。 然后它会显示每个级别的点击次数; 请注意,会有
永远不会在低于 minlevel(默认为 1)的级别上命中。 因此,“[0] 0 [1] 9”
表示在级别 0 时报告了 0 次命中,而在级别 1 时报告了 9 次命中
报道。 接下来它将显示给定级别或更大级别的点击次数(因此级别 3+
具有第 3、4 和 5 级命中数的总和)。 因此,“[0+] 37”的条目
显示在 0 级或更高级别有 37 次点击(0+ 条目将始终相同
如上面的“命中”数)。 接下来显示每个 KSLOC 的点击次数; 这是每个“级别或
更高”的值乘以 1000 并除以物理 SLOC。如果符号链接是
跳过,报告这些的计数。 如果命中被抑制(使用“忽略”
如上所述的源代码注释中的指令),则报告被抑制的数字。
显示要包含在报告中的最低风险级别; 默认情况下这是 1
(使用 --minlevel 来改变它)。 总结以重要提醒结束:并非每一次点击
必然是安全漏洞,可能还有其他安全漏洞
工具未报告。

Flawfinder 是在 GNU GPL 许可证版本 2 或更高版本 (GPLv2+) 下发布的。

Flawfinder 的工作原理类似于另一个程序 ITS4,它不是完全开源的
软件(定义在开源定义中)或自由软件(定义在开源定义中)
自由软件基金会)。 Flawfinder 的作者从未见过 ITS4 的源代码。

简要 在线课程


下面是一个关于如何使用探伤仪的简短示例。 想象一下,你有 C/C++
一些名为 xyzzy 的程序的源代码(您可能已经或可能没有编写),以及
您正在寻找安全漏洞(以便您可以在客户之前修复它们
遇到漏洞)。 对于本教程,我假设您使用的是 Unix-
像系统,例如 Linux、OpenBSD 或 MacOS X。

如果源代码在名为 xyzzy 的子目录中,您可能首先打开一个
文本窗口并使用探伤仪的默认设置,分析程序并报告一个
潜在安全漏洞的优先列表(“较少”只是确保
结果留在屏幕上):
探伤仪xyzzy | 较少的

此时,您将看到大量条目。 每个条目都有一个文件名,一个
冒号、行号、括号中的风险级别(其中 5 是最危险的)、类别、
函数的名称,以及为什么探伤者认为这条线是一条线的描述
脆弱性。 Flawfinder通常按风险级别排序,首先显示风险最高的项目;
如果您的时间有限,最好开始处理风险最高的项目
继续,直到你的时间用完。 如果您只想将显示限制为风险
一定的风险级别或更高,使用 --minlevel 选项。 如果你得到一个
异常数量的误报,因为变量名看起来很危险
函数名称,使用 -F 选项删除有关它们的报告。 如果你不明白
错误信息,请查看文档,如 写作 安全 训练课程 Linux
Unix的 如何http://www.dwheeler.com/secure-programs⟩ 在 http://www.dwheeler.com/secure-
程序,提供有关编写安全程序的更多信息。

一旦你发现问题并理解它,你就可以解决它。 有时你可能
想重新做分析,都是因为行号会改变 确保;确定
新代码没有引入不同的漏洞。

如果您确定某条线路不是真正的问题,并且您确定这一点,您可以
在有问题的行之前或上插入一条评论,如
/* 探伤者:忽略 */
以防止它们出现在输出中。

完成后,您应该返回并搜索程序的输入,以使
确保程序严格过滤任何不受信任的输入。 探伤仪可以
使用 --inputs 选项识别许多程序输入,如下所示:
探伤者 --inputs xyzzy

Flawfinder 可以很好地与文本编辑器和集成开发环境集成;
有关更多信息,请参见示例。

Flawfinder 包括许多其他选项,包括创建 HTML 版本的选项
输出(对于更漂亮的显示很有用)。 下一节将详细介绍这些选项
详情。

配置


Flawfinder有很多选项,可以分组到控制自己的选项中
文档,选择输入数据,选择要显示的命中,选择输出格式,
并执行命中列表管理。 Flawfinder 支持在
POSIX(第 7 期,2013 版)部分“实用程序约定”。 它还支持 GNU
长选项(形式的双破折号选项 --选项) 中的定义 GNU C 自学资料库
参考文献 用户手册 ``程序参数语法约定''和 GNU 编码 标准
``命令行接口标准''。 长选项参数可以提供为
``--name=value'' 或 ``-name value''。 某些选项只能使用 more 访问
可读的 GNU 长选项约定; 旧版本也支持常用选项
单字母选项约定。

配套文档
- 帮帮我

-h 显示使用(帮助)信息。

- 版 显示(仅)版本号并退出。

--列表规则 列出触发进一步检查的条款(代币),它们的违约风险
级别和默认警告(包括 CWE 标识符,如果
适用),全部以制表符分隔。 这些术语主要是潜在的名称-
危险的功能。 请注意,某些报告的风险级别和警告
特定代码可能与默认代码不同,具体取决于术语的含义
用过的。 如果您不想要通常的标题,请与 -D 结合使用。 探伤者
1.29 版本将分隔符从空格改为制表符,并添加了默认值
警告字段。

选择 输入 时间
--允许链接 允许使用符号链接; 通常会跳过符号链接。 别
如果您正在分析其他人的代码,请使用此选项; 攻击者可以做很多事情
启用此选项会导致分析出现问题的情况。 为了
例如,攻击者可以插入文件的符号链接,例如 / etc / passwd文件
(泄漏有关文件的信息)或创建一个循环,这将
导致探伤者“永远”运行。 启用此功能的另一个问题
选项是,如果使用符号多次引用同一个文件
链接,它将被多次分析(因此多次报告)。
请注意,探伤者已经包含一些针对符号链接的保护
到特殊文件类型,例如设备文件类型(例如,/dev/zero 或
C:\mystuff\com1)。 请注意,对于 1.01 版及之前的缺陷查找器,这是
默认值。

--followdotdir
输入名称以“.”开头的目录。 通常这样的目录是
忽略,因为它们通常包含版本控制私有数据(例如
.git/ 或 .svn/)、配置等。

--无链接 忽略。 从历史上看,这禁用了符号链接; 这种行为
现在是默认值。

--补丁=补丁文件

-P 补丁文件
检查选定的文件或目录,但只报告命中的行
由给定的补丁文件添加或修改。 补丁文件必须在
公认的统一差异格式(例如,GNU“diff -u old new”的输出,
“svn diff”或“git diff [提交]”)。 Flawfinder 假设补丁有
已经应用于文件。 补丁文件还可以包括对
不相关的文件(它们将被简单地忽略)。 中给出的行号
补丁文件用于确定更改了哪些行,因此如果您有
自从创建补丁文件以来修改了文件,重新生成补丁文件
第一的。 注意补丁文件中给出的新文件的文件名
必须完全匹配,包括大小写、路径前缀和目录
分隔符(\ 与 /)。 只接受统一的差异格式(GNU 差异,svn
diff, git diff 输出没问题); 如果你有不同的格式,再次
首先再生它。 仅在结果更改的行上发生命中,或
紧接在它们的上方和下方,进行报告。 这个选项意味着
——从不理会。

选择 点击 屏 显:
--输入

-I 只显示从程序外部获取数据的函数; 这也设置
最小级别为 0。

--最低级别=X

-m X 将最低风险级别设置为 X 以包含在命中列表中。 这可以从 0 (``no
风险'') 到 5 (``最大风险''); 默认值为 1。

- 假阳性

-F 不要包括可能是误报的命中。 目前,这意味着
如果函数名后面没有跟“(”,那么函数名将被忽略,并且
未注明字符数组的声明。 因此,如果你使用了一个变量
到处都命名为“访问”,这将消除对这个普通的引用
多变的。 这不是默认设置,因为这也增加了
错过重要的点击; 特别是#define 子句和调用中的函数名
通过函数指针将被遗漏。

--从不忽略

-n 永远不要忽视安全问题,即使它们在一个“忽略”指令中
评论。

--正则表达式=模式

-e 模式
仅报告与正则表达式模式 PATTERN 匹配的文本的命中。
例如,要仅报告包含文本“CWE-120”的命中,请使用``--regex
CWE-120''。 这些选项标志名称与 grep 相同。

选择 输出 格式
- 列

-C 显示每个命中的列号(以及文件名和行号);
这通过在行号后添加冒号和列号来显示
行(一行中的第一个字符是列号 1)。 这很有用
用于可以跳转到特定列的编辑器,或用于与其他
工具(例如那些进一步过滤掉误报的工具)。

- 语境

-c 显示上下文,即具有“命中”/潜在缺陷的行。 默认情况下
警告后立即显示行。

--仅数据

-D 不显示页眉和页脚。 将此与 --quiet 一起使用以查看
数据本身。

--html

-H 将输出格式化为 HTML 而不是简单的文本。

- 即时

-i 立即显示命中(不要等到结束)。

- 单线

-S 显示为每次点击的单行文本输出。 对互动有用
用编译工具。

--省略时间 省略计时信息。 这对于探伤仪的回归测试很有用
本身,因此输出不会根据分析的时间长短而变化
需要。

- 安静的

-Q 不显示状态信息(即正在检查哪些文件)
分析正在进行中。

暗杀名单 管理
--保存命中列表=F
将所有结果命中(“命中列表”)保存到 F。

--加载命中列表=F
从 F 加载命中列表,而不是分析源程序。 警告:做 不能
从不受信任的来源加载命中列表(出于安全原因)。

--diffhitlist=F
仅显示不在 F 中的命中(加载或分析)。 F 可能是创建的
以前使用--savehitlist。 警告:做 不能 来自不受信任的差异命中列表
来源(出于安全原因)。 如果未提供 --loadhitlist 选项,
这将显示分析的源代码文件中没有的命中
之前存储在 F. 如果与 --loadhitlist 一起使用,这将显示
加载的命中列表中的命中不在 F 中。差异算法是
保守的; 命中只有在它们具有相同的情况下才被认为是“相同的”
文件名、行号、列位置、函数名和风险级别。

示例


以下是如何调用探伤仪的各种示例。 第一个例子显示了各种
简单的命令行选项。 Flawfinder 旨在与文本编辑器和
集成开发环境,所以下一节将展示如何集成缺陷查找器
进入 vim 和 emacs。

简易 命令行 选项
探伤者 /usr/src/linux-3.16
检查目录 /usr/src/linux-3.16 中的所有 C/C++ 文件及其所有
子目录(递归),报告找到的所有命中。 默认情况下
缺陷查找器将跳过名称以开头的符号链接和目录
一段时间。

探伤者 --最小级别=4 .
检查当前目录及其子目录中的所有 C/C++ 文件
(递归); 仅报告 4 级及以上的漏洞(两个最高的
风险等级)。

探伤者 --输入 目录
检查 mydir 及其子目录中的所有 C/C++ 文件(递归),以及
报告接受输入的函数(以便您可以确保它们过滤
适当输入)。

探伤者 --从不忽略 目录
检查目录 mydir 及其子目录中的所有 C/C++ 文件,
甚至包括在代码注释中标记为忽略的命中。

探伤者 -量子点 目录
检查 mydir 并仅报告实际结果(删除标题和
输出的页脚)。 如果输出将通过管道输入,则此表单很有用
进一步分析的其他工具。 -C (--columns) 和 -S (--singleline)
如果您将数据通过管道传输到其他工具,则选项也很有用。

探伤者 -QDSC 目录
检查 mydir,仅报告实际结果(无页眉或页脚)。 每个
命中在一行上报告,列数被报告。 这可以是一个
如果您将探伤仪的输出提供给其他工具,则该命令很有用。

探伤者 - 安静的 --html - 语境 目录 > 结果.html
检查目录 mydir 及其子目录中的所有 C/C++ 文件,以及
生成结果的 HTML 格式版本。 源代码管理
系统(例如 SourceForge 和 Savannah)可能会使用这样的命令。

探伤者 - 安静的 --保存命中列表 保存.hits *.[频道]
检查当前目录中的所有 .c 和 .h 文件。 不报告
处理状态,并将结果命中列表(所有命中的集合)保存在
文件saved.hits。

探伤者 --差异列表 保存.hits *.[频道]
检查当前目录中的所有 .c 和 .h 文件,并显示任何命中
不在文件saved.hits中。 这可用于仅显示
修改后的程序中的“新”漏洞,如果saved.hits是从
正在分析的程序的旧版本。

探伤者 - 修补 最近的补丁 .
递归检查当前目录,但只报告被
在已应用的补丁文件中更改或添加名为 最近的补丁.

探伤者 --正则表达式 “CWE-120|CWE-126” src /
检查目录 SRC 递归,但只报告 CWE-120 或
CWE-126 适用。

调用中 VIM
文本编辑器 vim 包含一个“快速修复”机制,可以很好地与缺陷查找器配合使用,因此
您可以轻松查看警告消息并跳转到相关源代码。

首先,您需要调用缺陷查找器来创建命中列表,有两种方法可以
做这个。 第一种方法是先启动缺陷查找器,然后(使用其输出)调用
维姆。 第二种方式是启动(或继续运行)vim,然后调用ffectfinder
(通常来自 vim 内部)。

对于第一种方式,运行缺陷查找器并将其输出存储在某些 FLAWFILE(例如“flawfile”)中,
然后使用它的 -q 选项调用 vim,像这样:“vim -q 缺陷文件”。 第二种方式
(在启动 vim 后启动探查器)有很多方法可以完成。 一种是调用
使用 shell 命令“:!flawfinder-command > FLAWFILE”来查找缺陷,然后使用
命令“:cf FLAWFILE”。 另一种方法是将缺陷查找器命令存储在您的
makefile(比如像“flaw”这样的伪命令),然后运行“:make fault”。

在所有这些情况下,您都需要一个命令来运行缺陷查找器。 一个似是而非的命令,
将每个命中放在自己的行 (-S) 中,并删除会混淆的页眉和页脚
这是:

探伤者 -SQD .

您现在可以使用各种编辑命令来查看结果。 命令“:cn”显示
下一个打击; ":cN" 显示前一个命中,而 ":cr" 倒回到第一个命中。
":copen" 将打开一个窗口来显示当前的点击列表,称为 "quickfix
window"; ":cclose" 将关闭 quickfix 窗口。如果使用的窗口中的缓冲区有
更改了,并且错误在另一个文件中,跳转到错误将失败。 你必须
确保窗口包含一个缓冲区,在尝试跳转到一个缓冲区之前可以放弃该缓冲区
新文件,比如通过保存文件; 这可以防止意外的数据丢失。

调用中 emacs的
文本编辑器/操作系统 emacs 包括“grep 模式”和“编译模式”
与探伤器配合良好的机制,可以轻松查看警告消息、跳转
到相关的源代码,并修复您发现的任何问题。

首先,您需要调用缺陷查找器来创建警告消息列表。 您可以使用
“grep 模式”或“编译模式”来创建这个列表。 通常“grep 模式”更方便;
它保持编译模式不变,因此您可以在更改后轻松重新编译
某物。 但是,如果要跳转到命中的确切列位置,请编译
mode 可能更方便,因为 emacs 可以使用探伤仪的列输出
无需任何特殊配置,直接跳转到正确的位置。

要使用 grep 模式,请输入命令“Mx grep”,然后输入所需的探伤仪
命令。 要使用编译模式,请输入命令“Mx compile”并输入所需的
探伤命令。 这是一个元键命令,因此您需要使用元键
您的键盘(这通常是 ESC 键)。 与所有 emacs 命令一样,您需要
输入“grep”或“compile”后按回车键。 所以在很多系统上,grep 模式是
通过键入 ESC xgrep RETURN 调用。

然后您需要输入一个命令,如有必要,删除之前存在的任何内容。 一种
合理的命令是:

探伤者 -SQDC .

此命令使每个命中报告都成为一行,这对于工具来说更容易
处理。 quiet 和 dataonly 选项删除了不需要的其他状态信息
在 emacs 中使用。 尾随句号表示当前目录和所有
在后代中搜索 C/C++ 代码,并分析缺陷。

一旦您调用了缺陷查找器,您就可以使用 emacs 在其结果中跳转。 这
命令 Cx ` (Control-x backtick) 访问下一个警告的源代码位置
信息。 Cu Cx ` (control-u control-x backtick) 从头开始​​重新启动。 你可以
通过移动到该命中消息来访问任何特定错误消息的来源
*编译*缓冲区或*grep*缓冲区并输入返回键。 (技术说明:在
编译缓冲区,这会调用 compile-goto-error。)您也可以单击 Mouse-2
错误消息上的按钮(您不需要先切换到*编译*缓冲区)。

如果要使用 grep 模式跳转到命中的特定列,则需要
专门配置 emacs 来做到这一点。 为此,请修改 emacs 变量“grep-regexp-
alist”。这个变量告诉 Emacs 如何解析“grep”命令的输出,类似于
列出各种格式的编译错误的变量“compilation-error-regexp-alist”
消息。

调用中 集成 研发支持 环境 (IDE)
对于(其他)IDE,请查阅您的 IDE 插件集。

COMMON 弱点 枚举 (CWE)


Common Weakness Enumeration (CWE) 是“常用软件的正式列表或字典”
软件架构、设计、代码或实现中可能出现的弱点
可能导致可利用的安全漏洞...创建作为一种通用语言
用于描述软件安全弱点''(http://cwe.mitre.org/about/faq.html)。 对于
有关 CWE 的更多信息,请参阅 http://cwe.mitre.org.

Flawfinder 支持 CWE 并正式与 CWE 兼容。 命中描述通常
在括号中包含相关的通用弱点枚举 (CWE) 标识符
已知是相关的 CWE。 例如,许多与缓冲区相关的命中提到
CWE-120,“不检查输入大小的缓冲区复制”的 CWE 标识符(又名
``经典缓冲区溢出''')。 在少数情况下,可能会列出多个 CWE 标识符。
HTML 报告还包括指向 MITRE 托管的 CWE 定义的超文本链接。 在
这样,探伤仪旨在满足 CWE 输出要求。

探伤者报告的许多 CWE 都在 25 年 CWE/SANS 前 2011 名名单中
(http://cwe.mitre.org/top25/)。 很多人会想在这个列表中搜索 CWE,
比如CWE-120(经典缓冲区溢出),当探伤者映射到一个更
比前 25 项更一般,它将其列为更一般:更具体(例如,
CWE-119:CWE-120),其中更一般的是实际映射。 如果探伤者映射到更多
特定的 CWE 项目是前 25 个项目的特定案例,它在表格中列出
top-25/更具体(例如,CWE-362/CWE-367),其中真实映射更具体
CWE 入场。 如果同一个条目映射到多个 CWE,则 CWE 之间用逗号分隔
(这经常发生在 CWE-20,不正确的输入验证中)。 这简化了搜索
某些 CWE。

CWE 2.7 版(23 年 2014 月 XNUMX 日发布)用于映射。 目前的 CWE
映射选择工具可以确定的最具体的 CWE。 理论上,大多数 CWE
安全元素(工具搜索的签名/模式)理论上可以是
映射到 CWE-676(潜在危险功能的使用),但这样的映射不会
有用。 因此,在可以找到更具体的映射的地方是首选。 探伤者
是词法分析工具; 因此,它比它更具体是不切实际的
当前实现的映射。 这也意味着它不太可能需要太多
更新地图货币; 它只是没有足够的信息来改进为
CWE 更改通常会影响的详细 CWE 级别。 CWE 标识符列表
是使用“make show-cwes”自动生成的,所以有信心这个列表
是正确的。 如果您发现任何问题,请将 CWE 映射问题报告为错误。

Flawfinder 可能无法找到漏洞,即使缺陷查找器涵盖了这些 CWE 之一
弱点。 也就是说,缺陷查找器确实找到了它所涵盖的 CWE 列出的漏洞,
在许多情况下,它不会报告没有这些漏洞的行。 因此,作为
任何打算与 CWE 兼容的工具都需要,探伤者的错误率
阳性率低于 100%,假阴性率低于 100%。 探伤几乎
每当它找到与 CWE 安全元素(签名/模式为
在其数据库中定义),尽管某些晦涩的构造可能会导致它失败(请参阅 BUGS
下文)。

Flawfinder 可以报告以下 CWE(这些是探伤者涵盖的 CWE;
``*'' 标记在 CWE/SANS 前 25 名列表中的那些):

· CWE-20:不正确的输入验证

· CWE-22:对受限目录的路径名限制不当(“路径遍历”)

· CWE-78:OS 命令中使用的特殊元素的不当中和(``OS 命令
注射'')*

· CWE-119:内存缓冲区边界内的操作限制不当(a
CWE-120* 的父级,因此显示为 CWE-119:CWE-120)

· CWE-120:不检查输入大小的缓冲区复制(“经典缓冲区溢出”)*

· CWE-126:缓冲区重读

· CWE-134:不受控制的格式字符串*

· CWE-190:整数溢出或环绕*

· CWE-250:使用不必要的特权执行

· CWE-327:使用损坏的或有风险的加密算法*

· CWE-362:使用不正确同步的共享资源并发执行
(``竞争条件'')

· CWE-377:不安全的临时文件

· CWE-676:潜在危险功能的使用*

· CWE-732:关键资源的权限分配不正确*

· CWE-785:使用没有最大大小缓冲区的路径操作函数(子
CWE-120*,因此显示为 CWE-120/CWE-785)

· CWE-807:在安全决策中依赖不受信任的输入*

· CWE-829:包含不受信任的控制领域的功能*

您可以使用“--regex”(-e) 选项选择要报告的特定 CWE 子集。
此选项接受正则表达式,因此您可以选择多个 CWE,例如,``--regex
“CWE-120|CWE-126”''。 如果您在命令行上使用“|”选择多个 CWE,您将
通常需要引用参数(因为未引用的“|”是管道符号)。
Flawfinder 旨在满足 CWE-Searchable 要求。

如果您的目标是报告文件中列出的 CWE 的子集,则可以实现
在类 Unix 系统上使用 ``--regex'' aka ``-e'' 选项。 该文件必须在
正则表达式格式。 例如,``flawfinder -e $(cat file1)'' 只会报告
匹配“file1”中的模式的命中。 如果文件 1 包含“CWE-120|CWE-126”
只会报告与这些 CWE 匹配的命中。

所有 CWE 安全元素的列表(探伤者寻找的签名/模式)
可以使用“--listrules”选项找到。 每行列出签名令牌
(通常是函数名称)可能导致命中、默认风险级别和
默认警告(包括默认的 CWE 标识符)。 对于大多数目的,这是
如果您想查看哪些 CWE 安全元素映射到哪些 CWE,或者
逆转。 例如,要查看映射到的大部分签名(函数名称)
CWE-327,没有看到默认的风险级别或详细的警告文本,运行``flawfinder
--listrules | grep CWE-327 | 剪切 -f1''。 您还可以在没有 CWE 映射的情况下查看令牌
这样通过运行``flawfinder -D --listrules | grep -v CWE-''。 然而,同时
--listrules 列出所有 CWE 安全元素,它只列出来自 CWE 的默认映射
CWE 标识符的安全元素。 它不包括探伤者的改进
适用(例如,通过检查函数参数)。

如果您想在 CWE 安全元素和 CWE 之间进行详细而准确的映射
标识符,探伤者源代码(包含在发行版中)是最好的地方
对于该信息。 这些详细信息主要是那些少数人感兴趣的
试图改进探伤仪的 CWE 映射或一般改进 CWE 的人。
源代码记录了安全元素到相应 CWE 之间的映射
标识符,并且是单个 Python 文件。 ``c_rules'' 数据集定义了大多数规则,
参考一个可以做进一步细化的功能。 您可以搜索
函数名称的数据集,以查看它默认生成的 CWE; 如果第一个参数是
不是“正常”,那么这是一个精炼 Python 方法的名称,它可以选择不同的
CWE(取决于附加信息)。 相反,您可以搜索“CWE-number”
并找到哪些安全元素(签名或模式)引用该 CWE 标识符。
对于大多数人来说,这远远超出了他们的需要; 大多数人只想扫描他们的
源代码快速查找问题。

严格安保


该工具的全部意义在于帮助查找漏洞以便修复它们。
但是,开发人员和审查人员必须知道如何开发安全软件才能使用此功能
工具,否则, a 傻瓜 a 工具 is 仍然 a 傻瓜. 我的书在
http://www.dwheeler.com/secure-programs 可能有帮助。

这个工具最多应该是一个更大的软件开发过程的一小部分
旨在消除或减少漏洞的影响。 开发者和评论者
需要知道如何开发安全软件,他们需要应用这些知识来减少
首先是漏洞的风险。

不同的漏洞发现工具往往会发现不同的漏洞。 这样,你
最好使用人工审查和各种工具。 这个工具可以帮助找到一些
漏洞,但绝不是全部。

你应该总是分析一个 复制 正在分析的源程序,而不是目录
开发人员可以在探伤者执行分析时对其进行修改。 这是
特别 如果您不必信任正在分析的程序的开发人员,则为 true。
如果攻击者在您分析文件时控制了这些文件,则攻击者可以
移动文件或更改其内容以防止暴露安全问题
(或者给人一种没有问题的印象)。 如果你担心
恶意程序员无论如何你都应该这样做,因为在分析之后你需要
验证最终运行的代码是您分析的代码。 此外,请勿使用
--allowlink 选项在这种情况下; 攻击者可以创建指向文件的恶意符号链接
在他们的源代码区域之外(例如 / etc / passwd文件).

源代码管理系统(如 SourceForge 和 Savannah)肯定属于这种情况
类别; 如果您正在维护其中一个系统,请首先将文件复制或解压缩到
在运行缺陷查找器或
任何其他代码分析工具。

请注意,缺陷查找器仅打开常规文件、目录和(如果需要)符号
链接; 它永远不会打开其他类型的文件,即使对它们进行符号链接。
这可以对抗在源代码中插入异常文件类型的攻击者。 然而,这
仅当被分析的文件系统在攻击期间无法被攻击者修改时才有效
分析,如上所述。 这种保护也不适用于 Cygwin 平台,
不幸。

Cygwin 系统(Windows 上的 Unix 仿真)如果有缺陷查找器,则还有一个额外的问题
用于分析分析人员无法信任的程序。 问题是由于设计
Windows 中的缺陷(它继承自 MS-DOS)。 在 Windows 和 MS-DOS 上,某些文件名
(例如,“com1”)被操作系统自动处理为
外围设备,即使给出了完整的路径名也是如此。 是的,Windows 和 MS-DOS
真的是设计得很糟糕。 Flawfinder 通过检查文件系统来解决这个问题
对象是,然后只打开目录和常规文件(和符号链接,如果启用)。
不幸的是,这不适用于 Cygwin; 至少在某些版本的 Cygwin 上
Windows 版本,仅尝试确定文件是否为设备类型可能会导致
程序挂起。 解决方法是删除或重命名任何已解释的文件名
在执行分析之前作为设备名称。 这些所谓的“保留名称”是
CON、PRN、AUX、CLOCK$、NUL、COM1-COM9 和 LPT1-LPT9,可选后跟扩展名
(例如,``com1.txt''),在任何目录中,在任何情况下(Windows 不区分大小写)。

Do 不能 从不受信任的来源加载或差异命中列表。 它们是使用
Python pickle 模块,pickle 模块并不是为了防止错误
或恶意构建的数据。 存储的命中列表供以后使用
创建命中列表的用户; 在这种情况下,这种限制不是问题。

使用 onworks.net 服务在线使用缺陷查找器


免费服务器和工作站

下载 Windows 和 Linux 应用程序

  • 1
    移相器
    移相器
    Phaser 是一个快速、免费且有趣的开放式
    源 HTML5 游戏框架,提供
    WebGL 和 Canvas 渲染
    桌面和移动网络浏览器。 游戏
    可以共...
    下载移相器
  • 2
    附庸引擎
    附庸引擎
    VASSAL 是一个游戏引擎,用于创建
    电子版传统板
    和纸牌游戏。 它提供支持
    游戏块渲染和交互,
    和...
    下载 VASSAL 引擎
  • 3
    OpenPDF - iText 的分支
    OpenPDF - iText 的分支
    OpenPDF 是一个 Java 库,用于创建
    以及使用 LGPL 编辑 PDF 文件和
    MPL 开源许可证。 OpenPDF 是
    iText 的 LGPL/MPL 开源继承者,
    一个...
    下载 OpenPDF - iText 的分支
  • 4
    SAGA GIS
    SAGA GIS
    SAGA - 自动化系统
    地球科学分析 - 是地理
    信息系统 (GIS) 软件
    地理数据的强大功能
    加工和分析...
    下载 SAGA GIS
  • 5
    Java/JTOpen 工具箱
    Java/JTOpen 工具箱
    IBM Toolbox for Java / JTOpen 是一个
    Java类库支持
    客户端/服务器和互联网编程
    模型到运行 OS/400 的系统,
    i5/OS, 哦...
    下载 Java/JTOpen 工具箱
  • 6
    D3.js
    D3.js
    D3.js(或数据驱动文档的 D3)
    是一个 JavaScript 库,它允许你
    生成动态的交互式数据
    Web 浏览器中的可视化。 与D3
    您...
    下载 D3.js
  • 更多 ”

Linux 命令

Ad