快乐的包子
作者快乐的包子2017-10-10 09:59
存储工程师, 某银行

民生银行源代码安全研究与实践

字数 3433阅读 3477评论 0赞 7

银行信息系统安全是大众普遍关心和银行业亟需完善的热点问题。随着互联网金融时代的到来,快速响应千变万化的业务需求及在敏捷开发过程中保障信息系统的安全,是银行业正在面临也必须解决的关键问题。

民生银行近年来重点开展信息系统开发全生命周期的安全管理,开发并建设了一系列的工具和平台提高工作效率、确保系统安全,形成独具特色的开发全周期安全管理体系。

一、应用软件安全开发周期管理分析思路

应用系统的安全性保证是通过系统全生命周期各个阶段的管理共同实现的,以往只在测试、运维阶段关注安全性的方式,往往治标不治本。近年来,众多公司投入大量资金对应用系统全周期安全进行研究,主要有:微软安全开发生命周期(SDL)、思科定义的安全开发生命周期(CSDL)等。

民生银行提出ADCTA安全开发模型,即第一个A(threat Analysis)表示威胁分析,威胁分析产生安全需求,对应系统生命周期中的需求阶段;D(Design)表示设计,对应系统生命周期中的设计阶段;C(Code)表示编码,对应系统生命周期的开发环节;T(Test)表示安全测试,对应系统生命周期中的测试环节;A(Action)表示改进,针对测试的结果进行改进。

以ADCTA模型为理论基础,形成一个层次化开发安全管理体系,覆盖软件需求、设计、开发、测试、部署、运维等全生命周期各个阶段。同时,民生银行所建立体系、平台,均具有较高的可复制性、可扩展性,且易于推广,可以有效解决股份制商业银行自有科技开发人员数量有限,大量的开发工作依赖于外包公司实现,而外包公司开发质量参差不齐且人员流动性较大,无法确保所开发的代码安全质量达到行内要求的问题。

二、民生银行应用软件安全开发全周期管理体系探讨

系统开发生命周期的全过程包含需求、设计、开发、测试、部署、运维、废弃等七个阶段,以系统全生命周期各阶段为主要对象,以业务安全和信息安全为出发点,通过对各个阶段的流程、制度、规范梳理,相关人员安全意识、技能培训,以及相关工具和系统的建设,建立起开发安全保障的闭环体系。充分保障开发出来的业务系统满足业务安全和信息安全的需求,保障业务的稳健持续发展。开发安全管理体系如图1所示。

微信图片_20171010095318.jpg

微信图片_20171010095318.jpg

图1 民生银行开发安全管理体系

民生银行应用软件安全开发全周期管理体系,通过搭建情景式安全需求分析系统、三级安全支撑体系、源代码安全检测系统、源代码自动化规则审计系统、安全测试资源库、全生命周期监控系统等,对开发全生命周期各个环节实现平台化支撑,以平台化的形式实现对各阶段安全工作的有力支持,促进各阶段安全要求的有效落地,进而保障信息系统的安全。

三、民生银行源代码安全研究与实践

源代码分析是检验安全需求落地情况的关键一环,相比于黑盒检测,通过源代码可以更加全面、深入的发现潜在的安全缺陷。如果仅仅依赖于黑盒检测,由于无法查看具体实现的细节,导致一定会存在盲区,盲区里的风险大小无法确定。所以,黑盒检测结合源代码的白盒检测,形成灰盒的检测体系,有助于更加全面、深入的发现安全问题。

2016年之前,民生银行与大多数银行机构一样,采购了商业化的源代码扫描工具进行源代码安全扫描,该项工作的主要问题包括:

● 单机版扫描,对于扫描结果无法有效管理和跟踪;
● 误报率高,由于源代码扫描工具的扫描原理,导致扫描结果的误报率很高,动辄几万个,甚至数十万个源代码缺陷,对开发人员和安全人员都带来巨大的复核工作量;
● 仅能发现SQL注入、XSS等传统的源代码缺陷,对于如越权、短信炸弹、分步提交等基于业务逻辑的缺陷无法识别;
● 报告易读性差。

为了解决上述问题,民生银行在源代码安全领域开展了一系列的研究和创新工作。

1、制定源代码TOP缺陷

民生银行依据:
1)国际主流标准: OWASP Top10、CWE/SANS Top 25、US-Cert安全编码标准。
2)民生银行源代码缺陷检测结果。
3)民生银行渗透测试结果。

制定了Java TOP12、C/C++ TOP10、Object-C TOP10等语言TOP缺陷。通过该TOP缺陷的梳理,可以聚焦源代码安全工作内容,将重点的精力投入到典型缺陷的解决方案制定和缺陷修复工作中,也规避其他非重要缺陷所带来的大量误报复核的工作。

