软件安全测试:安全左移的痛点与要点

软件开发安全,是网络安全行业近年想积极探索的技术领域,虽然这个技术领域已经存在了将近20年时间,但是直到2020年2月的RSAC大会,开发安全才真正成为网络安全行业的关注热点。同样,2019年12月1日正式实施的《网络安全等级保护条例2.0版》也给软件开发安全领域注入了一针“强心剂”,业界和政策对“安全左移”和DevSecOps的空前重视让无数网络安全从业者看到了新的机会。

笔者团队通过对软件开发安全的认知和对软件安全测试的摸索,并结合行业主流的软件安全测试技术进行了实践。本文根据笔者团队的实践经验为大家分析有关软件安全测试的实践收获。

韩敏

现任国网思极检测技术(北京)有限公司执行董事、总经理。软件工程工程硕士,国网公司办公自动化系统业务方向信息化资深专家、中国电力科学研究院先进工作者、“茶杯式脱敏理论”提出者、“思极风”系列产品创始人。

1.当前软件安全测试的五大痛点

随着DevOps方式的普及,软件开发正向着“快速迭代、快速开发、快速交付”的方式发展、提供业务支撑,开发团队也不断平衡和融合开发、测试与业务之间的关系。但是,软件安全测试仍存在如下典型问题。

(1)开发迭代周期短,难以做到每个版本迭代执行安全测试;
(2)开发人员和测试人员通常缺乏应用安全知识,网络安全人员不懂软件开发,双方较难建立起沟通语言;
(3)主流采用的软件安全测试仍为渗透测试,难以在研发过程中体系化检测代码级和功能级缺陷;
(4)基于代码审计的安全检测普遍存在误报和漏报,需人工复合;
(5)无法准确掌握软件所使用开源组件的资产使用情况和安全漏洞情况。

2.软件安全测试的主要思路

理论上来讲,软件安全测试是从安全的视角对软件的安全质量进行审核的过程,主要包括:

(1)确认软件的安全功能十分满足安全设计要求;
(2)识别软件自身存在的设计缺陷、错误编码和运行故障;
(3)评估软件的其他质量属性,包括可靠性、可扩展性、可恢复性等。

其中,软件自身漏洞识别是软件安全测试的主要内容。那么,安全测试的主要思路包括:

2.1. 将自动化安全测试工具与研发流程融合

全球顶级咨询公司Gartner于2020年发布的《应用安全测试魔力象限2020》报告中,明确指出了当前应用软件安全测试领域包括的主流技术为SAST、DAST、IAST和SCA。可以说,通过这四类技术的实践应用和有机融合,能够有效开展软件安全测试。

而当前软件研发团队普遍使用的研发流程为“需求、设计、编码、测试、部署运营”,并在DevOps过程中做到流程的快速迭代。研发团队根据软件安全保障的需要和自身的能力,选择、配置和实施有关软件安全测试的实践,如:使用SAST技术执行白盒安全测试、使用DAST技术执行黑盒安全测试。因此,用于软件安全测试的自动化工具需要与研发团队现有的研发流程和安全实践匹配融合,并具备与研发管理平台融合的能力。

2.2. 检测效率与成本投入之间的平衡

安全测试工具能对DevOps中的安全测试提供支撑,这就需要自动化安全测试平台具备“耗时短、精度高”的特征。

2.3. 对于软件研发资产的保护

安全检测过程中的研发资产安全保护是研发团队必须重视的。受开源理念的影响,行业中存在使用开源组件支撑软件开发功能实现、使用开源安全检测工具执行安全保障的情况。但从“软件供应链安全”的角度来看,由于开源工具的非商业性和开放性,可能存在其所属开源社区缺乏对开源组件维护而导致安全漏洞未修复、无后续版本升级的情况,也可能存在在其传播下载途径中被恶意人员植入恶意代码的风险。因此,需要对使用的软件研发资产进行合理的管控。

3.软件安全测试的技术实施方案

3.1. 安全测试技术选型

行业内主要使用自动化软件安全测试技术和工具都能解决常见的技术性安全问题,且通常都能覆盖OWASP Top 10中定义的应用安全风险,以及PCI DSS这样的行业标准等。

(1)动态应用安全测试(DAST)

通常在测试或运行阶段分析应用软件的动态运行状态。通过模拟黑客攻击行为,收集和判断应用软件做出的反应,从而确定该应用软件是否存在安全缺陷。

(2)静态应用安全测试(SAST)

源代码级别的安全测试,通过将软件安全规则、开发规范融入到检查列表中进行匹配,从代码实现的源头遏制安全风险。通常在编码阶段分析应用软件的源代码或二进制文件的语法、结构、过程、接口等来发现程序代码存在的安全漏洞。

(3)交互式应用安全测试(IAST)

通过部署的代理程序,收集、监控应用软件运行时函数执行、数据流,与扫描器端进行实时交互,高效、准确的识别应用软件中的安全缺陷及漏洞,同时可准确识别安全缺陷及漏洞所在的代码文件、行数、函数及参数。IAST技术可以说是SAST技术和DAST技术结合的一种实时应用软件安全检测技术。

有关DST、SAST和IAST的实现原理、优劣势分析等技术信息,可参考安全牛网站2019年4月发布的《一文洞悉DAST、SAST、IAST ——Web应用安全测试技术对比浅谈》文章,这里不再复述。但我们对上述三种安全测试技术做一个综合性的对比:

