-
Notifications
You must be signed in to change notification settings - Fork 46
Home
目前工业界和学术界均无安全能力的测试评价标准,都是通过在若干样本集上的测试结果对应用安全工具进行评价的,如图1。样本集的设计没有标准,差异很大,无法全面客观的反映全貌,且评价结果只能得出一个总体的检出率、遗漏率和误报率数据,无法直观反映安全能力的优势和不足。
图1 业界常用的安全能力测试样本集
为了能全面而客观的对安全能力进行评价,蚂蚁安全团队从2021年开始探索建立安全能力的评价体系。通过应用安全评价体系项目,希望可以衡量出应用安全产品的技术优劣,指引应用安全产品的发展方向,并可辅助用于商业化安全产品采购的技术选型。
-
一方面,IAST、SAST、RASP和SCA等和语言相关的安全能力,各个语言之间的实现原理差异很大,很难用一套统一的评价体系来涵盖所有的场景,因此我们将评价体系按Java/Node/Go等开发语言进行了分别设计。
-
另一方面,为了简化评价体系的复杂度,将评价体系从底层到上层拆分成了引擎能力和规则能力2个层次,每一层都只聚焦每一层的能力。 引擎能力聚焦开发语言层面,去除不同框架、web容器的影响,是评价体系中最核心的能力,在这个层面,各安全能力产品之间可以较容易的进行能力横向对比 规则能力更多体现的是各种检测规则的完整度,如sink点的完备程度、自定义规则等。 图2 评价体系分层关系
-
在引擎能力评价体系内,各评价项也是分层的树状层次结构设计。
-
- 对于专业用户,5~7层的评价项可提供精细化的技术评价;
-
- 而对于普通用户,3~4层的评价可使其更易懂,同时满足专业用户与普通用户的使用需求。 这种分层设计,降低了每一层内的评价复杂度。
在设计评价体系的过程中,部分场景非常复杂难以在评价体系中逐一枚举,比如对污点数据流跟踪过程中,传播过程的跟踪能力的评价,传播过程有非常多的场景。 基于对这些复杂场景的分析,以Java为例,所有的传播过程都是基于JDK中对字符串/字符数组/字节数组和字节流等基本操作的各种封装和组合,如图3。JDK中对字符串等基本操作都是可以枚举的,因此可以将这类复杂场景转换为对JDK中字符串等基本操作的支持程度,从而将难以枚举的复杂场景转化为可枚举的场景。 图3 JDK中对字符串的常用基本操作
如图4所示,传播方法replace()可认为是由StringBuffer构造函数、StringBuffer.subString()、StringBuffer.append()和StringBuffer.toString()组合而成,因此安全能力对replace()的支持程度就可以通过对StringBuffer构造函数、StringBuffer.subString()、StringBuffer.append()和StringBuffer.toString()这些基本字符串操作的支持度来评价。 图4 传播方法转换为基本字符串操作示例
目前Java IAST引擎能力评价体系V1.0和Benchmark已经正式发布,即将发布Java SAST的引擎能力评价体系和Benchmark。