官术网_书友最值得收藏!

3.3.1 鏡像漏洞利用

鏡像漏洞利用指的是鏡像本身存在漏洞時,使用鏡像創建并運行的容器也通常會存在相同漏洞,攻擊者利用鏡像中存在的漏洞去攻擊容器,往往具有事半功倍的效果。

例如,Alpine是一個輕量化的Linux發行版,基于musl libc和busybox構建而成。由于其體積較?。ǔ筛鍟r最新的鏡像只有5.57MB),因此以Alpine為基礎鏡像構建軟件是非常流行的。但Alpine鏡像曾曝出一個漏洞:CVE-2019-5021。在3.3~3.9版本的Alpine鏡像中,root用戶密碼被設置為空,攻擊者可能在攻入容器后借此提升到容器內部root權限。

這個漏洞看起來很簡單,但是CVSS 3.0評分高達9.8分。我們拉取一個3.3版本的鏡像,然后構建容器并檢查一下密碼信息文件“/etc/shadow”,如圖3-5所示,可見shadow文件記錄的root密碼的確為空。

圖3-5 容器內的/etc/shadow文件

官方對此的回應[1]是,Alpine鏡像使用busybox作為核心工具鏈,通過/etc/securetty文件限制了可以登入root用戶的tty設備。除非是用戶主動安裝shadow和linux-pam來代替默認工具鏈,否則這個漏洞并不好利用。

但是,安全防護注重全面性,具有明顯的短板效應。假如用戶真的出于某種需求替換了默認工具鏈呢?那么進入容器的攻擊者借助此漏洞就能直接獲得容器內部root權限了。

我們模擬一下這個場景。基于3.5版本的Alpine創建一個鏡像,添加一個普通用戶non_root,并安裝shadow[2]


FROM alpine:3.5
RUN apk add --no-cache shadow
RUN adduser -S non_root
USER non_root

執行如下命令構建鏡像:


docker build --network=host -t alpine:cve-2019-5021

然后運行一個容器,嘗試執行su切換為root,切換成功,如圖3-6所示。

圖3-6 容器內提升權限為root

整個過程非常簡單。在現實中,如果用戶使用了舊版本的Alpine,沒有及時更新,同時安裝了shadow,一旦攻擊者利用Web服務等獲得了一個容器內的低權限shell,就可以憑借此漏洞直接提升為容器內root權限。利用過程如此簡單,造成危害又如此嚴重,大概就是這個空密碼問題被分配CVE編號成為漏洞,并獲得如此高威脅評分的原因吧。

[1] https://alpinelinux.org/posts/Docker-image-vulnerability-CVE-2019-5021.html。

[2] 隨書代碼倉庫路徑:https://github.com/brant-ruan/cloud-native-security-book/tree/main/code/0303- 供應鏈攻擊/01-CVE-2019-5021-alpine。

主站蜘蛛池模板: 大埔区| 黔南| 沅陵县| 资源县| 乳源| 虎林市| 公安县| 黄陵县| 酉阳| 乌拉特后旗| 鄯善县| 柞水县| 康定县| 锦屏县| 石渠县| 武定县| 思茅市| 磴口县| 三江| 会理县| 宁津县| 锡林浩特市| 房山区| 海南省| 锡林浩特市| 丰顺县| 扶余县| 集贤县| 阿克| 登封市| 尖扎县| 平阴县| 科技| 建湖县| 九龙县| 汉中市| 泽库县| 奇台县| 贵南县| 府谷县| 阳曲县|