APP下载

敏捷开发模式下的SDL实践浅析

2018-12-21邓君华李叶飞姜丽丽

软件 2018年10期
关键词:管控流程软件

杨 颖,徐 超,邓君华,李叶飞,姜丽丽



敏捷开发模式下的SDL实践浅析

杨 颖1,徐 超2,邓君华2,李叶飞1,姜丽丽1

(1. 江苏方天电力技术有限公司,江苏 南京 210000; 2. 国网江苏省电力有限公司电力科学研究院,江苏 南京 210000 )

DevOps理念旨在将Ops(运维)融入到敏捷开发模式之中,经过多年的探索与磨合,形成了一些企业特色的融合模式,但未形成通用方案。随着2017年DevSecOps理念相继出现,促使Sec(安全)也要融入到敏捷开发模式。当前安全融入传统开发模式的典型理论是安全开发生命周期管控(Security Development Lifecycle,下文简称:SDL)。

信息安全;计算机;敏捷开发

0 引言

敏捷模式下SDL的生根发芽是如何进行的呢?传统的SDL开发流程包括了从可行性分析、需求分析到软件设计,再到编码实现、黑盒测试和白盒测试,最后上线试运行、正式上线,然后移交维护[1]。而对于安全的软件开发,最重要的是在软件开发周期中增加了与软件安全相关的需求说明、确认计划、软件确认[2],在开发周期的每个阶段都需要评估风险、验证措施有效性、确认整改到位。安全的软件开发阶段主要包括:

(1)编写软件安全需求说明书。描述软件系统的安全功能,以及完整的软件安全的总体要求。

(2)编写软件安全确认计划书。根据软件安全需求说明书编写软件安全确认计划。

(3)软件设计和开发。包括软件架构设计、概要设计及详细设计、测试案例、测试计划编写,并根据设计文档进行代码编程。

(4)软件系统与硬件设备集成。

(5)软件与硬件集成测试和修改。保证软件系统与硬件设备兼容并能够满足软件安全需求。

(6)软件安全确认。

下面我们列举四个企业SDL的建设案例,说明这些企业建设的重点和存在的问题:

企业甲:偏重“安全需求”管控,梳理关键应用典型业务场景,通过威胁建模及威胁资源库相结合方式,构建安全需求库、安全设计库等一系列资源库。在使用过程中,通过快速索引安全需求,导出安全需求及安全设计方案[3]。但是,安全管控流程终止在安全编码阶段,安全测试由不同角色负责,无法与安全设计形成统一的测试用例,并且缺乏测试经验的积累,采用传统的渗透测试或众测进行“双盲”测试。流程不完整,技术措施覆盖度不够,无有效的考量指标。

企业乙:偏重“安全设计”管控,依据行业标准、国际标准以及内部标准,导出安全需求,针对全量安全需求进行详细安全设计[4]。如:业务流程安全设计、系统技术架构安全设计、承载环境安全架构设计及网络安全架构设计。但是,无整体管控流程控制,安全需求一次性导出,技术措施不具备灵活性,人员技能不足无法较好地使用安全设计。

企业丙:偏重“安全编码”管控,针对具体威胁场景程撰写安全设计规范、安全编码规范,并根据规范定制安全组件(JAR包,SDK,代码参考等),减少安全人员与开发人员的沟通成本,直接调用安全组件相应接口满足安全规范设计要求[6]。但是,无整体管控流程控制,威胁场景及安全组件缺少评价机制和闭环优化机制,导致安全设计“管得了一时管不了一世”。

企业丁:偏重“安全测试”管控,采用业务流程安全分析方法尽量识别出可能存在的威胁,针对识别出的威胁构建安全测试用例,严格把控测试过程并形成大量测试指南及测试工具集。但是无全局管控流程,无安全需求及安全设计技术措施,安全测试发现问题反复出现,消耗大量安全测试成本,治标不治本。

