色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Docker容器構建環境及安全措施分析

馬哥Linux運維 ? 來源:未知 ? 作者:工程師郭婷 ? 2018-07-31 16:03 ? 次閱讀

DevOps概念的流行跟近些年微服務架構的興起有很大關系,DevOps是Dev(Development)和Ops(Operations)的結合,Dev負責開發,Ops負責部署上線,Docker出現之前,公司需要搭建一個數據庫環境,有了Docker之后,只需在一些開源的基礎鏡像上構建出公司自己的鏡像即可。

因此目前大多數DevOps設置都在CI管道中的某處設置了Docker,這就意味著你所看到的任何構建環境都將使用Docker等容器解決方案。由于這些構建環境需要接受不可信的用戶提供的代碼并進行執行,因此探討如何將這些代碼安全地裝入容器就顯得非常有意義。

在這篇文章中,我將探討在構建環境中非常小的錯誤配置是如何產生嚴重的安全風險的。

需要注意的是,我并未在本文描述Heroku,Docker,AWS CodeBuild或容器中的任何固有漏洞,而是討論了在查看基于Docker容器的多租戶構建環境時發現的錯誤配置漏洞。在常規運行下,雖然Docker容器技術提供了非常穩定的安全默認設置,但是在特殊情況時,有時候小的錯誤配置就會導致嚴重安全風險。

特殊的構建環境

可能的特殊構建環境可以具有以下架構:

1.具有完全托管的生成服務,可編譯源代碼、運行測試以及生成可供部署的軟件包——AWS CodeBuild;

2.Docker構建服務中的Docker容器;

Docker容器可以通過Dind(Docker-in-Docker,是讓你可以在Docker容器里面運行Docker的一種方式)創建,因此,從理論上來說,你最終得到兩個攻擊者需要逃脫的容器。使用CodeBuild可進一步最小化攻擊面,因為你擁有AWS提供的一次性容器,而且租戶不會與對方的構建過程互動。

攻擊者是如何控制構建過程的?

在大多數構建或CI管道中要做的第一件事就是創建一個包含你想要構建和部署的代碼的Git倉庫。然后這些代碼將被打包并轉移到構建環境,最后應用到docker構建過程。

通過查看構建服務,你通常可以通過兩種方式配置容器,即通過Dockerfile或config.yml,這兩種方法都與源代碼有關。

其中有一個CI配置文件,我稱之為config-ci.yml,如下圖所示。

Docker容器構建環境及安全措施分析

在其它的構建過程開始之前,該文件將在構建過程中被轉換為Dockerfile。如果你有明確指定要使用的Dockerfile環境,可以將config-ci.yml更改為以下內容。

Docker容器構建環境及安全措施分析

Dockerfile_Web和Dockerfile_Worker是源代碼存儲庫中Dockerfiles的相對路徑和名稱,既然現在我已經提供了完整的構建信息,就可以開始構建了。構建通常是通過原始倉庫上的代碼上傳來啟動的。啟動時,你會看到如下所示的輸出內容。

Docker容器構建環境及安全措施分析

正如你所看到的,輸出的內容有docker build -f Dockerfile。這些內容即對調試過程有用,又對于發現可能出現的攻擊有用。

對預構建過程進行攻擊

在進入docker構建之前,我首先想到的是嘗試并中斷構建過程,或者,我可以嘗試將來自CodeBuild環境的文件鏈接到我的Docker構建的上下文中。

由于我已經控制了config-ci.yml文件的內容,更具體地說,我控制的是“要使用的Dockerfile的相對路徑”,所以我可以嘗試用一種老式攻擊方法——目錄遍歷攻擊。

第一個嘗試就是試著改變構建的目錄:

Docker容器構建環境及安全措施分析

一旦構建過程開始,我就會立即得到錯誤信息。

有趣的是,該錯誤是我造成的,并導致了路徑泄漏,如果我嘗試“讀取”文件會發生什么?

Docker容器構建環境及安全措施分析

可以看出,我解析了Docker守護進程的錯誤。不幸的是,這只針對我系統上的第一行文件。盡管如此,這也是一個有趣的開始。

Docker容器構建環境及安全措施分析

其實,我這么做的另一個想法是想嘗試使用符號鏈接將文件包含到我的構建中。不過,Docker阻止了我這么做,因為它不會將構建目錄之外的文件包含到構建上下文中。

攻擊構建過程,以發現漏洞

讓我們先回到實際的構建過程,看看可以對什么進行攻擊?由于構建過程發生在dind Docker容器中,該容器在一次性CodeBuild實例中運行。為了進一步尋找攻擊,docker構建過程會在一次性Docker容器中運行所有命令。Docker的容器是把應用程序和環境打包在一起的,所以是一次構建,多處發布。舉個例子,以前你開發完程序后,測試人員和運維人員都需要去部署,通過docker只需要一個run命令即可。因此docker最大的好處就是標準化了應用交互,同時支持多個不同平臺和多個不同的云服務商,只要機器能裝docker,就能無差別的運行程序。

