
1.7 代码安全保障技术趋势前瞻
随着开发模式的不断演进和信息安全趋势的变化,人们对代码安全保障技术提出了规模化、自动化、智能化的要求,以期实现软件快速、安全、自动的发布。
1.7.1 基于人工智能技术的代码安全分析
作为分析、挖掘数据价值的创新方法,人工智能技术可以充分利用、释放数据的价值,从而带来前所未有的增值效应。随着软件复杂度的不断提升,软件的代码数量也在迅速增加,需要从代码中抽象出的数据也越来越多,安全测试往往又依赖于对复杂数据的分析。
虽然利用人工智能技术辅助安全和风险管理者进行代码安全治理的路线目前尚不十分明晰,但是,一些世界顶级的安全厂商已经开始使用人工智能技术在代码安全领域开展一些研究和尝试。例如,对于静态应用安全测试技术(Static Application Security Testing,SAST)产品而言,虽然其应用十分广泛,价值不可否认,但是其误报率较高的问题一直广受业界关注。
引入人工智能技术后,我们可以将SAST工具的结果作为输入,不断进行缺陷训练,从而发现误报,然后系统会输出某个置信水平内的误报列表(或排除误报的列表)。为了对其进行进一步的改进,可以通过结果的审计,识别出新的误报并反馈到训练集中,计算出新的模型。随着这种算法的迭代进行,新的信息不断被纳入预测算法中,持续进行改进。IBM的SAST产品提供了针对扫描结果的智能查找分析功能,以消除误报、噪声数据或利用概率低的结果。人工智能技术和传统代码安全技术的结合是代码安全领域的重要发展趋势之一。
1.7.2 面向安全的软件代码成分分析
Forrester Research的一份研究表明,为了加速应用的开发,开发人员常使用开源组件作为应用基础,因此在开发代码中有80%到90%的代码来自开源组件。而Veracode在《软件安全报告(第7版)》中指出,大约97%的Java应用程序中至少包含一个存在已知漏洞的组件。由此可见,随着开源组件在现代软件中使用的持续增长,以及日益严峻的组件安全问题,开源或第三方组件的发现和管理已经成为应用安全测试(Application Security Testing,AST)解决方案中关键性,甚至强制性的功能之一。
软件代码成分分析(Software Composition Analysis,SCA)技术指通过对软件的组成进行分析,识别出软件中使用的开源和第三方组件(如底层库、框架等),从而进一步发现开源安全风险和第三方组件的漏洞。通常,SCA的检测目标可以是源代码、字节码、二进制文件、可执行文件等的一种或几种。除了在安全测试阶段采用SCA技术对软件进行分析,SCA技术还可以集成到MSVC、Eclipse等IDE或Svn、Git等版本控制系统中,从而实现对开发者使用开源组件的控制。
SCA技术和其他AST技术的深入融合也是代码安全技术发展的趋势之一。例如,当使用单一SAST技术扫描某个项目的源代码之后,我们可能会得到开发人员的反馈:“检测结果中有90%是开源代码的问题,我处理不了”,而当SAST技术融合了SCA技术之后,开发人员拿到的结果将是开源组件中的已知漏洞信息和实际开发代码中的SAST扫描结果。
1.7.3 面向DevSecOps的代码安全测试
由于敏捷开发和DevOps开发的技术趋势,传统应用安全的形态在不断发生变化。很多具体的技术路线仍然在不断演进,对自动化、工具化、时间控制的要求越来越明显。面向DevSecOps的代码安全测试并不是一门全新的技术,但是几乎所有的传统安全测试技术都会因为DevOps而产生变化,从而演化出新的产品形态。
由于开发运维的一体化,原本开发人员的一次普通Tag或Merge操作,也将赋予更多含义。提交代码中的安全问题可能导致一次失败的发布。因此,对代码安全的需求被不断前置。能够在代码编写的同时,发现代码中的安全隐患,从而在第一时间修复,成为DevSecOps的基本需求。因此,IDE插件、轻量级的客户端快速检测模式也成为下一代代码安全产品的标配。
由于大量应用持续集成、部署在DevOps中,因此自动、快速进行代码安全测试势在必行。代码安全产品需要与Jenkins、Bamboo等持续集成系统,Bugzilla、Jira等生命周期管理系统进行集成,实现有效的自动化。同时,提供针对代码安全基线的检测,以及增量分析、审计信息携带等功能,可在少量或没有人工参与的情况下,尽可能快速、有效保证软件的安全性。
1.7.4 交互式应用安全测试
SAST产品通常从源代码层面对程序进行建模和模拟执行分析,但是由于缺少一些必要的运行时信息,因此容易产生较高的误报。动态应用安全测试技术(Dynamic Application Security Testing,DAST)产品虽然能够通过攻击的方式发现一些确实存在的安全问题,但其对应用的覆盖率很低。
交互式应用安全测试(Interactive Application Security Testing,IAST)技术是解决上述问题的一个新的尝试。关于IAST,Gartner给出的定义是:“IAST产品结合了DAST和SAST技术,从而提高测试的准确率(类似于DAST对于攻击成功的确认),同时对代码的测试覆盖率达到与SAST相似的水平”。IAST在准确度、代码覆盖率、可扩展性等方面有着独到之处,但其又受限于自身的技术路线,无法在所有场景中替代DAST产品。
IAST产品的解决方案通常包含两个部分:应用探针和测试服务器。应用探针会部署于被测Web应用所在的服务器,从而捕获来自用户代码、库、框架、应用服务器、运行时环境中的安全信息,并传输给测试服务器;测试服务器会对收集来的安全数据进行分析,得出漏洞的信息,进而生成报告。另外,值得一提的是,基于这种应用深度探测与分析的技术,还能够实现实时应用层攻击的自我防护,阻断对诸如SQL注入、XSS等漏洞进行的利用和攻击,这就是实时应用程序自我保护(Runtime Application Self-Protection,RASP)技术。