摘要

当前,由于软件设计开发工作复杂度不断提升、开发人员缺少安全设计、安全编码、开发安全的意识和安全编码能力的原因,软件漏洞数量和漏洞的严重程度不断增加,对软件系统的稳定可靠运行和信息数据的安全性造成严峻挑战。软件安全开发生命周期通过在开发过程中引入一系列的安全技术控制点来消减软件开发过程中的漏洞数量提升金融业务系统的安全特性。

关键词

软件安全开发生命周期、开发安全体系化建设、安全开发平台、白盒测试与代码审计、安全测试

一、应用软件安全背景

当前,由于软件设计开发工作复杂度不断提升、开发人员缺少安全设计、安全编码、开发安全的意识和安全编码能力的原因,软件漏洞数量和漏洞的严重程度不断增加,对软件系统的稳定可靠运行和信息数据的安全性造成严峻挑战。全球各大企业的软件系统不断发生遭受黑客攻击、系统停摆、信息外泄等安全事件,对用户隐私和财产安全产生严重威胁和影响。

为应对不断增多的软件安全漏洞和网络安全挑战,业内不断对软件安全开发生命周期理论进行实践与优化,安全开发模型和方法论日益成熟并在各领域显现效果,近年来,随着DevSecOps概念和工具的引入,进一步丰富了软件开发生命周期的理论内容和实践,为企业在系统设计前期降低软件风险提供了更加丰富的手段。

软件安全开发生命周期专注于软件开发过程中的安全技术保障与安全开发流程,通过在开发过程中引入一系列的安全技术控制点来消减软件开发过程中的漏洞数量。企业开发组织通过构建适用于自身研发组织特点的软件安全开发生命周期体系,可以有效提升金融业务系统的安全特性。

二、应用软件面临的挑战与风险分析

随着商业银行互联网金融产品和服务的创新和推广,为个人和用户提供了便捷而广泛的金融服务,伴随而来的是互联网金融相关应用软件系统面临的安全风险也不断扩大。

2.1 网络与信息安全整体风险

随着企业数字化转型与5G 物联网时代的到来,“万物互联”使信息系统与互联网或其他网络的连接更加的普遍与密切,直接导致系统受攻击面的不断扩大。同时随着搭建在系统之上的应用数目增多, 逻辑越来越复杂,信息系统隐藏的缺陷与漏洞越来越多,且不易发现与修补。

近几年重大安全事件频频发生,包括 WannaCry 勒索软件、“棱镜门”事件、“RSA 后门”事件等,对企业商业信息和个人金融数据构成严重威胁,各种企业和金融行业信息在暗网传播,黑色产业链的形成对我国的金融企业的安全威胁不断上升,整个网络与信息安全形势日益严峻。

2.2 各国网络安全监管合规风险

运营金融服务企业需了解新发布的网络安全监管条例及条例对其业务的影响,从而抓准数据监管规则并保持合规,尤其是在涉及跨境交易的情况下。违规通常要缴纳高额罚款,因此保持合规至关重要。

中国《网络安全法》于2017年6月1日起实施。中国政府旨在利用该法规,通过为网络与系统安全设定额外标准,更好地与行业及全球网络安全标准对接。金融服务属于重要金融信息基建,该法规将直接影响金融服务业。人民银行与2019年发布了237号文,表面我国对信息及信息系统的安全要求越来越严格,违背监管要求的处罚也会越来越严厉。

欧盟《一般数据保护条例》于2018年5月25日生效。条例旨在使欧盟公民得以掌控自身数据。条例要求机构主动或默认实行数据保护,这就使得安全和数据监测成为在程序设计初始就应考虑的核心问题。

美国全国与各州都更为关注网络安全。银行需有完备的网络安全计划并雇佣首席信息安全官监管安全程序与维护。金融服务企业需遵照一系列合规期限,违背这些新规将产生严重的金融与运营后果。为确保合规,金融服务企业需审视每项规定,准确理解其对自身的影响。虽然各法规采取的网络安全标准不同,但改善数据传输与使用安全性具有普遍意义。

网络攻击日益发展为全球现象,政府出台针对性法规保护公民权益,被视作关键性基建的金融服务就需基于地缘改善其信息与安全基建。金融机构为遵守新要求必须作出转变。

2.3 新技术应用对软件安全的风险

由于金融行业的业务发展和市场要求,需要尽早布局、抢占市场,相关的互联网金融应用系统的开发周期不断挤压和缩减,为保证业务系统的快速上线,开发过程中的安全活动不断减少或被取消。

