1

内核态eBPF程序实现容器逃逸与隐藏账号rootkit

 2 years ago
source link: https://www.cnxct.com/container-escape-in-linux-kernel-space-by-ebpf/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

内核态eBPF程序实现容器逃逸与隐藏账号rootkit

本文不同于 云原生安全攻防|使用eBPF逃逸容器技术分析与实践,腾讯同学的实现,是用eBPF技术在内核态hook,修改文件,让用户态APP产生行为日志(cron的文件变化,且需要执行shell),完成逃逸。在此过程中,还是会留下一些日志行为,能被常规HIDS感知捕获,触发告警。

本文是在kernel space内核态,hook内核态函数,更改内核态返回用户态缓冲区数据,达到用户态欺骗的目的。用户态进程拿到被篡改的数据,从而被骗通过认证。在此过程,不改变任何文件、进程、网络行为,不产生日志。 常规HIDS、HIPS产品无法感知。

前段时间,调研了业界基于eBPF实现的HIDS类产品,包括Ciliumdatadog、tracee、falco等产品。 在工程研发上,了解了业界在eBPF技术的应用方式,覆盖场景,实现的安全业务功能等。

在K8S生态下,涌现大批基于eBPF技术实现的集群网络管理插件,比如Calicocilium等。而业务实现网络管理服务是以容器化方式部署,且有需要给这些容器启用SYS_BPF_ADMIN权限以支持eBPF系统调用。

这些业务形态,恰恰给这种攻击手段一个完美的发挥空间。

随着业务形态变化,在强大的eBPF技术下,会给安全上带来什么样的威胁呢?正巧前段时间也看到腾讯@neargle 同学们写的 云原生安全攻防|使用eBPF逃逸容器技术分析与实践 文章,深知eBPF的威胁远比这更可怕,细想其功能覆盖XDP、TC、probe、socket等,每个功能点都能实现内核态的篡改行为,从而使得用户态完全致盲,哪怕是基于内核模块的HIDS,一样无法感知这些行为。
为此,笔者跟大家分享这篇文章,演示eBPF技术的强大,给防御产品HIDS/HIPS预警,尽快完成eBPF相关入侵行为监控的建设,提升IDC的防御检测能力。

既然容器启动时,已经授权启用了eBPF权限,那么理论上可以做任何事情,包括容器逃逸获得宿主机权限、实现超级隐藏的rootkit后门、绕过网络防火墙等。

那么eBPF技术还能做哪些事情呢?为了回答这个问题,我们回顾一下eBPF的hook点
eBPF Hook位置
从图中可以看出,eBPF的hook点功能包括以下几部分

  1. 可以在StorageNetwork等与内核交互之前;
  2. 也可以在内核中的功能模块交互之间;
  3. 又可以在内核态与用户态交互之间;
  4. 更可以在用户态进程空间。

这意味着,eBPF技术都可以在这些HOOK点做各种手脚,为所欲为,十分可怕。而更可怕的是,在前两个地方,都是在内核态以及内核态之前做手脚,而现有常见的HIDS都是基于内核里或者用户态做行为监控,这恰恰就绕开了大部分HIDS的监控,且不产生任何日志,简直细思极恐、不寒而栗

宿主机系统版本

系统内核版本

root@vmubuntu:/home/cfc4n#uname -a 
Linux vmubuntu 5.11.0-41-generic #45-Ubuntu SMP Fri Nov 5 11:37:01 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Linux 发行版

root@vmubuntu:/home/cfc4n#cat /etc/os-release
NAME="Ubuntu"
VERSION="21.04 (Hirsute Hippo)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 21.04"
VERSION_ID="21.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=hirsute
UBUNTU_CODENAME=hirsute

容器引擎版本

docker容器版本为20.10.12,比较新。

root@vmubuntu:/home/cfc4n#docker version
Client: Docker Engine - Community
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.16.12
 Git commit:        e91ed57
 Built:             Mon Dec 13 11:45:34 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.12
  Git commit:       459d0df
  Built:            Mon Dec 13 11:43:42 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.11
  GitCommit:        5b46e404f6b9f661a205e28d59c982d3634148f8
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

容器镜像版本

root@vmubuntu:/home/cfc4n# docker image ls
REPOSITORY   TAG                IMAGE ID       CREATED         SIZE
ubuntu21     latest             5355960aa2c5   5 days ago      119MB
ubuntu       hirsute            d662230a2592   3 weeks ago     80MB
ubuntu       latest             ba6acccedd29   2 months ago    72.8MB
python       3.7.9-alpine3.11   8b32838a7ca6   11 months ago   41.9MB

系统账号文件hash

root@vmubuntu:/home/cfc4n# md5sum /etc/passwd /etc/shadow
f43a244c13b639a41a8f555b28c1ff27  /etc/passwd
31dd98746685de12d8b6fb40ef22975e  /etc/shadow

视频演示了eBPF技术的强大,只使用了tracepoint一个bpf prog类型实现容器逃逸与隐藏root的rootkit,不改动任何文件,用户态全程无感知。而eBPF还支持kprobe/kretprobe、uprobe/uretprobe、XDP、TC、socket、cgroup等程序类型,覆盖文件、网络、socket、syscall等事件,都是可以被黑客利用的地方。
比如,在XDP层实现一个IP转换,利用http(80端口)来透传sshd(22端口)的通信,完成绕过防火墙的目的,而主机的网络防火墙完全感知不到,更无法溯源出网络通信来源,就问你,可怕不可怕?

那针对这些威胁,站在防御者角度,该如何防范?eBPF实现的rootkit不同于常规rootkit,本身不改变函数地址、代码,防御检测的思路会有什么差别呢?

笔者近期将在「美团安全应急响应中心」微信公众号跟大家分享,敬请期待。

临近元旦,祝大家玩得开心,我们…节后见。

CFC4N的博客 由 CFC4N 创作,采用 知识共享 署名-非商业性使用-相同方式共享(3.0未本地化版本)许可协议进行许可。基于https://www.cnxct.com上的作品创作。转载请注明转自:内核态eBPF程序实现容器逃逸与隐藏账号rootkit


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK