一、背景
源代码静态分析工具(SAST)作为软件安全的重要保障工具,已经在各个领域被广泛使用。随着开源SAST工具的广泛使用,工具种类的增加,使用者很难判断工具的优劣及适不适合企业的应用场景,本文从金融、互联网企业最常用的Java语言代码分析的角度,对静态分析进行一次简要的测评,为大家选择静态分析工具提供依据,此外,本文分析了目前静态代码分析工具存在的技术问题及工具评估的基本准则。
二、概述
一般来说,误报和漏报率是SAST最重要的技术评价指标,但由于没有通用意义上的测试集能够全面反应静态分析工具在检测精度能力方面高低暨分析的敏感度。由此,为了简化测试难度,本次测评我们选择了一个Java语言且偏安全的国际通用测试集OWASP benchmark,以反应代码分析工具在Java安全检测能力上的强弱。
OWASP基准测试是一个示例应用程序,其中包含来自11个类别的数千个漏洞。基准测试中包括很难通过静态分析处理的代码片段,例如:间接调用、不可达分支、映射、依赖于配置文件的值。
可以在一定程度上反应代码分析工具的检测能力。
1. 测试依据
下表为某款工具的OWASP检测结果,如图所示,左侧一列表示所有类别,P/N为正/负样本数(badcase/goodcase),TP/FP为真/假阳性的数量(badcase报出数/误报数),TN/FN是真/假阴性的数量(good case报出数/漏报数),TPR和FPR是正确率和误报率,Y是约登指数,约登指数( Youden’s indx,YI)即正确指数,此指数值的范围只从0~1,约登指数越大, 其真实性亦越好。其中TPR、FPR、Y的计算公式如下:
TPR=TP/P
FPR=FP/N
Y=[TP/(TP+FN)+TN/(FP+TN)]-1
类别 | P | N | TP | FP | TN | FN | TPR | FPR | Y |
---|---|---|---|---|---|---|---|---|---|
Command Injection (cmdi) | 126 | 125 | 126 | 45 | 80 | 0 | 1.0 | 0.36 | 0.64 |
Weak Cryptography (crypto) | 130 | 116 | 130 | 0 | 116 | 0 | 1.0 | 0.0 | 1.0 |
Weak Randomness (hash) | 129 | 107 | 129 | 0 | 107 | 0 | 1.0 | 0.0 | 1.0 |
LDAP Injection (ldapi) | 27 | 32 | 27 | 13 | 19 | 0 | 1.0 | 0.41 | 0.59 |
Path Traversal (pathtraver) | 133 | 135 | 133 | 36 | 99 | 0 | 1.0 | 0.27 | 0.73 |
Secure Cookie Flag securecookie) | 36 | 31 | 36 | 0 | 31 | 0 | 1.0 | 0.0 | 1.0 |
SQL Injection (sqli) | 272 | 232 | 272 | 87</ |