- 云原生安全:攻防實踐與體系構建
- 劉文懋 江國龍 浦明 阮博男 葉曉虎
- 655字
- 2021-11-04 18:12:28
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。
- 工業互聯網安全防護與展望
- 工業互聯網安全
- 零信任網絡:在不可信網絡中構建安全系統
- 特種木馬防御與檢測技術研究
- CTF競賽權威指南(Pwn篇)
- 計算機網絡安全基礎(第5版)
- 人工智能安全(精裝版)
- 編譯與反編譯技術實戰
- INSTANT Apple Configurator How-to
- Hands-On Artificial Intelligence for Cybersecurity
- 黑客攻擊與防范實戰從入門到精通
- Android Application Security Essentials
- Real-World SRE
- INSTANT Microsoft Forefront UAG Mobile Configuration Starter
- 深入探索區塊鏈