最近看了很多SDLC的东西,把其中比较重要关键的记录一下,用简洁的语言说清楚
SDL是微软提出的一种软件开发安全生命周期管理的一种最佳安全实践,全称为Security Development Lifecycle
目的是为了从安全漏洞产生的根源上解决应用安全问题,通过对软件开发流程的控制,保证产品的安全性。
SDL它主要侧重于软件开发的安全保证过程,所谓现在很多人说的安全左移
SDL主要是致力于在软件开发过程中,把安全的东西融入进去,尽量在之前就可以减少软件中漏洞的数量
SDL的核心理念是将安全考虑集成在软件开发的每一个阶段:需求分析、设计、编码、测试和维护。
从需求、设计到发布产品的每一个阶段每都增加了相应的安全活动,以减少软件中漏洞的数量并将安全缺陷降低到最小程度。
SDL基于三个核心概率:培训教育、持续过程改善和责任。
SDL的一个主要目标:安全和隐私
SDL在开发过程的所有阶段进行安全和隐私保护
SDL的核心理念是将安全考虑集成在软件开发的每一个阶段:需求分析、设计、编码、测试和维护。从需求、设计到发布产品的每一个阶段每都增加了相应的安全活动,以减少软件中漏洞的数量并将安全缺陷降低到最小程度
安全人员在工作中对于流程的把控是推动落实的关键
产品、设计、研发、安全人员的安全意识培训。
SDL核心之一就是安全培训,要在所以立项之前就做一些准备
所有的项目立项都需要通过系统来进行立项,立项评审会议中阐述安全观念,对立项需求可能存在的安全问题提出指导意见,确定安全需求
制定开发规范(java、php等)
开发设计评审会,根据产品设计讲解安全需求CHECKLIST,
设计安全规范,根据需求文档和项目经理确定安全需求,涉及框架设计、业务逻辑
开发人员开发工作主要为IDEA等,可以结合FindBugs及安全插件FindSecBugs让开发人员自己进行代码安全审计。
我们可以根据SonarRQube进行代码审计,检测开发人员的代码是否符合JAVA开发规范和OWASP标准,通过会议方式和项目组开发人员沟通。
进行安全编码培训,提前把控漏洞风险点,为后续渗透测试节省工作量。
利用静态代码扫描工具对代码在编译之前进行扫描,并在静态代码层面上发现各种问题
这里主要利用就是SAST(自研、Fortify、CHeckmarx、Flawfinder)
静态代码扫描常见采用sonarQube集成,利用FindbugSecurity,精简规则,然后在持续构建过程中,进行静态代码bug,安全扫描。
简单理解就是黑盒扫描器
Web应用扫描:可以由测试人员扫描,安全人员分析报告,跟踪漏洞安全修复。
人工渗透测试:项目上线前除了自动化工具扫描外,需要人工测试,深挖漏洞;季度渗透测试,如果项目多的话,最起码半年一次全项目的渗透测试。
这个属于一黑白灰结合版本,原理就插桩,进行污点追踪。
有一张图特别好(https://www.aqniu.com/wp-content/uploads/2019/04/%E5%9B%BE-9.png)
漏洞修复培训:尽管前面做了大量的工作,安全漏洞出现不可避免,出现漏洞及时和开发人员沟通,面对面交流。
syslog打到日志中心可视化,并定制对应的规则实现告警即可,我们所说的SIEM
推动系统漏洞修复和系统安全基线检查:系统在整个防护体系的内部,兴许推动起来不那么容易,有时候推动漏洞修复不在于数量而在于精,内网不能出现的系统漏洞一定要及时修复,逐步推动,推动需要和运维讨论。