最近看了很多SDLC的东西,把其中比较重要关键的记录一下,用简洁的语言说清楚

0x01 SDL 介绍

SDL是微软提出的一种软件开发安全生命周期管理的一种最佳安全实践,全称为Security Development Lifecycle

0x02 为什么要SDL

目的是为了从安全漏洞产生的根源上解决应用安全问题,通过对软件开发流程的控制,保证产品的安全性。

SDL它主要侧重于软件开发的安全保证过程,所谓现在很多人说的安全左移

SDL主要是致力于在软件开发过程中,把安全的东西融入进去,尽量在之前就可以减少软件中漏洞的数量

核心问题

SDL的核心理念是将安全考虑集成在软件开发的每一个阶段:需求分析、设计、编码、测试和维护。

从需求、设计到发布产品的每一个阶段每都增加了相应的安全活动,以减少软件中漏洞的数量并将安全缺陷降低到最小程度。

SDL基于三个核心概率:培训教育、持续过程改善和责任。

SDL的一个主要目标:安全和隐私

SDL在开发过程的所有阶段进行安全和隐私保护

1
SDL的核心理念是将安全考虑集成在软件开发的每一个阶段:需求分析、设计、编码、测试和维护。从需求、设计到发布产品的每一个阶段每都增加了相应的安全活动,以减少软件中漏洞的数量并将安全缺陷降低到最小程度

0x03 主要流程把控

安全人员在工作中对于流程的把控是推动落实的关键

0 安全培训

产品、设计、研发、安全人员的安全意识培训。

SDL核心之一就是安全培训,要在所以立项之前就做一些准备

  • 安全编码
  • 安全意识
  • 安全知识库(解漏洞原理、修复方案)
  • 安全SDK(让架构将一些漏洞修复方式用SDK实现,开发只需要导入包即可,比如安全的http方法防SSRF,让开发无感的调用即可)

1 立项阶段(安全需求设计)

所有的项目立项都需要通过系统来进行立项,立项评审会议中阐述安全观念,对立项需求可能存在的安全问题提出指导意见,确定安全需求

制定开发规范(java、php等)

2 设计阶段 PM–PRD

开发设计评审会,根据产品设计讲解安全需求CHECKLIST,

设计安全规范,根据需求文档和项目经理确定安全需求,涉及框架设计、业务逻辑

3 开发阶段/实施

开发人员开发工作主要为IDEA等,可以结合FindBugs及安全插件FindSecBugs让开发人员自己进行代码安全审计。

我们可以根据SonarRQube进行代码审计,检测开发人员的代码是否符合JAVA开发规范和OWASP标准,通过会议方式和项目组开发人员沟通。

进行安全编码培训,提前把控漏洞风险点,为后续渗透测试节省工作量。

4 测试阶段

静态代码扫描 SAST

利用静态代码扫描工具对代码在编译之前进行扫描,并在静态代码层面上发现各种问题

1
2
3
这里主要利用就是SAST(自研、Fortify、CHeckmarx、Flawfinder)

静态代码扫描常见采用sonarQube集成,利用FindbugSecurity,精简规则,然后在持续构建过程中,进行静态代码bug,安全扫描。

DAST

简单理解就是黑盒扫描器

Web应用扫描:可以由测试人员扫描,安全人员分析报告,跟踪漏洞安全修复。

人工渗透测试:项目上线前除了自动化工具扫描外,需要人工测试,深挖漏洞;季度渗透测试,如果项目多的话,最起码半年一次全项目的渗透测试。

IAST

这个属于一黑白灰结合版本,原理就插桩,进行污点追踪。

有一张图特别好(https://www.aqniu.com/wp-content/uploads/2019/04/\%E5\%9B\%BE-9.png\)

img

漏洞修复培训:尽管前面做了大量的工作,安全漏洞出现不可避免,出现漏洞及时和开发人员沟通,面对面交流。

5 运维监控

syslog打到日志中心可视化,并定制对应的规则实现告警即可,我们所说的SIEM

推动系统漏洞修复和系统安全基线检查:系统在整个防护体系的内部,兴许推动起来不那么容易,有时候推动漏洞修复不在于数量而在于精,内网不能出现的系统漏洞一定要及时修复,逐步推动,推动需要和运维讨论。

  • 安全漏洞管理:护漏洞管理系统
  • Git监控:做好代码监控工作,避免出现代码泄露GitHub监控。
  • SRC的运营:如果资金不足可以借助安全平台的SRC,hackerone这种 。
  • 急响应工作,制定入侵检测CHECKLIST:一不小心就会出现入侵,制定入侵检测CHECKLIST
  • 搭建态势感知平台