第42篇:Fortify代码审计命令行下的使用与调用方法
Part1 前言
最近感染了新冠,大病初愈,没气力写复杂的文章了,索性就把《代码审计工具系列教程》写完吧。前面几期分别讲了Fortify、Checkmarx、Coverity、Klocwork等代码审计工具的使用,反响还不错,本期讲讲Fortify命令行下的调用方法。Fortify的命令行程序名字是sourceanalyzer.exe,如果您没用过这个程序,那Fortify可真是需要好好补补课了,如果您在为如何去调用Fortify实现自动化代码审计平台,这篇文章可以帮到您。
Part2 Fortify审计代码的4个阶段
Fortify完成代码审计工作,大致需要以下4个步骤:
1 Clean:清除阶段。主要是清除之前转换的NST。命令大致如下:sourceanalyzer -b proName -clean。
2 Translation:转换阶段。源代码内部格式转换阶段,将各种源代码转换成Fortify所支持的特有格式。
3 Show-File:查看阶段。在完成转换之后,展示这次转换的文件,多用于检查转换是否成功完整。命令大致如下:sourceanalyzer -b proName -show-files。
4 Scan:分析引擎扫描阶段。命令大致如下:sourceanalyzer -b proName -Xmx1250m -scan -f proName.fpr。
与代码审计结果最相关的其实是第2步的转换阶段,使用起来是有很多技巧的。对于JavaWeb项目,大致需要对以下文件进行转换:
1. 转换.Java文件。
2. 转换.jsp文件。
3. 转换JavaWeb的configuration配置文件如.xml、.properties文件。
sourceanalyzer -b proName “mydirectory/myfile.xml”。
Part3 常用的命令行
Fortify代码审计工具的命令行程序是sourceanalyzer.exe,文件路径是D:\Program\Foritfys\Fortify_SCA_and_Apps_22.1.0\bin。执行以下命令sourceanalyzer --help可以查看Fortify的命令行程序的各个参数的使用说明。
具体详细的使用说明还是要看Fortify说明书,我这里给出几个比较常用的参数的使用说明吧。
1. Fortify支持的指定文件路径的通配符:'*' 匹配部分文件名 , '**' 递归地匹配目录。
2. -clean 清除之前转换的NST。
3. -b 定义一个扫描项目的名称。
4. -encoding "UTF-8" 设置中文编码。
5. -cp "**/*.jar" 主要用于java项目,有的文档称之为classpath,也可以理解为jar包的路径。
6. -source 1.7 指定你要扫描的Java项目是在什么版本的JDK上编写的,可用的值是1.7, 1.8,1.9, 7, 8, 9, 10, 11, 12, 13, 14, 17。默认的值是"1.8"。
7. -f result.fpr 生成一个fpr文件,以后可以用图形界面查看这个结果文件。
8. -64 使用64位,一般都需要加上。
9. -Xmx 指定Fortify静态代码分析器使用的最大内存量,比如-Xmx10000m。官方说明书不建议值取在32 GB和48 GB 之间,因为取值32G或者更小的内存,反而会增加性能。如果扫描需要超过32 GB,则建议取值为64 GB或更多。
10. -verbose 在控制台输出详细信息。
11. -quick 以降低精准度实现快速扫描,如果你的项目非常大,可以加上该选项。
12. -p| -scan-precision 使用快速扫描以扫描精度级别扫描项目。扫描精度级别越低,扫描性能越快。有效值为1、2、3和4。
13. -show-build-ids 显示本机曾经扫描过的Build ID,也就是项目名称。
14. -show-build-tree 显示每一个文件在转换时所依赖的文件。
15. -show-build-warnings 查看在转换过程中所有的警告信息。
16. -exclude "**/Test/*.java" 排查Test编译文件,排除对测试文件的审计,减少Fortify的工作量。
17. -logfile 指定Fortify静态代码分析器创建的日志文件。
Part4 实战过程
接下来给出一个扫描webgoat代码的Fortify命令行使用过程,具体过程比这个要复杂,我给出一个通用步骤吧:
1 清理之前转换的NST:
sourceanalyzer -b test -clean
2 翻译.Java代码文件:
sourceanalyzer -b test -64 -encoding "UTF-8" -source 1.7 -Xmx6000m -cp "WEB-INF/lib/*.jar" "./**/*.java" -verbose
3 翻译.jsp代码文件:
sourceanalyzer -b test -64 -encoding "UTF-8" -source 1.7 -Xmx6000m -cp "WEB-INF/lib/*.jar" "WEB-INF/**/*.jsp" -verbose
4 翻译JavaWeb配置文件:
sourceanalyzer -b test -64 -encoding "UTF-8" -source 1.7 -Xmx6000m "./**/*.xml" -verbose
5 开始扫描过程:
sourceanalyzer -b test -Xmx6000m -scan -f test.fpr
扫描完成之后,使用auditworkbench图形界面打开test.fpr查看扫描结果。
查看Diagram图表的具体使用如下:
使用ReportGenerator程序将.fpr文件转换成pdf文件。
如下图所示,生成了pdf文件。
Part5 总结
Help: Which friend has a cracked or trial version of Codesecure, Klockwork, and IBM Security AppScan Source? If it's convenient, send it to me for trial, and I guarantee that it will not be used for commercial purposes。Thanks♪(・ω・)ノ。Contact me by e-mail : 0day123abc#gmail.com(replace # with @)。
相关文章
- 修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库
- redis命令行查看中文不乱码的方法(十六进制字符串处理)
- 使用Oracle命令行导入数据库(oracle命令行导入)
- Linux恢复之旅:从命令行开始(linux恢复命令)
- 文件Linux命令行新建文本文件的方法(linux新建文本)
- Linux下操作简单:命令行之旅(linux输入命令行)
- Linux 命令行自动完成的奥义(linux命令自动补全)
- 查看Oracle环境:简单的命令行方法(查看oracle环境命令)
- Linux下7z命令行压缩解压缩实战(7z命令行linux)
- LINUX下使用命令行打开串口的方法(linux打开串口命令)
- 命令MySQL使用命令行操作指南(mysql的cmd)
- 进入MySQL命令行的简单方法(mysql如何进入命令行)
- Linux 命令行下的数学运算
- 利用 Linux 命令行高效管理网盘(linux命令行网盘)
- 解决MySQL命令行闪退的方法(mysql命令行闪退)
- 快速修改MySQL密码的命令行方法(mysql命令行修改密码)
- 行安装方法Linux命令行安装程序:简单又实用(linux安装程序的命令)
- 行提示符?如何在Linux中打开命令行提示符?(linux怎么打开命令)
- Redis时间命令行精准获取时刻(获取redis时间命令行)
- 命令行工具查看 MySQL 数据库(cmd 查看mysql库)
- 使用cmd命令行快速登陆MySQL数据库(cmd怎么登陆mysql)
- 使用命令行安全设置Redis密码(命令设置redis密码)
- Ubuntu命令行修改网络配置方法
- C#中隐式运行CMD命令行窗口的方法
- 在命令行下进行Oracle用户解锁的语句
- 在linux中导入sql文件的方法分享(使用命令行转移mysql数据库)