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

3.1.4 容器管理程序接口存在的風險

Socket是Docker守護進程接收請求及返回響應的應用接口。在圖3-1中可以看到,Docker守護進程主要監聽兩種形式的Socket:UNIX socket和TCP socket[1]。安裝完成并啟動后,Docker守護進程默認只監聽UNIX socket。

1.UNIX socket

為什么UNIX socket也可能存在風險呢?它的問題主要與Docker守護進程的高權限有關:Docker守護進程默認以宿主機root權限運行。只要能夠與該UNIX socket進行交互,就可以借助Docker守護進程以root權限在宿主機上執行任意命令。相關的風險利用場景主要有兩個:

1)許多用戶為了方便,不想每次輸入密碼時使用sudo或su,就將普通用戶也加入了docker用戶組,這使得普通用戶有權限直接訪問UNIX socket。那么一旦攻擊者獲得了這個普通用戶的權限,他就能夠借助Docker UNIX socket在宿主機上提升為root權限。

2)為了實現在容器內管理容器,用戶可能會將Docker UNIX socket掛載到容器內部。如果該容器被入侵,攻擊者就能借助這個socket實現容器逃逸,獲得宿主機的root權限。

如何利用UNIX socket提升權限、逃逸出容器呢?我們將在3.4.1節曝光。

2.TCP socket

在版本較新的Docker中,Docker守護進程默認不會監聽TCP socket。用戶可以通過配置文件[2]來設置Docker守護進程開啟對TCP socket的監聽,默認監聽端口一般是2375。

然而,默認情況下對Docker守護進程TCP socket的訪問是無加密且無認證的。因此,任何網絡可達的訪問者都可以通過該TCP socket來對Docker守護進程下發命令。例如,以下命令能夠列出IP為192.168.1.101的主機上的所有活動容器:


docker -H tcp://192.168.1.101:2375 ps

顯而易見,攻擊者也能夠通過這樣的TCP socket對目標主機上的Docker守護進程下發命令,從而實現對目標主機的控制。控制方式與通過UNIX socket的控制類似,只是需要通過-H tcp://參數來設置目標地址和端口。

[1] 事實上還有fd socket,但日常使用很少。

[2] 可參考樣例:https://gist.github.com/styblope/dc55e0ad2a9848f2cc3307d4819d819f。

主站蜘蛛池模板: 安塞县| 马公市| 尖扎县| 平舆县| 二手房| 吉水县| 蓝田县| 大港区| 通许县| 江源县| 平邑县| 静宁县| 承德县| 南阳市| 小金县| 赫章县| 噶尔县| 陕西省| 庆云县| 始兴县| 蓬安县| 荔浦县| 平顶山市| 嵊泗县| 西丰县| 棋牌| 化德县| 嘉义县| 兰州市| 桓仁| 年辖:市辖区| 绍兴市| 卓尼县| 博乐市| 临洮县| 临湘市| 乌海市| 钟祥市| 万全县| 长汀县| 临泽县|