随着网络安全等级保护制度的全面推广,网络层和系统层的安全问题在部署防护设备、配置安全策略、升级补丁等措施的实施下日趋减少,但应用层安全问题仍然较为突出。由于“内生”于软件开发过程,限于事后补救的手段以及成本因素,应用软件安全已经成为网络安全整体防护体系的最后一块短板。若要补上这块短板,就需要我们把安全视角由外部转向内部,聚焦软件开发安全,从“源头”上寻找解决问题的思路。

等级保护核心标准之一的《信息安全技术 网络安全等级保护基本要求》(GB/T 22239—2019)在“安全建设管理”中聚焦两类主要开发方式(自行开发和外包开发),分别从开发环境、开发管理制度、代码安全、文档安全等方面提出了基线要求。本文将在以上安全管理要求基础上,从软件开发生命周期角度考虑,分析软件开发过程中的主要安全要素,探索性提出更加系统化、结构化的安全要求,从而确保安全措施在软件开发过程中得以考虑和实现。

首先,软件安全的实现离不开各类载体的基础保障,即,人、制度、工具、环境等方面,通过制定并完善各类管理制度、关注开发过程中各类开发工具的安全、建设和维护各类环境、规范人员操作各类开发行为等,从而支撑软件开发安全有序进行。其次,根据目前主流的软件安全开发生命周期模型,软件开发生命周期主要包括需求分析、设计、实现、测试、发布、交付等活动。不同的开发活动对于一款应用软件的“安全生成”都起着贯穿前后的重要作用。因此确保各个开发活动的安全开展是保障软件安全的关键。

综上,软件开发安全可从载体安全和活动安全两个维度进行考虑。载体安全主要关注贯穿软件安全开发生命周期所涉及的安全管理制度、人员安全、环境安全和开发工具安全等4个要素;活动安全主要安全需求分析、安全设计、安全实现、安全测试、安全发布、安全交付等6个要素。载体安全是支撑各开发活动安全实现的必要条件。具体见下图:

维度一 :载体安全是软件开发安全的基础

载体安全主要包括安全管理制度、人员安全、环境安全、开发工具安全。其中,安全管理制度主要针对软件开发过程需遵循的各类管理制度、操作规范和记录表单等的制定、发布、执行、检查以及维护修订等生命周期关键活动进行规范;人员安全主要针对软件开发中涉及的各类岗位人员的设置、配备、任职、培训和离职等关键活动进行规范;环境安全主要针对各类开发环境、测试环境的安全隔离、访问控制以及各类数据备份管理等活动进行规范;开发工具安全主要针对开发过程中涉及的各类工具的准入、使用以及回收等生命周期关键活动进行规范。

01 安全管理制度:

在软件开发前,应建立各类软件开发安全管理制度,明确各类操作指南、流程表单等。其中,软件开发安全管理制度应至少涵盖人员、环境、工具以及开发过程等各类要求;安全开发操作指南和流程文档应涵盖源代码、设计文档、核心人员、重要基础设施等对象,明确各阶段的执行过程和操作方法。由于管理制度和相关指南的正确性和执行程度直接影响着整个生命周期是否能够按预期进行,所以应当对相关文档进行审核和正式签发,同时对执行过程进行严格审批。发布后应定期开展软件开发安全管理制度执行情况的检查,以保证当前阶段仍处于可控范围。

02 人员安全:

根据软件开发工作需求,可设立软件开发岗、测试岗、安全岗等岗位,并明确各岗位安全职责。不同岗位人员应具备相应岗位的技术能力,且不应出现安全岗兼任开发或测试岗位的情况发生。为做好软件开发生命周期的保密工作,需加强对开发人员上任前和离职后的保密义务管理。任职期间,应针对各岗位工作需求开展安全意识、保密教育和岗位安全技能培训等。若涉及第三方开发人员,需从第三方人员进出、访问账号及权限设置、行为操作审计等方面加强监督和管理。

03 环境安全:

针对软件开发过程中涉及的开发环境、测试环境和发布环境等,需明确相关环境的建设要求,如建立各环境的资产清单、安全基线要求、配置操作手册等,分别对资产的名称、版本、安装的软件组件、使用项目范围,基线要求的软件组件安装规范、安全配置策略、入侵防范措施以及配置操作手册的操作步骤等进行明确说明;在环境使用和维护阶段,加强对环境权限的管控、软件开发代码及重要文档的定期备份和保护机制、定期检查违反环境配置策略的行为,及时发现开发过程中环境存在的风险隐患,并给予消除。

04 开发工具安全:

软件开发中涉及各类开发工具,开发工具的安全涉及到代码安全,需从工具的准入、使用、回收等生命周期各环节考虑。在准入阶段,建立工具准入审批制度和流程,明确工具清单,建立可信工具资源库;在使用过程中,对重要开发工具加强身份鉴别、权限管理和安全审计机制;工具终止使用后,做好对开发工具可能涉及的登录信息、源代码、数据库表结构、产品相关技术文档、漏洞信息等重要信息及时删除或销毁。

维度二 :各阶段活动安全是落实软件开发安全的关键

开发过程安全主要包括安全需求分析、安全设计、安全开发、安全测试、安全发布以及安全交付,分别对应开发阶段中需求、设计、实现、验证、发布等阶段活动。

05 安全需求分析:

通过分析软件利益相关者的实际需求,如考虑软件的投资者、使用者、供应者等相关方的需求、期望和约束条件,制定安全需求文档,并获得相关方的认可,安全需求文档至少涵盖合理性安全需求、业务安全需求、数据安全需求、技术架构安全需求以及供应链安全需求等内容;应当对安全需求进行合理性论证和审定,确保后续设计阶段能够具有正确的参考文件。

06 安全设计:

在安全需求文档的基础上,建立软件安全设计基线,对软件安全功能和软件功能安全防护进行设计。安全功能设计应至少包括认证功能、日志审计功能、访问控制功能等;安全防护设计应至少包括输入输出防护、会话功能防护、集成接口防护、文件传输防护等。

07 安全开发:

根据不同的开发语言,发布相应开发语言的安全编码规范,并对其持续维护,在开发过程中严格按照编码规范进行开发;加强对开源组件的准入管理,必要时可对开源组件的成熟度、漏洞风险等方面进行安全检查。

08 安全测试:

根据安全需求编写安全测试用例,至少针对应用软件的代码、功能、组件、API接口、业务逻辑等进行安全性测试;必要时可通过一定的自动化工具完成部分测试用例。

09 安全发布:

在发布阶段,需按照安全测试规范进行落地检查,且对发布软件进行签名,确保软件后续使用可被追溯。

10 安全交付:

在明确交付内容、交付方式、交付产物的前提下,按照一定的安全交付流程开展交付,并形成各类软件交付清单、软件物料清单等,确保交付工作安全规范、交付产物完整清晰。(曲洁 肖翔宇

声明:本文来自公安部网络安全等级保护中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。