所以Docker構建的每一步實際上都是一個新的Docker容器,這從構建過程的輸出中就可以看出。

Docker容器構建環境及安全措施分析

在上述情況下,在新的Docker容器e7e10023b1fc中執行上面輸出代碼段中的Step 2/9。因此,即使用戶決定在Dockerfile中插入一些惡意代碼,它們也應該在一次性隔離容器中運行,而不會造成任何損害,如下所示。

Docker容器構建環境及安全措施分析

在發布Docker命令時,這些命令實際上被傳遞給負責創建/運行/管理Docker鏡像的dockerd守護進程。為了繼續實現dind,dind需要運行自己的Docker守護進程。然而,由于實現dind的方式是使用主機系統的docker實例(dockerd instance),以允許主機和后臺共享Docker鏡像,并從Docker的所有緩存中受益。

如果Dind使用下面的包裝腳本啟動會發生什么結果:

Docker容器構建環境及安全措施分析

/usr/local/bin/dind是一個使Docker在容器中運行的包裝腳本,該包裝腳本確保來自主機的Docker套接字在容器內部可用,因此,此特定配置會引入安全漏洞。

通常Docker構建過程將無法與Docker守護進程交互,但是,在這種情況下,卻可以實現交互。敏銳的觀察者可能會注意到,dockerd守護進程的TCP端口也是通過--host=tcp://0.0.0.0:2375進行映射的。通過這種錯誤配置設置的Docker守護進程會監控容器上的所有接口。因此,這就成了Docker網絡功能中的一個漏洞。除非另有說明,否則所有容器都將會被放入相同的默認Docker網絡中。這意味著每個容器都能夠與其他容器進行通信,而不會受到阻礙。

現在,我的臨時構建容器(執行用戶代碼的那個容器)已經能夠向托管它的dind容器發出網絡請求。由于dind容器只是重復使用了主機系統的Docker守護進程,所以我實際上是直接向主機系統AWS CodeBuild發出命令。

實施Dockerfiles攻擊

為了測試Dockerfiles攻擊,我可以將下面的Dockerfile提供給構建系統,這樣我就能夠交互訪問正在構建的容器。需要說明的是,我這么做只是為了加速尋找漏洞的過程,而不是為了減少等待構建過程的時間。

Docker容器構建環境及安全措施分析

可以看出,反向shell可以通過很多不同的方式完成。

這個Dockerfile會安裝一些依賴項,即docker和netcat。然后它們會將我的源代碼目錄中的文件復制到構建容器中。這將在后來的步驟中用到,除此之外,這么做還可以更容易地將我的完整漏洞快速傳輸到系統。由于mknod指令會創建一個文件系統節點,以允許通過文件重定向stdin和stdout。使用netcat可以打開一個反向shell,除此之外,我還需要在我使用公共IP地址控制的系統上為此反向shell設置監控器。

Docker容器構建環境及安全措施分析

這樣,當構建發生時,我將收到一個反向連接。

Docker容器構建環境及安全措施分析

現在通過遠程交互式訪問,我就可以檢查是否能對Docker守護進程進行訪問。

Docker容器構建環境及安全措施分析

我會使用-H 172.18.0.1來指定遠程主機,由于我發現Docker使用的網絡范圍是172.18.0.0/16,因此使用了此地址。為了找到這個遠程主機,我的交互式shell被用來充作ip addr和ip route,以獲得分配給我的構建容器的網絡。請注意,默認情況下,所有Docker容器都將被放入同一個網絡,默認網關將是運行Docker守護進程的實例。

Docker容器構建環境及安全措施分析

這樣漏洞就會被成功發現,此時我可以從正在構建的容器中訪問Docker,以便在下一步啟動一個具有額外特權的新容器。

進行棧處理

此時,我已有一個shell,不過它還是位于一次性的構建容器中,作用不是很大。另外,我也可以訪問Docker守護進程。于是我就想,把這兩者結合起來會怎么樣?為此,我引入了第二個Dockerfile,它會在構建和運行時創建一個反向shell。以下就是我啟動第二個監控器來捕獲的新的shell。

Docker容器構建環境及安全措施分析

這將作為Dockerfile2保存在源代碼目錄中,現在,當源代碼文件被復制到構建容器中時,我可以直接訪問它了。

當我重新運行構建過程時,我將在端口4445上獲得我的第一個反向shell,這樣我就可以留在構建容器中。現在我可以構建Dockerfile2,它被復制到COPY * /files/中的構建容器中。

Docker容器構建環境及安全措施分析

