TA的每日心情 | 无聊 昨天 09:05 |
---|
签到天数: 1050 天 连续签到: 1 天 [LV.10]测试总司令
|
一、Fortify 概述
Fortify 作为一款备受瞩目的静态代码分析工具,在软件安全领域发挥着重要作用。它由 Micro Focus 开发和维护,以 Java 语言开发而成,具有良好的跨平台兼容性,能够支持 Windows、macOS 和 Linux 等多种操作系统。
Fortify 的功能十分强大,它不仅能对源代码进行静态分析,检测出诸如 SQL 注入、跨站脚本攻击、缓冲区溢出等多种安全漏洞,还能跟踪应用程序的数据流,找出更复杂的漏洞,如未经验证的用户输入在应用程序中的传播路径。其扫描速度更是惊人,每分钟可达 10,000 行。
在支持的编程语言方面,Fortify 表现得极为广泛,包括 Java、C#、C++、Python、JavaScript、Ruby、PHP 等多种常见编程语言。同时,它还能与多种持续集成(CI)工具如 Jenkins、Bamboo 等以及应用生命周期管理(ALM)工具如 Jira、Microsoft Azure DevOps 等集成,实现自动化的代码扫描和漏洞跟踪。
当 Fortify 发现潜在的安全漏洞时,会为开发人员提供详细的漏洞报告和修复建议。这些修复建议是根据已知的安全最佳实践和漏洞修复方法生成的,依赖于 Fortify 的知识库,其中包含了大量关于不同编程语言和框架的安全知识和修复方法。例如,当检测到项目中使用了存在已知安全漏洞的 Apache Struts 版本时,Fortify 会建议将其升级到已修复漏洞的版本。
总之,Fortify 以其强大的功能和广泛的适用性,成为了开发人员提高代码安全性的得力助手。
二、主要功能
(一)静态分析
Fortify 的静态分析功能犹如一位严谨的安检员,对源代码进行细致入微的检查。它通过语法和语义分析,将源代码转换为中间表示,为后续的漏洞检测奠定基础。在这个过程中,Fortify 能够精准地找出可能导致安全漏洞的代码片段。例如,对于 SQL 注入漏洞,当代码中存在将用户输入未经处理直接拼接到 SQL 语句中的情况时,Fortify 会迅速识别出来。对于跨站脚本攻击,若代码中存在将不可信的数据直接输出到网页而没有进行适当的过滤和编码,Fortify 也能准确地捕捉到。通过对多种编程语言的深入理解,Fortify 可以识别包括 Java、C#、C++ 等在内的各种语言中的安全漏洞,为开发人员提供全面的代码安全保障。
(二)漏洞报告
当 Fortify 检测到安全漏洞时,会生成详细的漏洞报告。这份报告就像是一份精确的地图,为开发人员指引问题的方向。报告中不仅包括漏洞的位置,让开发人员能够快速定位问题所在的代码行,还明确指出漏洞的类型,如 SQL 注入、跨站脚本攻击等。同时,漏洞的严重性也会被清晰地标注出来,帮助开发人员区分哪些漏洞需要优先处理。例如,高严重性的漏洞可能会导致严重的安全后果,如数据泄露或系统被攻击,而低严重性的漏洞则可能对系统的影响较小。通过这样详细的漏洞报告,开发人员可以更加高效地进行问题排查和修复。
(三)修复建议
Fortify 提供的修复建议如同一位经验丰富的导师,为开发人员指明了解决问题的道路。对于 SQL 注入漏洞,Fortify 可能会建议使用参数化查询的方式,确保 SQL 语句不通过拼接的方式构造,而是采用预编译的执行方法,并以参数绑定的方式设置 SQL 语句需要的条件的值。对于跨站脚本攻击,Fortify 可能会建议对用户输入的数据进行严格的过滤和编码,防止恶意脚本被执行。这些具体的修复建议可以帮助开发人员快速有效地解决安全漏洞,提高代码的安全性。
(四)集成支持
Fortify 具有强大的集成支持能力,可以与多种持续集成工具和应用生命周期管理工具无缝集成。例如,与 Jenkins 的集成使得代码扫描可以在持续集成过程中自动进行,一旦有新的代码提交,Fortify 就会自动对其进行扫描,及时发现潜在的安全漏洞。与 Jira 和 Microsoft Azure DevOps 等应用生命周期管理工具的集成,则可以实现漏洞的跟踪和管理,方便团队成员协作解决问题。通过这种自动化的代码扫描和漏洞跟踪,开发团队可以更加高效地保障软件的安全性。
(五)报告和度量
Fortify 的报告和度量功能为团队提供了全面了解项目安全状况和漏洞趋势的窗口。丰富的报告功能可以生成各种类型的报告,如漏洞分布报告、漏洞趋势报告等。通过这些报告,团队成员可以清楚地了解项目中存在的安全漏洞情况,管理层也可以更好地了解应用程序的安全风险,并据此采取相应的措施。例如,管理层可以根据漏洞的严重程度和数量,决定是否需要增加安全投入或调整开发进度。同时,Fortify 的度量功能可以提供一些关键指标,如漏洞密度、漏洞修复率等,帮助团队评估代码的安全性和改进的效果。
三、扫描原理
Fortify 的扫描原理基于静态应用程序安全测试,是一个多步骤的复杂过程。
首先是语法和语义分析,Fortify 就像一位细心的语言学家,对源代码进行深入剖析。它将代码转换成一种中间表示,这个过程类似于编译器的前端工作。通过分析代码的结构、变量和函数调用等信息,为后续的分析提供坚实的基础。例如,在分析 Java 代码时,Fortify 会识别出类、方法、变量的定义和使用,以及函数调用的关系等。
接着是控制流和数据流分析。控制流分析关注程序执行的顺序和条件分支,就如同绘制一幅程序执行的流程图。而数据流分析则关注数据在程序中的传播路径,追踪数据从输入到输出的整个过程。这两种分析方法相互配合,有助于识别复杂的安全漏洞,如未经验证的用户输入在应用程序中的传播路径。假设在一个 Web 应用程序中,用户输入的数据可能会经过多个函数的处理和传递,如果在这个过程中没有进行充分的验证和过滤,就可能导致安全漏洞,如 SQL 注入或跨站脚本攻击。Fortify 通过对控制流和数据流的分析,可以准确地找到这些潜在的漏洞。
然后是漏洞检测规则匹配。Fortify 拥有一套内置的、针对各种编程语言和框架的漏洞检测规则,这些规则描述了常见的安全漏洞模式,如 SQL 注入、跨站脚本(XSS)和缓冲区溢出等。基于控制流和数据流分析的结果,Fortify 将代码与这些规则进行匹配,识别出可能的安全漏洞。例如,当发现代码中存在将用户输入直接拼接到 SQL 语句中的情况时,就会判定可能存在 SQL 注入漏洞。
由于静态分析可能产生一定程度的误报,Fortify 提供了一套算法对检测到的漏洞进行排序和过滤。这有助于开发团队专注于修复最关键和高风险的漏洞。对于一些可能是误报的漏洞,Fortify 会进行进一步的分析和确认,以提高漏洞检测的准确性。
最后是报告生成。Fortify 会生成详细的报告,列出发现的安全漏洞、所在的代码位置、漏洞类型、风险等级以及修复建议。开发团队可以利用这些报告来了解项目的安全状况和优先处理高风险的漏洞。报告中的修复建议是根据已知的安全最佳实践和漏洞修复方法生成的,为开发人员提供了具体的解决方向。
总之,Fortify 通过这些技术和方法,对代码进行深入分析,识别出潜在的安全漏洞,并为开发团队提供修复建议,有效地提高了软件的安全性和质量,降低了应用程序面临的风险。
四、支持的语言和开发环境
Fortify 支持的编程语言极为广泛,涵盖了众多主流开发语言。其中,Java 作为一种广泛应用于企业级开发的语言,Fortify 能够对其进行深入的静态分析,检测出各种潜在的安全漏洞,无论是在 Web 应用开发还是企业级系统构建中,都能为 Java 开发者提供有力的安全保障。
对于 C# 语言,Fortify 同样表现出色。在.NET 开发环境中,它可以准确地识别出 C# 代码中的安全问题,如 SQL 注入、跨站脚本攻击等,帮助开发人员提高代码的安全性,确保应用程序在 Windows 平台上稳定运行。
C++ 作为一种高性能的编程语言,在系统软件和游戏开发等领域有着广泛的应用。Fortify 能够针对 C++ 代码的特点,进行细致的静态分析,检测出可能存在的缓冲区溢出、内存泄漏等安全漏洞,为 C++ 开发者提供专业的安全检测服务。
Python 作为一种简洁高效的编程语言,在数据科学、机器学习和 Web 开发等领域越来越受欢迎。Fortify 可以对 Python 代码进行全面的安全分析,检测出诸如 SQL 注入(在使用数据库的 Python 项目中)、跨站脚本攻击(在 Web 开发中)等安全漏洞,保障 Python 应用程序的安全。
除了上述主要编程语言外,Fortify 还支持 JavaScript、Ruby、PHP 等多种语言。在 JavaScript 开发中,Fortify 可以检测出跨站脚本攻击、不安全的 DOM 操作等安全漏洞,为前端开发人员提供安全保障。对于 Ruby 和 PHP 等服务器端编程语言,Fortify 也能准确地识别出各种安全问题,确保 Web 应用程序的安全。
在开发环境方面,Fortify 支持多种 IDE(集成开发环境),如 Eclipse、IntelliJ Ultimate、IntelliJ Community、Android Studio、IBM Rational Application Developer、IBM Rational Software Architect、Microsoft Visual Studio 等。这些 IDE 集成了 Fortify 的插件,使得开发人员可以在开发过程中随时进行代码安全扫描,及时发现并修复安全漏洞。
Fortify 还支持多种构建工具,如 Ant、Jenkins、Maven、MSBuild、Xcodebuild 等。在持续集成和持续部署(CI/CD)流程中,这些构建工具可以与 Fortify 集成,实现自动化的代码扫描,确保每次构建的代码都是安全的。
在缺陷管理平台方面,Fortify 支持 Jira、ALM、Bugzilla 等。开发团队可以将 Fortify 检测到的安全漏洞与缺陷管理平台集成,方便团队成员协作解决问题,跟踪漏洞的修复进度。
对于代码管理工具,Fortify 支持 Git、SVN、TFS 等。在代码版本管理过程中,开发团队可以利用 Fortify 对代码进行安全扫描,确保代码的安全性。
总之,Fortify 以其广泛的语言支持和强大的开发环境集成能力,为开发团队提供了全面的代码安全解决方案。
五、安装与使用
(一)安装步骤
双击 Fortify 安装包运行安装向导,弹出后点击 “Next”。
选择 “I accept the agreement” 后,点击 “Next”。
选择安装路径,点击 “Next”。
选择安装的模块,点击 “Next”。
选择 fortify.license 文件,点击 “Next” 按钮。
设置更新服务器,这里可以不用填写,点击 “Next”。
在 “SCA Migration” 界面选择 “No”,点击 “Next” 按钮。
“samples” 界面选择 “No”,点击 “Next”。
在准备安装界面,点击 “Next” 开始安装,等待安装完成。注意完成后不要勾选 “update”,点击 “Finish” 完成安装。
将下载的 fortify-common-20.1.1.0007.jar 包替换掉安装目录下的 Core\lib 目录下的同名包。
将规则包 rules 文件放入 \Core\config\ 目录下。
(二)修改语言为中文的方法
运行 scapostinstall.cmd 修改为中文:
进入 fortify 安装目录下 bin,双击 scapostinstall.cmd。
输入 “2” 选择设置。
输入 “1” 选择常规设置。
输入 “1” 选择本地的。
输入 “zh_CN” 选择中文。
键入 “q” 退出设置面板。
直接在 fortify 前端面板修改设置:
重启 fortify,选择菜单栏的 “options”,接着选择 “options”。
根据如图选择语种为中文,然后点击 “ok” 就设置完成了。
(三)简单扫描并导出报告的流程
打开工作台:进入安装目录,打开 bin 文件夹,双击 auditworkbench.cmd 或者在 win 开始菜单中,双击 Audit Workbench。
选择静态代码所在目录,进行扫描:可以选择高级扫描让其自动识别,点击之后,跳转到文件目录,选择一个 demo 确认信息,下一步 “scan”。如果扫的是比较大的项目,可以选择拆开一个文件夹一个文件夹的去扫,这样速度会快一点。
扫描完成:查看扫描结果详细信息。
导出报告:设置了中文语言之后导出的报告就是中文报告。点击导航栏 “tools->reports->generate BIRT Report” 进行导出报告,选择 “CWETop 25 2019”,再选择导出路径,进行导出。
查阅报告:根据设置的路径,找到导出的报告,打开查看是否为中文报告,非常 nice。
六、总结
Fortify 作为代码安全工具,在提高代码安全性方面发挥重要作用,虽可能存在误报,但通过其强大功能和不断优化,能有效降低应用程序安全风险。
Fortify 以其高效的扫描速度,每分钟可达 10,000 行,能够快速对大规模的代码库进行安全检测。在实际应用中,Fortify 不仅能够检测出常见的安全漏洞,如 SQL 注入、跨站脚本攻击、缓冲区溢出等,还能通过对多种编程语言和开发环境的支持,满足不同项目的需求。
例如,在 Java 项目中,Fortify 可以准确识别出潜在的安全问题,并提供详细的修复建议。对于 C#、C++、Python、JavaScript、Ruby、PHP 等其他编程语言,Fortify 同样表现出色,为开发人员提供全面的代码安全保障。
在开发环境方面,Fortify 与多种持续集成工具和应用生命周期管理工具的集成,实现了自动化的代码扫描和漏洞跟踪。这使得开发团队能够在开发过程中及时发现并修复安全漏洞,提高开发效率。
然而,正如任何工具一样,Fortify 也可能存在误报的情况。为了解决这个问题,Fortify 提供了多种方法来消除误报。例如,使用注解消除误报,通过添加定制规则来覆盖或裁剪规则,以及通过人工复核来标记缺陷误报等。
尽管 Fortify 可能存在一些不足之处,但它的强大功能和不断优化的特性使其成为开发人员提高代码安全性的重要工具。随着软件安全需求的不断增加,Fortify 将继续发挥重要作用,为开发人员提供更强大的安全保障,有效降低应用程序的安全风险。
|
|