• 本文从 DevOps 的角度去浅显地探讨软件安全开发周期,而建设软件安全开发周期任重而道远,而面对大多数公司的安全性问题,能否使用软件安全开发周期解决。并且 DevOps 作为周期很重要的一环,如何推动公司的安全体系建设。当然 SDL 并不是银弹,只是能大量减少软件安全缺陷。

DevOps 最佳实践之推进软件安全开发周期 SDL 建设
目录:
  • 前言
  • DevOps
  • 如今的安全形势
  • 软件安全开发周期及应用 SDL 解决安全问题
  • 使用 DevOps 推进 SDL
  • 在华为软件云的实践
  • 后记
前言

本文从 DevOps 的角度去浅显地探讨软件安全开发周期,而建设软件安全开发周期任重而道远,而面对大多数公司的安全性问题,能否使用软件安全开发周期解决。并且 DevOps 作为周期很重要的一环,如何推动公司的安全体系建设。当然 SDL 并不是银弹,只是能大量减少软件安全缺陷。

DevOps

现如今,DevOps 的概念已经对于互联网公司来说不是陌生了,随着诸多大公司的推进,越来越多的公司用上了 DevOps,有些公司从中体验到了快捷之处,也有公司感觉到了复杂性。不像其他方面,DevOps 至今都没有一个完整的标准或者是实现方案,大多数都是一些大公司的实践。

而中小企业或者创业公司,需不需要 DevOps 呢?大多数创业公司还是需要一种敏捷性,追求快速迭代开发,希望早点上线,早点运营,抢占用户。在公司里规划 DevOps 团队,自然就显得比较重要,可以提高产品的交付能力与效率。近几年,Docker,Kubernetes 的出现,极大地增加了我们对于 DevOps 的渴望。

通过 Docker 进行持续集成,极大地提升了我们持续交付的能力。并且它可以达到开发与生产环境一致的效果,从原来的一天部署一次,通过它的可持续可以一天构建几十次之多。使得 Dev 和 Ops 的关系从原来的相互独立变成了相互融合,实际上还可以引入 QA 等人员。

当熟悉了 DevOps 的最佳实践了以后,运用一些自动化工具,改变传统的开发部署流程,提高部署速度,构建可扩展的技术架构, 提升软件交付的效率。从下图也可以看出,企业对于 DevOps 的重视程度在不断增加。

如今的安全形势

近几年,政府与各大公司在不断地推进网络安全的发展,但是还是每天有很多应急,数据泄露事件的发生。有数据表明,大多数网络安全问题是由 SQL 注入、网站后门、代码注入、未授权访问、弱口令等造成的。

像这些问题是如何造成的呢,有很大一部分是由于开发上的不完善,导致有些地方可以利用,比如 SQL 注入,XSS 之类的,在代码上没有做好过滤,或者是进行参数化查询,而这些问题在开发的过程中就有能力去解决,可以使用一些代码审计或者代码检查服务。而中小公司,创业公司并没有配备专业的安全团队,而这些安全问题往往是致命的,可以被拿到权限,或者关键数据库等,而安全对于用户的影响也是很重要的。

如何去解决这些问题呢?有一种方法是采用一些安全测试,使用专门的人员进行黑盒测试,而这种的并不能找到所有的问题,还是会有一些问题遗漏,并且这种成本较高,普通小公司初期往往不能接受,如果领导层面不重视安全的话,必然会出现很多问题。而中小公司的安全问题如何去解决,大多数普通开发者对于安全审计的知识了解尚浅,所以需要一个自动化,在开发过程中进行代码检查的工具,使开发者了解到其危害,并定期做一些科普性的交流。这样可以减少一定的风险,而成本不会投入太多。

软件安全开发周期以及应用 SDL 解决安全问题

中小公司、创业公司,在业务的不断成长的情况下,总是会遇到很多安全性,以及开发上的部署,测试等流程上的问题。如何去面对这种问题呢?

微软在最初的时候,也有开发周期上的不完善,导致出现了很多安全问题,比如缺少安全设计,缺少安全编程规范,开发者安全意识不足等,并且当时 IIS 引发了不少安全 bug,导致当时安全不容乐观。而微软在推动软件安全开发生命周期(SDL)以后,如同“微软:引领软件安全趋势”给我们带来了这样的印象。实际说明了 SDL 带来的效果。