3.2. 软件成分分析安全检测

软件研发过程中大量使用第三方组件(包括:商业和开源)已成为软件研发的主流。而第三方组件也可能同样引用了其他类似的安全或者不安全的组件,这就形成了一个没有安全保障的软件供应链或调用链。任何一个薄弱环节都可能成为一个入口点导致软件被攻击。因此,为了检测研发过程中所使用第三方组件的安全性,软件成分分析(SCA)技术已变得非常重要。

2019年,Gartner在软件成分分析的技术洞察报告中对软件成分分析技术进行了定义:软件组件分析产品对应用程序进行分析,以检测开源软件组件是否带有已知的安全漏洞或功能漏洞,及需要恰当授权许可的商业软件或第三方产品。它有助于确保企业软件供应链仅包含安全的组件,从而支持安全的应用程序开发和组装。

准确的说,SCA技术用于检测软件中的开源组件是否带有已知的安全漏洞或功能漏洞,及需要恰当授权许可的商业软件或第三方产品。SCA技术有助于确保企业软件供应链仅包含安全的组件,从而支持安全的应用软件开发和组装。有关软件成分分析的解读,可参考安全牛网站2020年7月发布的《掌控开源 企业开展软件成分分析工作的思路与实践》文章。

3.3. 软件安全测试工作流程

在软件开发的安全测试过程中全部应用上述四种安全测试技术,考虑的流程如下。

(1)开发人员在编码阶段完成代码编制、构建代码包,此阶段引入SAST技术和SCA技术对代码进行全面检测,识别代码级安全缺陷和软件中自带安全漏洞的组件情况;
(2)开发人员或测试人员在测试阶段进行单元测试或集成测试验证功能的可用性,此阶段中引入IAST技术对代码执行交互式安全测试,以掌握代码安全和逻辑安全的状况,提前识别并修复代码和逻辑中的安全缺陷;
(3)在测试环境中开展完整的业务测试,使用DAST技术对软件进行动态扫描。此阶段也可以引入人工的安全测试,自动化平台提供安全漏洞录入和跟踪功能;
(4)当应用软件发布后,不定期组织开展渗透测试以开展进一步的业务安全测试。

3.4. 行业代表工具

目前,各安全测试技术已在国内外形成了各自的行业代表性工具,包括开源工具和商业工具。在开源工具方面,全球顶级应用安全组织OWASP提供了多款工具支持DAST技术和SCA技术的验证和应用。而在商业工具方面,除进入Gartner评估视野的国外知名公司(如:Synopsys、Checkmarx、Micro Focus、Rapid 7、HCL等)外,还有诸如奇安信、开源网安、酷德啄木鸟、默安等国内优秀厂商提供国产工具。

4.实践经验

笔者团队基于国产安全测试工具对团队自研的软件系统开展安全测试,和大家分享经验如下。

(1)安全测试是实践DevSecOps的基础

随着对信息安全保障的重视和软件安全开发的实践,“DevOps”逐步吸收和融合“安全(Sec)”形成了“DevSecOps”。而DevSecOps的重要思想就是在开发和运维一体化的基础上,开发能快速推出软件进行安全测试,并通过多个版本的迭代和安全保障,使软件变得成熟稳定,同时也使软件功能变得丰富。然而,DAST和SAST安全测试在DevSecOps模式下显得过于厚重,检测耗时长、需人工核实检测结果自然就约束了DAST和SAST在DevSecOps流程中的应用。因此,要从DevOps转向并实施DevSecOps,能融入开发流程、速度快、准确率高、低人员参与度的自动化安全测试技术就成了前提保障。基于此,IAST安全测试和SCA检测是支持DevSecOps落地的优先选择。

(2)与质量管理体系相结合

通常,研发团队实施安全测试是基于网络安全管理方面的要求。在软件安全测试的落地过程中,将测试标准、测试过程、测试人员和测试结果纳入软件的质量管理体系,是保障软件安全效果的基础。当软件的某项安全指标没有达到要求时,质量部门有权否决软件的上市发布或上线运营。因此,鉴于DAST、SAST、IAST和SCA各自的技术特征,将基于IAST技术的安全测试与软件功能测试结合,将基于SCA技术的组件分析在测试阶段执行,既能做到对功能测试与安全测试的同步覆盖,又能从代码、逻辑、组件等不同维度对软件进行安全分析,同时能对质量管理体系提供必要且低成本的支撑。

5.总结

在实践过程中,笔者团队虽然在测试流程、人员能力、工具配置、漏洞修复等方面仍处于摸索和经验积累阶段,但较以往的软件而言在软件发布前已大幅减少了不同威胁等级的软件安全漏洞,可以说,软件安全测试为软件开发提供了明显而有效的安全技术支撑。众所周知,安全是动态变化的,也没有百分之百绝对的安全,但若能在软件上线前设置好卡口、做好充足的软件安全测试,检测并修复能够发现的软件安全漏洞,那么对于软件上线应用后的网络安全和数据安全保障工作就奠定了坚实的基础。

上一篇:全面解析新基建 CDCE打造“新基建”一站式采购平台

下一篇:ASRC 2020年第二季度邮件安全观察