云原生安全:攻防实践与体系构建
上QQ阅读APP看书,第一时间看更新

3.2 针对容器化开发测试过程的攻击案例

过去,开发者关心的安全要素主要是代码安全性,如写的代码是否足够健壮、代码是否正确处理了异常且不会引起拒绝服务、代码是否能够有效阻止各种注入漏洞、是否有溢出等。诚然,代码安全性非常重要。但是,随着以容器为代表的云原生技术的兴起,开发环境与生产环境的差异被“容器化”逐渐消解,容器技术顺理成章地参与到开发者的编码、调试、打包过程中。然而,这同样意味着,容器自身的安全问题可能会给上述开发阶段的各个过程带来风险。

SDL(Security Development Lifecycle,安全开发生命周期)实践告诉我们,做安全越早越好,从开发阶段就开始对安全性进行合理的评估和控制能够有效提升整个工程质量。反之亦然,如果在开发阶段就引入安全问题,那么它往往是最隐蔽的,在运行时再检测这些问题将会颇为棘手。

本节研究一个针对容器化开发测试过程的攻击案例——容器与宿主机间文件复制的安全问题,希望能够提高开发者的安全开发意识。

在2019年欧洲开源峰会上,议题“In-and-out-Security of Copying to and from Live Containers”[7]通过梳理、展示多个安全漏洞,揭示了容器与宿主机间文件复制功能存在的安全问题。

这些安全问题主要与docker cp和kubectl cp等复制文件命令有关,而这些命令主要是为了方便开发者在开发环境、测试环境中进行测试。在真实的云原生业务环境中,应用程序应该完全按照从打包、测试到集成部署的统一步骤来管理。在生产环境的容器被创建、运行后,无论是从容器中复制文件或是将文件复制到容器中,都应该是被禁止的。

我们将对两个具有代表性的高危漏洞——CVE-2018-15664和CVE-2019-14271的原理进行简单分析和漏洞复现。

经过分析,大家将会发现,这一类容器与宿主机间文件复制功能的安全问题实际上还是一些经典安全问题在新环境下的表现,如符号链接的安全问题、动态链接库劫持和相对路径的安全问题等。