如何使用FlawFinder-python工具查找C/C++代码中的漏洞
FlawFinder是一种基于Python的工具,可以帮助查找C/C++源代码中的漏洞。它检查源代码并输出可能存在的漏洞/缺陷列表。
安装
在类Unix系统(如Debian、Fedora、Ubuntu等)中,可以找到预打包版本的工具。对于Ubuntu,可以使用以下命令进行安装-
sudo apt-get install flawfinder
对于Windows操作系统,可以直接使用pip命令进行安装-
pip install flawfinder
推荐使用Anaconda环境来实现此工具。
Anaconda安装:
有关安装Anaconda的详细步骤,请参见以下步骤-
步骤1: 从此链接下载Anaconda:https://www.anaconda.com/products/individual#windows
步骤2: 安装完成后,单击启动。
步骤3: 单击下一步。
步骤4: 阅读授权条款并单击“同意”。
步骤5: 选择“只为我安装”并单击下一步。
步骤6: 选择目标文件夹以安装Anaconda,并单击下一步按钮。
步骤7: 在高级安装选项下,选择注册选项,然后安装。
步骤8: 推荐安装PyCharm。
步骤9: 安装完成后,单击完成按钮。
实现: 在文本文件中编写一个基本的 C 代码,将字符串复制到另一个变量中。
输出:
步骤 1: 将代码保存为扩展名为.c的文件,放在 flawfinder 安装的文件夹内。
步骤 2: 从开始菜单打开 Anaconda 命令提示符。
步骤 3: 开启窗口后,导航到文件保存的目录。这里的路径是 flawfinder\Test 。
步骤 4: 运行此命令:
flawfinder your_program_name.c
该工具生成两个命中即潜在风险。
- 一个是由于使用了 strcpy 函数。在将内容复制到目标时,该函数没有检查缓冲区溢出情况。该工具还建议使用内置函数,例如 snprintf,strcpy_s 或 strlcpy。
- 另一个漏洞是使用 char 数组。静态大小的数组可能会被不适当地限制,导致潜在的溢出或其他问题。相反,可以使用函数检查极限长度,并确保大小大于最大可能长度。
FlawFinder 工具的优点:
- 确定风险水平- FlawFinder 会列出按风险排序的潜在安全漏洞清单。代码中使用的函数和参数决定风险水平。例如,与可变字符串相比,常量字符串值更不安全。在某些情况下,FlawFinder 可能能够确定该结构根本不会存在风险,从而减少错误报警。
- 提供分析摘要- 它产生一个分析摘要作为输出,并提到代码中发现的漏洞数目。
- 代码不编译- 源代码从未被编译,即使代码不起作用,该工具也会立即生成漏洞列表。
FlawFinder 工具的缺点-
- 不保证发现所有漏洞- 产生的每个结果并不意味着安全漏洞,也不是每个漏洞都能被发现。例如,在一个简单的除法程序中,一个数字被0除。理想情况下,该工具应该将0作为除数的问题标记为命中,但它未能做到。这是因为该工具无法理解程序的逻辑。
- 无法检测恶意代码- Flawfinder寻找应用程序代码中常见错误的特定模式。因此,它可能在分析可能包含恶意代码的程序时效果较低。