現在我可以使用主機Docker守護進程并構建一個新的可用Docker映像,我只需要運行它即可。不過這里有個小的技巧,就是我需要通將根目錄映射到新的Docker容器,這可以通過-v/:/vhost完成。

以下是我得到的第一個反向shell:

Docker容器構建環境及安全措施分析

現在,一個新的反向shell就會連接到攻擊系統上的4446端口。這樣我就將處于一個新的容器中,并直接訪問底層CodeBuild主機的文件系統和網絡。這首先是因為--net=host將通過主機網絡映射,而不是將容器保存在一個獨立的隔離網絡中。其次,因為Docker守護進程正在主機系統上運行,所以當使用-v /:/vhost的文件映射完成時,主機系統的文件系統將被映射。

Docker容器構建環境及安全措施分析

這樣在新的反向shell中,我現在就可以探索底層的主機文件系統了。通過檢查以下兩個之間的區別,我就可以證明我在與此文件系統交互時不在Docker中。

在/vhost中我還發現有一個新的目錄,它可以清楚地表明我在CodeBuild實例文件系統中,而不是在任何Docker容器中。

Docker容器構建環境及安全措施分析

這樣在codebuild里,就會出現一個神奇的結果。這是AWS Codebuild用來控制構建環境的內容,快速瀏覽一下可以看到一些有趣的數據。

Docker容器構建環境及安全措施分析

此時,我通常會嘗試提取AWS憑證和數據透視表,為此,我需要使用AWS_CONTAINER_CREDENTIALS_RELATIVE_URI。

Docker容器構建環境及安全措施分析

根據與該IAM相關的權限,現在應該有機會繞過AWS環境。

上述步驟可自動化實現,并且只需要一個反向shell即可完成,但是,請記住,你需要保持正常的構建環境。請注意,大多數構建環境會在30-60分鐘后自動刪除。

緩解措施

在這種情況下,修復非常簡單,永遠不要將Docker守護進程綁定到所有接口上。從包裝腳本中刪除--host=tcp://0.0.0.0:2375 行也可以來修復這個漏洞。另外,不需要綁定到TCP端口,因為unix套接字已經通過了--host=unix:///var/run/docker.sock映射。

總結

雖然容器策略提供了一個很好的機制,來讓你創建運行不受信任代碼的安全環境,而不需要額外的虛擬化過程。然而,這些容器的安全性與它們的配置一樣。默認情況下,它們非常安全,但只需一個小的配置錯誤就可以讓整個安全環境崩塌。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微服務
    +關注

    關注

    0

    文章

    137

    瀏覽量

    7360
  • Docker
    +關注

    關注

    0

    文章

    472

    瀏覽量

    11864