各种新技术的发展和引入以及与原有技术的融合,也会对原有业务系统的应用安全产生重要影响,比如新兴的大数据安全、云计算的存储安全、区块链技术中的密码算法与国产密码算法融合等问题、人脸识别技术的安全性等等,这些新技术的安全性或者合规性并未得到充分全面论证,容易导致应用安全漏洞,对金融系统软件的安全发展形成机会与挑战。

三、安全开发生命周期介绍

SDL security development lifecycle(安全开发生命周期),是微软提出的从安全角度指导软件开发过程的管理模式。SDL是一个安全保证的过程,侧重点是软件开发,它在开发的所有阶段都引入了安全和隐私的原则。

自2004年起,SDL一直都是微软在全公司实施的强制性策略。SDL中的方法,试图从安全漏洞产生的根源上解决问题,通过对软件工程的控制,保证产品的安全性。安全开发的主要理念就是将安全考虑嵌入到在软件开发的各个阶段:需求分析、设计、编码、测试和维护。从需求、设计到发布的每一阶段都增加了相应的安全活动,通过这种安全活动以消减软件开发过程中漏洞的数量和严重程度。安全开发生命周期是侧重于软件开发的安全保证过程,旨在开发出安全的软件应用。

在安全开发方法中,目的是为了从安全漏洞产生的根源上解决应用安全问题,通过对软件开发流程的控制,保证产品的安全性。

当组织对安全相对重视的情况下,在每年进行安全轮询时还总能找到各种各样的安全问题。这个时候就应该考虑从根源解决问题。

由于企业的开发人员的技术参差不齐,部分相关开发者心中没有安全的相关概念、项目的上线及迭代更新没有相应的规范等等,这些问题都将会是导致出现安全问题的根本原因。

而安全开发规范流程正是从根本原因解决这些问题。安全开发对软件开发过程中所有参与该项目的相关工种,都将引入相关的安全概念,形成一个闭环,从而解决出现安全的根本问题。

对于拥有庞大的开发团队的组织,由于大量的开发人员以及产品的频繁迭代,推动安全开发规范流程是目前最好的减少相关应用产品的安全问题的解决方案。

四、安全开发生命周期行业应用实践

跟踪研究国内外信息安全政策、标准、法规和最佳实践和对国家、金融行业的合规性要求,借鉴与总结多年来的安全行业最佳实践,引入国内信息安全行业实践与安全开发生命周期相结合的应用开发安全体系和工具,可以帮助研发组织全面规范安全开发流程,提升行业安全合规能力,降低由于人员、技能、业务等方面带来的安全风险和威胁,主要包括以下内容:

4.1 安全开发体系设计与管理

规划设计适合研发组织的安全开发生命周期机制(包括异地研发基地&技术合作机构&业务外包),建立技术战略及核心技术能力与总体战略及各业务单元安全策略的关系和定位;提供安全开发生命周期规划的工具、方法和流程,设计安全开发相关组织模式,安全开发相关组织结构与管控模式,包括组织的职责与权限、决策体系、人力资源支撑体系建设方案、绩效评估与激励机制,管理制度流程设计等,用以指导研发组织的安全开发发展规划完成;

体系设计建议将安全开发生命周期各环节的流程嵌入到ISO27001体系框架,分层建立相应程序文件,同时引入安全评审机制和流程,而且可以和ISO27001的评审进行整合,避免因为安全开发评审、评估、考核、激励机制的影响,导致研发组织流程管理任务过于繁重。

4.2 安全开发平台建设

目前大多数金融企业的软件安全防护手段是通过采购单独的工具完成,由于新引入的安全产品或工具必然是独立零散的特点,金融对外软件业务不能形成开发、测试、上线的整体业务安全监测与安全评估。

针对银行的安全治理需求,考虑构建一体化的安全开发运营管理平台:

以企业应用开发全生命周期为基础,以安全基线、安全开发指引、信息资产管理、开源组件漏洞扫描、源代码审计、安全运维管理等为核心,构建知识库、集成安全工具的安全开发管控平台。实现安全开发知识化,安全管理统一化、安全运营标准化。

平台包含了各阶段流程的梳理、评审机制的建立、相关资源库的建设,通过数据接口收集各阶段安全数据、开发数据及漏洞样本,打造覆盖应用开发安全建设和使用全生命周期的一体化安全管控平台。

4.3 安全培训

  • 安全意识提升培训

面向开发全体人员开展网络安全意识和安全形势的安全培训,培训内容包括:日常信息泄露及防范措施,企业信息安全意识及防范措施;通过安全培训,加强研发组织内开发人员对网络安全管理制度的理解和认识,落实相应安全责任,提升整体开发安全意识和开发安全水平。

  • 安全开发技能培训

开发安全培训的主要内容,包括WEB安全开发、APP安全开发,以及涉及安全运维等相关内容培训。