1 造成以上企业“偏科”的现状可以总结为如下主要原因:

(1)应用开发整体安全管控流程复杂,缺少流程自动化平台支撑且与现有流程的不兼容导致很难有效管控;

(2)企业缺少安全管控所需的知识库,如:安全威胁库,安全需求库、安全设计库、安全组件库、安全用例库及安全加固知识库等必要的积累,效率和落地性成为阻力;

(3)企业缺少专业的安全开发管控专业人才,无法与业务人员、开发人员、运维人员及管理层进行有效沟通,内部协作模式无法形成;

(4)企业缺少对安全活动评价及审计能力,导致针对开展的安全活动无法确定实施效果及进行有效改进,最终演变成走形式[7]。

我们还没搞定传统开发模式下的SDL,DevOps理念已经融入到敏捷开发模式中,持续交付与集成部署给SDL实践带来了新的挑战。

2 那么如何将SDL与敏捷开发模式有效结合呢?

从传统的瀑布开发模式到敏捷开发模式,其实是预设性到适应性的转变,瀑布式开发的特点是:文档驱动,线性开发,开发前期准备时间长,那么安全团队有充分的时间将安全活动提前介入,进行有效管控。而在敏捷式开发中一切都“快”了起来,多角色在持续集成的环境下,基于可靠的工具链,快速地迭代着。那么,SDL只能快起来才能融入敏捷开发模式[8]。开篇提及的四个失败原因其实就是成功的关键要素:

(1)流程自动化平台支撑且与现有流程具有良好的兼容性;

(2)借助瀑布开发模式下的SDL各阶段成果,作为安全管控过程中的技术措施,如:安全威胁库,安全需求库、安全设计库、安全组件库、安全用例库及安全加固知识库。在需求阶段利用安全威胁库及安全需求库进行场景化的安全需求推导,在设计阶段利用每一类功能场景的安全设计解决方案进行安全需求实施,在开发阶段利用安全组件库推进安全编码规范的落地,在测试阶段利用安全用例库进行安全策略的验证和安全威胁控制点的检查。

(3)具备安全开发管控专业人才,与敏捷开发模式中的其他角色进行有效沟通;

(4)具有安全活动评价及审计能力,确保开展的安全活动效果及进行有效改进。

除了这些通用的关键要素保证SDL基本运转,更需要针对不同的企业现状,因地制宜的进行特有要素的识别和设计,才是真正落地的关键。

(5)遵守安全编码规范的要求

在项目启动阶段以及新项目组人员进场,应对项目组的开发人员进行与软件安全相关的知识培训,使其在之后的开发工作中尽可能的遵守安全编码规范,避免软件系统出现安全漏洞。

(6)配备安全专家

项目组在有条件的情况下应根据项目对安全的需求,配备一个在软件安全领域有多年专业经验和深刻理解的资深程序员[9]。安全专家的主要职责包括:

在开发安全敏感度非常高的用户故事时和工程师们结对编程

对工程师的代码进行安全评审,确保代码在提交到代码库前没有安全问题

在选择使用哪些商业代码,开源库,公共API等第三方库时进行安全分析和决定

帮助QA人员测试安全敏感度高的用户故事,确保程序安全。

除了这些以外,安全专家还应该帮助程序员熟悉安全编码,将安全知识分享给每个程序员,提高程序员的安全意识。

(7)识别高危用户操作场景

安全专家要根据软件需求、软件设计等文档,识别出高危用户操作场景,将精力放在这些高危用户操作场景里[10]。让相关模块的开发人员对这些高危用户操作场景在安全方面加以重视。举几个应该标为高危用户操作场景的例子:

包含用户输入选项(比如输入框,选择框等等)

存储数据到数据库

数据传输到外部系统

处理外部系统传入的数据

输出信息到外部系统和文件等。

处理验证和认证流程

(8)应对每个高危用户操作场景进行恶意测试

