代码改变世界

代码审计工具消除误报的方法汇总

2021-06-22 17:34  加个小鸡腿  阅读(1019)  评论(0编辑  收藏  举报

转自: https://zhuanlan.zhihu.com/p/360459701

 Fority详细介绍:https://www.cnblogs.com/linwenbin/p/11046188.html 

Fortify的安装和使用: https://www.cnblogs.com/dearflt/p/13853508.html

6款自动化应用安全测试工具 : http://www.itcast.cn/news/20200731/11081662871.shtml

Fortify工具使用下面两种方式消除误报:

(1)第一种方法使用注解消除误报

例如代码:
Public class User
 {
public finalstatic String PASSWORD_LABEL = "123456";
privateString userId;privateString userKey;publicvoid printUserData() 
{
System.out.println("Fortify[userId=" + userId + ", " + PASSWORD_LABEL + "=" +userKey + "]");
}
}

扫描时会在publicfinal static String PASSWORD_LABEL="123456";报告PasswordManagementHardcoded:Password漏洞。

使用注解后"123456"不会报出硬编码漏洞。

@FortifyNotPasswordpublicfinal static String PASSWORD_LABEL = "123456";@FortifyPasswordprivate String userKey;

(2)通过添加定制规则消除误报

A. 例如编写了一个函数做净化处理,通过定制规则,让工具不再报出;

B. 覆盖规则,不再报出,对于password变量,覆盖其规则,则下次password的硬编码不会报出;

C. 裁剪规则,规则文件后缀为bin,转成xml(有工具可以实现),再裁剪编辑后,转换为bin文件

尚未找到转换工具,需要自己编写)

Sonarqube通过注解消除误报,两种方法:

(1) 在被误判的代码行后面添加注释: //NOSONAR

(2) 在类或方法上面加上@SuppressWarnings注解

例如: @SuppressWarning(“squid:S1456”) publicclass Example { } ,squid:S456则是扫描的缺陷规则编号。

Checkmarx和CoBot消除误报方法:

通过人工复核,消除误报。也就是通过人工标记缺陷误报,不用报出。所有工具都支持该方法消除误报。

Wukong工具消除误报方法:

通过添加定制规则,把某一类缺陷规则,添加对净化函数的判断处理来,来消除误报。导入定制的规则后,既可以实现增加规则,报出缺陷,或减少误报。