安全开发生命周期(Security Development Lifecycle,SDL)
定义: SDL是专注于软件开发安全保障的流程.
- 应用安全 - 帮助开发人员构建更安全的软件 将设计、代码等的漏洞减到最少.
- 项目安全 - 引入解决方案 避免项目风险.
- 用户安全 - 保障用户的安全与隐私.
- 降低成本 - 尽早发现并解决漏洞 降低开发成本.
项目研发生命周期中的风险暴露模型
- 需求阶段 - 缺少必要的安全需求介入 导致缺少必要的安全设计
- 设计阶段 - 缺乏安全考虑 导致系统架构上的后期难修复的安全缺陷
- 研发阶段 - 研发人员缺少安全意识 导致代码存在安全漏洞
- 测试阶段 - 缺少安全测试覆盖 导致无法提前发现安全漏洞
- 部署上线 - 攻击者通过各种手段发现并利用攻击面 进行入侵
- 安全培训
- 安全需求
- 安全设计
- 研发安全
- 安全测试
- 渗透测试(线上环境)
- 应急响应
- 1.安全培训
- 安全意识培训 - 提升项目人员的信息安全意识. 安全是每个人的工作. 开发人员、产品经理等 必须了解安全基础知识.
- 安全技术培训 - (线上视频 题库+在线答题平台) 给研发同学推行安全编码规范. 给运维同学推行配置安全规范.
- 安全制度宣贯 - 安全管理
- 资料下发 - 提供安全资料以供研发同学 运维同学 等项目人员学习、自查
- 2.安全需求 与 安全设计
- 作用 : 定义安全需求的最佳时间是在"初始设计和规划"阶段. 从设计上规避系统安全缺陷. 不断更新安全需求, 以应对 功能的变化 和 威胁态势的变化.
- 管理 : 落实到研发责任人 保证系统设计遵守安全设计规范checklist
- 影响安全需求的因素包括(但不限于)
- 法律要求
- 行业要求
- 企业内部标准
- 安全设计
- 设置最低的安全标准. 必须定义安全质量的最低可接受水平, 并使工程团队对达到该标准负责. (有助于团队了解与安全问题相关的风险, 在开发过程中识别和修复安全缺陷, 并在整个项目中应用标准.)
- 提供"安全特性"(secure features)给工程团队
- authentication - 身份认证设计解决方案 (统一SSO接入系统 验证码的形式与强度)
- cryptography - 加解密 (定义和使用密码学标准. 根据场景选择不同强度的算法.)
- logging - 日志
- 权限安全设计解决方案 (鉴权设计参考 避免垂直越权、水平越权)
- 关键操作安全设计方案 (支付、密码重置等)
- ...
- 安全评估 (硬编码 弱口令 配置文件参数...)
- 隐私风险评估
- 进行"威胁建模"(Threat Modeling) 分析攻击面 已知威胁. 威胁建模可以应用于 组件/应用程序/系统 级别. 更快地确定漏洞与威胁的风险.
- "第三方组件"的安全风险
- 3.研发安全
- 使用经过验证的开发环境(代码仓库...)
- 通过IDE插件实现实时代码检查并提醒(不安全函数、语言特性及框架可能引发的安全缺陷等)
- 静态分析 (Static Analysis Security Testing,SAST) - 基于语义分析等.
- 动态分析 (Dynamic Analysis Security Testing,DAST) - 把扫描集成到CI/CD流水线. (the continuous integration / continuous delivery pipeline)
- 4.安全测试
- 作用: 应用上线前的安全测试,提高应用安全的测试覆盖率.
- 方法: 黑盒渗透测试 + 白盒代码审计
- 5.线上安全评估
- 作用 : 完全模拟攻击者,通过任何可能的攻击路径进行安全自测,并提供修复/防御方案.
- 基础环境的安全评估CheckList
- 应用层的安全评估CheckList
- 信息管理层面的安全评估CheckList
- 安全产品部署(WAF IDS...)
- 6.应急响应
- 确定业务资产,创建并执行应急响应计划(SRC),收集漏洞与情报.
- 作用: 第一时间感知漏洞,对受影响的资产进行处置与防御. 尽量减小对业务造成的影响.
https://www.microsoft.com/en-us/securityengineering/sdl/practices