保护软件供应链的四大步骤
解决开发环境中的安全漏洞
易受攻击的软件供应链
针对软件供应链的高级攻击会产生巨大影响,并且这种影响还将不断扩散。通过将恶意代码注入原本合法的软件更新中,不法分子已经感染了超过18,000名小心谨慎的SolarWinds客户。
插入SolarWinds Orion应用程序中的恶意软件只是针对特定组织的精心策划、多管齐下的营销活动的一个载体。
这种影响巨大的攻击反映了软件开发和交付中不断增加的攻击面和漏洞。随着CI/CD管道的出现,供应链攻击变得越来越普遍 — 攻击者会入侵证书以签署代码和绕过控制。
早在2016年, BitTorrent客户端Transmission的源代码就在Git Hub上遭到了后门程序入侵。2017年, 广受欢迎的清理应用程序Ccleaner因代码签署证书盗用而遭到后门程序入侵;
一次Docker Hub泄露使190,000用户名和哈希密码被盗,暴露了Bitbucket和Git hub的访问令牌;
一个Kubernetes安全漏洞让攻击者有机可乘, 利用受感染的容器替换用户工作站上的文件。
分层的身份安全控制
企业软件开发和交付已变得高度自动化,在构建过程中鲜少有人为干预。许多开发工具和平台本身是Tier O资产, 包含对整个企业和第三方的其他资产的凭据和访问权限。
此外,开发环境与基于云的组件之间的联系已变得更为紧密,但这些组件往往处于开发人员、运营人员或安全人员的直接控制范围之外。
然而,绝大部分网络攻击仍然涉及且最终依赖于身份盗窃和操纵特权访问。SolarWinds泄露事件也不例外。
本文解释了在开发和交付环境中,分层身份安全控制的最佳做法。如何在限制软件供应链中的漏洞和攻击者访问、窃取与控制企业资产方面发挥重要作用。
供应链攻击愈演愈烈 时间线
DEVOPS前景中的风险增加
无论是内部还是外部,出色的开发人员都是成功实现数字化转型方案的关键。利用更加自动化的软件开发和交付流程,以及对云端工具和存储库的访问权限,他们可以更快地交付更多的代码。
但是这些进步也会扩大攻击面。从使用开源组件进行编码,到自动化构建和测试,再到基于云的部署,软件供应链中出现了更多漏洞。对于不安全的特权账户、凭据和密码(如API 调用、加密密钥、访问令牌、证书、密码等),这一点尤其明显。
SolarWinds 等软件供应链攻击可能是多层的,涉及多个中间步骤或载体。但它们的终极目标是相同的:盗取身份,提升特权访问权限。
深度防御 (DiD) 方法的基本操作是保护整个开发环境(包括云原生应用程序)中的身份。接下来,我们将讲述用于保护 CI/CD 的 DiD 方法中的四大重要策略。
软件供应链中的漏洞
步骤 1:保护开发人员工作站
开发人员需要访问权限才能确保生产效率,但同时又不能被安全措施所累。首要目标就是使安全措施透明化,允许他们访问需要的资产和服务,同时智能地限制其访问不需要的资源。可以根据使用情况和相应的安全要求对开发人员工作站分层。
无论是从台式机本地访问,还是通过笔记本电脑远程访问,一些 DevOps 流程和系统都需要高级别的权限,哪怕只是用于一些特定操作和限定时间段。
最大的危险之一是,这些凭据通常保存在本地,使开发人员工作站成为了网络钓鱼电子邮件之类的简单攻击的高价值目标。
保护开发人员工作站特权的最有效策略是遵循以下最佳实践:
1. 移除本地管理员权限,应用零信任和最小权限原则,以确保仅在需要时提升特权 ;
2. 尽可能使用 MFA(多因素身份验证);
3. 使用安装权限阻止安装未知应用程序,并允许经过批准的工具。移除未经批准的软件并标记违规应用程序。
4. 保护本地凭据存储库,即保护云访问密钥(如 AWS 访问密钥和 Git 凭据)在端点上的默认存储位置。
5. 以受限模式运行未知应用程序,以阻止已知恶意软件并防止潜在入侵。
6. 定期审查限制以确保提供最小权限,但同时避免限制过度,以免抑制开发人员的生产效率。
保护开发人员工作站 - 分层示例
步骤 2:保护应用程序凭据
几乎所有应用程序都使用凭据来访问整个企业内的其他资产和资源。SolarWinds事件已经明确地展示了为什么企业需要保护整个组织内的所有应用程序。
不安全或不牢靠地存储在应用程序、脚本和其他资源中的凭据是重大的漏洞。通常,这些凭据无法轻松轮换、监视或跟踪。如果代码被发布到 GitHub 等公共站点,它们也可能在不经意间被暴露。
确立以下最佳实践,保护应用程序、脚本和其他非人类身份使用的凭据,以安全访问数据库和其他敏感资源:
1. 消除用于访问数据库、工具和其他敏感资源的所有硬编码凭据,并改用安全的方式,如使用 API 调用以从数字保险库提取密码。
2. 集中轮换、管理、存储和监视由应用程序、脚本和其他非人类身份使用的密码和其他凭据,确保满足审计和合规性需求。
3. 对要求访问密码和凭据的应用程序、容器和其他非人类身份实行强身份验证。尽可能使用请求者的原生属性进行身份验证,以消除零号机密问题。
4. 应用最小权限原则和基于角色的访问控制(RBAC),以便应用程序、容器、脚本或自动化流程仅有权访问所需的凭据。
通过集中式密码管理平台,这些最佳实践将更易于实施和管理。
保护应用程序凭据 - 示例
步骤 3:保护 DEVOPS 工具管理控制台
广泛使用的 DevOps 工具和平台(如 Jenkins 和 Azure DevOps)、 Ansible 和 Puppet 等配置工具以及容器编排环境(如 Red Hat OpenShift、 Kubernetes 和 VMware Tanzu)提供了对组织开发资源的大量控制,同时还让用户访问开发环境之外的各种企业资源。
随着对这些管理控制台的使用激增,它们已成为对攻击者而言颇具吸引力的目标。攻击者可以利用未受保护的控制台获取开发环境内外的其他资源。许多组织都使用这些工具的默认配置,在某些情况下无需密码即可获取特权访问。攻击者使用机器人爬网程序系统地搜索和利用这些暴露的漏洞。
尽管供应商和开源社区已着手解决这些漏洞,但安全漏洞仍然存在。
使用以下最佳实践保护 DevOps 工具管理控制台:
1. 应用基本密码最佳实践(管理、轮换等),并对重要操作采用 MFA。理想情况下,应对所有控制台访问使用MFA。避免使用默认配置和密码。示例:一些工具会创立用于创建项目的开发人员默认用户,而另一些工具控制台则可以使用 http 或默认密码进行访问。
2. 集中控制和管理对管理控制台和命令行界面 (CLI) 的人工与其他交互式访问。示例:保护对 Jenkins UI(用户界面)的访问。
3. 透明地管理和监视会话,并让开发人员可轻松采用安全解决方案。仅通过跳板服务器和其他监视工具提供对 CLI的访问,以限制攻击面。
4. 使用基于情境的自适应 MFA,在维持生产效率的同时缓解风险。在自动运行敏感脚本(例如将提交推送到 Git)之前,逐步加强身份验证,强制进行人工审查或审批。
保护开发人员工作站 - 分层示例
步骤 4:制定三种策略多管齐下
我们全面的方法结合了上述最佳实践,以保护整个开发环境,并为企业建立分层的 DiD。因此,开发和安全团队的领导需要共同努力以确立策略并强制采用。
SolarWinds 事件提供了警示,组织可借此机会解决开发环境中可能使组织暴露于风险的漏洞。开发人员和安全团队的目标是确保没有恶意代码或工件被注入到他们的代码中,同时保护他们的知识产权。
每个组织的开发环境各不相同,但是采用上述最佳实践的典型成功策略包括:
1. 由开发团队对代码进行分段,并使用 MFA 对敏感自动化操作(如提交到主机)强制进行干预和审查。
2. 开发和安全团队共同确立终端用户要求的层次结构。例如,需要按需提升特权或使用经管理人员批准的自助服务的人员。
3. 确立保护由应用程序、脚本和其他非人类身份使用的凭据的最佳做法。这包括消除硬编码凭据,集中存储、轮换和管理凭据,以及对要求访问密码和凭据的应用程序、容器和其他非人类身份实行强身份验证。
4. 安全团队定期并主动地调整端点保护措施以适应开发人员需求,在安全保护与生产效率之间取得平衡。
保护整个开发环境
保护开发环境需要团队合作
说实话,任何减慢代码交付的安全策略都会使开发人员想出新办法以便绕过相关操作。此外,用于开发的任何安全策略都不能太过麻烦,以至于让安全团队难以管理工作站、应用程序和不断增加的 DevOps 工具(许多包括自动化)的流程。
开发环境十分复杂,需要从一个具体且专注的视角对其进行保护。一方面,开发人员可能未能完全识别能够影响组织的所有潜在漏洞。另一方面, IT 和安全团队可能没那么熟悉开发工具和流程。
因此,安全团队和开发部门必须携手合作,而开发和安全部门的领导也务必将此合作视为优先事项。
与开发人员互动的方法
安全团队成员知道他们需要更主动地与开发和 DevOps 部门同事合作,但通常不知道从何处下手。CISO 和全球 2000强企业的安全部门领导对保护 DevOps 环境安全的方法进行了研究,确定了五个关键方法,以成功地与开发人员互动并帮助其采用安全做法:
1. 将安全团队转化成 DevOps 合作伙伴。
2. 将保护 DevOps 工具和基础设施列为优先事项。
3. 建立企业级要求,以便在 DevOps 和云环境中保护凭据与机密信息。
4. 制定安全流程以用于应用程序测试。
5. 评估 DevOps 安全项目的结果。
通过主动提前参与开发流程(通常称之为“左移”),安全团队可以更有效地与开发人员合作,以保护应用程序。反过来,开发人员可以形成习惯,在规划阶段要求安全部门参与,而不必等到代码上线之前才让他们参与进来。将安全性左移以更完整地涵盖软件供应链,对于保护企业而言至关重要。
保护开发人员工作站、应用程序和管理控制台上以凭据与机密信息形式呈现的特权访问,是保护软件供应链的关键。保护愈发自动化且作为其他资产入口的开发环境中的身份是企业 DiD 策略的基础。
安全性左移
SolarWinds 供应链攻击持续跟踪进展:https://paper.seebug.org/1459/