小师妹的大师兄
- 关注

前言
在网络安全建设、运行与保障工作中,有些安全措施或安全功能无法通过采购现有的网络安全设备/产品/软件来满足,需要进行专门的设计、开发来实现。笔者把一过程称之为信息安全开发或安全控制的开发。
在业内实践中,也有多种软件安全开发模型,如微软的SDL即Security Development Lifecycle (SDL),是微软从安全角度提出的指导软件开发过程的管理模型。我国于2020年4月28日发布的GB/T 38674-2020《信息安全技术 应用软件安全编程指南》也从提升软件安全性的角度对应用软件编程过程提出了应用软件安全编程的通用框架,对于安全控制的开发/信息安全开发也具有一定指导和借鉴意义。
今天笔者就结合相关标准和业内实践,与各位读者分享一下如何规范的组织安全控制的开发/信息安全开发。
一、安全控制开发的定义
在国家标准GB/T 30283《信息安全技术 信息安全服务 分类与代码》中,对于“信息安全开发”的描述如下:
“信息安全开发主要针对需方不能通过采购现有信息安全系统或产品予以满足的安全需求,由供方在信息安全系统设计的基础上,按照安全要求确认、安全基线要求确定、设计要求确认、安全策略制定、威胁建模、安全编码规范设计、事件响应计划制定、最终安全评析等软件安全开发流程开发信息安全系统或产品,并参照GB/T 38674—2020提出的应用软件安全编程通用框架的要求,采取相应的措施保障信息安全系统或产品的安全性,以满足需方特定的安全需求并最大程度地减少信息安全系统或产品的安全缺陷。信息安全开发也可以基于已有的信息安全系统或产品进行二次开发。”
就“信息安全开发”描述中出现的“信息安全系统设计”,在GB/T 30283 中,“信息安全系统设计”描述为:
“信息安全系统设计主要是针对需方不能通过采购现有信息安全系统或产品予以满足的安全需求,由供方按照需求分析、概要设计、详细设计等流程设计信息安全系统,参照GB/T 38674—2020提出的应用软件安全编程的通用框架的要求,并结合需方应用环境的特性,提出安全防护设计要求,以指导后续的信息安全开发。信息安全系统设计一般包括安全实现技术框架设计、安全功能设计、性能要求设计等”。
二、安全控制开发的主要工作要求
安全控制开发时的主要工作要求如下:
(1)应充分参考最佳实践经验和相关标准,结合本单位实际,制定科学合规的安全控制开发流程和操作规范。
(2)制定安全控制开发流程和操作规范时,需基于组织规模、资源(时间、人才和预算)以及高层支持等因素,保证流程可落地。
(3)安全控制开发应与信息安全系统的应用开发同步设计、同步实施、同步使用。
(3)应针对安全控制开发各项活动确定角色并指派相关负责人,组建安全控制开发组织。
(4)应具备安全控制开发流程和操作规范实施落地的能力,能够输出实施指南、测试用例等知识库或工具。
(5)安全控制开发流程中,如需进行变更处理,应执行变更管理。
三、安全控制开发的主要步骤
安全控制开发的主要步骤包括安全控制开发需求分析、概要设计、详细设计、编码实现、测试、发布以及过程管理等,如下图:
3.1 安全控制开发需求分析
需求分析是安全控制开发流程的基础环节,分析开发对象的访问主体、访问方式、面向环境等因素,定义应用自身的安全需求并针对系统级别确定必须满足的安全需求。
以规范的形式准确表达安全控制开发的指标要求,在采用云计算、移动互联等新技术新应用场景下时,应分析特有的安全威胁,确定对应的安全措施及其同其他系统相关的接口细节。
3.2 安全控制开发概要设计
概要设计需要采取措施满足需求指标,通过威胁建模、攻击面分析得到解决措施和安全方案。考虑关于身份认证、授权、输入验证、输出编码、错误处理、日志记录、会话管理机制等方面的安全机制。
设计安全措施模块的体系结构,定义开发安全措施的模块组成,定义每个模块的主要功能和模块之间的接口。
3.3 安全控制开发详细设计
详细设计是根据概要设计书进行模块设计,将总体设计所获得的模块按照单元、程序、过程的顺序逐步细化,详细定义各个单元的数据结构、程序的实现算法以及程序、单元、模块之间的接口等,作为以后编码工作的依据。
依据概要设计说明书,将安全控制的开发进一步细化,对每个安全功能模块的接口,函数要求,各接口之间的关系,各部分的内在实现机理都要进行详细的分析和细化设计。按照功能的需求和模块划分进行各个部分的详细设计,包含接口设计和管理方式设计等。
3.4 安全控制开发的编码实现
按照设计进行硬件调试和软件的编码,在编码和开发过程中,要关注硬件组合的安全性和编码的安全性,开展论证和测试,并保留论证和测试记录。
可通过教育培训、总结并执行安全编码规范,配合最新版本编译工具,禁用不安全的函数,保证代码质量来减少安全问题。
安全开发人员应总结安全编码规范并依据此规范编写源代码,实现相应的安全措施和安全功能,可以结合静态分析等评估方式进行测试验证。
3.5 安全控制开发的安全测试
开发基本完成要进行功能和安全性测试,保证功能和安全性的实现。其中,安全性测试需要涵盖基线安全配置扫描和渗透测试,第三级以上系统应进行源代码安全审核。如有行业内或新技术专项要求,应开展专项测试,如国家电子政务领域的网络安全等级保护三级测评、云计算环境安全控制措施测评、移动终端应用软件安全测试等。
测试人员可进行针对性的安全测试检测,对需求、设计和编码阶段的输出进行测试验收,同时尽可能的找出存在安全问题,最大程度的避免产品发布后带来的安全损失。
3.6 安全控制开发的发布
建立事件响应计划、完成最后的安全评估,并对相关的信息和数据进行存档,以便可以在进行发布后维护。
3.7 安全控制开发的过程管理
安全控制开发的过程管理包括3个方面:过程跟踪、数据分类和输入和过程评析。其中:
(1)安全控制开发过程的跟踪
应使用专门指定的应用程序跟踪对安全控制开发过程的遵从性。此应用程序用作所有安全控制开发过程项的中央存储库,包括(但不限于)设计和实现说明、威胁模型、工具日志上载以及其他过程证明。建议明确区分角色,例如:开发人员应可以使用该应用程序并上载数据,但应禁止他们访问其他角色保留的功能。
(2)数据分类和输入
负责确保对支撑客观判断所需的数据进行正确分类并输入到跟踪应用程序中。
(3)安全控制开发过程的评析
负责评析输入到跟踪应用程序中的数据,并负责保证所有要求都得到满足且/或所有异常都得到满意解决。
四、安全控制开发的风险规避
在安全控制开发过程中可以使用以下手段规避风险:
4.1 现状评估
在制定安全控制开发方案前,需了解组织规模、资源(时间、人才和预算)以及高层支持等因素,并理解良好安全开发实践的要素,根据开发团队的成熟度水平确定实施优先级,控制因素的影响。
4.2 漏洞分析
在发现以前未知的漏洞时,应进行调查以确切找出安全过程失败的位置。这些漏洞可能归咎于各种原因,包括人为错误、工具失败和策略错误。分析的目标在于了解失败的确切本质,有助于确保在将来修订过的安全控制开发过程中不发生同类错误。
4.3 过程定期更新
从各种实践(如根本原因分析、策略更改以及技术和自动化改进)中汲取经验教训,并将其定期应用于安全控制开发过程。一般而言,频率按年度更新。发现以前未知的新漏洞类型属于此规则的例外情况。如果出现此现象,则须立即进行更新,以确保在继续进行时已应用缓解措施。
4.4 工具支撑
为支持安全控制开发过程各项措施实施落地,应组织专业人员建立安全控制开发过程的知识库,例如安全编码规范、安全测试用例等。另外也可以使用自动化工具辅助实施。
4.5 安全培训
安全控制开发过程的所有成员应接受适当的培训,了解安全基础知识以及安全和隐私方面的最新趋势。直接参与安全控制开发的技术角色人员(开发人员、测试人员和程序经理)每年应参加至少一门特有的安全培训课程。
小结
本文结合相关标准和业内实践,介绍了安全控制的开发/信息安全开发的相关内容。
本文适合对象为安全控制的开发/信息安全开发的需求方(组织/运营者),为需求方提供安全控制的开发/信息安全开发服务的提供者(网络安全服务机构)也可参考。
如有不足的地方,敬请斧正。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
