image.png
image.png

本文更关注CodeQL,因此此处假设黑盒不存在误报。

是否有漏洞 CodeQL认为 黑盒认为 是否出现过此情景 原因
真有 有漏洞 有漏洞 正向结果
有漏洞 没有漏洞 CodeQL 最后一步参数构造的问题,某些参数的值必须属于某个数值集合,否则代码流程中断,较难优化
没有漏洞 有漏洞 CodeQL Source覆盖不全,优化难度一般
没有漏洞 没有漏洞 黑盒不存在误报
真没有 有漏洞 有漏洞 黑盒不存在误报
有漏洞 没有漏洞 CodeQL Sanitizer覆盖不全,某些情况下可以接受,优化难度一般
没有漏洞 有漏洞 黑盒不存在误报
没有漏洞 没有漏洞 正向结果

若是仅仅依赖白盒扫描器的话,我们可以把规则写细致一点,宁缺毋滥,提高准确率可能会牺牲覆盖率。
若是同时使用黑盒扫描器的话,我们可以把规则放宽一点,牺牲准确率,提高覆盖率可能会牺牲准确率。

仁者见仁,公司的环境不同最佳方案就不同。

规则优化
1、部分Source调用了安全SDK进行编码

还有POST类型的XSS
image.png

image.png

拼接参数时
image.png

image.png

AuthorityAssignQueryController.java
image.png
image.png

指标计算

https://www.zhihu.com/question/19645541/answer/91694636

样本:项目中所有的输入点
正样本:含有反射型XSS漏洞的输入点
负样本:不含反射型XSS漏洞的输入点

CodeQL
正样本:CodeQL判断正确的输入点
负样本:CodeQL判断错误的输入点(CodeQL认为该处有漏洞,但是该处实际没有漏洞)
精确率:CodeQL判断正确的输入点 /(CodeQL判断正确的输入点+CodeQL判断错误的输入点)100%
召回率:CodeQL判断正确的输入点/含有反射型XSS漏洞的输入点
100%

全流程
正样本:高可信事件判断正确的输入点
负样本:高可信事件判断错误的输入点(最终认为该处有漏洞,但是该处实际没有漏洞)
精确率:高可信事件判断正确的输入点/(高可信事件判断正确的输入点+高可信事件判断错误的输入点)100%
召回率:高可信事件判断正确的输入点/含有反射型XSS漏洞的输入点
100%