安全专家应从破坏或恶意的角度编写一些测试用例,来防止高危用户操作场景不产生安全漏洞。督促程序员对代码进行安全加固。

(9)在每个用户操作场景代码编写完成后要进行安全测试

在SDL模式下,每个用户操作场景在代码实现完成后都应该进行安全测试,安全专家可以指导QA人员根据测试案例进行功能测试和恶意测试,或利用漏洞扫描工具对代码进行漏洞扫描,测试或扫描出的代码问题将会退回给开发人员进行修复,修复完毕后再进行测试,这种循环可以进行多次直到没有问题发现。

场景1:敏捷模式下快速交付

实践:敏捷开发的价值在于及时响应需求变化,高效地组织进行软件开发,快速交付可以工作的软件。那么也就是说一个产品必须在一次两周左右的迭代中完成需求到可视化产品的过程,在这个过程中通常由PO(Product Owner)制定Product Backlog,将Product Backlog拆分成N个Sprint Backlog,那么Product Backlog的导出就是安全需求导出的最佳时机,(这里建议不要先对整体Product Backlog进行安全需求分析,因为在多次迭代之后Product­Backlog会有变动,对当前迭代的Sprint Backlog进行安全需求分析即可),之后在每个迭代Sprint backlog和User story导出时利用SDL平台快速推导出本次迭代所需的安全需求及需求对应的安全设计、安全组件和安全测试用例即可。

场景2:敏捷模式下不同的开发管控平台

实践:如果企业具有SDL平台,可以快速导出安全设计及安全组件,但大部分企业开发团队都具有自己开发管控平台,如Jira,Redmine,Bugzilla 等工具,本次实践是基于Confluence平台进行安全开发流程管控,平台知识库积累程度较高,以标签化的漏洞基线为核心支持快速安全需求与设计方案的索引,将导出的安全需求与Confluence平台上User story进行融合,做到无缝衔接。

场景3:敏捷模式下持续集成

实践:敏捷模式下都是自动部署和自动测试,安全如何与之契合,此实践中的敏捷开发环境下的持续集成引擎是Jenkins,可以做到通过SVN代码的版本更新情况进行源代码的自动编译、扫描、部署、发布。如果安全活动依旧是人工去实施,那么安全只会游离在开发流程之外。借助DevSecOps工具链,实现安全自动化,减少安全人员参与,避免影响敏捷开发的灵活性。在开发编码阶段利用Jenkins+FortifySCA+JIRA功能联动进行FortifySCA自动化源代码安全扫描及JIRA缺陷问题自动化跟踪,在运行测试阶段利用Jenkins+Jmeter+测试脚本进行API接口的自动化安全测试,利用Jenkins+ APPscan进行定时计划的web安全扫描等,通过以上工具链的实践,减少人为参与的工作量,进一步将安全开发与敏捷开发进行融合。

场景4:敏捷模式下安全考量如何开展

实践:非敏捷模式下的安全考量都不是一个简单的话题,本实践的思路是不单独设置考量环节,通过后置的安全活动进行间接考量。例如:安全需求提出的全面性和合理性考量,会在安全需求评审会中进行考量。需要引入经验丰富的内部或外部安全专家和开发专家,能不断以变化和最新的威胁角度审视安全需求是成功的关键。

3 结语

以上的实践在开发思想上和敏捷开发是一致的,将软件的安全需求分拆,保证每个用户操作场景的安全,从而保证整个软件系统的安全[11]。

国内开始重视软件项目的安全是近两年才开始,专业的安全领域人才稀缺。针对现状,Gartner在2014年就提出了RASP的概念,就是将这些 实践抽象成一种通用化的产品,该产品融合了安全编码规范和漏洞发现,开发人员可以将RASP产品结合扫描工具在运行时对产品漏洞检测,快速定位存在安全漏洞[12]的代码。希望通过本文对敏捷开发的SDL介绍,对企业的项目实施能有所启发和帮助。

