SRE 在安全方面可以做点啥
前言
最近 log4j2 的故事大家已经耳熟能详了,网上有非常多视频和文章详细介绍了漏洞以及如何消除风险。空闲下来,不禁思考作为一名 SRE,保障服务安全显然也是一个非常重要的职责,我们平时为安全可以做些什么呢?本文旨在基于服务生命周期各结论,讨论一下 SRE 可以在安全方面可以做哪些事情。
需求分析与架构设计
设计阶段的问题,发现越晚纠正的代价越大,我们可以借助OWASP ASVS确定项目的安全强度要求,首先看项目需求,是否涉及到敏感数据,ASVS 中分三种级别:
L1, 不涉及敏感信息
L2, 有敏感信息,需要加密保护
L3, 有敏感信息,涉及金钱交易,用户健康数据等,需要极尽所能保护
评审项目影响,最快情况会造成什么样的损失,确定自己的项目需要采取多大强度的保护以后,借助 ASVS 制定对应安全设计。
Thread modeling
评审架构设计,模块划分,确认各模块的安全边界,对外输入输出的对象和数据流,数据是否包含敏感信息。
可以借助一些 Thread modeling 工具,比如 Microsoft Thread Modeling Tool,OWASP Thread Dragon 等等,通过图形化方式检查威胁会出现在哪里,确认相应的防护手段。
威胁一般分为六类:
欺骗(spoofing),需要做好认证
篡改(Tampering),需要做完整性校验
抵赖(Repudiation), 需要借助数字签名校验等方法确保不可抵赖
泄密(Information disclosure), 需要加密,包括传输,处理和存储各阶段
拒绝服务(Denial of Service), 高可用设计
越权访问(Elevation of Privilege), 确保权限管理,包括水平权限和垂直权限
OWASP ASVS 中对所有威胁在 L1, L2, L3 分别应该做到哪些措施,不再一一赘述。
不同的公司可能有不同的协作方式,往往有专门的安全工程师把关安全设计,其中 SRE 本身就应该消除单点故障保证高可用设计,除此之外更需要评估未来正式上线后,安全需求带来额外的运维需求,比如说确认了需要加密,那么加密密钥如何管理,密钥多久做一次 rotation,一旦服务上线以后,如何不中断服务做 rotation?认证时的证书如何管理,多久做一次 rotation?为了实现这些功能,需要在开发阶段实现哪些功能也是 feature request,尽早与团队沟通确认好,否则上线以后会发现很多困难。
开发测试
在开发测试阶段,SRE 准备生产/测试环境,实现安全需求分析阶段中提到的所有依赖,比如说决定使用 Vault 来管理 secret 的话,是否需要提前准备好独立的 Vault 集群;容量规划也是保证高可用的重要一环;CI/CD 过程中哪些信息需要 secret 管理等等。
有限发布
在有限发布阶段,SRE 一般需要制定 SLO,观察 KPI pattern 建立告警,同时也需要包含安全类告警,及时发现恶意试探,加入黑名单或者采取主动措施防御。
正式发布
经历千辛万苦,终于产品上线了,SRE 也进入了日常 oncall;需要注意类似于一开始提到的第三方库漏洞并及时采取措施。
可能有安全团队专门发布通知以及推荐解决方案,有的公司可能没有专职人员,那么采用自动化方式从 repo 中收集类似于 java 的 Maven/Grade,Python 里的 requrements.txt, Go 里的 go.mod,提取依赖项和版本号,自动爬取 CVE 发出报警可能是个不错的实践。
比如收到上述 log4j2 的 CVE,采取紧急措施后跟踪事件直到该问题彻底解决。
总结
本文用口语化方式简单描述了一下 SRE 在整个服务不同的参与阶段在安全方面可以做哪些事情,相当于一个随笔吧。最后非常感谢做安全的朋友以及开源工作者的无私奉献。
版权声明: 本文为 InfoQ 作者【勇往直前的胖子】的原创文章。
原文链接:【http://xie.infoq.cn/article/6114e8a6331d0e04b43b6da51】。文章转载请联系作者。
评论