如今随着互联网技术的蓬勃发展,各行各业都在互联网这块虚拟大陆上寻找和实现业务的拓展机会,缩短与客户之间的时空距离,为客户提供更为便捷的服务。金融行业更是如此,可以说从bank1.0发展到了bank4.0,实现了从物理网点、电子银行、到互联网银行再到开放银行的跨越式发展,尤其是今年疫情的原因,更加加速了金融机构线上业务的进一步深化发展。与此同时,承载金融机构业务的信息系统也由传统的封闭式内网转移到了公共的互联网之上,这也就带来了前所未有的安全威胁和技术挑战。

根据中国信息通信研究院发布的《2019金融行业移动APP安全观测报告》显示,2019年报告团队对133327 款金融行业App 进行扫描,共计检测出1979696 条漏洞记录,涉及60 种漏洞类型,其中有21 种为高危漏洞,而高危漏洞中数量最多的为动态注册Receiver风险。这也就说明了开发安全仍是金融行业的痛点之一,本文主要根据笔者的实际项目经验,谈谈自己对开发各阶段安全管理的理解。

目前单纯的实现业务功能已经不再是开发团队唯一要考虑的问题,为应用系统提供全生命周期的安全防护,使其在运行期间免疫于各种攻击和骚扰,也是应用系统的开发者们需要思考的问题,而开发阶段的信息安全管理则是决定是否遗留原始基因缺陷的关键。当然也可以通过后期的整改来对已有的应用系统进行修复和加固,但这样将带来整改难度大、成本高、周期长等问题。且一旦带病上线系统遭受攻击或入侵,将给金融机构带来巨大的损失。因此,开发阶段信息安全管理的有效性,对系统的健康运行至关重要。

微软针对应用系统开发过程提出了SDL模型(Security Development Lifecycle,安全开发生命周期),是从安全角度指导软件开发过程的管理模式。其目的是通过在软件开发生命周期的每个阶段执行必要的安全控制和任务,保证应用安全最佳实践得以很好地应用。如下图所示:

SDL很好地诠释了应用系统开发过程中安全管理任务的对应关系,以下将按照开发过程的各阶段讨论信息安全管理各环节的实现内容。

一、 需求分析阶段

业务需求一般是从业务功能实现的角度,由业务部门整理和提出的。至于安全,业务部门很少考虑,也没有能力顾及。这就需要开发团队根据系统构架将安全需求融入其中,进行风险预判和分析。

因此,开发团队不仅要从用户的角度出发考虑系统的功能,还应从攻击者的角度出发考虑系统面临的威胁。需要从安全方面考虑,如软件提供的安全功能、软件如何安全地与用户交互、软件的风险评估和威胁、软件的默认功能配置等等,形成安全需求列表供安全设计阶段参考设计。同时也需要建立检查的标准,为安全测试提供依据。下图例举了某系统安全功能设计检查列表,可供参考。

二、 安全设计阶段

在概要设计和详细设计的工作内容中,对于每一项安全需求都要按照安全需求方案确定的安全目标,进行考虑具体的实现技术,达到安全需求方案的要求。如应包含但不限于以下内容:

三、 安全编码阶段

在编码阶段,开发团队将根据设计方案展开分组分工,对实现内容开展并行处理。但由于编程人员能力及见解的不同,在程序实现上一定会存在算法习惯上的差异,这也会导致编码环节安全漏洞的产生。而在编码阶段实施前制定统一安全的编码规范就十分有必要了。

通过安全编码规范,对已发现的缺陷函数进行规避,建立统一安全的函数使用规则,并对初始化、表达式、数据类型、类和方法的使用、异常处理等进行明确,从而达到对SQL注入、XML注入、跨站脚本攻击、堆栈溢出攻击等黑客常用手段的防御。

而阶段性的代码走查以及最终版本的代码审计都是对编码实现情况的检查和监督,能够做到对编码的疏漏以及恶意代码的嵌入进行有效的检查。这是最终呈现出功能健全、运行稳定的应用系统不可缺少的步骤。此外,源代码的版本控制和备份管理也是在编码阶段需要关注和控制的安全事项。

四、 安全测试阶段

安全测试是在单元测试,集成测试,系统测试和验收测试之外进行的安全性评估,一般采用性能测试、模糊测试和渗透测试。

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。从而验证系统设计是否达到极限要求和冗余标准,并以此制定响应与控制措施。

模糊测试,也称Fuzz测试,是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。该测试强制软件程序使用恶意或破坏性的数据,并观察结果的一种测试方法,不够强壮的程序会崩溃。利用大量的测试用例,查找漏洞或Bug,是一种非常有效的漏洞挖掘技术,已知漏洞大部分都是通过这种技术发现的。

渗透测试是通过模拟黑客的攻击方法,来评估系统安全的一种方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析,这个分析是从一个攻击者可能存在的位置来进行的,并且从这个位置有条件主动利用安全漏洞。

针对测试结果,开发团队应及时修复发现的缺陷和漏洞,并进行相应的复测验证,确保问题得到有效解决。

五、 系统的部署和发布阶段

到了系统的部署和发布阶段,这表明系统得到了足够的验证可以上线运行。而在这个阶段更应关注的是日后的维护和用户操作出现的问题。因此,系统运维及操作手册作为知识转移的内容一定是必不可少的。同时,相关培训和考核也是保证系统正常运行的必要环节。

以上五个阶段可以作为系统开发过程中的基本安全控制流程。当然也可以根据开发系统的不同,结合实际情况对安全开发过程进行适应性的裁剪和补充。但随着软件开发安全性要求的逐步提高,信息系统开发各阶段与信息安全管理联系的更加紧密。金融应用系统的开发也一定会在实践中总结出更为适合的信息安全管理模式。

金明,信息安全工程师,具有多年的银行科技部门的工作经验及系统开发实践积累,目前从事信息安全管理体系咨询和信息系统相关测评工作。作者邮箱:jinming@cfca.com.cn,欢迎大家提出宝贵的建议!