另外应涉及面向开发安全管理及技术人员法规与技能的重点内容,如《个人金融信息保护技术规范》等重要行业规范的内容和解读等信息安全专业化培训,提升整体开发人员安全开发水平。

4.4 安全需求和设计

安全需求主要从安全标准、行业法规、监管需求和业内最佳实践等几个方面得出,安全标准包括企业内部标准、行业标准、等级保护测评指南、ISO 27000等;最佳实践则从项目积累知识库等方面出发。

针对与来自于行业、国家监管机构、资本市场的要求以及系统应用对应的业务要求分析,确定系统或应用软件的安全需求。在需求分析过程中,有针对性的对业务系统安全性要求进行细粒度分析并对比行业合规性要求,为后续业务实现、数据呈现以及威胁建模提供软件安全性设计依据和基础。

基于前期的安全需求分析和合规的各类需求,协助用户进行安全设计,通过受攻击面分析(最小化原则)和威胁建模两个主要手段,利用STRIDE模型,确定业务功能风险、可能的攻击和威胁,进而推进安全防护设计,通过这种对业务系统软件安全的全面风险分析,最终形成系统软件安全设计方案。

4.5 安全编码

在编码阶段,根据业务系统的安全策略、安全需求和安全设计,对代码进行安全检测与评估服务,由具备丰富编码经验的安全工程师,根据安全编码规范标准,针对系统应用源代码,从程序结构、系统脆弱性以及安全缺陷等方面进行安全审查和安全检测

基于代码安全检测结果,可以指导开发人员采用安全的编码方法,制定安全编码规范和标准,包括弃用不安全的函数,第三方开发包安全评估,保证程序对象权限、业务数据流、流程交互处理、数据存储、的安全性。安全编码通常主要包括以下方面:

  • 行业最佳安全编码实践。

  • 弃用不安全的开发函数列表。

  • 常见高危漏洞编码解决方案,如XSS开发解决方案。

  • 应用系统安全功能设计方式,如身份验证要求。

  • 应用系统安全策略处理方式,如加解密方法等。

在这个过程当中,应充分利用自动程序分析技术与工具,检测代码中的安全漏洞,尽可能降低由此给研发组织带来的影响和工作量。

自动化代码分析工具工作原理

软件源代码安全检查系统

4.6 安全性测试

根据需求设计阶段提出安全需求设计,给出安全测试方案参考,协助用户进行对应安全测试,形成需求-设计-测试的安全开发管理闭环。

整个过程包括安全测试设计,安全测试培训,安全测试工具引入,通过安全测试驱动代码安全与质量。

4.7 发布与响应安全

对需要上线的应用进行系统安全和应用安全的安全测试,包括但不仅限于漏洞扫描,渗透测试,安全配置检测与基线评估;

对于要对外部开放的应用系统至少应该完成:系统漏洞扫描,应用漏洞扫描,渗透测试,基线评估等安全评估;

所有应用在测试后应进行至少一次安全复测,保证测试和修复结果的可靠,保障应用稳定,安全,可靠上线。

五、安全开发在金融行业应用的可行性分析及思考

5.1 满足监管要求

信息技术的快速发展和广泛应用,使金融行业对信息科技高度依赖,银行信息安全事件往往会导致服务质量下降、业务中断、账务差错;或者造成资金损失、敏感信息泄露、数据损毁等严重后果;或者衍生出违反内部操作规程、违反法律法规等案件。传统的信息安全管理已经上升为科技风险管理的高度,银监会对商业银行进行监管评级中,信息科技风险占比达10%,信息科技风险与资本充足状况、资产质量、管理状况等指标一样,已成为直接影响商业银行业务发展的考核指标。

在银行各类风险中,信息科技风险是唯一能够导致银行全部业务瞬间瘫痪的风险,具有隐蔽性、突发性和灾难性的特征。做好风险防控,应将“抓源头、控过程”的管理理念贯穿应用系统的全生命周期,做到各种风险的早发现、早识别,构建稳健、可持续发展的应用安全体系。针对信息系统建设的生命周期管理,银监会《商业银行信息科技风险管理指引》(银监发〔2009〕19 号)规定了多项安全要求(第五章),例如“商业银行应有能力对信息系统进行需求分析、规划、采购、开发、测试、部署、维护、升级和报废,制定制度和流程”, “应采取适当的系统开发方法,控制信息系统的生命周期”,“应制定相关控制信息系统变更的制度和流程,确保系统的可靠性、完整性和可维护性”等。

