写点什么

Docker 安全性探讨与实践:探讨篇

  • 2014-09-09
  • 本文字数:1768 字

    阅读完需:约 6 分钟

Daniel Walsh 是计算机安全领域的专家,有 30 余年的从业经验,非常熟悉容器技术。他 2001 年加入红帽公司,自 2013 年 8 月期任 RHEL Docker 增强开发团队主管。著名的 SELinux 项目就出自他手,该项目关注应用的运行空间和部署策略。Dan 还组织开发了安全虚拟化软件 sVirt,并创造了 SELinux 沙盒、Xguest 用户以及 Secure Kiosk。Dan 在今年七月参加 Docker 大会的时候做了一个主题演讲,解释了SELinux 的工作原理,Docker 如何在SELinux 下运行以及强制访问控制是如何增强Docker 安全性的。之后,基于这次演讲的视频,他又在开源网站上发表了两篇文章,一篇讨论Docker 的安全性,另一篇则着重介绍了RHEL 如何对Docker 的安全性进行了大量的增强。本文即是Dan 这两篇文章的梳理与讨论。

一、 容器的隔离能力不是万能的,应对才是王道

相信很多开发者都默认Docker 这样的容器是一种沙盒(sandbox)应用,也就是说他们可以用root 权限在Docker 中运行随便什么应用,而Docker 有安全机制能保护宿主系统。比如,有些人觉得Docker 容器里面的进程跟虚拟机里面的进程一样安全;还有的人随便找个源就下载没有验证过的Docker 镜像,看都不看内容就在宿主机器上尝试、学习和研究;还有一些提供PaaS 服务的公司竟然允许用户向多租户系统中提交自己定制的Docker 镜像。请读者注意,上述行为均是不安全的。

难怪有人说:“Docker 其实就是从网上不知什么地方下载一堆随机的代码,然后用root 权限运行。”现在Docker 镜像遇到的情景,跟1999 年Linux 兴起的时候类似:一个管理员觉得一个Linux 命令挺酷,就随便从网上什么地方找到这个命令的rpm 包,看都不看就安装运行。这显然是自取灭亡的典范。没过几天这个命令就爆出有bug,直接导致整个系统的瘫痪。

这种自取其辱的事情数不胜数,Dan 的团队乃至整个红帽公司,就在致力减少类似事件发生的概率。比如一定要从可信源下载软件,定期进行安全更新,长期维护一个安全应急小组以及验证系统安全性的一整套规程。

二、 我们需要在乎容器的安全性么?出乎意料但是显然需要

Dan 的团队近期不断提醒开发者,容器内外的权限基本没什么差别。如果开发者不是在多租户系统上运行 Docker,并且对 Docker 里面运行的服务都采取了很好的安全措施,那他们可能的确不用担心 Docker 爆出什么安全性问题,因为他们把 Docker 镜像内部和宿主环境同等对待了,这两者之间的安全性确实没什么差别。

但是难免有挺多开发者从直觉出发,觉得 Docker 容器的安全性就高,这些人往往会把 Docker 容器机制当作一种更快速部署虚拟机的方法。这时候就需要提醒他们安全性的问题了。从安全角度来看,容器的安全性非常弱。正常来讲,Docker 容器机制应该被当作一种服务来看待,就是说跑在 Docker 镜像上的 Apache 的安全措施,应该跟跑在自己服务器上的安全措施没什么区别才可以。比如,应该尽可能少的赋予软件各种权限,还应该总是用非 root 模式运行软件,以及万一在 Docker 内部用到了 root 权限,需要谨慎一如在宿主机上一样。

三、 是什么导致了安全漏洞?NameSpace

那么究竟是什么地方导致了 Docker 容器机制的安全问题呢?简单一句话,Linux 系统中不是所有东西都有命名空间(Namespace)。最新版本的 Docker 有五个命名空间:进程、网络、挂载、宿主和共享内存。如此简单的命名空间显然无法给开发者提供复杂的安全保护。比如在类似 KVM 的环境里,虚拟机根本无法直接和宿主的内核交互,它没有任何方式可以访问内核文件系统中如 /sys 和 /sys/fs 这样的地方。在这种情况下,想要脱离虚拟机来攻击宿主,比如要找到 HyperVisor 的弱点,攻克 SELinux 控制(这是个挺难的事情),然后才能够染指宿主的文件系统。而在 Docker 这样的容器里,原生就可以访问宿主的内核,安全性从何而来?

