觀念部分可參考 Container Sandboxing | gVisor、[Day8] Container Runtime - Security Container、新聞部份參考 Google解釋GKE因採用gVisor,不受Linux核心漏洞CVE-2020-14386影響、矽谷牛的耕田筆記。感覺這機制水也是很深啊,所以只能就安裝跟安全測試的部分做個簡單的說明。
Docker 部分安裝步驟參考如下 :
(
set -e
ARCH=$(uname -m)
URL=https://storage.googleapis.com/gvisor/releases/release/latest/${ARCH}
wget ${URL}/runsc ${URL}/runsc.sha512 \
${URL}/containerd-shim-runsc-v1 ${URL}/containerd-shim-runsc-v1.sha512
sha512sum -c runsc.sha512 \
-c containerd-shim-runsc-v1.sha512
rm -f *.sha512
chmod a+rx runsc containerd-shim-runsc-v1
sudo mv runsc containerd-shim-runsc-v1 /usr/local/bin
) # 下載 runsc 程式
sudo runsc install ;
sudo systemctl restart docker ;
# 看一下目前宿主機的 kernel 版本
uname -r ;
docker run --runtime=runsc --rm -it aeifkz/my-ubuntu:v1.0 bash ;
# 比對一下容器內看到的 kernel 版本
uname -r ;
# 在容器內測試其他特性,試著對 process 做一些觀察
sleep 999999999 ;
# 切到宿主機測試一下是否能夠查到
# 意外發現看不到惹
ps aux | grep 999999999 ;
# 在容器內測試其他特性,試著對 /tmp 內部新增一個檔案看看
touch /tmp/i_am_givsor ;
# 切到宿主機去搜尋這個檔案,發現找不到
sudo find /var/lib/docker -name "i_am_givsor"
wget https://github.com/genuinetools/amicontained/releases/download/v0.4.9/amicontained-linux-amd64 && chmod +x amicontained-linux-amd64 ;
# 會發現 gvisor 到預設沒開 apparmor 跟 seccomp
./amicontained-linux-amd64 ;
攻擊手法 | gvisor 能否阻擋? |
---|---|
privileged + host pid | Y |
--cap-add=ALL + host pid | Y |
privileged | Y |
(CVE-2022-0492) unshare + cgroup 特權逃逸手法 | Y |
安裝 linux_module | Y |
docker.sock 掛載 | Y |