除了上述既定的监管要求之外,近期央行陆续出台发布了多项金融技术标准,如2020-02-13《个人金融信息保护技术规范》、2019-9-27《移动金融客户端应用软件安全管理规范》、2020-02-05《网上银行系统信息安全通用规范》、2020-02-13《商业银行应用程序接口规范》等,从不同技术应用的视角加以安全防护,促使金融机构建立健全安全开发体系,通过“安全前移”,从源头堵住风险漏洞,防范当前新形式下的信息科技风险。

5.2 解决开发痛点

根据2013-2018年CNVD收录的安全漏洞数量统计,2013年漏洞数量8000多,2017-2018年为15000-16000多,年均增长率达到15%,其中高危漏洞数量从2013年的2000多个增长到2018年的5000多个。漏洞类型包括应用程序漏洞、Web应用漏洞、操作系统漏洞、网络设备漏洞、安全产品漏洞和数据库漏洞等,其中应用程序漏洞和web应用漏洞占全部漏洞的比例达到76.5% 。也就是说,大多数导致安全事件的漏洞都出自软件应用本身,这对开发安全提出严峻挑战。

分析开发过程中漏洞产生的原因,主要在于三个局限:一是开发模式的局限性,传统软件开发强调的是功能需求,重点关注的是功能的正确实现,并不强调漏洞的降低;二是生命周期的局限性,传统开发生命周期是“需求-设计-编码-测试-投产”,缺乏对安全的关注 ,缺少对安全的控制环节与安全问题的解决;三是开发能力的局限性,传统开发人员大多只具备开发编码能力,缺乏信息安全知识,编码人员缺乏安全意识,难以从“攻击者”的角度审视开发的软件,从而导致程序员平均每一千行代码就会产生一个漏洞的窘境。

因此,开发安全需要体系化治理,需要将安全集成在软件开发的每一个阶段,从需求、设计到软件发布的每一阶段都引入安全活动与规范,以规范软件开发活动、减少软件中漏洞数量、提升软件安全。

5.3 提升内控水平

当前,互联网数据已经成为各行业的重要战略资源和新生产要素,企业数字化转型对经济发展、国家治理、社会管理、人民生活都产生重大影响。2019年,CNCERT全年累计发现我国重要数据泄露风险事件 3000余起,大规模数据泄露事件频发。Verizon发布的《2019年数据泄露调查报告》显示,大约30%以上的数据泄露是由组织内部人员造成的,内部威胁日渐上升为企业数据泄露的主要原因之一。由于软件开发项目在组织结构、岗位角色、集成协作等方面的复杂性,任何供应链、外包商、甚至安全意识薄弱的员工随时都可能变成“内部威胁”,内控管理面临严峻挑战。

除了上述组织机构及人员风险之外,开源软件漏洞风险也是当前软件开发的主要风险之一。根据Gartner报告显示,99%的企业组织在其IT系统中使用开源软件,Struts 2远程代码执行、OpenSSL心脏滴血、Fast JSON等开源组件的漏洞,在世界范围内造成了巨大的安全影响,黑客利用开源组件已知漏洞实施攻击案例屡见不鲜。今年新发布的《网上银行系统信息安全通用规范》也提出,“应不定期组织针对开源系统或组件的安全测评,及时进行漏洞修复和加固处理”。

良好的软件安全开发项目建设管理需要建立涵盖从信息化项目领导机构监督到具体功能编码实现、开源组件使用的全流程安全体系,结合银行自身情况,对软件开发过程、管理流程进行标准化安全规范,建立起符合实际的软件安全开发标准过程,发现并消除“内部威胁”,避免数据泄露。

5.4 保障敏捷开发

当前,银行信息化发展趋势主要表现在业务科技深度融合与开发运维一体化。央行金融科技(FinTech)发展规划提出,“结合客户个性化需求和差异化风险偏好,构建以产品为中心的金融科技设计研发体系,探索运用敏捷开发、灰度发布、开发运维一体化等方法提升创新研发质量与效率,打造差异化、场景化、智能化的金融服务产品”。

不同于传统的瀑布开发模式,敏捷开发模式对安全管理带来严峻挑战。为了保障敏捷开发的安全性,需要将“安全前移”,从需求阶段即考虑安全问题,将安全融入到开发运维一体化的流程和工具链之中,在不降低业务快速交付的前提下,以服务化、组件化为抓手,通过各种方法、工具、流程,设计和交付更安全的软件,以降低漏洞修复成本,保护企业和用户资产。(徐晓华

参考文献

[1]http://www.microsoft.com/security/sdl/default.aspx

[2]https://msdn.microsoft.com/zh-cn/magazine/dd347831.aspx

[3]https://blogs.technet.microsoft.com/gcrsec/2008/09/22/sdl-it/

[4]https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=12379

声明:本文来自信息安全国家工程研究中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。