应用软件存在大量的漏洞是当前信息安全领域面临的极大困境,云应用软件也同样如此。如何有效减少应用软件内的漏洞,提高应用软件安全是目前应用软件开发中亟待解决的问题,尤其在云计算中,应用软件安全尤为重要。在进行应用软件开发时,应充分参考安全软件开发生命周期相关模型如下图1所示,强化应用软件在开发、部署和运行的各个阶段中的安全,建立规范化的安全开发流程。

应用软件安全开发的基本流程​_软件开发

1应用软件安全开发流程


(1)需求阶段​

首先应对应用软件在开发过程中面临的风险进行评估,分析可能面临的威胁、存在的脆弱性及其可能造成的影响,并对上述三者进行量化评估;然后识别应用软件开发过程中的关键对象,并对关键对象进行安全防护;最后结合云应用的业务场景分析应用软件的安全需求,包括应用软件数据的机密性、完整性与可用性,应用软件与开发环境交互所必需的输入、输出信息的安全属性,以及应用软件的弹性、可控性和业务连续性。

(2)设计阶段​

首先需要对云应用进行受攻击面分析,枚举所有访问入库、接口、协议以及一切可执行代码的过程,减少攻击者利用潜在弱点或漏洞的机会,使攻击面最小化;然后基于对受攻击面的分析,对应用软件面临的威胁建立模型,通过模型化的方式来管理威胁、风险和对应的缓解措施;最后形成安全设计方案,安全设计方案包括客户端安全设计、服务器安全设计和服务器安全配置基线三部分,设计方案应满足安全需求、定义安全漏洞的严重性阈值、确定风险的最低可接受级别。

(3)开发阶段​

云服务提供商首先需要提供主流编程语言的安全编码规范,包含代码书写规范、数据库标准接口、输入输出验证等,通过安全编码规范可以有效减少缓冲区溢出、跨站点脚本、SQL注入等代码漏洞;然后开发团队需要分析应用软件开发项目使用的所有函数和API,并禁用确定为不安全的函数和API,构建安全函数库;最后开发团队应进行代码分析,通过人工代码评析或静态代码分析工具对代码的质量进行检查,减少代码中的语法错误和安全漏洞等问题。除此之外,还需要对源代码进行版本管理,保证应用软件版本的正确性。

(4)测试阶段​

在完成开发后,云服务提供商需要基于威胁建模进行测试设计,首先对应用软件进行Fuzzing测试,以应用软件的预期用途及功能为基础,故意向应用软件输入不良格式或随机数据来诱发程序故障,检测应用软件的安全性;然后进行渗透测试,由专业人员模拟黑客对应用软件进行攻击,通过渗透测试发现由于编码错误、系统配置错误或其他运行部署弱点导致的潜在漏洞。除此之外,还可通过安全众测平台,如阿里云的先知平台、Sobug的白帽众测平台等对应用软件开展安全测试

(5)发布阶段​

在应用软件发布阶段云服务提供商首先需要在类似的生产环境下,对应用软件进行集成测试,确保能够安全运行;然后由安全专家进行最终安全评审通过安全评审,则发布;最后,云服务提供商需要制订应用软件安全响应和预警计划,包括指定运维团队、制订代码安全维护计划、制定安全预警方案等。

随着云计算技术和平台的出现和普及,应用软件开发者不必进行任何底层系统工作,软件开发的周期越来越短,为了确保短周期内应用软件的安全开发和运维,出现了DevOps概念。DevOps的核心思想是将开发和运维一体化,缩短应用软件开发的周期,提高应用软件交付的质量和频率。目前,DevOps 思想在应用软件的开发和部署中被广泛使用,已经成为软件行业的标准配置。