[1] 王丹亭. 利用SDL Trados解决科技文本合作式翻译一致性问题的实践报告[D]. 北京外国语大学, 2016.

[2] 丁庆洋, 王秀利, 朱建明, 宋彪. 基于区块链的信息物理融合系统的信息安全保护框架[J]. 计算机科学, 2018,45(02): 32-39.

[3] 曾程胜. 实现 Javascript-Delphi 高强度加密传输安全[J]. 软件, 2018, 39(1): 173-179.

[4] 陈飞, 黄海明, 杨猛, 刘金刚. 基于SDL和OpenGL实时绘制中文字体[J]. 计算机工程与设计, 2011, 32(08): 2764-2767+2783.

[5] 江达秀, 许建龙, 孙树森. 应用SDL及GTK+实现视频多路回放[J]. 浙江理工大学学报, 2009, 26(06): 897-900.

[6] 王园园, 高明煜, 曾毓. 基于SDL库的嵌入式平台中文显示技术研究[J]. 计算机系统应用, 2009, 18(04): 194-197.

[7] 惠子青, 刘晓燕, 朱汇龙. 基于敏捷开发增量 UML 模型的研究[J]. 软件, 2018, 39(1): 142-146.

[8] 邱吉刚, 林孝康. 无线网络VoIP协议的SDL实现与仿真[J]. 微计算机信息, 2006(28): 124-126+130.

[9] 朱靖宇, 杨树堂, 薛质. 基于SDL的Mpeg-4视频流实时解码与回放方法[J]. 计算机应用与软件, 2006(06): 5-7+58.

[10] 张宏亮, 李伟超. 基于SDL和MSC的通信软件系统分析和系统设计[J]. 郑州航空工业管理学院学报(社会科学版), 2005(04): 158-160.

[11] 潘俊, 宋国新. UML到SDL在地铁售票机系统中的应用[J]. 华东理工大学学报, 2004(05): 552-555+570.

[12] 魏定国, 吴时霖, 黄秋波. UML与SDL结合使用的研究[J]. 小型微型计算机系统, 2003(11): 2027-2030.

Analysis of SDL Practice Under Agile Development Model

YANG Ying1, XU Chao2, DENG Jun-hua2, LI Ye-fei1, JIANG Li-li1

(1. Jiangsu Fangtian Power Technology Co., Ltd., Nanjing Jiangsu 210000; 2. State Grid Jiangsu Electric Power Co., Ltd., Electric Power Research Institute, Nanjing Jiangsu 210000)

DevOps concept is to integrate Ops (operation and maintenance) into agile development model. After years of exploration and integration, some integration mode with enterprise features has been formed, but with no general scheme. With successive emergence of DevSecOps concept in 2017, Sec (security) should be integrated into agile development mode also. At present, typical theory of integrating security into traditional development mode is Security Development Lifecycle (SDL).

Information security; Computer; Agile development

TP391

A

10.3969/j.issn.1003-6970.2018.10.039

杨颖(1981-),男,研究生,研究方向:计算机应用;邓君华(1980-),男,研究生,研究方向:电力营销技术支持研究;徐超(1989-),男,研究生,研究方向:电力营销信息系统,电力营销专业信息安全;李叶飞(1979-),男,研究生,研究方向:IT基础架构研究;姜丽丽(1989-),女,研究生,研究方向:电力网络与信息安全。

杨颖,徐超,邓君华,等. 敏捷开发模式下的SDL实践浅析[J]. 软件,2018,39(10):203-206

猜你喜欢

管控流程软件
EyeCGas OGI在泄漏管控工作中的应用
多端联动、全时管控的高速路产保通管控平台
禅宗软件
吃水果有套“清洗流程”
信用证洗钱风险识别及管控
软件对对碰
本刊审稿流程
析OGSA-DAI工作流程
失控还是管控?
谈软件的破解与保护