上篇文章中,我说把存储在 Secret 中的密钥再加密一遍并不会使密钥更安全,有读者在后台和我讨论,我有点意犹未尽,于是就有了这篇文章。
为什么说不要自己强行“发明”安全机制 or 造轮子
首先,大前提是我们不涉及办公室政治,单纯的讨论技术,如果为了刷KPI那你怎么玩都行。
实际上从我的经验看,在日常中发生的99%(数字不负责,表示大部分问题)安全问题都属于对现有安全机制的理解出错、没有正确启用、使用安全特性而导致的漏洞,而不是你用的系统、代码中缺少安全轮子。
例一:
还是上篇文章中,我说过 K8s 需要开启 Secret 加密,刚巧我上家公司托管在 AWS 中的 EKS 并没有开启,实际上这个操作真的很简单,在 AWS 中,开启 Secret 加密只是在 EKS 面板中简单的点几下按钮,最后确定开启了“秘密加密”即可。
例二:
还是以我上家公司为例,他们的云服务是使用了三家,GCP Azure AWS 全都有,但是我进入控制台检查的时候发现,所有的 API Key 都用了至少三年... 也就是说他们从没换过一次 Key ...
例三:
又是我上家公司(原谅我用他们举例,因为这些事儿发生的太近了),这里是用 Sonar 来检测源码质量,实际上对于任何中小型公司,Sonar 是足够强大的管理源码质量工具,但是我检查代码时候发现这里面有大量的硬编码邮箱、测试Key、打印Log中包含敏感信息等等,非常离谱。
而这些信息在 Gitlab 的 Pipeline 中是有检测的,但是流水线只是单纯的检测和输出报告,并没有任何动作,按理说这种离谱的行为一定是需要选择在 Pipeline 中直接打断不允许通过啊!
例四:
公网 DNS 上放一堆内网 IP,这倒没引发什么太严重的问题,不过明明内网有DNS服务器,AWS 上的 Route 53 也可以使用私有 DNS 来配置内网 IP,但大家都不按照这种规范或者说最佳实践来做... 虽然这里的风险不是很大,不过安全就是一个一个小漏洞叠加才会引发大问题啊
以上几个例子都能印证这句话:
实际上从我的经验看,在日常中发生的99%(数字不负责,表示大部分问题)安全问题都属于对现有安全机制的理解出错、没有正确启用、使用安全特性而导致的漏洞,而不是你用的系统、代码中缺少安全轮子。
再说说修复安全漏洞的一些思路
这里的安全漏洞是泛指,如何修复安全漏洞,是否要将事件上升一定的高度,运动式的安全工作是否值得提倡?
如何修复安全漏洞
我的思路是这样,遇到一个可能的安全事件或者是事故时,首先要判断这是偶现问题还是属于系统性问题,如果是前者就简单了,快速封堵这个洞就好,没必要再去考虑更多。
但假如这是系统性问题,就像我前面的四个例子一样,这时候就是对安全负责人的大考验了。首先要能分辨事件类型,然后再给出相应的解决方案,假设你没办法分辨是系统性问题还是偶现问题,那大概率就要一直当救火队员,疲于奔命了。
是否要将安全漏洞上升到一定的高度
还是要先判断是不是系统性问题,前文四个例子都是系统性问题,解决方案很大很有难度,但不管如何解决,想不想解决,第一步一定是和你的 Leader 达成共识,因为安全岗既是纯纯的成本部门,又和高层关系密切。
第二步就是自己想清楚,这个/这些安全问题到底是人员培训不足?还是SDL推的不够好?还是现有的解决方案太弱?总之,具体问题具体分析吧。
“运动式”的安全工作是否值得提倡
不知道有没有别人提过这个词,这名字是我自己乱起的。
什么是“运动式”安全工作?
“运动式”的安全工作,指的是将安全措施和活动作为一种临时、集中式的努力来推进,而不是将其作为日常整体技术运营的一部分。
这种方式可能在某些情况下带来即时的安全改进,但它的弊大于利。
持续性问题:运动式的做法往往缺乏持续性,这就像我们今年花了三个月做了 SOC2 Type II 审计,审计期兄弟们防范意识极强,钓鱼邮件每一封都会手动举报给安全中心,不过审计期一结束,兄弟们的安全意识和行为又回到原点了。
资源分配不均:运动式安全工作一般都是集中大量资源解决特定的安全问题,这就会导致安全防护的盲点,例如为了加固网络安全边界,我们升级了 WAF HIDS NGFW等工具和设备,外部看起来“铜墙铁壁”了,但是 API 检测之后发现内部居然还有 Oauth 的 refresh token泄露...这就是很典型的只顾外部而忽视了内部安全。
安全疲劳:频繁的运动式安全活动会导致员工怨声载道,只顾着机械的执行安全部门给的 Policy,主动性越来越差...心里大概是,我按照你的规则做了你就别来烦我
缺乏系统性:运动式安全工作往往关注即时的安全问题,而忽视了建立长期、系统性安全管理和文化的重要性。
更好的策略:将安全融入日常技术运用工作
我更推荐的做法是将安全融入日常工作和公司文化中,例如建立持续的安全教育和培训、持续性的安全评估和改进、创建跨部门的安全文化、整合安全到业务流程等等。
总的来说,虽然运动式的安全工作可能在特定情况下带来肉眼可见的改进,但建立一种持续、综合的安全文化和制度,将安全融入日常技术运营工作中,才是确保长期安全和成功的更好方法。