软件安全开发周期包括什么呢?包括安全编码培训、安全威胁建模、安全设计、安全应急响应、安全配置、安全测试、安全部署等。它只是一个体系,具体实施的时候,还得看实际情况。

安全编码培训就是提供不同的开发语言的安全规范,与安全团队或者安全负责人进行课程的建立,增强开发人员的安全意识。开发人员需要遵循安全编码规范,定期做一些代码检查之类的。在有些产品中,在设计阶段就应该引入安全部分。创建一些恶意的输入进行安全测试,并且把引用到的第三方开源控件也应该记录下来,及时升级新版本。并且对安全事件进行应急响应,规范修补漏洞的流程。

而现如今的敏捷开发方式,是争取早日上线,抢占用户,从漏洞报告的情况可得知,有很多不应该出现的安全缺陷。而安全开发周期这种体系,也许是因为领导的不重视,或许是没人进行推进,导致各种安全事件的发生。所以需要在项目管理的时候,引入安全开发周期的概念,建立相关模板,定期进行代码审计,规范环境配置,做好安全应急响应。

DevOps 推进 SDL

其实在开发与测试过程中,很多安全开发周期需要规范的地方,在 DevOps 部分可以体现。所以作为 DevOps。有必要协助进行 SDL 的建设。

在随着持续集成与持续交付建立好的情况下,发布会越来越频繁,而其中需要安全团队或者安全负责人进行定期的代码审查,而 DevOps 配置好一些自动化审计工具以后,会降低一些工作量,并且 DevOps 进行规范化配置,定期和运维去检查一些弱口令或者未授权访问的情况。提醒开发禁止使用一些危险可能造成漏洞的 API 或者函数。并且通过使用 Docker 统一环境,进行隔离,降低了由环境带来的安全风险。

在做安全应急响应的时候,有一部分事件是与部署或者环境有关的,比如 Docker 或者 etcd 未授权访问、弱口令、一些常见组件的安全漏洞(struts、脏牛、ImageMagick 等),这一部分由于是线上环境,所以需要 DevOps 去关注相关的动态,定期做一些培训或者检查,在有相关组件的安全漏洞时及时构建镜像进行升级,避免受到攻击。

对 CVE 进行关注,列出应用依赖的组件,避免通过组件拿到权限。并且与运维配置好相关防火墙,WAF,监控服务。做好身份校验。

由于业务的不同,每个公司的情况都不可能一致,所以需要 DevOps 和安全部门或者负责安全的人员进行共同做对应的配置及优化。

在华为软件云的实践

在小型的创业公司里,以上最好是可以弄在项目管理里,而常见的项目管理软件或者网站,并没有相关功能,而华为企业云在这块开发了软件开发云模块,里面提供了各种完善的管理机制,而对于软件园区、孵化器、互联网企业、软件外包行业、高校、培训机构这些应用场景来说,完整的软件管理周期就显得有核心竞争力。并且它有代码检查的功能,还可以自定义检查规则,其中提供了以下的服务

  • 缺陷快速定位和修复
  • 主流编程语言
  • 多种检查规则套餐
  • 自定义检查规则
  • 缺陷批量处理
  • 多维度报表

这是其他同类网站所没有的。并且相比较而言,以前得使用很多服务,比如bugly,Jenkins,bugclose 或者 bugtags,trello 或者 tower,git 等。

后记

实际上,软件安全开发周期还有很多内容,限于篇幅,不能一一列举探讨,而其他的比如安全培训,需求分析,测试,系统设计,发布,应急响应时候的安全规范,这个每个公司情况不尽相同,不能一概而论,并且 SDL 也不是银弹,不能解决全部的问题,但是对整体的安全性会有很大的提升,所以也希望大部分公司可以建设起自己的安全体系,建设属于自己的 SDL,解决大部分的安全问题,一起对安全作出自己的贡献。


美景加咖啡,一杯又一杯。

Comments()

  • 状态更新中...