Dan 在文章中列举了主流的没有命名空间的内核,有:

  • SELinux
  • Cgroups
  • file systems under /sys
  • /proc/sys, /proc/sysrq-trigger, /proc/irq, /proc/bus

没有命名空间的设备有:

  • /dev/mem
  • /dev/sd* file system devices
  • Kernel Modules

如果开发者能访问或者攻击任何一个,就可以获得整个系统的控制权。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-09-09 07:273349
用户头像

发布了 268 篇内容, 共 134.1 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

中国设计师品牌Le Arome乐欧幕靠什么做到爆款10分钟售罄?

科技大数据

Module Federation在客服工单业务中的最佳实践

得物技术

前端 Module 模块 iframe Federation

企业怎样有效地进行文档管理

小炮

企业 文档管理

玩转LiteOS组件:Openexif

华为云开发者联盟

LiteOS Huawei LiteOS Openexif Exif JPEG文件

Flink 在众安保险金融业务的应用

Apache Flink

大数据 flink 编程 流计算 实时计算

软件开发中的风险如何处理?

源字节1号

微信小程序 软件开发

【IT运维】国内优秀的IT运维企业有哪些?

行云管家

云计算 运维 网络运维 IT运维

Zadig 基于 OPA 实现 RBAC 和 ABAC 权限管理技术方案详解

Zadig

云原生 CI/CD 软件交付

想减少代码量,快设置一个有感知的 Aware Spring Bean

华为云开发者联盟

spring bean Aware 接口

京东运动露营活动亮相首钢园,精彩持续整个四月

科技新消息

为什么企业对私有化部署IM如此青睐有加?

BeeWorks

jackson学习之三:常用API操作

程序员欣宸

4月月更

《数字经济全景白皮书》Z世代用户洞察篇(1)重磅发布!

易观分析

Z世代

EMAS隐私合规检测专项服务,从确保形式合规及实质合规规避风险

移动研发平台EMAS

阿里云 开发 数据安全 移动开发 隐私合规

结合实际案例谈谈项目管理经验

云智慧AIOps社区

学习 项目管理 pmp 软考 沟通技巧

浅谈Java虚拟机(HotSpot)的内存回收相关细节

CRMEB

政企上云网络适配复杂,看华为云Stack有妙招

华为云开发者联盟

数据中心 云网络 华为云Stack 政企上云 L3GW服务

3月月更中奖名单新鲜出炉!快来看有没有你呀!

InfoQ写作社区官方

3月月更 热门活动

机器人流程自动化评估体系全面助力垂直行业智能化转型

王吉伟频道

RPA 机器人流程自动化 信通院

后端开发【一大波干货知识】定时器方案红黑树,时间轮,最小堆

Linux服务器开发

定时器 后端开发 红黑树 时间轮 Linux服务器开发

低代码平台常见的安全隐患,J2PaaS低代码平台如何解决?

J2PaaS低代码平台

低代码开发 低代码平台 企业级低代码平台 J2PaaS低代码平台

行云管家荣膺《中国网络安全行业全景图(第九版)》收录

行云管家

网络安全 行云管家 安全牛

TASKCTL产品安装常见问题

敏捷调度TASKCTL

分布式 kettle ETL ETL任务 调度任务

在APICloud开发平台使用友盟统计功能教程

YonBuilder低代码开发平台

APP开发 APICloud 友盟

如何以卫语句取代嵌套条件表达式

华为云开发者联盟

条件表达式 卫语句 嵌套条件表达式 代码结构

为什么都是技术合伙人被踢出局?

方云AI研发绩效

团队管理 研发管理 CTO SaaS

接口自动化的关键思路和解决方案,本文全讲清楚了

Liam

Jmeter Postman API 测试工具 接口自动化测试

如何在 Zadig 上玩转自动化测试,为业务质量保障提供最大价值

Zadig

云原生 软件测试 CI/CD 软件交付

专访丨用友网络副总裁邹达:如何应对创新型数字化挑战?

YonBuilder低代码开发平台

腾讯WeTest微信小程序上线啦!产品资讯一手掌握!

WeTest

龙蜥开发者说:学无止境的 Linux ,以及我的第一个定制版本发布之路 | 第4期

OpenAnolis小助手

Linux 龙蜥社区 开发者说 宝贵经历

Docker安全性探讨与实践:探讨篇_语言 & 开发_张天雷_InfoQ精选文章