基础设施即代码(IaC) 是一种快速发展的技术,利用软件开发原则和实践,用软件配置基础设施。与传统的 IT 基础架构相比,IaC 可以更高效地交付软件。自动化还解锁了弹性配置的能力,该功能可在不同的负载下有效地分配资源。
尽管 IaC 有很多优势,但配置不当的 IaC 也会在整个系统中迅速传播错误配置。IaC 的自动化配置能够提高效率,也可以放大错误,而这些错误通常会对安全产生不利影响。坚持 IaC 最佳实践是降低成功供应链网络攻击和漏洞风险的有效方法,考虑以下8个 IaC 最佳实践,为企业安全保驾护航。
扫描 IaC 代码,排查错误配置
IaC 是一个功能强大的工具,但同时也存在一定安全风险,例如在整个云基础设施中传播小的配置错误。错误配置可能的形式有:不安全的默认配置,可公开访问的 S3 buckets 或未加密的数据库。
SAST 和 SCA 扫描是特征代码的最佳方式,然而很少有企业优先考虑用此类方式保护 IaC。对 IaC 代码进行安全扫描可以有效减少由于配置错误导致的暴露和漏洞。此外,可以通过扫描新的 commit 以查找对云部署的更改,来检测和更正与其原始模板匹配的基础结构。
将自动化 IaC 安全扫描嵌入开发工作流程
在漏洞进入生产环境之前发现并修复比后置的补救手段更有效。因此通过将对 IaC 错误配置的检查嵌入到开发人员工作流中,开发人员能够提前发现并纠正问题。可以采用pre-commit的形式,以便在开发人员保存其工作时测试代码,也可以使用拉取请求自动执行的分支保护规则,或者作为在CI中运行的安全构建规则。在开发人员的工作流中运行安全扫描还可以确保开发人员及时获得准确信息,并修复错误配置,提高修复效率。
识别并纠正环境偏移
环境偏移检测(不同部署环境的配置与其模板不同步的情况)和修复错误配置是 IaC 的最佳实践之一。配置中的偏差通常发生在维护期间,并可能导致环境(如测试和生产)变化。随着时间的推移,这会导致配置偏离安全状态。
环境偏移可能是由粗心的错误引起的,而由此造成的问题修复难度高并且可能导致业务宕机,造成巨大损失。通过将 IaC 与实际生产配置进行比较来识别偏移,但手动完成此操作既繁琐又耗时。因此,偏移检测是 IaC 安全扫描工具的不错选择。
防止硬编码密钥渗透到 IaC 中
IaC 最广泛认可的最佳实践之一是避免部署包含凭证的代码。硬编码密钥可以在特征代码或 IaC 代码中被引入,而进入 IaC 代码的密钥有可能对组织的安全性造成毁灭性的影响。硬编码密钥的存在也使得由于密码破解而导致相关帐户泄露,让恶意攻击者有机可乘。因此如果硬编码密钥保留在程序中,会导致身份验证措施失败,因为任何有权访问项目的人都可以查看这些硬编码密钥。与扫描 IaC 安全配置错误非常相似,初始评估应在主分支和版本历史记录中的 IaC 代码中查找硬编码密钥。最好的方法是通过扫描 commit 来防止这些硬编码密钥进入版本控制系统。
减少代码泄漏的时间和影响
无意泄露源代码可能导致知识产权盗窃、硬编码密钥的暴露等等。源代码和 IaC 代码通常位于同一存储库中,暴露 IaC 代码的风险众多,其中包括攻击者通过解析代码找到对应的漏洞、配置错误和破解密钥的风险。
建立协议以避免代码泄漏,同时制定应急计划,以防发生泄漏。应调查潜在的可疑用户活动,例如使用 IaC 下载、克隆或分叉存储库。强制实施最小特权策略有助于减少代码泄漏风险。此外执行定期检查,防止源代码继续发布到公共存储库或代码共享站点,并确保快速处理任何源代码泄漏。公开专有 IaC 代码的时间越长,恶意攻击者就越有可能借此进行发起攻击。因此,设置警报机制,能够尽可能降低代码泄漏发生的风险。
建立一致的工具管理机制标准
IaC 安全中经常被忽视的一个方面是 DevOps 工具和基础结构本身的安全设置和策略。强化身份验证、确保最小特权原则以及强制实施职责分离,在建立有利于安全的协议方面都大有裨益。开发者凭证是攻击者和其他恶意行为者的有力工具,但实施治理保护措施有助于防止单个被盗用帐户危及系统的其他部分或访问 IaC 工具。
实现策略的一致实施是 IaC的最佳做法之一。Google 的 SLSA 框架(Supply chain Levels for Software Artifacts) 包含有关确保源代码完整性的具体指南,此指南旨在减少代码篡改的机会,并防止恶意活动被忽视。这些要求旨在使对 IaC 的更改可跟踪和审查。建立一致的管理标准,要求软件供应链中的每个系统都是安全的,用户无法在没有额外监督的情况下更改系统。
防止 IaC 代码篡改
如果开发人员的帐户遭到入侵,攻击者可以篡改 IaC 代码,从而造成严重后果,例如使数据库可公开访问。因此,不仅要强化开发人员的帐户,还需要明确 IaC 配置何时发生更改,并验证更改是否经过批准。在 SDLC 的不同阶段之间定期比对,通过识别源代码不匹配的点,帮助降低代码篡改风险。同时通过比较构建生命周期的不同阶段,确保代码完整性,以降低篡改代码的风险。如前所述,IaC 会放大错误配置,未经授权的更改可能会导致 IaC 模板更改或配置篡改,从而导致代码泄漏,因此检查和确认正在执行更改的主体十分关键。
关键代码监控是降低 IaC 篡改风险的另一个途径。从本质上讲,关键代码监控是在每次发生更改时的发出警报,对于特征代码,必须谨慎使用关键代码监控。但 IaC 代码是为应用程序初始化和部署的基础结构的模板,因此使用关键代码监控再合适不过。因为基础架构通常不会更改,但发生更改时应具有高可见性,以确保更改不是恶意的。
全面了解安全环境
繁冗复杂的环境是保障安全的最大阻碍。全面了解安全环境非常重要,因为这能有效减少修复安全问题所需的响应时间。通过改善安全环境,保障开发安全,避免代码泄漏或代码被篡改。此外,可以通过多个事件和工具的环境更有效地确定修复的优先级。这种方法可以产生深度防御,从而降低产生漏洞的风险以及在漏洞对企业和组织产生的影响。
参考链接:
Supply chain Levels for Software Artifacts
https://github.com/slsa-frame...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。