java代码审计思维导图_SDL中fortify 代码审计各种坑和处理办法

fortify扫描代码的前置问题:

1)在使用foritfy的过程中很多人会发现他在windows下默认使用gbk访问代码以及生成报告,这样会有好多乱码,其实解决方案很简单。

添加环境变量  JAVA_TOOL_OPTIONS   这个变量的值为  -Dfile.encoding=UTF-8

或者在bin目录下的auditworkbench.cmd 和 ScanWizard.cmd 文件中第一个set环境变量之后,添加环境变量的值如图

ad6ba64acea5fd25e428f236af9edd37.png

set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8

这样就能保证主界面进程和生成报告的进程都使用utf-8编码(现在的项目极少数是gbk的了,基本都是utf-8编码的)

2)maven编译扫描的使用,很多人不是很明白,其实也很简单。首先在主目录下的plugins\maven目录中找到maven-plugin-bin.zip这个压缩包并解压缩。直接运行install.bat这个脚本(前提是已经配置好了maven以及配置了maven国内的加速镜像),执行完脚本后可以使用bin目录下的ScanWizard.cmd这个脚本进行编译扫描了,编译扫描请看下面的操作。

1: 代码审计的java工程编译问题

在代码审计中,你会发现有些工程的依赖jar包不完整或者物理隔离导致的java工程无法编译

最好的办法就是找到编译通过的开发工程师把他的maven仓库完整的复制到进行代码审计的电脑中的maven仓库文件夹中

例如:

6f6830e82ec3756c7f5d4633a5420985.png

那就把开发工程师的maven仓库文件夹覆盖到图片中路径的文件夹中

并且删掉里面所有的

_remote.repositories

这个文件(别问为什么,就这么干)

然后使用命令

mvn -o clean install

-o 这个参数代表离线模式,可以保证只在本地的maven仓库进行查找依赖,这样就能保证编译通过了

这样编译通过后,fortify扫描就是能按照bin目录中ScanWizard.cmd的maven编译式扫描方式进行扫描,下面看操作步骤:

a6d0938941c88c5dc188cee99e257af2.png

下图这里选中这个enable选项也是要仔细观察是不是工程的主pom.xml而不是子目录中的pom.xml,子目录中的pom.xml是编译不能通过的

19316e7967e7b31052e7894ff5b4f78a.png

别忘记在扫描的自定义参数中使用mvn -o

如果扫描环境可以连接到maven仓库并且编译通过,则上述中复制maven文件夹、删除_remote.repositories文件和使用-o参数编译的操作就可以不使用了,直接就可以编译扫描

2:代码审计的问题管理和追溯问题

代码审计必须追溯到人,也就是代码最后提交人,只有这样才能保证代码的持续改进,之前遇到过由项目组组长管理代码改进,一旦出现项目进度很赶,账号公用,最终项目的修改人就会出现混乱,互相推诿扯皮。

gitlab的代码提交人是依照邮箱为追溯标准的

首先打开git gui的选项

760c0d5a5697aec01a7c1527f3f98852.png

关注一个如下图的地方一个就是编码要改成utf8 还有就是gitlab所记录的提交人以邮箱为准:

753f14ca93cf96d253e6ad638469e9ae.png

这里的邮箱也就是命令行里面的

git config --global user.email "zhangsan2@qq.com.cn"

gitlab中记录的代码提交人与控制面板中的凭据管理器中的凭据是无关的

然后用自动化的代码审计工具进行分析后,就能把问题定责到个人,保证代码审计的落地。

但是同时在开发过程中要注意一个细节:

如下图参照gitlab在合并代码的时候不要选择合并提交, 如果合并提交的话代码提交人会变成合并人的身份,导致代码实际提交人的记录无法追溯

4474525cc2ee93b8ca22682d2508da86.png

3. git几个要统一化的参数避免隐蔽的坑

# 保证长文件名可用

git config --global core.longpaths true

# 使用core.autocrlf 保证不同操作系统的换行符号兼容性

# 参考地址 https://blog.csdn.net/asahinokawa/article/details/85988837

# ide能自适应换行符 所以最好把代码的换行进行统一化

git config --global core.autocrlf input

4.fortfiy的高级java代码扫描需要把所有的maven依赖都导出来,而且要做到jar包一个不多一个不少。可以使用以下的脚本把工程中的dependency导出到集中的一个文件夹中,设置为fortify高级扫描的classpath,以下d得代码就是C:\Java\MVN_REPO中所有的jar包导出到C:\Java\mvn目录中。在使用雳鉴扫描代码时保证代码审计的时候能找到对应的依赖jar包上传到雳鉴服务器里,也可以使用下面的脚本。

@echo off

set work_path=C:\Java\MVN_REPO

cd %work_path%

for /R %work_path% %%a in (*.jar) do (

copy "%%a" C:\Java\mvn

)

pause

如果有些人提供的代码没有删除target目录,可以使用以下的bat删掉工程目录中所有的target目录以避免扫到垃圾代码。

@echo off

for /r /d %%i in (target) do (

echo %%i

rd /s /q %%i

)

然后这样使用foritfy

e252e98fcd2d23a259ed03d1ea027bd8.png

打开后最好设计如下的目录结构,其中maven2目录就是我们用脚本导出的jar包

bc2ace3fae9ed91baff12d958fdec49b.png

当然单纯的这样目录设计是不够的,还需要将maven2这个目录设置为classpath目录

7934533db93f5e612af4d7eae2c31de5.png

点击next后,对扫描的规则可以做设置

bc1d98b970f09a812b7fc93bfe38090a.png

剩下就执行扫描就可以了

生成报告的模式如下才能和ide中一致

d40c8def1874d6d51cf92d839a9c25ce.png

禁止转载!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值