改善 Docker 镜像系统安全性的补救措施

时间:14-12-26 栏目:云计算技术 作者:爱说云网 评论:0 点击: 2,172 次

最近在使用Docker下载一个“官方”容器镜像时我看到这么一行提示:

  ubuntu:14.04: The image you are pulling has been verified

我当时以为这和Docker极力推荐的镜像签名系统有关,所以并未深究。后来,在研究Docker镜像安全相关的加密系统时,我开始进一步探索Docker的镜像安全。而我发现所有与镜像安全相关的逻辑完全是系统性的错误。

按照Docker的说法,下载的镜像完全是基于签名的manifest的存在而做出的,并且Docker并没有从manifest中校验镜像的校验和(checksum)。攻击者可以伪造提供一个具有签名证明的镜像,这个问题很容易被攻击者利用。

镜像从HTTPS服务器上下载下来,然后通过Docker daemon的一个不安全的流处理管道:

  [解压缩] -> [tarsum] -> [解包]

这个管道很高效,但毫无安全可言。在未验证签名之前,管道不应该处理不受信任的输入。然而,在验证检验和之前,Docker进行了三次镜像的处理。

尽管Docker做了声明,但它从未实际检查过镜像校验。下面是Docker中唯一一处与验证镜像校验和有关的代码,但是即便在镜像中提供不匹配的校验和,我也无法触发这个警告。

  1. if img.Checksum != "" && img.Checksum != checksum { 
  2.  
  3. log.Warnf("image layer checksum mismatch: computed %q, 
  4.  
  5. expected %q", checksum, img.Checksum) 
  6.  

不安全的处理管道

解压缩

Docker支持三种压缩算法:gzip、bzip2和xz。前两者使用Go的标准库实现,这是内存安全的,所以我能想到的漏洞类型是拒绝服务攻击,如宕机、CPU和内存过度使用。

第三个压缩算法xz更有趣。因为没有原生的Go实现,Docker运行xz程序来解压缩。

xz程序来自XZ Utils项目,它从接近2万行C代码中构建而来。C不是一个内存安全的语言。这意味着一个C程序的恶意输入,此处为XZ Utils正在解包的Docker镜像,有执行任意的代码的可能。

如果Docker以root运行xz,那会更糟糕,这意味着如果xz存在一个漏洞,执行docker pull将严重危及你的整个系统。

Tarsum

tarsum的使用出于好意,但完全错误。为了取得一个任意编码的tar文件的确定性校验和,Docker对tar进行解码然后以确定性顺序对特定部分进行哈希,排除了其他部分。

因为这个处理过程是为了生成校验和,它正在解码的不受信任的数据可被设计成利用tarsum代码的漏洞。这里可能的漏洞是拒绝服务攻击以及逻辑缺陷,这将引起文件在不改变校验和的情况下被注入、跳过、使用不同方式处理、修改、添加等。

解包

解包分为tar解码和将文件到保存到硬盘中两个步骤,在编写本文的时候已经有解包阶段的三个其他漏洞被报告出来,所以这也是非常危险的。

不应该存在未被检验的数据被解包到硬盘中的情况。

libtrust

libtrust是一个提供认证和权限控制的Docker包。但是官方没有提供任何的规范,但它看起来像是实现了Javascript对象签名与加密规范的一部分,以及其他不明算法。

所以在下载一个manifest签名的以及使用libtrust验证的镜像时,会有如下不准确的提示:

ubuntu:14.04: The image you are pulling has been verified

目前只有Docker公司公布的“官方”镜像manifest使用这个系统签名,但从我参加的最近一次Docker管理咨询委员会会议的讨论看来,Docker公司计划在未来更广泛的部署它。目标应该是集中管理,由Docker公司控制一个发证机构用于镜像和/或客户证明签名。

我曾在Docker代码中查找签名密钥,但没找到。看来密钥并没有嵌入到程序中。实际上,Docker后台会在每次镜像下载时通过HTTPS从CDN获取密钥。这是一个非常糟糕的方式,因为有很多种攻击可以导致受信任的密钥被替换成恶意的。这种攻击包括但不限于:CDN供应商威胁、CDN供应密钥源威胁以及客户端下载密钥时的中间人攻击。

补救

在完成此项研究之前,我已经报告了我发现的tarsum系统的几个问题,但至今没有一个被修复。

我觉得必须采取一些措施来改善Docker镜像下载系统的安全性:

弃用tarsum并实际验证镜像摘要

为安全起见,不应该使用tarsum。取而代之的是在进行任何处理前,将镜像完全下载并对其加密签名进行验证。

增加权限隔离

涉及解压缩或解包的镜像处理步骤必须运行于具有最低限度的必要的权限的隔离的程序(容器?)中。不应该存在像xz这样的解压缩工具必须以root运行的情况。

更换libtrust

用The Update Framework替换libtrust,前者是明确设计用于解决软件程序签名的实际问题的。它的威胁模型非常全面,并且解决了很多libtrust没有考虑到的事情。它拥有一个完整的规范,以及一个Python的参考实现,我已经开始Go的实现并且欢迎任何人加入。

作为添加TUF到Docker的一部分,一个映射根密钥到registry URL的本地密钥库将被加入,以便用户可以使用不受Docker公司管理的自有签名密钥。

我想指出的是,一般情况下使用非Docker公司托管的registry用户体验非常差。在没有任何技术原因的情况下,Docker公司似乎乐于将第三方registry降低为二等地位。这对一般的生态系统和最终用户的安全来说都是个问题。综合而言,针对第三方registry的分散的安全模型是必要和可取的。我非常期待Docker公司在重新设计他们的安全模型和镜像验证系统时考虑这一点。

结论

Docker用户应该清楚负责下载镜像的代码是极其不安全的。用户只能下载那些来源没有问题的镜像。目前,这不包括托管于Docker公司的“可信的”的镜像,包括官方的Ubuntu和其他基础镜像。

最好的办法是在本地阻止index.docker.io,并在镜像导入到Docker之前手动使用docker load下载并检验镜像。Red Hat的安全博客有篇与此相关的好文章。

感谢Lewis Marshall指出tarsum从未被验证。

相关文章

工信部:推云计算、大数据、移动互联促中小企业信息化-搜狐财经...
views 1778
工信部总工程师朱宏任周一表示,今年将大力推进云计算、大数据、移动互联等新信息技术的应用,促进中小企业信息化。  朱宏任是在今日举行的2014中小企业信息化服务发布会作上述表示的。他还表示要组织实施中小企业两化融合能力提升行  相关公司股票走势 动和中小企业信息化推进工程,健全和完善中...
未来之家里,物联网的四个趋势
views 2075
我们在影视作品中见识过不少关于“未来家庭”的想象。早晨起床,被智能闹钟唤醒,面包机和咖啡机已经做好热气腾腾的早餐,浴室的水加热到刚好的温度……21 世纪初,比尔盖茨就在《未来之路》一书中写道: “我要建造一栋适应复杂科技变化的房子,但技术不能喧宾夺主,它需要像‘仆人’一样为服务主人而存在。” 比尔...
云计算:从建设期走向利用期
views 1395
已经不再是IT产业中新趋势的云计算,对中国IT产业的影响以及其自身的热度,最近以来看似已不断下降。近日来,关于各地利用云计算概念圈地搞房地产项目,以及区域级云计算基础设施项目重复及过度建设的新闻,频繁见诸报端和电视节目之中。 一时以来,云计算似乎已经从一个新兴产业转眼变成市场饱和的传统产业。一个需...
云计算在教育信息化中的应用探讨
views 2841
随着网络的不断普及。人们在日常的生活和学习中需要从Intenet上获取大量的信息。同时,随着人们网络信息素养的不断提高,也 对网络服务提出了更高的要求。Intenet每天要处理大量 随着网络的不断普及。人们在日常的生活和学习中需要从Intenet上获取大量的信息。同时,随着人们网络信息素养的不断提...
玩转云存储 后期制作巧用搜狐企业网盘...
views 1704
从热映的《撒娇女人最好命》、《太平轮》,到即将推出的《微爱之渐入佳境》。华谊兄弟三箭齐发,迎接贺岁档的到来。银幕上精彩纷呈的背后是国内外制作团队共同努力协作的结果。华谊兄弟通过引入云存储技术,巧妙的利用搜狐企业网盘高效传输、协同办公的特性,将后期制作进行分解,通过国内外不同团队间的合作,让影片的制作...
在Docker容器之间拷贝数据:原理与操作示例...
views 1945
ocker容器可以类比成一个目录,它可以将一个应用程序运行时所依赖的所有环境(注:此应用依赖的其他的服务或程序等)打包在一起运行;同时可 以随意的对它进行“启动”、“停止”、“移动”或者“删除”等操作。Docker容器在Linux的命名空间(Namespace)机制下被激活,这样就 可以使得运行在同...
企业信息化的关键成功因素
views 2454
 企业信息化不仅是一个庞大而复杂的系统工程,而且也有其自身的战略目标,大企业信息化的战略目标,企业必须分析影响企业信息化目标的关键成功因素。所谓关键成功因素,是指实现目标必须进行的事项或活动。本文在分析国内外企业的案例基础上,并结合实践,提出了企业信息化的关键成功因素和企业在实施过程中应树立的几个正...
用事实告诉你云计算是否安全
views 1529
许多人不敢尝试云计算和云存储,是因为从心理上觉得把自己至关重要的信息存储在第三方实在不靠谱,这其实就像我们经常看到的报道,某老太存了多少年钱放在床底被老鼠啃了一样,专业的事还是让专业人士来处理好一些,云安全问题需要更多关注。 不可否认现在的云服务提供商良莠不齐,但如果连亚马逊这样的服务商都靠不住,那...

声明: 本文由( 爱说云网 )原创编译,转载请保留链接: 改善 Docker 镜像系统安全性的补救措施

改善 Docker 镜像系统安全性的补救措施:等您坐沙发呢!

发表评论


读者排行