同时,将此TOP缺陷制定为源代码扫描通过标准,开发人员和安全人员均明确的了解源代码扫描修复哪些问题之后,即可以通过上线。

2、建设源代码安全检测系统

民生银行建设了全行源代码安全检测系统,该系统为B/S架构,全行开发人员均可通过访问该系统,自助发起源代码检测任务,同时也可以通过配置检测策略,实现自动化、周期性的源代码检测。该系统具有以下特色:

1)重点安全需求专项审计:针对重点安全需求的实现代码,进行专项的人工走查确认。

2)周期性自动检测:配置源代码检测的策略,按照每天、每周进行自动化周期检测。

3)标记结果降低误报:进行审计信息携带,将上一次的代码审计结果携带到下一次的检测结果中,降低源代码扫描的误报率。

4)合规检测:基于定制化规范的C、C++、Java安全编码标准的检测功能,便于进行合规性检测。

5)支持全行自助式检测:实现对总、分行代码配置定期检测策略,全行实现自助式安全检测。

通过该系统的建设和应用,开发人员可以在代码开发阶段即开展自助式的源代码扫描,及时的发现问题、解决问题,避免将源代码安全缺陷堆积到系统上线阶段再检测,在提升代码安全质量的同时,有效的缩短了系统上线评审周期,实现了敏捷开发的敏捷安全管理。

3、源代码扫描结果二次解析

由于源代码扫描工具的扫描原理,导致扫描结果一定会存在误报,民生银行除了使用检测系统中标记误报结果的方法外,还对重点系统的典型缺陷编写二次解析工具。

通过对扫描结果的人工走查,结合重点系统的源代码处理逻辑、数据流图和控制流图,以及缺陷成因分析,编写了二次解析工具,在进一步降低误报的同时,也减少了人工复核的工作量。

4、建设源代码自动化规则审计系统

传统的源代码人工安全审计工作,需要大量的依赖人力,且需要投入经验丰富、有责任心,且了解被审计系统源代码的人员,由此导致该项工作无法大面积的开展,而且单次的审计成果并不具备一定的延续性,无法为今后的同类工作带来实质性的输入和指导。

同时,源代码安全检测工具也仅能发现SQL注入、XSS等传统的源代码缺陷,对于如越权、短信炸弹、分步提交等基于业务逻辑的缺陷无法识别。

为此,民生银行决定开展自动化规则审计系统的建设工作,该系统主要针对基于业务逻辑的缺陷进行检测,与源代码安全检测系统的检测互补。系统采用源代码静态分析技术,将源代码解析为系统无关的中间文件,再对中间文件进行解析,提取出待检测参数的数据流图、控制流图,根据这些信息对参数进行溯源,结合系统业务处理逻辑及开发安全规范,判断参数是否安全,实现自动化代码审计。

通过该系统的建设和应用,常规的人工安全审计工作可以通过工具扫描的方式进行,并且后续只要执行脚本,即可定期开展检查。由此摆脱了对于人员的高度依赖,也节省了大量的人力投入,能够更加全面的发现源代码安全问题。

5、源代码安全工作总结

民生银行突破源代码安全的常规工作模式,通过制定源代码TOP缺陷的方式,聚焦源代码安全工作内容,减少了误报带给安全人员和开发人员大量的复核工作;通过对源代码技术的深入分析与研究,开发了工具对源代码扫描结果进行二次解析以降低误报;编写自动化源代码安全审计工具,创新性的实现了对基于业务逻辑的缺陷的工具化检测。通过上述工作,在误报缺陷的复核工作、源代码审计工作等方面,均大幅降低了开发人员和安全人员的人力投入,并形成了可持续进行的工具化检测方式。

民生银行将在源代码安全领域持续的开展创新研究,为金融同业积累行之有效的理论和工具,着力提升业务系统的源代码安全质量。

四、展望

民生银行应用软件安全开发全周期管理体系以开发安全管理平台为依托,全面统一地为全行安全开发服务。通过信息系统全生命周期各阶段安全活动的有序进行,加强信息系统的安全要求和管理,提高全行信息系统的安全水平,保障业务地稳健发展。

在互联网金融飞速发展的今天,银行业信息安全工作正面临着前所未有的挑战,民生银行将持续完善安全开发全周期管理体系,以支持业务创新、引领业务发展为目标,着力打造出安全可控,有核心竞争力的业务系统。

本文作者:民生银行信息科技部 张磊 高晓梦
文章刊载于《互联网安全》第22期

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

7

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

X社区推广