如何使用 FlawFinder-python 工具查找 C/C++ 代码中的漏洞?
FlawFinder 是一个基于Python的工具,可帮助查找 C/C++ 源代码中的漏洞。它检查源代码并给出代码中可能的漏洞/缺陷列表作为输出。
安装
该工具有一个用于 Debian、Fedora、Ubuntu 等 Unix 系统的预打包版本。对于 Ubuntu,可以使用以下命令安装该工具 -
sudo apt-get install flawfinder
对于 Windows 操作系统,可以使用 pip 命令直接安装此工具-
pip install flawfinder
推荐使用 Anaconda 环境来实现这个工具。
蟒蛇安装:
要安装 Anaconda,请参阅以下步骤 -
第 1 步:使用此链接下载 Anaconda:https://www.anaconda.com/products/individual#windows
第2步:安装后点击启动。
第三步:点击下一步。
第 4 步:阅读许可条款并单击“我同意”。
第 5 步:为“Just Me”选择安装,然后单击下一步。
第 6 步- 选择一个目标文件夹来安装 Anaconda,然后单击下一步按钮。
第 7 步:在高级安装选项下。选择注册选项,然后安装。
第八步:推荐安装Pycharm。
第九步:安装完成后,点击完成按钮。
实现:在一个文本文件中编写一个基本的 C 代码,将一个字符串复制到另一个变量中。
C
// C program to demonstrate
// Flawfinder
#include
#include
// Driver code
int main()
{
char temp[100];
char str[] = "hello";
strcpy(temp, str);
printf("%s", temp);
return 0;
}
输出:
第 1 步:将扩展名为 .c 的代码保存在安装了漏洞检测器的文件夹中。
第 2 步:从“开始”菜单打开 Anaconda Prompt。
第 3 步:窗口打开后,导航到保存代码文件的目录。这里的路径是ffectfinder\Test 。
第 4 步:运行此命令
flawfinder your_program_name.c
该工具产生两个影响,即潜在风险。
- 一是由于使用了strcpy函数。复制到目标时,它不检查缓冲区溢出。该工具还提出了替代方案,例如使用 snprintf、strcpy_s 或 strlcpy 等内置函数。
- 另一个漏洞是使用 char 数组。静态大小的数组可能会受到不当限制,从而导致潜在的溢出或其他问题。相反,可以使用函数来检查限制长度并确保大小大于最大可能长度。
Flawfinder 工具的优点:
- 确定风险级别 - Flawfinder 呈现按风险排序的潜在安全漏洞列表。代码中使用的函数和参数决定了风险级别。例如,与可变字符串相比,常量字符串值的风险较小。在某些情况下,FlawFinder 可能能够确定该构造根本没有风险,从而减少误报。
- 提供分析摘要 -它生成分析摘要作为输出并提及编号。命中数,即代码中发现的漏洞。
- 代码未编译- 源代码从未编译,因此即使代码不工作,该工具仍将几乎立即呈现漏洞列表。
FlawFinder 工具的缺点-
- 不保证找到所有漏洞 - 产生的每个命中并不意味着存在安全漏洞,也不是每个漏洞都被发现。例如,在一个简单的除法程序中,一个数字除以 0。理想情况下,该工具应该将除以 0 显示为命中,但它没有这样做。这是因为该工具无法理解程序的逻辑。
- 无法检测恶意代码- Flawfinder 会查找应用程序代码中已知为常见错误的特定模式。因此,它在分析可能包含恶意代码的程序时可能不太有效。