安全开发生命周期(sdl)相关概念

一,相关概念

DevOps

将开发、部署结合在一起,形成的软件开发与过程的管理模式

CI/CD

持续集成(CI)是构建软件并完成初始测试的过程;持续交付(CD)是将代码与基础设施相结合的过程

SDL

安全开发生命周期

SDLC

软件开发生命周期

二,sdl

SDL概念由微软提出,核心理念是“安全左移”。将安全能力左移到开发过程的每一个环节。通过对开发工程周期各阶段的控制保证安全。

三,DevSecOps

在DevOps的基础上,提出了DevSecOps。

传统的软件安全运营是与软件开发部署分开执行的,开发人员开发和部署时没有考虑安全问题。在放置到生产环境后,安全人员再检查开发和运行环境。一旦发现问题,就需要撤回代码。

DevSecOps将软件安全性作为软件交付流程的核心部分,将安全嵌入到DevOps的各个流程中

3.1 详细过程

 3.1.1 plan

1,团队建设:在业务中安排业务安全BP,梳理业务流程,作为安全和业务中的沟通者。安全通过业务安全BP推动,业务通过业务安全BP反馈安全遇到的问题,提出安全诉求。

2,安全培訓,安全考试:产品、设计、研发、安全人员的安全意识培训。

3,威胁建模:针对每种风险进行打标,包含场景,修复。产品经理在创建需求时,只要勾选对应场景就可以给出建模,给出风险提示和修复方案

3.1.2 create

1,软件成分分析(sca):在CI过程中,进行扫描分析,对扫描发现的中高级别漏洞发布拦截。会遇到很多漏洞,对于外网应用有poc的优先修复,对于内网应用和没有poc的暂缓修复。降低SCA对CI/CD流程的影响

2,源代码扫描(sast):基于正则的扫描,误报会很大。因为如sql注入漏洞,需要了解上下文。基础数据流、控制流的代码扫描由于扫描时间长,会旁路到CI/CD上

    主要问题在于自动化的误报降低:指定阈值,准确率高于阈值自动同步到业务。低于阈值要人工复核,并更新规则。

3.1.3 Verify

IAST+DAST+RAST

人工测试+红蓝对抗+src

3.1.4 prevent

waf,hids,nids

3.1.5 detect

数据库审计,日志监控,态势感知,风控告警

3.1.6 respond

应急响应 标准化流程 安全升级

3.1.7 predict

漏洞情报 风险情报 监控

3.1.8 adapt

应急响应标准化流程优化

3.1.9 漏洞管理

漏洞发现,修复,跟踪,复盘

 

四,安全设计checklist

1,输入验证

校验跨信任边界传递的不可信数据(策略检查数据合法性,含白名单机制等)

格式化字符串时,依然要检验用户输入的合法性,避免造成系统信息泄露或拒绝服务

禁止向一些命令执行的函数传递不可信、未净化的数据

验证路径之前应该先将其标准化为实际路径

解压文件,如果解压之后的文件大小超过一定的限制,拒绝解压

在处理前,验证所有来资客户端的数据,包括:所有的参数、url、Http头信息

验证来自重定向输入的数据

验证数据的类型,范围,长度

2,输出编码

为每一种输出编码采用一个标准的、已通过测试的规则

通过语义输出编码方式。编码形式需根据具体的应用场景选择

对sql、xml和ldap查询,语义净化所有不可信数据的输出

对操作系统命令,净化所有不可信数据输出

3,异常处理

禁止在异常中泄露敏感信息

禁止在异常中泄露应用服务器的指纹信息

方法发生异常时要恢复到之前的对象状态

4,I/O操作

临时文件使用完毕应及时删除

不要将Buffer对象风向的数据暴露给不可信代码

多用户系统中串讲文件时指定合适的访问许可,防止未授权的文件访问

白名单控制共享目录操作文件权限

5,运行环境

监控平台不要对互联网开发

生产代码不能包含任何调试代码或接口

6,身份验证

除了哪些特定设为“公开”的内容以外,对所有的网页和资源都要求进行身份验证,并正确设计身份验证功能

所有的身份验证过程必须在服务器后端上执行

在任何可能的情况下,建立并使用标准的、已经通过安全测试的身份验证服务

登录入口应具有防止爆破及撞库猜解的错是,超过设定失败次数需要启用锁定或图片随机码进行限制

采用https post方式传输身份验证的凭据信息

身份验证失败提示信息采用模糊处理

涉及敏感信息或功能的外部系统连接 应配置身份验证功能,并进行有效身份验证控制

在执行关键操作时,应对用户身份再次验证

为高度敏感或重要的操作使用多因素身份验证机制

7,短信验证码

一次一用

发送频率限制

验证码有效期

复杂度

安全提示

必须使用服务端代码对输入数据进行最终校验

8,图形验证码

一次一用

验证码有效期

复杂度

服务器端验证

9,密码管理

禁止使用私有或者弱加密算法(推荐aes rsa dsa)

采用基于哈希算法和加入salt方式安全存储口令信息

密码输入框,涉及为显示密码和隐藏密码切换功能

密码重设和更改操作,需要二次验证

密保问题,应支持随机的问题提问

密码重设,应对手机号和邮箱进行有效性验证

临时密码和链接应设计一个短暂的有效期 防止爆破

当密码重新设置时,应短信通知用户

密码复杂度

密码设置场景检测密码复杂度

密码不能输出到日志和控制台

数据库连接配置中的用户密码加密存储

设计密码定义修改提醒

10,会话安全

用户登出后立即清理会话和相关登录信息

注销功能应完全终止相关会话和连接

增加httponly

会话cookie应设计有效期

11,访问控制

将具有特权的逻辑从其他应用程序代码中隔离开
限制只有授权的用户才能访问文件资源
限制只有授权的用户才能访问受保护的 URL
限制只有授权的用户才能访问受保护的功能
建议只有授权的用户才能访问直接对象引用
限制只有授权的用户才能访问受保护的服务
限制只有授权的用户才能访问受保护的应用程序数据
限制只有授权的用户才能访问与安全相关的配置信息
限制只有授权的外部应用程序或接口才能访问受保护的本地程序或资源
服务器端执行的访问控制规则和前端实施的访问控制规则必须匹配
服务器中创建文件时需指定合理的访问权限(读/写/可执行)
当权限重新设置发生变更时,应记录好日志,并短信通知用户是否是本人在操作,告知可能存在的安全风险

12,日志规范

确保日志记录包含了重要的日志事件数据

记录所有失败的输入验证
记录所有失败的身份验证记录
记录所有成功的身份验证记录
记录所有失败的访问和操作记录
记录所有成功的访问和操作记录
记录明显的修改事件,包括对于状态数据的修改
记录连接无效或者已过期的会话令牌尝试
记录所有的管理功能操作行为,包合但不限于安全配置设置的更改
记录所有失败的后端连接
记录加密模块的错误信息

posted @ 2023-06-06 15:19  IronHeart  阅读(337)  评论(0)    收藏  举报