安全开发生命周期(1)-从源头解决安全问题的SDL简介

2022-06-02 15:23:47 浏览数 (1)

安全开发生命周期(1)-SDL简介

SDL, Security Development Cycle(安全开发周期)。

换一种说法,就是安全开发流程,就是项目管理流程中的安全控制。

在讨论SDL之前,需要先了解下企业在网络安全上的痛点、风险产生的原因。

安全上的痛点

  • 网站总是被入侵
  • 开发的APP经常被告知存在高危漏洞
  • 寄希望于事后防御,如防火墙设备(或软件)、入侵防御系统(IPS)、Web应用防火墙(WAF),或第三方防护产品,却经常被绕过...

安全漏洞的危害

  • 数据泄露(入侵后泄露用户隐私、公司敏感信息)
  • 影响服务器完整性(入侵后篡改)
  • 影响服务器可用性(不可用或性能低下)
  • 影响公司声誉,影响用户对公司产品的信心,进而可能影响公司的生存与发展

为什么会产生这些漏洞呢?

那就让我们看看产品从开始到上线的各个过程中,存在哪些问题吧。

方案设计过程中的安全问题

  • 架构设计不合理,前后端未有效分离,或数据库向用户开放
  • 依赖客户端安全控制措施
  • 关键算法或保护措施薄弱
  • 事务完整性没有保障
  • 交易过程未形成完整的证据链
  • 跨网络空间的访问未校验对方身份
  • 未校验数据源的完整性
  • 未校验可执行文件、库、配置文件的完整性

开发过程中的安全问题

  • 未对用户提交的参数进行合法性校验
  • 拼接SQL语句,SQL指令和用户参数的拼接导致SQL注入漏洞的产生
  • 将用户创建的未转义的内容呈现给用户,导致跨站攻击脚本(XSS)的产生
  • 未对Form启用防止跨站请求伪造(CSRF)的随机Token
  • 使用路径或路径回溯(../)等作为参数进行传递
  • 各种逻辑或权限设计上的缺陷

测试过程中的安全问题

  • 缺乏安全测试用例
  • 未执行安全测试或安全扫描
  • 带着漏洞上线

部署过程中的安全问题

  • 弱口令、空口令、通用口令(一个口令在多处使用)
  • 数据库向互联网开放
  • 备份未经验证,使用备份数据无法还原系统
  • 使用了含有高危漏洞的中间件版本
  • 未执行安全配置
  • 缺乏基本防护措施(WAF等)

总结一下:

安全漏洞的原因分析总结

  • 只关注功能实现,忽略安全需求
  • 团队的安全开发经验欠缺
  • 缺乏安全开发规范或安全开发规范没有融入项目管理
  • 缺乏安全开发流程,或项目管理流程未包含安全控制
  • 缺乏安全部署标准或规范
  • 缺乏评审环节,没有人对交付质量把关
  • 缺乏上线/发布流程,未执行安全部署、验收审核
  • 安全上缺少投入,寄希望于后期补救

如何从源头开始规避漏洞

有人说,我们已经采购了很多扫描器,或者说渗透测试很厉害,但实际效果如何呢?

美国国家安全局(NSA)的一项研究表明,一般的应用安全测试工具(各种扫描器或渗透测试工具)的漏洞发现率只有14%左右(可搜索“NSA调查称全球没有一款漏洞扫描工具真正有效”了解更进一步的信息)。

14%,很难接受的一个数字,但实际差不多就是如此。

事后的扫描是靠不住的,只有从源头开始规避大部分漏洞,才能将主要的问题和风险消除在萌芽状态,这就要靠组织和流程来保障;将安全要素融入项目管理流程,启用安全开发流程,关键项目阶段要添加相应的安全任务。

这个安全开发流程,或融入安全要素的项目管理流程,即为SDL (Security Development Lifecycle, 安全开发生命周期)。

项目的各个阶段,有自己的安全任务。这些任务如果未完成,则意味着本阶段的安全问题/风险没有解决,带给下一阶段,并最终带入生产环境。通过流程保障,不将问题、风险、缺陷带给下一阶段。

SDL通过规范的项目管理过程和关键安全任务的引入,确保开发设计及部署过程中遵从安全标准与规范,保障所交付产品在全生命周期过程中的安全性。其核心理念就是将安全集成到应用开发的每一个阶段。

安全开发流程最大的价值,就是用标准和流程的确定性,来降低开发过程中的不确定性。

0 人点赞