docker容器逃逸指的是攻擊者透過劫持容器化業務邏輯或直接控制等方式,已經獲得容器內某種權限下的命令執行能力的過程和結果;因為docker使用的是隔離技術,因此容器內的進程無法看到外面的進程,但外面的進程可以看到裡面,所以如果一個容器可以訪問到外面的資源,甚至是獲得了宿主主機的權限,這就叫做「Docker逃逸」。
本教學操作環境:linux7.3系統、docker19.03版、Dell G3電腦。
什麼是docker容器逃逸
「容器逃逸」指這樣的一種流程與結果:首先,攻擊者透過劫持容器化業務邏輯,或直接控制(CaaS等合法取得容器控制權的場景)等方式,已經獲得了容器內某種權限下的命令執行能力;
攻擊者利用這種命令執行能力,借助一些手段進一步獲得該容器所在直接宿主機(經常見到“物理機運行虛擬機,虛擬機再運行容器”的場景,該場景下的直接宿主機指容器外層的虛擬機)上某種權限下的命令執行能力。
因為Docker所使用的是隔離技術,就導致了容器內的進程無法看到外面的進程,但外面的進程可以看到裡面,所以如果一個容器可以訪問到外面的資源,甚至是取得了宿主主機的權限,這就叫做「Docker逃逸」。
目前產生Docker逃逸的原因總共有三種:
#由核心漏洞引起。
由Docker軟體設計所引起。
由特權模式與設定不當所引起。
接下來依序對這三種逃逸方法做簡單說明。
1、由於內核漏洞引起的逃逸
因為Docker是直接共享的宿主主機內核,所以當宿主主機的內核有安全漏洞時會一併影響Docker的安全,導致可能造成Docker逃脫。具體流程如下:
使用核心漏洞進入核心上下文
# 取得目前行程的task struct
## 回溯task list 取得pid = 1的task struct,複製其相關資料
切換目前namespace
############2、Doker軟體設計所造成的逃脫##########比較典型的範例是Docker的標準化容器執行引擎----runc。 Runc曾在2019年2月被爆出來過一個Docker逃脫漏洞CVE-2019-5736。其漏洞原理是,Docker、Containerd或其他基於runc的容易在運行時存在安全漏洞,攻擊者可以透過特定的容器映像或exec操作取得到宿主機runc執行檔時的檔案句柄並修改掉runc的二進位檔案,從而取得到宿主機的root執行權限,造成Docker逃逸。 #########3、由於特權模式 目錄掛載引起的逃逸#########這一種逃脫方法較其他兩種來說用的更多。特權模式在6.0版本的時候被引入Docker,其核心作用是允許容器內的root擁有外部實體機的root權限,而先前在容器內的root用戶只有外部實體機普通用戶的權限。 ######使用特權模式啟動容器後(docker run --privileged),Docker容器被允許可以存取主機上的所有裝置、可以取得大量裝置檔案的存取權、並可以執行mount指令進行掛載。 ######當控制使用特權模式的容器時,Docker管理員可透過mount指令將外部宿主機磁碟裝置掛載進容器內部,取得對整個宿主機的檔案讀寫權限,此外還可以透過寫入入計劃任務等方式在宿主機執行指令。 ######除了使用特權模式啟動Docker會造成Docker逃脫外,使用功能機制也會造成Docker逃逸。 Linux核心自版本2.2引入了功能機制(Capabilities),打破了UNIX/LINUX作業系統中超級用戶與普通用戶的概念,允許普通用戶執行超級用戶權限方能運行的命令。例如當容器以--cap-add=SYSADMIN啟動,Container程序就被允許執行mount、umount等一系列系統管理指令,若攻擊者此時再將外部設備目錄掛載在容器中就會發生Docker逃逸。 ######推薦學習:《###docker影片教學###》###以上是什麼是docker容器逃逸的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Docker是一種基於Linux容器技術的工具,用於打包、分發和運行應用,提升應用的可移植性和可擴展性。 1)通過dockerbuild和dockerrun命令,可以構建和運行Docker容器。 2)DockerCompose用於定義和運行多容器的Docker應用,簡化微服務管理。 3)使用多階段構建可以優化鏡像大小,提升應用啟動速度。 4)查看容器日誌是調試容器問題的有效方法。

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

查看 Docker 日誌的方法包括:使用 docker logs 命令,例如:docker logs CONTAINER_NAME使用 docker exec 命令運行 /bin/sh 並查看日誌文件,例如:docker exec -it CONTAINER_NAME /bin/sh ; cat /var/log/CONTAINER_NAME.log使用 Docker Compose 的 docker-compose logs 命令,例如:docker-compose -f docker-com

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

退出 Docker 容器的四種方法:容器終端中使用 Ctrl D 快捷鍵容器終端中輸入 exit 命令宿主機終端中使用 docker stop <container_name> 命令宿主機終端中使用 docker kill <container_name> 命令(強制退出)

Docker 中將文件拷貝到外部主機的方法:使用 docker cp 命令:執行 docker cp [選項] <容器路徑> <主機路徑>。使用數據卷:在主機上創建目錄,在創建容器時使用 -v 參數掛載該目錄到容器內,實現文件雙向同步。

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版
好用的JavaScript開發工具