CI/CD是应用程序开发周期的重要组成部分。然而,犯罪分子正在利用CI(持续集成)/CD(持续交付)管道中的漏洞来窃取敏感信息、挖掘加密货币并交付恶意代码。最近利用持续集成/持续交付(CI/CD)管道和开发人员工具中的漏洞进行的网络攻击说明了提高开发人员基础设施安全性的紧迫性。最典型的案例就是Codecov供应链攻击,这也提醒用户无论环境多么安全,都不要在CI/CD环境变量中存储隐私信息。Codecov攻击者破坏了数千名开发人员使用的Bash上传器,设法从客户环境中窃取了凭证、密钥和API令牌,并隐藏了两个月,据报道他们破坏了数百个受限的客户端网络。同样,针对Jenkins、GitHubActions和云原生容器环境等自动化工具的攻击进一步促使企业探索和部署针对这些工具的有效防御措施。以下是保护CI/CD管道的一些良好做法。1、请不要在CI/CD环境中存储敏感信息。Codecov供应链攻击成功的原因是攻击者泄露的环境变量包含硬编码的敏感信息,包括密码、令牌和密钥。由于其中一些凭据使攻击者可以访问公司的私有GitHub存储库,因此有可能进一步从这些私有存储库中窃取数据,其中包含本应保密的数据。虽然包括HashiCorp、Twilio、Rapid7和Monday.com在内的多个Codecov客户披露了供应链攻击的影响,但迄今为止影响最深远的数据泄露发生在日本电子商务巨头Mercari。在Codecov攻击之后,与Mercari客户的财务、商家、业务合作伙伴、公司员工、承包商和各种实体相关的总共27,000多条记录被泄露给未经授权的外部攻击者。虽然这些攻击可能都是从Codecov漏洞开始的,但一些人也质疑为什么个人身份信息(PII)(例如客户财务记录)会存储在私人GitHub存储库中。存储在CI/CD环境中的HashiCorp的GPG私钥也引发了类似的担忧。这是HashiCorp颁发的用于签署和验证软件版本的密钥。在密钥被撤销之前,攻击者可以滥用密钥在恶意软件版本上伪造HashiCorp的签名。一位开发人员在推特上写道:“为什么没有人谈论Vault的制造商HashiCorp将他们的签名密钥存储为ENV?”企业需要重新考虑哪些信息可以存储在CI/CD工具、环境变量和私有GitHub存储库中。如果应用程序需要在这些地方存储凭据或令牌,则最好将凭据存储在具有最小权限的帐户或资源中,这是完成任务所必需的,通常称为最小权限原则。这样一来,即使在前所未有的攻击中隐私信息被泄露,损失也可以得到遏制。2.审查自动拉取请求和计划任务CI/CD自动化工具(如GitHubActions)允许开发人员为其代码库设置计划任务,例如自动审查和处理传入的拉取请求。但是,如果向开源项目发出拉取请求的贡献者有恶意,会发生什么情况?2021年4月,GitHubActions被攻击者滥用,他们向数百个存储库发出自动拉取请求,以利用GitHubFacility的基础来挖掘加密货币。此次大规模攻击发生在2月初GitHubActions漏洞被曝光之后。至少特权,这些拉取请求可能会滥用GitHub的服务器来挖掘加密货币或执行攻击者的恶意代码。如果项目负责人疏忽并合并了这些拉取请求,他们就会将恶意代码引入到他们的存储库和更广泛的软件供应链中。5月,GitLab报告称其平台上的攻击者通过滥用分配给新账户的“免费分钟”(配额)处理了类似的加密攻击。由于GitHubActions和GitLab等CI/CD自动化工具的本质是促进关键任务的自动化,因此守门成为一项挑战。当威胁行为者滥用时,可能是有意设计的功能很快就变成了安全漏洞。GitHub最近宣布了新功能,以打击加密货币攻击者对其Actions平台的滥用。来自首次贡献者的拉取请求需要由具有写入权限的存储库协作者手动批准,然后才能运行任何操作工作流。“当首次贡献者打开拉取请求时,他们会看到一条消息,表明维护者必须批准他们的操作工作流才能运行,”GitHub产品经理ChrisPatterson在一篇博文中说。领先的CI/CD解决方案和DevOps平台可以效仿GitHub并添加一些安全检查以阻止恶意行为者大规模滥用其基础设施。3、加强并定期审核云原生容器实践,获取真知灼见,标准的最佳实践具有重要的借鉴意义。示例包括确保正确配置生产容器和强化常见的攻击媒介,包括保护管道配置。但是,有时很难发现简单的错误配置。那么问题来了,基于Docker的环境是否存在漏洞?因此,定期对容器进行安全审计以发现弱点,扫描容器镜像和清单文件以发现常见的安全问题仍然是有帮助的。投资可靠的云原生容器安全解决方案也是明智之举,它可以使大部分工作自动化。每年都会报告大量安全漏洞,而且很难检测到。此外,随着企业采用Kubernetes框架和Docker容器来部署其应用程序,带有内置Web应用程序防火墙的容器安全解决方案可以在早期检测并阻止可疑的网络流量。即使攻击者能够穿透容器并获得初始访问权限,这也可以防止造成重大破坏。4.集成深度代码扫描,自动化代码质量检查在代码正式提交之前,需要自动化工具发现代码质量问题、安全漏洞、内存泄漏或竞争条件等错误,确保CI/CD的安全性管道从一开始就是有效的策略。虽然重点主要放在防止网络攻击上,但微小的错误同样会产生大规模的影响。例如,Fastly的全球中断导致全球主要网站离线。GitHubCodeScanner或Sonatype的Lift等解决方案无缝集成到现有的编码工作流程中,并为开发人员提供必要的保障。归根结底,组织的目标应该是支持其开发人员做好工作,同时尽可能防止将错误或安全漏洞引入应用程序。这需要开发和安全团队之间的相互配合。提醒开发人员在编码时可能出现的疏忽,实时通知可以节省每个人的时间,并从一开始就保护整个CI/CD工作流程。5.尽早修补最新的CI/CD工具漏洞2021年3月,攻击者使用名为z0Miner的加密挖掘僵尸网络在易受攻击的Jenkins和ElasticSearch服务器上挖掘Monero(XMR)加密货币。通过利用Internet服务器中的远程代码执行(RCE)漏洞,攻击者试图感染并接管自动化基础设施以执行其犯罪活动。同样,去年有报道称攻击者利用Jenkins服务器造成分布式拒绝服务(DDoS)攻击。事件背后是一个UDP放大反射DoS攻击漏洞,追踪为CVE-2020-2100,影响Jenkinsv2.219以下版本和JenkinsLTS2.204.1以下版本。一旦发现这些严重漏洞,立即修补自动化工具和管道对于保护您的CI/CD基础设施至关重要。6.在应用之前验证更新的完整性应用最新的更新和补丁听起来是一个合理的举动,但是更新是否被篡改了?这似乎很难确定?“更新到最新版本”的建议几十年来一直是安全专家的口头禅,但在SolarWinds供应链攻击之后,这一建议受到了挑战。在SolarWinds事件中,对OrionIT产品的恶意更新使攻击者能够向下游分发恶意代码给18,000多个客户。然而,Passwordstate密码管理器的“本地升级功能”再次遭到破坏,向Passwordstate用户分发恶意更新。因此,盲目应用产品更新未必是好事。在Codecov的案例中,一个简单的完整性检查发现了持续两个月的漏洞。一位客户注意到服务器上托管的Bash上传器的校验和(哈希)与Codecov的GitHub存储库中列出的合法校验和之间存在差异,立即联系Codecov,他们解决了这个问题。因此,纵深防御方法需要验证任何更新、补丁和下载的完整性,以排除来自复杂供应链攻击的风险。参考链接:保护CI/CD管道:6个最佳实践
