随着银行业务创新的快速发展,针对新业务需求的应用系统开发任务日益增多,而银行的很多应用系统都直接与客户的资金有关,这就对应用系统自身的安全性提出很高的要求。根据Gartner公司的分析,目前对网络的攻击有70%以上是集中在应用层,并且这一数字呈上升趋势。应用层的攻击有可能会造成非常严重的后果,因此,对具体应用系统的有效保护就显得越发重要。
我国商业银行信息科技风险管理指引和国家等级保护要求,都指出银行必须构建一个完整的开发安全管理体系,以实现对信息系统整个生命周期的控制。这个体系应该是一个从需求分析、设计、编码实现、测试到上线全生命周期的安全管理体系。软件工程的相关研究表明,在软件开发周期的早期就修补安全漏洞更高效而且更具成本效益。因此,银行在防范金融风险的过程中,必须充分重视开发安全管理体系的建设,控制具体应用系统的开发过程,同步进行安全建设,避免应用系统开发完成后再考虑安全问题。
开发安全从规范开始
银行在建设应用系统开发安全管理体系时,应当首先考虑制定相应的制度与流程。通过对各种类型应用系统开发过程的研究,发现其中面临的各种与安全相关的并且具有一定通用性的问题,银行需要针对这些问题制定相应的开发安全规范,以保证安全不被忽视。开发安全规范的制定应该依照组织的整体方针和业务目标,并引用其他参考文档(如通用准则、安全标准、组织过程资产以及最佳实践等等)来识别与控制风险,提出与开发安全有关的方针、目标、指标、过程和程序。
开发安全规范一般包括安全需求分析指南、安全技术方案设计规范、安全编码规范和安全测试规范等。依据开发安全规范,银行在进行应用系统开发过程中,对于各个阶段的安全问题加以相应的控制,确保应用系统在开发中的安全管理。
全生命周期的安全规划和管理
应用系统的开发阶段是其生命周期内的一个重要阶段,在此阶段,将主要完成应用软件的需求分析、设计、实现及测试等工作,此阶段的工作将极大程度地决定系统本身的安全性。因此,要确保安全性要求在此阶段的各个具体工作过程中的贯彻和实施,以便交付具有高安全特性的应用软件,为将来应用系统的安全投产运行奠定坚实的基础。
(一)需求分析阶段
安全技术人员在需求分析阶段主要对需求文档中的安全需求情况进行分析,重点从系统的重要信息或数据、面临的安全威胁、系统基础环境的安全需求等角度入手,分析安全需求的全面性和完整性。
在安全功能需求中,身份鉴别、认证与授权、输入和数据验证、敏感数据安全、会话管理、异常管理等需求应进行明确详细的说明。以电子银行的数据安全为例,敏感数据要求特别保护,该类数据的传输、存取和存储,必需采取加密措施保护,仅能通过内置的软硬件加解密模块进行管制。
(二)方案设计阶段
方案设计阶段是整个生命周期中最为关键的部分,在这个阶段不仅要包括系统的功能、性能、开发费用与周期等要求,还要明确规定系统的安全要求,并据此确定具体采用的安全控制措施,如用户身份认证体系的强度设计、认证失败后的处理方式设计等。
在方案设计阶段应该根据安全需求和安全技术规范,选择和设计相应的安全控制方法。安全技术人员主要分析系统设计文档中关于安全设计的完整性、合理性,分析安全设计是否能够满足安全需求、是否达到相应的安全强度等。
(三)编码实现阶段
程序员可使用各种通用以及特定的编程指导规范来防止开发中的普通安全问题,特定的编程指导规范主要集中在Perl、Java和C/C++语言。大多数情况下,使用这些编程指导规范将可以避免许多会导致安全漏洞的错误,比如非法数据输入、缓冲区溢出、SQL注入等常见问题。
在编码实现阶段,应重点关注由于程序员有意或无意的编码而导致的安全缺陷。安全技术人员需要抽查重要的代码进行安全性分析,确认编码是否满足相应编码安全规范,是否存在安全编码缺陷等。
(四)安全测试阶段
应用系统在正式上线前应对安全性进行测试,验证应用系统的安全性是否符合安全设计及安全需求。在系统测试阶段,应重点关注对于应用系统安全功能的测试情况,应确保安全功能测试的全面性。仅在用户管理这一项上,就需要从用户角色、账号权限、口令保护、弱口令检测、口令修改等大量重点分析点来进行测试。因此,在实际测试中需要制定准确周密的测试计划和测试脚本,特别是验收的标准必须非常详细。
在测试过程中,应模拟真实应用场景搭建测试的软硬件环境,并进行严格的控制保护。系统测试如果需要使用真实的数据,应对这些数据进行脱敏处理,并严格控制对这些数据的操作行为。在与其他系统进行互操作性测试时,应充分考虑对其他系统的影响,选择适当的时间和方式进行。
应用系统的安全性不应该是雾里看花,也不应该是空中楼阁。对于安全的信心应该来自于我们在整个生命周期中对风险的识别、关注和准备。银行可以通过建设开发安全管理体系,加强应用系统开发的安全管理,提高银行应用系统开发安全管理的制度化、规范化水平,健全银行信息安全管理体系。