文章目錄
容器安全問題的根本原因是容器和宿主機共享內(nèi)核。如果容器中的某個應(yīng)用程序使 Linux 內(nèi)核崩潰,則整個系統(tǒng)可能會崩潰。與虛擬機不同,虛擬機不與主機共享內(nèi)核,虛擬機崩潰一般不會導(dǎo)致主機崩潰。 1 容器與虛擬機的區(qū)別1.1 隔離與共享
虛擬機通過添加層,輸出網(wǎng)卡、內(nèi)存、cpu等虛擬硬件,然后在其上構(gòu)建虛擬機。每個虛擬機都有自己的系統(tǒng)內(nèi)核,容器通過隔離的方式將文件系統(tǒng)、進程、設(shè)備、網(wǎng)絡(luò)等資源隔離(命名空間隔離),進而控制權(quán)限、cpu資源等,所以容器不會相互影響。容器不能影響主機。容器與宿主機共享內(nèi)核、文件系統(tǒng)、硬件等資源。
1.2 性能和損失
與虛擬機相比,容器的資源消耗更少。同一主機下,可以創(chuàng)建的容器數(shù)量比虛擬機多。但是,虛擬機的安全性略好于容器。對于主機或者其他虛擬機來說,現(xiàn)在想要突破層層是極其困難的。容器和主機共享內(nèi)核和文件系統(tǒng)等資源,這些資源更有可能影響其他容器和主機。
差異容器虛擬機
啟動速度
很快,幾秒鐘
慢,幾分鐘
跑步表現(xiàn)
接近原生(直接在內(nèi)核中運行)
繼續(xù)運行,大約損失 50%
磁盤使用情況
小,甚至幾十KB(根據(jù)圖像層)
非常大,在 GB 上
并發(fā)
一個主機可以啟動數(shù)百個容器
多達幾十個虛擬機
隔離
進程級別
系統(tǒng)級(更徹底)
操作系統(tǒng)
主要支持Linux
幾乎所有
封裝
只打包項目代碼和依賴,共享宿主機內(nèi)核
完整的操作系統(tǒng),與主機隔離
2 現(xiàn)有安全問題 2.1 自我漏洞
作為一個應(yīng)用程序,它的實現(xiàn)會存在代碼缺陷。 CVE官方記錄歷史版本有20多個漏洞。
黑客常用的攻擊手段主要有代碼執(zhí)行、權(quán)限提升、信息泄露、權(quán)限繞過等。當(dāng)前版本變化很快,用戶最好升級到最新版本
2.2源碼問題
提供了一個hub,可以讓用戶上傳創(chuàng)建好的鏡像供其他用戶下載,快速搭建環(huán)境wordpress 虛擬主機 推薦,但也帶來了一些安全問題,比如以下三種方式:
3 架構(gòu)缺陷和安全機制
其自身的架構(gòu)和機制可能會導(dǎo)致問題。比如這樣的攻擊場景,黑客已經(jīng)控制了宿主機上的一些容器,或者獲得了在公有云上建立容器的方法,然后攻擊宿主機或者其他容器發(fā)起攻擊。
4 安全基線標(biāo)準
以下從內(nèi)核、主機、網(wǎng)絡(luò)、鏡像、容器等六個方面總結(jié)了安全基線標(biāo)準。
4.1 內(nèi)核級
(1)及時更新內(nèi)核。
(2)用戶(容器內(nèi)的root權(quán)限不是容器外的高權(quán)限)。
(3)(資源的配額和指標(biāo)),設(shè)置CPU、內(nèi)存、磁盤、IO等資源限制。
(4)通過啟用//GRSEC(控制文件訪問)適當(dāng)?shù)膹娀到y(tǒng)來增加額外的安全性。
(5)(權(quán)限劃分),比如將指定的CPU劃分給容器。
(6)(限制系統(tǒng)調(diào)用),限制不必要的系統(tǒng)調(diào)用。
(7)禁止與宿主進程命名空間共享容器命名空間,如宿主網(wǎng)絡(luò)模式。
4.2 主機級別
(1)為容器創(chuàng)建單獨的分區(qū),例如在分布式文件系統(tǒng)上。
(2)只運行必要的服務(wù),盡量避免在容器中運行ssh服務(wù)。
(3)禁止將宿主機上的敏感目錄映射到容器中,創(chuàng)建數(shù)據(jù)卷時需要注意-v。
(4)審核守護進程、相關(guān)文件和目錄,防止生成病毒或木馬文件。
(5)設(shè)置適當(dāng)?shù)哪J文件描述符數(shù)。
(文件描述符:簡稱fd,當(dāng)應(yīng)用程序請求內(nèi)核打開/新建文件時wordpress 虛擬主機 推薦,()會返回一個打開/新建文件對應(yīng)的文件描述符(file)。文件描述符本質(zhì)上是是一個非負整數(shù),要讀寫文件,還需要用這個文件描述符來指定要讀寫的文件。文件描述符是重要的系統(tǒng)資源。但實際情況是內(nèi)核會有系統(tǒng)級限制和用戶級限制,讓某個應(yīng)用進程不會消耗所有文件資源,可以使用-n查看)
(6)具有root權(quán)限的用戶應(yīng)具有644或更低的訪問權(quán)限。
(7)定期檢查每臺主機的容器庫存,清理不必要的容器。
4.3 網(wǎng)絡(luò)級別
(1)通過設(shè)置規(guī)則來禁止或允許容器之間的網(wǎng)絡(luò)流量。
(2)允許修改。
(3)禁止綁定到其他IP/Port或Unix。
(4)禁止在容器上映射特權(quán)端口。
(5)容器上只打開需要的端口。
(6)在容器上禁用主機網(wǎng)絡(luò)模式。
(7)如果主機有多個網(wǎng)卡,則將容器的傳入流量綁定到特定的主機網(wǎng)卡。
4.4 級圖像
(1)創(chuàng)建本地鏡像倉庫服務(wù)器。
(2)圖中軟件為最新版本,建議根據(jù)實際情況使用對應(yīng)版本,業(yè)務(wù)穩(wěn)定性優(yōu)先。
(3)使用受信任的圖像文件并通過安全通道下載。
(4)重建鏡像而不是修補容器和鏡像,銷毀異常容器并重建。
(5)合理管理圖片標(biāo)簽,及時移除不再使用的圖片。
(6)使用鏡像掃描。
(7)帶有圖片的簽名。
4.5 容器級別
(1)最小化容器,最小化操作系統(tǒng)鏡像集。
(2)容器作為單個主進程運行。
(3)標(biāo)簽禁止使用特權(quán)容器。
(4)禁止在容器上運行ssh服務(wù),嘗試使用exec進入容器。
(5)以只讀方式掛載容器的根目錄系統(tǒng)wordpress做網(wǎng)站,-v宿主目錄:容器目錄:ro.
(6)明確定義屬于容器的數(shù)據(jù)盤符。
(7)通過設(shè)置on-來限制容器嘗試重啟的次數(shù),如果容器反復(fù)重啟很容易丟失數(shù)據(jù),-=on-:3。
(8)限制容器中可用的進程數(shù),運行-m限制內(nèi)存使用防止fork炸彈。(fork炸彈,快速增長的子進程,耗盡系統(tǒng)進程數(shù))
4.6 其他設(shè)置
(1)定期對主機系統(tǒng)和容器進行安全審計。
(2)以最少的資源和權(quán)限運行容器是容器安全的核心思想。
(3)避免在同一主機上部署大量容器,保持數(shù)量可控。
(4)監(jiān)控容器使用情況、性能和其他指標(biāo),例如。
(5)增加實時威脅檢測和事件報警響應(yīng)功能,如.
(6)使用中央和遠程的日志收集服務(wù),比如ELK。
5 與容器相關(guān)的常見安全配置方法5.1 - 規(guī)則設(shè)置5.1.1 容器最小化
如果容器中僅運行必要的服務(wù),則無法輕松啟動 SSH 等服務(wù)連接到容器。通常使用以下方法進入容器。
docker exec -it 容器id bash
5.1.2 遠程 API 訪問控制
遠程調(diào)用API接口存在未授權(quán)訪問漏洞
,至少應(yīng)該限制外網(wǎng)訪問。建議使用訪問方式。
監(jiān)控內(nèi)網(wǎng)ip,啟動方法如下。
1.在服務(wù)配置文件中指定監(jiān)控內(nèi)網(wǎng)ip
docker -d -H uninx:///var/run/docker.sock -H tcp://192.168.16.16:2375
或者
vim /usr/lib/systemd/system/docker.service
------13行-------修改
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://192.168.16.16:2375
2.重啟
systemctl daemon-reload
systemctl restart docker
netstat -natp | grep 2375
systemctl start firewalld
docker -H tcp://192.168.16.16 images
3.對主機做IP訪問控制,是客戶端地址
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.16.18" port protocol="tcp" port="2375" accept"
firewall-cmd --reload
或
iptables -t filter -A INPUT -s 192.168.16.18 -p tcp --dport 2375 -j ACCEPT
4.客戶端操作中的遠程授權(quán)訪問
docker -H tcp://192.168.16.16 images
docker -H tcp://192.168.16.16 images pull soscscs/myapp:v1
5.2 限制流量
使用防火墻過濾器限制容器的源IP地址范圍與外界通信。
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.16.0/24" reject"
iptables -t filter -A INPUT -s 192.168.16.0/24 -j ACCEPT
docker -H tcp://192.168.16.16 images
生產(chǎn)環(huán)境中的大量問題是由容器端口對外釋放引起的漏洞引起的。除了操作系統(tǒng)賬號權(quán)限控制的問題,在進程管理上也存在隱患。
目前常用的版本都支持管理主機,一旦啟動進程用-p:的端口映射,
會直接添加對應(yīng)的Chain和-jwordpress建站,默認的DROP規(guī)則是在INPUT鏈中做的,所以沒有限制,
這會帶來嚴重的安全風(fēng)險。
因此建議:
1.不要在有外網(wǎng)ip的機器上使用該服務(wù)
2.使用k8s等編排系統(tǒng)管理容器
3.在宿主機上,在啟動命令中加個--=false,然后把常用的文件寫入文件,再用--重定向刷新規(guī)則。
5.3 圖像安全
鏡像安全掃描,在鏡像倉庫客戶端使用證書認證查看下載的鏡像。
通過與CVE數(shù)據(jù)庫同步掃描鏡像,一旦發(fā)現(xiàn)漏洞,會通知用戶處理,或者直接阻止鏡像繼續(xù)構(gòu)建。
如果公司使用自己的鏡像源,可以跳過這一步;否則,至少還需要驗證md5等特征值,并確認一致后再基于...進行進一步構(gòu)建。
一般來說,確保只從受信任的倉庫獲取圖片,不推薦使用 ---=[] 參數(shù),推薦使用私有倉庫。
客戶端與客戶端之間的通信安全
為了防止鏈接劫持、會話劫持等造成的中間人攻擊,c/s兩端應(yīng)通過TLS加密進行通信
通過在服務(wù)器上創(chuàng)建TLS密鑰證書并發(fā)送給客戶端,客戶端通過私鑰訪問容器,從而保證了通信的安全性。
使用證書訪問的工作流程:
文章來自互聯(lián)網(wǎng),侵權(quán)請聯(lián)系刪除,文章闡述觀點來自文章出處,并不代表本站觀點。
www.bjcthy.com