原文標題:Docker容器構建過程的安全性分析

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    在華為云 FlexusX 實例上實現 Docker 容器的實時監控與可視化分析

    前言 華為云 Flexus X,以頂尖算力與智能調度,引領 Docker 容器管理新風尚。828 企業上云節之際,Flexus X 攜手前沿技術,實現容器運行的實時監控與數據可視化,讓管理變得直觀
    的頭像 發表于 01-02 13:42 ?34次閱讀
    在華為云 FlexusX 實例上實現 <b class='flag-5'>Docker</b> <b class='flag-5'>容器</b>的實時監控與可視化<b class='flag-5'>分析</b>

    k8s和docker區別對比,哪個更強?

    Docker和Kubernetes(K8s)是容器化技術的兩大流行工具。Docker關注構建和打包容器,適用于本地開發和單主機管理;而K8s
    的頭像 發表于 12-11 13:55 ?112次閱讀

    Docker運行環境安裝

    作者:京東科技 林中 Docker是一個開放的平臺,用于開發、發布和運行應用程序。Docker分離了應用程序和運行應用的基礎設施,從而實現了軟件的快速交付。利用docker提供的一系列功能,包括
    的頭像 發表于 10-29 11:28 ?227次閱讀

    高壓電容器放電過程中的問題及安全措施

    引言 高壓電容器作為一種重要的電力設備,在電力系統中發揮著重要的作用。它們可以提高系統的功率因數,減少線路損耗,提高電能質量等。然而,高壓電容器在運行過程中也存在一定的安全風險,如電容器
    的頭像 發表于 08-16 09:40 ?1874次閱讀

    手動構建Docker鏡像的方法

    不推薦使用docker commit命令,而應該使用更靈活、更強大的dockerfile來構建docker鏡像。
    的頭像 發表于 08-05 15:30 ?535次閱讀
    手動<b class='flag-5'>構建</b><b class='flag-5'>Docker</b>鏡像的方法

    ARM平臺實現Docker容器技術

    自動部署)。而且使用dockerfile使鏡像構建透明化,不僅僅開發團隊可理解應用運行環境,也方便運維團隊理解應用運行所需條件,幫助更好的生產環境中部署該鏡像。 更輕松的遷移:由于Docker
    發表于 07-25 14:36

    ARM平臺實現Docker容器技術

    )。而且使用dockerfile使鏡像構建透明化,不僅僅開發團隊可理解應用運行環境,也方便運維團隊理解應用運行所需條件,幫助更好的生產環境中部署該鏡像。更輕松的遷移:由于Docker
    發表于 07-17 11:05

    夏季防雷安全措施與方案

    夏季是雷電頻發的季節,雷電帶來的巨大能量不僅對人們的生命財產安全構成威脅,也對各行業的正常運行造成不良影響。因此,各行各業都需要采取有效的防雷措施來保障安全。本文將就夏季防雷的方法、措施
    的頭像 發表于 04-28 11:01 ?393次閱讀
    夏季防雷<b class='flag-5'>安全措施</b>與方案

    基于全志T113-i的Docker容器實現方案

    通過使用Docker,開發人員可以更容易地構建、交付和運行應用程序,同時確保應用程序的一致性及可移植性。它也使得應用程序的部署更加靈活、高效,因為它可以快速地啟動、停止和擴展容器,而不會影響其他
    發表于 04-19 09:45 ?921次閱讀
    基于全志T113-i的<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>實現方案

    Docker容器技術的安裝和使用

    通過Docker,開發人員可以更容易地構建、交付和運行應用程序,同時確保應用程序的一致性和可移植性。它也使得應用程序的部署更加靈活和高效,因為它可以快速地啟動、停止和擴展容器,而不會影響其他
    發表于 04-16 11:24 ?330次閱讀
    <b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技術的安裝和使用

    ARM平臺實現Docker容器技術

    什么是Docker? (1)Docker的架構 Docker是一個開源的應用容器引擎,讓開發者可打包他們的應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的Linux或Windo
    的頭像 發表于 03-07 13:48 ?818次閱讀
    ARM平臺實現<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技術

    DC電源模塊的保護與安全措施

    BOSHIDA ? DC電源模塊的保護與安全措施 BOSHIDA ? DC電源模塊的保護與安全措施包括以下幾個方面: ?DC電源模塊的保護與安全措施 1. 過流保護:在電源輸出端加入過流保護電路,當
    的頭像 發表于 02-19 13:27 ?648次閱讀
    DC電源模塊的保護與<b class='flag-5'>安全措施</b>

    TLT507-Docker容器部署方法說明

    TLT507-Docker容器部署方法說明
    的頭像 發表于 01-26 09:49 ?475次閱讀
    TLT507-<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法說明

    RK3568-Docker容器部署方法說明

    RK3568-Docker容器部署方法說明
    的頭像 發表于 01-22 10:12 ?1422次閱讀
    RK3568-<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法說明

    將試驗設備從實驗室移動到室外需要采取哪些安全措施

    將設備從實驗室移動到室外時,需要采取一系列安全措施以確保設備的安全和完整性。以下是一些建議的安全措施:   制定詳細的搬運計劃:在移動設備之前,應制定詳細的搬運計劃,包括搬運時間、路線、人員分工
    的頭像 發表于 01-11 15:44 ?465次閱讀
    將試驗設備從實驗室移動到室外需要采取哪些<b class='flag-5'>安全措施</b>
    主站蜘蛛池模板: 欧洲vs美洲完整视频| 一二三四视频免费社区5| av av在线| 秋霞av伦理片在线观看| 国产成人精品男人的天堂网站 | 亚洲精品第五页中文字幕| 九九热这里有精品| 99无码熟妇丰满人妻啪啪| 色偷偷伊人| 九九热精品在线观看| abp-146| 小女生RAPPER入口| 久久亚洲伊人中字综合精品| xxxxxx视频| 亚洲精品人成电影网| 男男高h浪荡受h| 国产精一品亚洲二区在线播放| 一级做a爰片久久毛片一| 琪琪午夜福利免费院| 黄色毛片a| 日本无翼恶漫画大全优优漫画| 国产精品免费一区二区区| 中文无码在线观| 色AV色婷婷66人妻久久久| 久久精品国产视频澳门| 高h超辣bl文| 浴室里强摁做开腿呻吟的漫画男男 | 午夜福利免费体检区| 免费中文字幕视频| 果冻传媒在线播放| 在教室伦流澡到高潮HNP视频| 人妻天天爽夜夜爽三区麻豆A片 | 51成人精品午夜福利AV免费七| 善良的小峓子2在钱免费中文字 | 美女扒开尿口让男生添动态图| 国产国拍亚洲精品av麻豆| 99精品电影一区二区免费看| 亚洲精品AV无码永久无码| 乳女教师欲乱动漫无修版动画 | 一个人免费完整观看日本 | 性色欲情网站IWWW|