Automatic Detection of Java Cryptographic API Misuses: Are We There Yet?
TSE-2022-CCFA 姚丹凤老师团队
总结:围绕三个问题分析现有工具设计,实证评估6种工具的检测效果,收集反馈者意见,揭示Java加密API误用检测工具在检测能力与开发者实际需求之间的差距
背景
三个问题:
- 当下的加密误用检测工具是如何设计去检测的
- 当下工具的有效性
- 开发者如何认为工具结果的有用性
做法:找到现有的6个工具,使用3个基准和3个指标比较工具的有效性,再使用现实中的实际项目比较效果,最后查看开发者反馈对比检测能力和实际需求的落差
总结JCA和JSSE得到13种误用类型,6种CWE

CWE | 说明 |
---|---|
CWE-327 | 加密算法不安全 |
CWE-295 | 证书验证不正确 |
CWE-330 | 使用不够随机的值 |
CWE-326 | 加密强度不足 |
CWE-789 | 使用硬编码凭证 |
CWE-757 | 协商过程中选择安全性较低的算法 |
现有工具
学术界15个,工业界或开源社区5个(分别为下图前15,后5)
论文中对每个工具进行了简单的介绍,本文不表述,详细请查看论文

针对问题1——当下的加密误用检测工具是如何设计去检测的:内置规则,过程间分析,检测报告

工具实证比较
对上一节提到的20种工具进行筛选,保留了6个工具,3+3:CogniCrypt,CryptoGuard,CryptoTutor;FindSecBugs,SonarQube,Xanitizer

基准:
- CryptoBench:136❌+35✅,40-intra+131-inter
- MUBench:2019年版本,6个安卓app+56非安卓app,在56个中只编译了37个,拿到149个标签
- OWASP Benchmark:v1.2,2740个java程序,选择其中的975个(弱算法、弱hash、弱随机性),477❌+498✅

评估指标:P、R、F

实验结果
针对问题2——当下工具的有效性:客观评估了耗时;没有一个工具总是最优,使用过程间分析+大模式集合的工具表现更好


在3个基准下6个工具的表现


开发者反馈分析
实验中每种加密类型开发者的反馈总览

针对问题3——开发者如何认为工具结果的有用性:开发者检测结果并不是很重视(17/30);有些问题想修修不了;需要漏洞演示和实际影响

接受17个,改了9个,8个没改(1.不完整的修复意见;2.修复程序太复杂)
拒绝30个,1.不接受描述的误用情况;2.误用没有实际的安全影响
局限性和未来工作
局限性:
- 外部有效性:只用了我们用的数据,不全面
- 构建有效性:基准不能代表真实情况
- 内部有效性:对结果的人工验证可能出错
未来工作:
- 提高F值和相关性,提高过程间分析的准确性、去掉test和过时代码的报告、分析自定义加密
- 提供详细的定制修复建议
- 自动生成特定于项目的漏洞利用程序