<form id="0lfyz"></form>

      <var id="0lfyz"><mark id="0lfyz"></mark></var>

          您的需求已經提交,我們將在48小時內聯系您
          全國服務熱線:400-1000-221
          確定
          免費享受企業級云安全服務
          獲取手機驗證碼
          {{message}}
          免費試用

          容器技術風險分析和容器安全如何防護

          作者:安全狗
          發布時間:2022-12-22

            隨著容器技術的盛行,越來越多的工程師們愿意使用Docker容器技術作為微服務的運行環境。但Docker新技術的出現必然會帶來新的安全挑戰,本文將從Docker原理出發,分析容器技術可能面臨的風險,提出容器技術的安全防護措施及如何構建容器全生命周期的安全防護。

            如果您對容器安全防護有任何需求可以聯系在線商務咨詢為您解答。

            1、Docker原理

            1.1

            Docker組件

            Docker是一個C/S架構程序,當Docker服務啟動后,系統上有dockerd、docker-containerd等進程,下面以docker1.11版本介紹4個主要組件和3個關鍵要素。

            主要組件:

            (1)dockerd守護進程,負責與容器客戶端交互,并管理Docker鏡像、容器。

            (2)docker-containerd容器管理進程,是為了兼容OCI標準,具有容器運行時及其管理功能。

            (3)containerd-shim是容器的運行時載體,介于containerd與runC之間,負責管理單個運行的容器。

            (4)docker-runc是containerd-shim進程的子進程,負責啟動容器,即根據配置找到容器的rootfs并創建子進程bash,之后進程bash將由runC的父進程containerd-shim接管。

            主要要素:

            (1)鏡像:一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的配置參數。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。

            (2)容器:鏡像創建的運行實例,Docker利用容器來運行應用。每個容器都是相互隔離的、保證安全的平臺。我們可以把容器看做是一個輕量級的Linux運行環境。

            (3)鏡像倉庫:集中存放鏡像文件的地方。用戶創建完鏡像后,可以將其上傳到公共倉庫或者私有倉庫,使用鏡像時,只要從倉庫上下載即可。

            1.2

            Docker底層技術

            Docker可以實現對資源的限制及進程間的隔離,并讓鏡像可以無需多余配置在其它環境中運行,主要得益于Docker三大核心底層技術:Namespaces、Cgroups和Union File System。

            (1)Namespaces(命名空間)實現了容器間資源的隔離,讓Linux下的PID、IPC、網絡等全局資源,限制在某個特定的Namespace中,使各個Namespace下的資源互不干擾,使得每個Namespace看上去像一個獨立的操作系統一樣。

            (2)Cgroups(資源控制組)實現進程對CPU、內存、磁盤、網絡等資源訪問的控制,讓不同容器在同一宿主機上可以互不干擾,平等使用物理資源。

            (3)AUFS(聯合文件系統)實現不同文件系統結構的鏡像層進行疊加掛載,讓鏡像文件可以跨平臺運行。

          圖片

          圖1 各組件間的工作流程

            圖1為各組件間的工作流程:

            (1)客戶端向dockerd發送請求構建鏡像文件,docker在本地生成本地鏡像文件;

            (2)客戶端dockerd發送請求運行容器,dockerd將請求給containerd,containerd首先做一些初始化工作,然后啟動containerd-shim進程配置并反饋相關參數,并啟動runC進程,runC進程找到本地鏡像文件信息,啟動鏡像,并將生成的容器進程交給containerd-shim管理;

            (3)鏡像文件運行沒問題,客戶端發送請求上傳鏡像,docker將本地鏡像文件上傳到鏡像倉庫。

            2、容器技術面臨的風險

            Docker工作流程圖較為全面地展現了Docker用戶在使用容器的過程中涉及的組件及操作,主要包含Docker客戶端、Docker服務和鏡像倉庫三部分,以下從七個方面分析Dokcer容器技術可能面臨的風險。

            2.1

            Docker鏡像存在的風險

            我們從鏡像的內容、流轉過程分析Docker鏡像可能存在的風險。

            (1)不安全的三方組件

            隨著開源軟件和開源組件的流行,許多容器開發者直接將這些容器鏡像和Dockerfile作為基礎鏡像,打包進最終業務鏡像并上線運行。如果這些鏡像含有不安全的三方組件,攻擊者可能會利用三方組件漏洞入侵容器,進而給業務帶來風險。

            (2)惡意鏡像的傳播

            除了風險可控的開源鏡像外,那些公共鏡像倉庫(如Docker Hub、Harbor、阿里云鏡像倉庫)中可能存在一些惡意鏡像。如果把這些鏡像作為基礎鏡像,其風險不言自明。

            (3)敏感信息的泄露

            容器開發者在開發、調試過程中,為了方便將一些敏感信息(如密鑰、密碼、證書、IP、端口)直接寫在源碼或配置文件中。在構建鏡像時,這些敏感信息被打包進鏡像并上傳到公共鏡像倉庫,將會導致信息泄露風險。

            2.2

            Docker活動容器存在的風險

            當鏡像以容器的形式運行起來后,即容器,針對容器,我們從容器自身業務和容器資源利用情況,分析活動容器可能存在的風險。

            (1)不安全的容器應用

            與傳統應用類似,運行在容器環境下的業務本身也可能存在安全漏洞(如SQL注入、命令注入、文件上傳、反序列化、緩沖區溢出等)。當容器對外提供服務時,攻擊者就可能會利用這些漏洞入侵容器。

            (2)不受限制的資源共享

            在Docker默認情況下,容器可以不受限制地使用宿主機的計算、存儲等資源。如果某個容器使用過多資源,就會對宿主機上的其它容器造成影響,也可能會出現拒絕服務攻擊。

            (3)不安全的配置與掛載

            容器配置和目錄掛載對活動容器至關重要,如果容器配置不當或目錄掛載不當,可能會導致容器的隔離機制被打破,進而影響宿主機的安全。

            2.3

            Docker網絡存在的風險

            Docker容器啟動時,會通過Networkdriver模塊完成容器網絡環境的配置,如網橋、IP、端口及與宿主機的NAT端口映射、容器防火墻策略等。容器間通過網橋(bridge)交互信息時,可能會被中間人攻擊利用,如ARP欺騙、DNS劫持,同時容器與宿主機的NAT端口映射不當,可進一步對宿主機發起攻擊。

            2.4

            Dokcer守護進程接口存在的風險

            Docker守護進程提供Unix socket和TCP socket兩種接口,用于接受請求和返回響應。

            默認情況下,Docker守護進程只監聽Unix socket,且Docker守護進程默認以宿主機的root權限運行,導致攻擊者可以借助Docker守護進程的root權限在宿主機上進行操作。比如:1.為了操作方便,減少用戶驗證,將普通用戶加入docker用戶組,一旦攻擊者獲取普通用戶權限,就可以借助Unix socket接口在宿主機上提升為root權限。2.由于用戶掛載不當,將Unix socket掛載到容器內部,當攻擊者入侵了容器,就可以通過這個接口獲取宿主機的root權限。

            TCP socket默認下不開啟,如果工程師通過配置文件開啟了TCP socket接口,且未配置加密和認證項,那么任何訪問者都可借助此接口對Docker守護進程發送命令。

            2.5

            Docker自身存在的風險

            “軟件在重新定義我們的世界。但是,只要是人寫的軟件,都會有漏洞”,Docker也不例外,CVE官方記錄的Docker歷史版本共有超過20項漏洞,可見Docker自身存在漏洞也給Dokcer容器技術的使用者帶來一定的風險。

            2.6

            Docker宿主機內核存在的風險

            通常,容器與宿主機共享內核,如果宿主機內核存在安全漏洞,那么此漏洞在容器內也可利用。借此,攻擊者可通過內核漏洞,實現權限提升,并從容器中逃逸,獲取宿主機的控制權。

            3、容器技術的安全防護措施

            為確保容器安全,不僅需要傳統的安全加固,還需要針對容器技術本身的安全加固,如針對鏡像、守護進程、活動容器、隔離技術等,及容器全生命周期的安全防護。

            3.1

            容器鏡像的安全防護

            容器鏡像作為容器運行的基礎,其安全性在整個容器生命周期中占據重要位置。以下從四個方面提出容器鏡像安全防護的建議:

            (1)容器鏡像構建安全

            一是開啟Docker內容信任機制(即export DOCKER_CONTENT_TRUST=1);

            二是使用Dockerfile方式,透明化構建鏡像,排除多余依賴包或軟件包;

            三是使用COPY代替ADD指令引入外部文件;

            四是使用Kubernetes和Docker Swarm的加密功能,管理Dockerfile文件,避免敏感信息泄露;

            五是禁用setuid 和 setgid,即在Dockerfile文件后增加“RUN find / -perm /6000 -type f -exec chmod a-s {} \; || true”指令等。

            (2)容器鏡像倉庫安全

            在使用公有鏡像倉庫時:

            一是確保公有鏡像倉庫為官方發布的最新版本鏡像倉庫,并保持定期更新;

            二是下載的鏡像不僅要進行應用層面的安全掃描,而且也要進行操作系統層面的掃描,同時優先使用自己Dockerfile構建。

            使用私有鏡像倉庫時:

            一是為私有倉庫的配置安全證書;

            二是配置用戶的訪問權限;三是啟用雙向HTTPS或密碼驗證機制。

            (3)容器鏡像安全檢測

            一是針對官方發布的鏡像,可使用Docker Security Scanning、Clair和Anchore等工具進行安全掃描,主要檢測是否存在已知CVE漏洞;

            二是針對非官方鏡像,使用商用工具或人工排查可疑端口、環境變量、操作命令或冗余文件等信息。

            (4)容器鏡像傳輸安全,鏡像在上傳和下載時須保證完整性和秘密性

            一是使用數字簽名,保證上傳的鏡像在使用時未被篡改;

            二是使用HTTPS方式鏈接鏡像倉庫,避免使用--insecure-registry選項;

            3.2

            活動容器的安全防護

            活動容器的安全主要從運行前安全配置和運行中安全操作方面提出防護建議:

            (1)運行前安全配置

            一是避免使用--net=host參數運行容器,該參數可以打破容器與宿主機間的網絡隔離;

            二是避免使用--pid=host參數運行容器,該參數可以打破容器與宿主機間的進程隔離;

            三是避免使用--ipc=host參數運行容器,該參數可以打破容器與宿主機間的內存隔離;

            四是盡量使用SELinux相關安全策略啟動容器,如添加docker daemon --selinux-enabled項。

            五是避免使用--volume=/hostPath:/containerPath:shared參數運行容器,該參數可以打破容器與宿主機間的文件系統隔離。

            六是限制容器的內核能力(kernel capabilities),如非必要去除容器NET_RAW權限。

            (2)運行中安全操作

            一是檢查運行中的容器是否以root權限運行,可使用如下命令查看docker ps --quiet | xargs --max-args=1 -I{} docker exec {} cat /proc/1/status;

            二是檢查運行中的容器否是安裝了所需的軟件,可以使用docker execrpm -qa命令;

            三是避免使用sshd服務進入容器,應通過docker exec或docker attach指令進入運行中的容器;

            四是避免使用--privileged參數進入容器,此參數將使容器內權限變得與宿主機一樣;

            五是實現對容器運行情況的可觀測,如收集容器運行日志,分析日志數據形成指標,衡量容器是否被入侵,追蹤數據處理過程。

            3.3

            容器網絡的安全防護

            在輕量級虛擬化的容器網絡中,容器網絡實現了同一宿主機內容器互聯、跨宿主機容器互聯、容器集群網絡等功能,使得容器網絡的安全防護更加復雜,以下針對容器網絡提出的一些防護措施:

            一是避免使用默認網橋docker0運行容器,采用自定義網橋,更好保障相同網絡域(network)內的容器相互訪問;

            二是避免將容器端口映射到宿主機的特權端口上(特權端口號小于1024);

            三是僅開啟需要的端口,盡量使用-p或--publish參數明確要啟用的端口號;

            四是只有指定端口的流量可以進入容器,如docker run --detach --publish 10.2.3.4:49153:80 nginx 容器端口80綁定49153且僅接收101.22.13.25主機發送的外部流量信息;

            五是配置容器的防火墻策略(即iptables內容),同時實現對容器東西及南北向流量的監控,如Cilium網絡安全實現方案。

            3.4

            守護進程的安全防護

            容器守護進程在整個容器生命周期內起到了承上啟下中樞作用,它接收并響應外部指令,創建其它進程,維護容器安全有序地運行。針對容器守護進程,提出以下防護措施:

            一是避免以root用戶運行容器,當容器被入侵時,root用戶更容易導致容器逃逸;

            二是確保守護進程的配置文件被正確設置,如docker.service、docker.socket、/etc/docker文件,設置用戶為root、權限為644,證書文件用戶為root、權限為444等。

            三是避免啟用對TCP socket監聽模式,守護進程對此模式的訪問是無加密且無認證的。

            3.5

            宿主機的安全防護

            容器是構建于宿主機之上的輕量級虛擬化技術,其實現離不開宿主機提供的Namespace、Cgroups、Capability、Seccomp等技術。以下從兩個方面三個方面提出宿主機的防護措施。

            一是評估新版系統內核對容器無影響的情況下,及時升級內核。

            二是為容器與宿主機間提供額外的隔離層,即安全容器,避免容器直接訪問宿主機,代表性的實現技術有gVisor和Kata Containers。

            三是對宿主機進程進行監視,包括但不限于進程權限升級監視、可疑進程監視;

            3.6

            容器全生命周期的安全防護

            容器技術的出現讓開發、測試、運維一體化(DevOps)開發模式得以快速發展,如何結合傳統5A(身份認證、授權、訪問控制、審計、資產保護)安全防護要求將容器的安全防護貫徹整個證明周期,以下結合DevSecOps理念提出容器全生命周期的安全防護。

            開發過程:此過程中,除針對業務本身的安全需求、安全設計、安全開發的常規安全管控措施外,針對容器的構建安全,排查Dockerfile文件是否包含敏感信息(如密碼密鑰、IP、令牌等),分析鏡像的軟件組成是否包含惡意文件、病毒、風險組件及所引用依賴庫的安全檢測,避免鏡像帶病入庫。

            交付過程:此過程中,除傳統的安全配置管理、安全構建管理、安全測試管理及安全部署與發布管理,針對容器需考慮到,鏡像入庫前是否安全,鏡像倉庫是否安全,鏡像來源是否可信,容器環境是否安全(如主機是否安全、Docker程序配置是否安全)。

            運營過程:此過程中,除安全監控、實施安全、應急響應、運營反饋等安全運營的閉環管理,針對容器運行安全,定期掃描容器運行環境安全基線(可參考CIS_Docker_Benchmark,比較有代表的工具Docker-bench-security),檢測容器內及所依賴環境的進程、文件系統、磁盤、CPU等破壞容器隔離性和權限提升異常狀態。

            

          圖片

           

          圖2 容器全生命周期安全防護

            4、展望

            隨著數字化轉型進程的加快,容器技術進一步推動了業務的快速迭代,相應的容器安全也將成為熱門領域之一。為迎接新型容器技術的安全挑戰,我們不僅要培養懂容器、懂安全的復合型人員,也要不斷探索針對容器新型攻擊的防御,來保障容器云的安全運營和容器云安全體系的建設。

          標簽: 容器安全
          福利视频日韩精品