第37篇:fortify代码审计工具的使用技巧(1)-审计java代码过程

0f7a2b0ad0f5dd6c1a46878c30fd4717.png

 Part1 前言 

在正式文章之前,插播一下:恭喜梅西圆梦,获得世界杯冠军,加冕球王,一场精彩绝伦的球赛。开心之后,还是要静下心学习的,我们也要继续努力。

Fortify全名叫Fortify SCA,是惠普公司HP的出品的一款源代码安全测试工具,这家公司也出品过另一款很厉害的Web漏洞扫描器叫Webinspect。美国的Fortify、美国的Coverity、美国的Codesecure、美国的IBM AppScan Source以色列的Checkmarx、加拿大的Klockwork是现在国际上比较出名的几款代码审计工具,今天就讲一下fortify的使用吧,其它工具的使用后续再介绍。

Fortify对于新手是可以快速上手的,但是它绝不是一款傻瓜工具,它有很多的自定义操作,还有命令行操作,还可以自己编写规则库,这些都需要大家仔细阅读Fortify的说明书,再次强调一遍,仔细阅读说明书,后续ABC_123会抽时间慢慢讲。

求助:哪位朋友有Codesecure、IBM Security AppScan Source的破解版或者是试用版,方便的话发我试用一下,保证不用于商业目的,Thanks♪(・ω・)ノ

 Part2 具体使用过程 

  • Fortify的安装过程

安装过程比较简单,我就挑关键步骤讲解了。下载安装包之后,一直点击“下一步”就行,这里需要选择一个license文件foritfy.license。

52385b982e2ee264e9a539ed6febb9d8.png

接下来按照默认,一直点击“下一步”即可。

b9e85b200f830260334b93fe59b7a5f6.png

软件打开如下所示:

94e63bdfe8a6e5ad8f88a3435e6e17a2.png

  • 升级中文规则库

接下来重点看一下如何升级中文规则库。打开Audit Workbench快捷方式,在弹出的gui界面,点击Options选项,点开Security Content Management选项,点击Update Security Content - zh_CN选项可以升级Fortify的中文规则库。

33cb957393a8e6586b8183387fd9867d.png

出现以下弹窗,说明中文规则库升级成功。

1ceffec64d1fdb6e8357980a8ae7f4a6.png

如果受license限制,无法升级到最新的规则库,那么可以跟有商业版的朋友要一个最新版的中文规则库,手工对ExternalMetadatarules两个文件夹的文件进行替换。

54d626c80c951fa6cf08d6da4f1dc3ea.png

C:\Program Files\Fortify\Fortify_SCA_and_Apps_20.1.1\Core\config目录下,将以下文件进行替换。

45f9f98e84bde2e5ef47bd3de2875c67.png

再看一下Security Content Management配置,发现规则库已经不是2019年的,已经是2022年的。

11b5adfdb0a57f0592462f442193bd12.png

  • 审计Java代码过程

如果是java项目,可以直接点击“Scan Java Project”选项。

ca25b1826202ef8abed7e1159dfc684a.png

这里java version,可以选择web应用的java代码的所在环境的java版本,这里我们选择1.8。

ec63e8efecf4cf5a9c828cbc1e34e98c.png

如果扫描对象是Java web代码,就选择“Yes”,如果不是Java web,就选择No,其它的选项保持默认即可。

6dc3af43efa17f852907c6becbb6a8b4.png

接下来点击“Scan”,Fortify就开始对代码进行代码审计了。

9c58376669460a88b8d7522e218c2e74.png

这时候发现,对于webgoat源代码Fortify只扫描出了36个高危漏洞,为啥最基本的sql注入漏洞没扫描出来呢?重新理一下思路,Fortify扫描源代码漏洞前,是需要对源码编译的,没有jar包有些类肯定是编译不成功的

b9121daba876b7338e9a2ab5b85f6a30.png

  • 加载jar包重新扫描

接下来打开pom.xml查看web应用需要依赖哪些jar包,将所有需要jar包放到webgoat目录下即可,Fortify会自动识别和加载.jar文件。如果web应用所依赖的jar包太多,手工找起来太麻烦,可以直接解压编译后的.war文件或者springboot的.jar文件获取所有jar包文件。

5dc934dfd626108297beb70cb9ed2a96.png

重新运行fortify扫描一下,加载jar包后扫描出了81个高危漏洞,这样的扫描结果看起来还算是正常。

4aab9a5f0c7a65c6c15f0326c6a5cbc8.png

Fortify扫描结果展示界面如下:

d5d6503cfbf811d6dc9d3aaca059ee7d.png

  • 代码审计结果

Fortify的Diagram功能非常强大,以图表形式展示源代码中漏洞触发点的从开始到触发的所有过程,我们可以借助此功能,分析是否有过滤函数对漏洞触发的特殊字符进行了过滤。

8141fc9959aa2643e17c34d6603ab820.png

这个界面给出了中文的漏洞修补建议。

6081304ed822c6b2581f414ef0b04ba0.png

点击“Group By”按钮,可以以不同漏洞分类标准对漏洞进行不同的分类展示。

9043997e50a54392f903ea800ebdfb3d.png

如果遇到误报,可以选择“Hide in AWB”,对该漏洞结果进行隐藏。

09dac797b869b1a587b8bff86d8f9da2.png

最后是生成报告功能,这个功能我一般不用,只是作为参考,一般都是自己写代码审计报告。

2ebcd1e281c2816d956241689c1e02bd.png

  • 中文乱码解决

Fortify默认的编码不是UTF-8,导致部分中文的Java代码会出现乱码问题。如果是单文件乱码,可以使用Edit选项卡下的Set Encoding进行设置,鼠标光标在右侧代码框内点击一下,否则此项功能不能用,但是这种方法只适用于单个文件的乱码解决。

d4b885946a557468e9d2c55ef3e3e7be.png

如下所示,可以选择不同的文本编码,中文可选择UTF-8编码:

fa44680711bd82d0dfdb2b940be5aec1.png

如下图所示,乱码问题成功解决。

6c8b0882b91da07553ef744223438823.png

如果想一劳永逸解决乱码问题,只能在Fortify的配置文件中指定Java文件的编码了

C:\Program Files\Fortify\Fortify_SCA_and_Apps_20.1.1\Core\private-bin\awb\productlaunch.cmd在命令行最后添加-Dfile.encoding=utf-8。

4b75cde4807feff6af661dd44b7310d9.png

 Part3 总结 

1.  后续还会继续分享Fortify代码审计工具的使用教程,也会分享Checkmarx、Coverity等代码审计工具的使用教程,敬请期待。

37f34682e3ac2bcfc68ded7cbcd6e3ad.png

专注于网络安全技术分享,包括红队攻防、蓝队分析、渗透测试、代码审计等

每周一篇,99%原创,敬请关注

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希潭实验室

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值