基于Rust-vmm实现Kubernetes运行时

随着容器及K8s的广泛使用,越来越多的容器安全与隔离问题被暴露出来,如:容器逃逸、水平攻击、DDos攻击等严重威胁了办公和生产环境的安全与稳定,影响了业务的正常运行。安全容器技术孕育而生,产生了kata、gVisor、unikernel等多种安全容器方案。本文旨在介绍各种安全容器方案,分析各方案特点,结合腾讯在容器安全领域的实践,帮助读者选择适合自身特性的容器运行时。同时引入Rust-VMM项目,介绍 Rust-VMM 技术和生态,演示如何使用K8s调度和启用Rust-VMM安全容器运行时,展望以Rust语
摘要由CSDN通过智能技术生成

随着容器及K8s的广泛使用,越来越多的容器安全与隔离问题被暴露出来,如:容器逃逸、水平攻击、DDos攻击等严重威胁了办公和生产环境的安全与稳定,影响了业务的正常运行。安全容器技术孕育而生,产生了kata、gVisor、unikernel等多种安全容器方案。本文旨在介绍各种安全容器方案,分析各方案特点,结合腾讯在容器安全领域的实践,帮助读者选择适合自身特性的容器运行时。同时引入Rust-VMM项目,介绍 Rust-VMM 技术和生态,演示如何使用K8s调度和启用Rust-VMM安全容器运行时,展望以Rust语言实现的容器运行时的广阔前景。

容器安全与隔离

一个基于K8s集群构建的基础设施中,内部存在不同层次的隔离,从容器到Pod再到节点最后到cluster,每一层隔离都有它的特点和特性,我们尤其关注Pod级别的隔离特性。

相比其他层次的安全隔离,Pod及容器级别的隔离对我们的挑战非常大。容器在运行时使用root运行进程,尽管使用namespace技术为容器空间内的pid、uts、fib等进行了隔离,但由于各个容器共享系统内核,容器与内核间缺乏隔离保护,容易引发容器逃逸等安全问题,典型容器逃逸攻击如:CVE-2018-14634、CVE-2016-5195、CVE-2019-5736 及 CVE-2019-14271等。

docker.vh.neargle.com:8888/?command_exec=python3 -c "import docker;client = docker.DockerClient(base_url='unix:///var/run/docker.sock');data = client.containers.run('alpine:latest', r'''sh -c \"echo 'ssh-rsa xxxxx root@620e839e9b02' >> /tmp/root/root/.ssh/authorized_keys\" ''', remove=True, volumes={'/': {'bind': '/tmp/root', 'mode': 'rw'}})"

上述脚本是一个简单的例子,这段代码会向docker.sock的端口发起请求,拉起一个alpine的容器,容器内进程会向所在主机注入一段SSH的公钥。在容器里的恶意用户或者攻击者,就可以获轻松得这个容器所在host主机的SSH的登录权限,从而能够非法查看同主机其他容器空间的信息,篡改关键文件或记录,甚至以主机为跳板攻击整个集群。

还有一个就是Noisy Neighbor,就是吵闹邻居问题。关于Noisy Neighbor,容器方面已经有了很多进展,比如对于CPU、memory、bandwidth甚至是buffer IO,基于Cgroup对这些资源已经有了一些隔离和限制,但是这些限制并不能完全解决Noisy Neighbor的问题,还是有一些吵闹的进程会影响到正常的业务进程的运行。

# kubectl run --rm -it bb --image=busybox sh
/ #  f(){ f|f& };f                   # WARNING: Don't try this!

上面是一个简单的例子,启动一个busybox的容器,在里面执行一个嵌套循环的指令,会把这台主机上所有的file descriptor全部耗尽,造成这台主机上正常运行的业务进程工作不正常,这个是Noisy Neighbor的风险和问题。

对于上述问题,建议用户关注官方的漏洞报告,升级操作系统或docker的版本,根据安全指引配置容器环境,同时可以参考以下措施增强容器集群的安全防护级别。

  • 在物理层面上隔离,为不同的租户之间划分不同的Hardware Isolation域,让不同的租户使用不同的硬件空间,从物理上、网络上以及存储上彻底的隔离,这也是最直接最有效的方法。
  • 利用一些Security Tools,包括经常用的SElinux或者Cgroup隔离,划分不同的资源访问和安全规则,但是这些安全规则需要编写大量的profile文件,实现起来难度颇大。
  • 入侵检测机制,主机防御的一种手段。入侵检测的软件或者进程会监控这台主机上有风险的进程或者有风险的文件,对于这些文件的读写操作都会有安全方面的记录,会即时预警,即时响应。比如对于containerd-shim/busybox/docker-runc的关键进程,比如docker-runc对于bash、init或者对于fd的访问都可以做到即时的预警和标记。对于上面提到的容器逃离漏洞,通过入侵检测的机制,就可以有一个比较有效的防御。
  • 定制Linux Kernel Patch,一些特殊的资源隔离或者安全漏洞,也可以为kernel
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值