iT邦幫忙

2023 iThome 鐵人賽

0
影片教學

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

Day 36 - 作業 11-1 解答 - 驗證 user remapping 防禦 CVE-2022-0492 漏洞攻擊

  • 分享至 

  • xImage
  •  

Yes

  • 作業 11-1 題目 : 試著練習用之前建立的 Ubuntu 18.04 環境測試 (CVE-2022-0492) unshare + cgroup 特權逃逸手法 看看是否會成功? 並解釋其原因。/images/emoticon/emoticon33.gif

  • 解答 : 首先先在 Ubuntu 18.04 上面開啟 user remapping 機制,參考如下。

    # 這邊應該要顯示 4.15.0-041500-generic 版本
    uname -r ;
    
    # 透過指令幫建一個 user account
    sudo adduser low_user ;
    
    # 這邊會新增一筆對應資料,例如 : low_user:165536:65536
    cat /etc/subuid ;
    cat /etc/subgid ;
    
    # 切換 root,偷懶直接用輸入的方式寫入
    echo '{ "userns-remap": "low_user" }' > /etc/docker/daemon.json ;
    
    # 重啟 docker 服務
    sudo systemctl restart docker ;
    
    # 正式做一次 CVE-2022-0492 + cgroup 容器逃逸
    docker run --rm -it --security-opt="seccomp=unconfined" --security-opt="apparmor=unconfined" aeifkz/my-ubuntu:v1.0 bash ;
    
    # 往下看看做到第幾步會失敗...
    unshare -UrmC --propagation=unchanged bash ;
    
    mkdir /tmp/cgroup ;
    
    mount -t cgroup -o rdma cgroup /tmp/cgroup ;
    
    # 這邊會失敗,可是為什麼呢?
    mkdir /tmp/cgroup/cgroup_2 ;
    
    # 看到 nobody 跟 nogroup
    ls -al /tmp/cgroup ;
    
  • 從這邊看的出來雖然在容器內已經是 root 身分,但是掛載進來的目錄權限居然變成 nobody、nogroup,導致整體的攻擊流程失敗。回想 CVE-2022-0492 的攻擊路徑後又意外發現一個新的防禦方式/images/emoticon/emoticon07.gif,參考如下。

    1. docker 預設掛載 root cgroup (更新 docker 版本)
    2. 呼叫 unshare 開出新的 namespace (開啟 seccomp 機制)
    3. /images/emoticon/emoticon42.gif具有讀寫掛載的 cgroup 類型的目錄權限 (開啟 user remapping 機制)
    4. 寫入 release_agent 沒有判斷權限 (更新 linux kernel 版本)

上一篇
Day 36 - (防禦) Day 36 - User Remapping 安全機制介紹 (含作業11-1、11-2)
下一篇
Day 36 - 作業 11-2 解答 - 驗證 user remapping 防禦 docker.sock 掛載攻擊
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言