以Docker 容器的安全問題為例
目前創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、和政網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
(1) Docker 自身安全
Docker 作為一款容器引擎,本身也會存在一些安全漏洞,CVE 目前已經(jīng)記錄了多項(xiàng)與 Docker 相關(guān)的安全漏洞,主要有權(quán)限提升、信息泄露等幾類安全問題。
(2) 鏡像安全
由于Docker 容器是基于鏡像創(chuàng)建并啟動,因此鏡像的安全直接影響到容器的安全。具體影響鏡像安全的總結(jié)如下。
鏡像軟件存在安全漏洞:由于容器需要安裝基礎(chǔ)的軟件包,如果軟件包存在漏洞,則可能會被不法分子利用并且侵入容器,影響其他容器或主機(jī)安全。
倉庫漏洞:無論是Docker 官方的鏡像倉庫還是我們私有的鏡像倉庫,都有可能被攻擊,然后篡改鏡像,當(dāng)我們使用鏡像時(shí),就可能成為攻擊者的目標(biāo)對象。
用戶程序漏洞:用戶自己構(gòu)建的軟件包可能存在漏洞或者被植入惡意腳本,這樣會導(dǎo)致運(yùn)行時(shí)提權(quán)影響其他容器或主機(jī)安全。
(3) Linux 內(nèi)核隔離性不夠
盡管目前Namespace 已經(jīng)提供了非常多的資源隔離類型,但是仍有部分關(guān)鍵內(nèi)容沒有被完全隔離,其中包括一些系統(tǒng)的關(guān)鍵性目錄(如 /sys、/proc 等),這些關(guān)鍵性的目錄可能會泄露主機(jī)上一些關(guān)鍵性的信息,讓攻擊者利用這些信息對整個(gè)主機(jī)甚至云計(jì)算中心發(fā)起攻擊。
而且僅僅依靠Namespace 的隔離是遠(yuǎn)遠(yuǎn)不夠的,因?yàn)橐坏﹥?nèi)核的 Namespace 被突破,使用者就有可能直接提權(quán)獲取到主機(jī)的超級權(quán)限,從而影響主機(jī)安全。
(4) 所有容器共享主機(jī)內(nèi)核
由于同一宿主機(jī)上所有容器共享主機(jī)內(nèi)核,所以攻擊者可以利用一些特殊手段導(dǎo)致內(nèi)核崩潰,進(jìn)而導(dǎo)致主機(jī)宕機(jī)影響主機(jī)上其他服務(wù)。
既然容器有這么多安全上的問題,那么我們應(yīng)該如何做才能夠既享受到容器的便利性同時(shí)也可以保障容器安全呢?下面我?guī)銇碇鸩搅私庀氯绾谓鉀Q容器的安全問題。
如何解決容器的安全問題?
(1) Docker 自身安全性改進(jìn)
事實(shí)上,Docker 從 2013 年誕生到現(xiàn)在,在安全性上面已經(jīng)做了非常多的努力。目前 Docker 在默認(rèn)配置和默認(rèn)行為下是足夠安全的。
Docker 自身是基于 Linux 的多種 Namespace 實(shí)現(xiàn)的,其中有一個(gè)很重要的 Namespace 叫作 User Namespace,User Namespace 主要是用來做容器內(nèi)用戶和主機(jī)的用戶隔離的。在過去容器里的 root 用戶就是主機(jī)上的 root 用戶,如果容器受到攻擊,或者容器本身含有惡意程序,在容器內(nèi)就可以直接獲取到主機(jī) root 權(quán)限。Docker 從 1.10 版本開始,使用 User Namespace 做用戶隔離,實(shí)現(xiàn)了容器中的 root 用戶映射到主機(jī)上的非 root 用戶,從而大大減輕了容器被突破的風(fēng)險(xiǎn)。
因此,我們盡可能地使用Docker 最新版本就可以得到更好的安全保障。
(2) 保障鏡像安全
為保障鏡像安全,我們可以在私有鏡像倉庫安裝鏡像安全掃描組件,對上傳的鏡像進(jìn)行檢查,通過與CVE 數(shù)據(jù)庫對比,一旦發(fā)現(xiàn)有漏洞的鏡像及時(shí)通知用戶或阻止非安全鏡像繼續(xù)構(gòu)建和分發(fā)。同時(shí)為了確保我們使用的鏡像足夠安全,在拉取鏡像時(shí),要確保只從受信任的鏡像倉庫拉取,并且與鏡像倉庫通信一定要使用 HTTPS 協(xié)議。
(3) 加強(qiáng)內(nèi)核安全和管理
由于僅僅依賴內(nèi)核的隔離可能會引發(fā)安全問題,因此我們對于內(nèi)核的安全應(yīng)該更加重視。可以從以下幾個(gè)方面進(jìn)行加強(qiáng)。
宿主機(jī)及時(shí)升級內(nèi)核漏洞
宿主機(jī)內(nèi)核應(yīng)該盡量安裝最新補(bǔ)丁,因?yàn)楦碌膬?nèi)核補(bǔ)丁往往有著更好的安全性和穩(wěn)定性。
使用Capabilities 劃分權(quán)限
Capabilities 是 Linux 內(nèi)核的概念,Linux 將系統(tǒng)權(quán)限分為了多個(gè) Capabilities,它們都可以單獨(dú)地開啟或關(guān)閉,Capabilities 實(shí)現(xiàn)了系統(tǒng)更細(xì)粒度的訪問控制。
容器和虛擬機(jī)在權(quán)限控制上還是有一些區(qū)別的,在虛擬機(jī)內(nèi)我們可以賦予用戶所有的權(quán)限,例如設(shè)置cron 定時(shí)任務(wù)、操作內(nèi)核模塊、配置網(wǎng)絡(luò)等權(quán)限。而容器則需要針對每一項(xiàng) Capabilities 更細(xì)粒度的去控制權(quán)限,例如:
cron 定時(shí)任務(wù)可以在容器內(nèi)運(yùn)行,設(shè)置定時(shí)任務(wù)的權(quán)限也僅限于容器內(nèi)部;
由于容器是共享主機(jī)內(nèi)核的,因此在容器內(nèi)部一般不允許直接操作主機(jī)內(nèi)核;
容器的網(wǎng)絡(luò)管理在容器外部,這就意味著一般情況下,我們在容器內(nèi)部是不需要執(zhí)行ifconfig、route等命令的 。
由于容器可以按照需求逐項(xiàng)添加Capabilities 權(quán)限,因此在大多數(shù)情況下,容器并不需要主機(jī)的 root 權(quán)限,Docker 默認(rèn)情況下也是不開啟額外特權(quán)的。
最后,在執(zhí)行docker run命令啟動容器時(shí),如非特殊可控情況,–privileged 參數(shù)不允許設(shè)置為 true,其他特殊權(quán)限可以使用 --cap-add 參數(shù),根據(jù)使用場景適當(dāng)添加相應(yīng)的權(quán)限。
使用安全加固組件
Linux 的 SELinux、AppArmor、GRSecurity 組件都是 Docker 官方推薦的安全加固組件。下面我對這三個(gè)組件做簡單介紹。
SELinux (Secure Enhanced Linux): 是 Linux 的一個(gè)內(nèi)核安全模塊,提供了安全訪問的策略機(jī)制,通過設(shè)置 SELinux 策略可以實(shí)現(xiàn)某些進(jìn)程允許訪問某些文件。
AppArmor: 類似于 SELinux,也是一個(gè) Linux 的內(nèi)核安全模塊,普通的訪問控制僅能控制到用戶的訪問權(quán)限,而 AppArmor 可以控制到用戶程序的訪問權(quán)限。
GRSecurity: 是一個(gè)對內(nèi)核的安全擴(kuò)展,可通過智能訪問控制,提供內(nèi)存破壞防御,文件系統(tǒng)增強(qiáng)等多種防御形式。
這三個(gè)組件可以限制一個(gè)容器對主機(jī)的內(nèi)核或其他資源的訪問控制。目前,容器報(bào)告的一些安全漏洞中,很多都是通過對內(nèi)核進(jìn)行加強(qiáng)訪問和隔離來實(shí)現(xiàn)的。
資源限制
在生產(chǎn)環(huán)境中,建議每個(gè)容器都添加相應(yīng)的資源限制。下面給出一些執(zhí)行docker run命令啟動容器時(shí)可以傳遞的資源限制參數(shù):
1??--cpus ?????????????????????????限制 CPU 配額
2??-m, --memory ???????????????????限制內(nèi)存配額
3??--pids-limit ???????????????????限制容器的 PID 個(gè)數(shù)
例如我想要啟動一個(gè)1 核 2G 的容器,并且限制在容器內(nèi)最多只能創(chuàng)建 1000 個(gè) PID,啟動命令如下:
1 ?$ docker run -it --cpus=1 -m=2048m --pids-limit=1000 busybox sh
推薦在生產(chǎn)環(huán)境中限制CPU、內(nèi)存、PID 等資源,這樣即便應(yīng)用程序有漏洞,也不會導(dǎo)致主機(jī)的資源完全耗盡,最大限度降低安全風(fēng)險(xiǎn)。
(4) 使用安全容器
容器有著輕便快速啟動的優(yōu)點(diǎn),虛擬機(jī)有著安全隔離的優(yōu)點(diǎn),有沒有一種技術(shù)可以兼顧兩者的優(yōu)點(diǎn),做到既輕量又安全呢?
答案是有,那就是安全容器。安全容器是相較于普通容器的,安全容器與普通容器的主要區(qū)別在于,安全容器中的每個(gè)容器都運(yùn)行在一個(gè)單獨(dú)的微型虛擬機(jī)中,擁有獨(dú)立的操作系統(tǒng)和內(nèi)核,并且有虛擬化層的安全隔離。
安全容器目前推薦的技術(shù)方案是Kata Containers,Kata Container 并不包含一個(gè)完整的操作系統(tǒng),只有一個(gè)精簡版的 Guest Kernel 運(yùn)行著容器本身的應(yīng)用,并且通過減少不必要的內(nèi)存,盡量共享可以共享的內(nèi)存來進(jìn)一步減少內(nèi)存的開銷。另外,Kata Container 實(shí)現(xiàn)了 OCI 規(guī)范,可以直接使用 Docker 的鏡像啟動 Kata 容器,具有開銷更小、秒級啟動、安全隔離等許多優(yōu)點(diǎn)。
1、系統(tǒng)漏洞的修復(fù)
安裝好的系統(tǒng)都會有系統(tǒng)漏洞需要進(jìn)行補(bǔ)丁,一些高危漏洞是需要我們及時(shí)補(bǔ)丁的, 否則黑客容易利用漏洞進(jìn)行服務(wù)器攻擊。
2、系統(tǒng)賬號優(yōu)化
我們服務(wù)器的密碼需要使用強(qiáng)口令,同時(shí)有一些來賓賬戶例如guest一定要禁用掉。
3、目錄權(quán)限優(yōu)化
對于不需要執(zhí)行與寫入權(quán)限的服務(wù)器我們要進(jìn)行權(quán)限修改,確保不把不該出現(xiàn)的的權(quán)限暴露給攻擊者讓攻擊者有機(jī)可趁。
例如我們的windows文件夾權(quán)限,我們給的就應(yīng)該盡可能的少,對于用戶配置信息文件夾,不要給予everyone權(quán)限。
4、數(shù)據(jù)庫優(yōu)化
針對數(shù)據(jù)密碼和數(shù)據(jù)庫端口訪問都要進(jìn)行優(yōu)化,不要將數(shù)據(jù)庫暴露在公網(wǎng)訪問環(huán)境。
5、系統(tǒng)服務(wù)優(yōu)化
去除一些不必要的系統(tǒng)服務(wù),可以優(yōu)化我們系統(tǒng)性能,同時(shí)優(yōu)化系統(tǒng)服務(wù)可以提升系統(tǒng)安全性。
6、注冊表優(yōu)化
注冊表優(yōu)化可以提升網(wǎng)絡(luò)并發(fā)能力,去除不必要的端口,幫助抵御snmp攻擊,優(yōu)化網(wǎng)絡(luò),是我們優(yōu)化服務(wù)器不可缺少的環(huán)節(jié)。
7、掃描垃圾文件
垃圾文件冗余可能會造成我們的服務(wù)器卡頓,硬盤空間不足,需要我們定期進(jìn)行清理。
容器有多安全?
很多人認(rèn)為,容器比虛擬機(jī)安全性更低,因?yàn)槿绻萜髦鳈C(jī)內(nèi)核存在漏洞,那么它可以提供一種進(jìn)入共享它的容器的方法。管理程序也是如此,但由于管理程序提供遠(yuǎn)遠(yuǎn)少于Linux內(nèi)核(通常實(shí)現(xiàn)文件系統(tǒng),網(wǎng)絡(luò),應(yīng)用程序進(jìn)程控制等)的功能,因此它的攻擊面更小。
但是在過去的幾年里,為了增強(qiáng)容器的安全性開發(fā)了大量的軟件。
例如,Docker(和其它容器系統(tǒng))現(xiàn)在包括一個(gè)簽名的基礎(chǔ)架構(gòu),允許管理員簽署容器鏡像,以防止不可信的容器被部署。
然而,可信任的簽名容器不一定可以安全運(yùn)行,因?yàn)樵诤灻笕萜髦械囊恍┸浖赡軙话l(fā)現(xiàn)漏洞。因此,Docker和其它容器提供容器安全掃描方案,可以就容器鏡像是否有任何可被利用的漏洞而通知管理員。
更專業(yè)的容器安全軟件也被開發(fā)出來了。比如Twistlock,它提供的軟件可以配置容器的預(yù)期行為和“白名單”進(jìn)程,網(wǎng)絡(luò)活動(如源和目標(biāo)IP地址和端口),甚至是某些存儲實(shí)踐,以便可以標(biāo)記任何惡意的或意外的行為。
另一家專業(yè)的容器安全公司Polyverse采用了不同的方法。它利用了這樣一個(gè)事實(shí),容器可以在幾分之一秒內(nèi)啟動,以便每隔幾秒在已知的良好狀態(tài)中重新啟動容器化應(yīng)用程序,將黑客必須利用在容器中運(yùn)行的應(yīng)用程序的時(shí)間最小化。
哪一個(gè)Linux發(fā)行版適合用作容器主機(jī)?
如果Linux發(fā)行版的預(yù)期用途只是充當(dāng)容器主機(jī)來運(yùn)行容器,那么它們大多數(shù)都是功能上臃腫的。因此,很多Linux發(fā)行版本被設(shè)計(jì)為專門用于運(yùn)行容器。
一些例子包括:
·Container Linux(以前的CoreOS Linux)—為容器而構(gòu)建的第一個(gè)輕量級容器操作系統(tǒng)之一。
·RancherOS –由容器構(gòu)建的簡化的Linux發(fā)行版,專門用于運(yùn)行容器。
·Photon OS - 最小的Linux容器主機(jī),被優(yōu)化在VMware平臺上運(yùn)行。
·Project Atomic Host - Red Hat的輕量級容器操作系統(tǒng)擁有基于CentOS和Fedora的版本,Red Hat Enterprise Linux中還有一個(gè)下游企業(yè)版本。
·Ubuntu Core - 最小的Ubuntu版本,Ubuntu Core被設(shè)計(jì)為用于物聯(lián)網(wǎng)設(shè)備和大規(guī)模云端容器部署的主機(jī)操作系統(tǒng)
如果是Windows環(huán)境會怎么樣?
除了在任何運(yùn)行3.10(或更高版本)的Linux內(nèi)核的Linux發(fā)行版上運(yùn)行,Docker還可以在Windows上運(yùn)行。
這是因?yàn)樵?016年,微軟在Windows Server 2016和Windows 10中引入了運(yùn)行Windows容器的能力。這些是為Windows設(shè)計(jì)的Docker容器,并且它們可以在任何Docker客戶端或微軟的PowerShell中進(jìn)行管理。
(微軟還引入了Hyper-V容器,這些容器是運(yùn)行在Hyper-V虛擬機(jī)中的Windows容器,用于增加隔離度。)
Windows容器可以部署在Windows Server 2016的標(biāo)準(zhǔn)安裝中,精簡的Server Core安裝或Nano Server安裝選項(xiàng),專門用于在容器或虛擬機(jī)中運(yùn)行應(yīng)用程序。
除了Linux和Windows之外,Docker還在流行的云平臺上運(yùn)行,包括亞馬遜的EC2,谷歌的 Compute Engine,微軟的Azure和Rackspace。
容器最終會取代全面的服務(wù)器虛擬化嗎?
由于一些重要的原因,這在可預(yù)見的未來不太可能。
首先,仍然有廣泛的意見認(rèn)為虛擬機(jī)比容器提供了更高的安全性,因?yàn)樗鼈兲峁┝嗽鰪?qiáng)的隔離級別。
其次,可用于編排大量容器的管理工具還不如管理虛擬化基礎(chǔ)架構(gòu)的軟件(如VMware的 vCenter或微軟的System Center)全面。對這類軟件進(jìn)行了大量投資的公司在沒有充分理由的情況下不太可能放棄他們的虛擬化基礎(chǔ)架構(gòu)。
也許更重要的是,虛擬化和容器也開始被視為互補(bǔ)技術(shù)而不是敵對技術(shù)。這是因?yàn)槿萜骺梢栽谳p量級虛擬機(jī)中運(yùn)行,以增加隔離度,進(jìn)而提高安全性,并且因?yàn)橛布摂M化可以更輕松地管理支持容器所需的硬件基礎(chǔ)架構(gòu)(網(wǎng)絡(luò)、服務(wù)器和存儲)。
VMware鼓勵(lì)投資虛擬機(jī)管理基礎(chǔ)架構(gòu)的客戶在其輕量級虛擬機(jī)上的Photon OS容器Linux發(fā)行版上運(yùn)行容器,而這些輕量級的虛擬機(jī)可以在vCenter進(jìn)行管理。這是VMware的“VM中的容器”策略。
但是,VMware還引入了所謂的vSphere集成容器(vSphere Integrated Containers ,VIC)。這些容器可以被直接部署到獨(dú)立的ESXi主機(jī),也可以像虛擬機(jī)一樣被部署到vCenter Server。這是VMware的“容器作為虛擬機(jī)”策略。
這兩種方法都有其優(yōu)點(diǎn),但重要的是,能夠在虛擬化基礎(chǔ)架構(gòu)中使用容器而不是替換虛擬機(jī),這往往是很有用的。
1、不安全的鏡像:鏡像是一個(gè)包含應(yīng)用/服務(wù)運(yùn)行所必需的操作系統(tǒng)和應(yīng)用文件的集合,用于創(chuàng)建一個(gè)或多個(gè)容器,它們之間緊密聯(lián)系,鏡像的安全性將會影響容器安全。根據(jù)鏡像創(chuàng)建和使用方式,通常有三個(gè)因素影響鏡像安全:a、基礎(chǔ)鏡像不安全:鏡像通常是開發(fā)者基于某個(gè)基礎(chǔ)鏡像創(chuàng)建的,無論是攻擊者上傳的惡意鏡像,還是現(xiàn)有鏡像存在的安全缺陷,基于它創(chuàng)建的鏡像都將會是不安全的。 b、使用包含漏洞的軟件:開發(fā)者經(jīng)常會使用軟件庫的代碼或軟件,如果它們存在漏洞或惡意代碼,一旦被制作成鏡像,也將會影響容器的安全。c、鏡像被篡改:容器鏡像在存儲和使用的過程中,可能被篡改,如被植入惡意程序和修改內(nèi)容。一旦使用被惡意篡改的鏡像創(chuàng)建容器后,將會影響容器和應(yīng)用程序的安全。2、容器技術(shù)風(fēng)險(xiǎn):容器隔離依賴于 Linux 內(nèi)核 namespaces 和 cgroups 等特性,從攻擊者的角度出發(fā),可以利用內(nèi)核系統(tǒng)漏洞,容器運(yùn)行時(shí)組件和容器應(yīng)用部署配置等多個(gè)維度發(fā)起針對性的逃逸和越權(quán)攻擊。K8s、Docker等開源軟件近年來也相繼爆出不少的高危漏洞,這都給攻擊者提供了可乘之機(jī)。3、東西向流量防護(hù):傳統(tǒng)的企業(yè)應(yīng)用安全模型通?;趦?nèi)部架構(gòu)不同的信任域來劃分對應(yīng)的安全邊界,在信任域內(nèi)的東西向服務(wù)交互被認(rèn)為是安全的。而上云后企業(yè)應(yīng)用需要在 IDC 和云上部署和交互,在物理安全邊界消失后,如何在零信任的網(wǎng)絡(luò)安全模型下構(gòu)建企業(yè)級容器安全體系是云服務(wù)商需要解決的重要問題。以Docker環(huán)境為例,它支持Bridge、Overlay和Macvlan等網(wǎng)絡(luò),盡管實(shí)現(xiàn)方式不同,但有一個(gè)共同和普遍的問題:如果容器之間未進(jìn)行有效隔離和控制,則一旦攻擊者控制某臺主機(jī)或某臺容器,可以以此為跳板,攻擊同主機(jī)或不同主機(jī)上的其他容器,也就是常提到的“東西向攻擊”,甚至有可能形成拒絕服務(wù)攻擊。4、訪問控制:由于云環(huán)境的特殊性,云原生架構(gòu)下的數(shù)據(jù)泄露風(fēng)險(xiǎn)遠(yuǎn)遠(yuǎn)大于傳統(tǒng)環(huán)境。因此,需要充分利用云原生架構(gòu)下的認(rèn)證授權(quán)體系,結(jié)合應(yīng)用自身的權(quán)限控制,嚴(yán)格遵循最小權(quán)限法則配置云上資源的訪問控制和容器應(yīng)用的權(quán)限。例如,如非必要盡量避免使用特權(quán)容器。
網(wǎng)站欄目:容器與服務(wù)器安全性 容器與服務(wù)器安全性的關(guān)系
當(dāng)前URL:http://www.rwnh.cn/article24/ddgopce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、建站公司、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站維護(hù)、服務(wù)器托管、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)