作業 11-1 題目 : 試著練習用之前建立的 Ubuntu 18.04 環境測試 (CVE-2022-0492) unshare + cgroup 特權逃逸手法 看看是否會成功? 並解釋其原因。
解答 : 首先先在 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 的攻擊路徑後又意外發現一個新的防禦方式,參考如下。