數(shù)人云:隨著越來(lái)越多的企業(yè)將生產(chǎn)工作負(fù)載遷移到容器當(dāng)中疏哗,關(guān)于Docker的安全性,成了普遍關(guān)注的問(wèn)題禾怠。
這是一個(gè)簡(jiǎn)單卻又沒(méi)有答案的問(wèn)題返奉,不要試圖用二進(jìn)制的方式去考慮Docker安全性,最好深入地去了解Docker的工作細(xì)節(jié)吗氏,以了解Docker安全模式的運(yùn)行方式芽偏。
先來(lái)看看Docker是如何工作的,以及這對(duì)容器安全意味著什么弦讽。
Docker有兩個(gè)關(guān)鍵部分:Docker Engine污尉、Docker Hub膀哲。后者是Docker的官方注冊(cè)中心,這兩個(gè)部分都非常重要被碗,需要了解每個(gè)組件的組成某宪,哪些需要被保護(hù)以及如何操作,先從Docker Engine引擎說(shuō)起:
〓 Docker Engine
Docker Engine 從容器鏡像文件中運(yùn)行容器锐朴,以及管理網(wǎng)絡(luò)和存儲(chǔ)容量兴喂,保護(hù)Docker Engine需要從兩個(gè)方面——Namespaces 和 Control Groups。
Namespaces是Docker從Linux內(nèi)核繼承的特性焚志,將容器進(jìn)行隔離衣迷,這樣容器中的每個(gè)進(jìn)程都無(wú)法看到相鄰容器中運(yùn)行的進(jìn)程。
最初酱酬,Docker容器默認(rèn)是根用戶運(yùn)行壶谒,但自V1.10依賴,Docker支持Namespaces允許以非Root用戶的身份運(yùn)行容器膳沽,但因其實(shí)關(guān)閉的汗菜,所以在使用之前需要激活。
Docker中支持Control Groups或Cgroups贵少,允許設(shè)置CPU呵俏、內(nèi)存、網(wǎng)絡(luò)和Block IO的限制滔灶,容器默認(rèn)可以使用無(wú)限數(shù)量的系統(tǒng)資源普碎,所以設(shè)置限制非常重要,否則整個(gè)系統(tǒng)可能會(huì)受到Hungry 容器的影響录平。
除了Namespaces和Control Groups外麻车,Docker Engine還可以通過(guò)使用SELinux和AppArmor等附加工具進(jìn)一步加強(qiáng)。
SELinux為內(nèi)核提供訪問(wèn)控制斗这,根據(jù)用戶為主機(jī)設(shè)置的策略动猬,可以基于在容器中運(yùn)行的流程類型或級(jí)別來(lái)管理訪問(wèn),基于此表箭,它可以啟動(dòng)或限對(duì)主機(jī)的訪問(wèn)赁咙。
AppArmor在主機(jī)上運(yùn)行的每個(gè)進(jìn)程都有一個(gè)安全配置文件,定義了流程可以利用的資源免钻,Docker將默認(rèn)配置文件應(yīng)用到流程中彼水,同時(shí)用戶也可以應(yīng)用自定義文件。
Similar與AppArmor類似极舔,使用安全配置文件限制進(jìn)程調(diào)用的數(shù)量凤覆,這是Docker Engine提供的基于Linux的內(nèi)核安全特性列表。
〓 Docker Hub
雖然Docker Engine可以對(duì)容器進(jìn)行管理拆魏,但它需要Docker棧的另外一半來(lái)拉取容器鏡像盯桦,即Docker Hub容器注冊(cè)表慈俯,存儲(chǔ)和共享著容器鏡像。
任何人都可以創(chuàng)建容器鏡像拥峦,并將其公開供人下載贴膘,這既是一件好事,但同時(shí)也是一件壞事事镣,好是因?yàn)橹С珠_發(fā)者之間的協(xié)作步鉴,只需點(diǎn)擊即可容易地將操作系統(tǒng)或應(yīng)用實(shí)例化,但如果下載一個(gè)具有脆弱性的公共容器鏡像璃哟,就會(huì)很糟糕氛琢。
根據(jù)經(jīng)驗(yàn)法則,下載官方存儲(chǔ)庫(kù)随闪,大多數(shù)常用工具都可以使用阳似,并且不從未知的作者那里下載存儲(chǔ)庫(kù),最重要的是铐伴,每個(gè)下載的容器鏡像都應(yīng)該掃描到漏洞撮奏。
對(duì)于私有存儲(chǔ)庫(kù)的用戶,Docker Hub將掃描下載的容器鏡像当宴,它可以掃描一些免費(fèi)的存儲(chǔ)庫(kù)畜吊,而后如果將掃描作為一個(gè)附加組件的話,需要付費(fèi)户矢。
Docker Hub并不是Docker容器的唯一注冊(cè)服務(wù)玲献,其他受歡迎的注冊(cè)中心包括:Quay、AWS ECR梯浪、和GitLab Container Registry捌年,這些工具也具備掃描的功能,另外Docker Trusted Registry(DTR)可以在付費(fèi)后挂洛,安裝在防火墻之后礼预。
Docker是一個(gè)錯(cuò)綜復(fù)雜的有著各種移動(dòng)和靜態(tài)部件的網(wǎng)絡(luò),顯然插入這些安全工具中的任何一個(gè)都不會(huì)立即使整個(gè)堆棧安全虏劲,在所以層面上托酸,都需要結(jié)合這些方法來(lái)確保Docker的安全。
因此柒巫,下次有人問(wèn)Docker是否安全時(shí)励堡,應(yīng)該反問(wèn)他們,是指的Docker的哪一個(gè)部分吻育?然后念秧,向其解釋影響該層的各種安全注意事項(xiàng)淤井。
盡管上面的安全功能為Docker Engine和Docker Hub提供了基本的保護(hù)布疼,但它們?nèi)狈S萌萜靼踩ぞ叩膹?qiáng)大功能摊趾,像Twistlock這樣的工具可以完全保護(hù)你的Docker棧,它超越了任何一個(gè)部分游两,并且可以讓用戶對(duì)系統(tǒng)有一個(gè)整體的看法砾层,下面介紹一些Docker 安全工具:
在生態(tài)系統(tǒng)中有非常多的Docker安全工具,這里有一個(gè)全面的Docker安全工具列表供以參考贱案。
Docker安全工具的索引
BlackDuck Docker security
Docker capabilities and resource quotas
Docker-bench security
1 Anchore Navigator
主頁(yè):https://anchore.io/
授權(quán):商用肛炮,一些服務(wù)是免費(fèi)使用的。
場(chǎng)景:預(yù)生產(chǎn)分析宝踪、漏洞新聞提要侨糟。
Anchore Navigator提供了一項(xiàng)免費(fèi)服務(wù):可以對(duì)Docker鏡像進(jìn)行深度檢查。還可以探索其豐富的剖析公共映像庫(kù)瘩燥,充分了解其內(nèi)容秕重、構(gòu)建過(guò)程和發(fā)現(xiàn)CVE威脅,以及已知修復(fù)相關(guān)的鏈接厉膀。
可以對(duì)自己的鏡像進(jìn)行深度分析溶耘,并訂閱您經(jīng)常使用的鏡像,以便在升級(jí)到商業(yè)版本時(shí)接收安全警告服鹅。
2 AppArmor
主頁(yè):http://wiki.apparmor.net
授權(quán):開源凳兵。
場(chǎng)景:運(yùn)行時(shí)保護(hù)、強(qiáng)制訪問(wèn)控制(MAC)企软。
AppArmor讓管理員為系統(tǒng)中的每個(gè)程序分配一個(gè)安全概要文件:文件系統(tǒng)訪問(wèn)庐扫、網(wǎng)絡(luò)功能、鏈接和執(zhí)行規(guī)則等等澜倦。
它是一個(gè)強(qiáng)制性的訪問(wèn)控制(或MAC)系統(tǒng)聚蝶,防止任何被禁止的行為發(fā)生,同時(shí)還可報(bào)告違反概要文件的訪問(wèn)嘗試等藻治。
只需要了解概要文件的語(yǔ)法碘勉,并可以根據(jù)喜歡的編輯器去編寫AppArmor規(guī)則。
Docker context:Docker可以自動(dòng)生成和加載一個(gè)默認(rèn)的文件桩卵,用于名為docker-default AppArmor的容器验靡,可以為容器或其中的應(yīng)用創(chuàng)建特定的安全配置文件。
3 AquaSec
主頁(yè):https://www.aquasec.com/
授權(quán):商用雏节。
場(chǎng)景:預(yù)生產(chǎn)分析胜嗓、運(yùn)行時(shí)保護(hù)、法規(guī)遵循和審核等钩乍。
AquaSec為容器設(shè)計(jì)的商業(yè)安全套件辞州,功能包括:安全審計(jì)、容器鏡像驗(yàn)證寥粹、運(yùn)行時(shí)保護(hù)变过、自動(dòng)策略學(xué)習(xí)或入侵預(yù)防埃元。
4 BlackDuck Docker Security
主頁(yè):https://www.blackducksoftware.com
授權(quán):商用。
場(chǎng)景:預(yù)生產(chǎn)分析媚狰、漏洞報(bào)告岛杀、許可/法律風(fēng)險(xiǎn)。
Black Duck Hub專門負(fù)責(zé)容器庫(kù)存和報(bào)告鏡像庫(kù)存崭孤,將已知的安全漏洞映射到鏡像索引和跨項(xiàng)目風(fēng)險(xiǎn)報(bào)告类嗤。可以輕松地查明導(dǎo)致安全風(fēng)險(xiǎn)的特定庫(kù)辨宠、軟件包或二進(jìn)制文件遗锣,自動(dòng)提供已知修復(fù)的列表。
5 Cilium
主頁(yè):https://www.cilium.io/
授權(quán):開源嗤形。
場(chǎng)景:http層網(wǎng)絡(luò)安全性黄伊、網(wǎng)絡(luò)層安全性。
Cilium在容器應(yīng)用之間提供透明的網(wǎng)絡(luò)安全性派殷』棺睿基于一種稱為eBPF的新Linux內(nèi)核技術(shù),允許根據(jù)容器/pod身份定義并執(zhí)行網(wǎng)絡(luò)層和http層安全策略毡惜。
Cilum利用BPF執(zhí)行核心數(shù)據(jù)路徑過(guò)濾拓轻、管理、監(jiān)視和重定向经伙。這些BPF功能可以在任何Linux4.8.0內(nèi)核版本或更新版本中使用扶叉。
6 CoreOS Clair
主頁(yè):https://coreos.com/clair/docs/latest/
授權(quán):開源。
場(chǎng)景:預(yù)生產(chǎn)分析帕膜、漏洞新聞提要枣氧。
Clair是一個(gè)開源項(xiàng)目,用于靜態(tài)分析容器中的漏洞(目前支持AppC和Docker)垮刹。定期從一組配置的CVE源中刷新其漏洞數(shù)據(jù)庫(kù)达吞,對(duì)可用的容器映像進(jìn)行仔細(xì)檢查,并對(duì)安裝的軟件包進(jìn)行索引荒典。如果檢測(cè)到任何不安全的應(yīng)用酪劫,它可以警告或阻止部署到生產(chǎn)。
由于Clair的鏡像分析是靜態(tài)的寺董,容器永遠(yuǎn)不需要實(shí)際執(zhí)行覆糟,所以可以在系統(tǒng)中運(yùn)行之前檢測(cè)到安全威脅。Clair是CoreOS Quay容器注冊(cè)中心的安全引擎遮咖。
7 Docker Capabilities & Resource Quotas
主頁(yè):https://www.docker.com
授權(quán):開源滩字。
場(chǎng)景:運(yùn)行時(shí)保護(hù)、資源保護(hù)。
資源濫用和拒絕服務(wù)是一個(gè)經(jīng)常被忽視的問(wèn)題麦箍,但在擁有大量軟件實(shí)體競(jìng)爭(zhēng)主機(jī)資源的環(huán)境中酗电,這是一個(gè)切實(shí)存在的安全問(wèn)題,所以不應(yīng)該忘記已經(jīng)與操作系統(tǒng)和Docker引擎捆綁在一起的基本安全措施内列。
Control Groupscgroups)是Linux內(nèi)核的一個(gè)特性,允許您限制訪問(wèn)進(jìn)程和容器對(duì)CPU背率、RAM话瞧、IOPS和網(wǎng)絡(luò)等系統(tǒng)資源的限制。
允許將完整的根權(quán)限分解為多個(gè)分割權(quán)限寝姿,因此可以從根帳戶中刪除特定的功能交排,或者在更細(xì)粒度的級(jí)別上增加用戶帳戶的功能。
8 Docker-bench security
主頁(yè):https://github.com/docker/docker-bench-security
授權(quán):開源饵筑。
場(chǎng)景:合規(guī)審計(jì)埃篓。
Docker用于安全的工作臺(tái)是一個(gè)元腳本,用于檢查生產(chǎn)中部署Docker容器的數(shù)十種常見的最佳實(shí)踐根资。
此腳本很方便地打包為Docker容器架专,只需在其主頁(yè)上復(fù)制和粘貼一行代碼,就可以立即看到Docker容器和運(yùn)行Docker引擎的主機(jī)(Docker CE或Docker Swarm)的250個(gè)檢查結(jié)果玄帕。Docker Bench測(cè)試的靈感來(lái)自于CIS Docker Community Edition v1.1.0部脚。
9 Dockscan
主頁(yè):https://github.com/kost/dockscan
授權(quán):開源。
場(chǎng)景:合規(guī)審計(jì)裤纹。
簡(jiǎn)單的Ruby腳本委刘,用于分析Docker安裝和運(yùn)行容器,既針對(duì)本地主機(jī)鹰椒,也針對(duì)遠(yuǎn)程主機(jī)锡移。
安裝和運(yùn)行只需一個(gè)命令即可,并且會(huì)生成HTML報(bào)告文件漆际。Dockscan reports配置了資源限制淆珊,若容器生成了太多的進(jìn)程,或者有大量修改過(guò)的文件奸汇,或者Docker主機(jī)允許容器直接將流量轉(zhuǎn)發(fā)到主機(jī)網(wǎng)關(guān)套蒂,即可命名幾個(gè)檢查。
10 Sysdig Falco
主頁(yè):https://www.sysdig.org/falco/
授權(quán):開源茫蛹。
場(chǎng)景:運(yùn)行時(shí)報(bào)警操刀、取證。
Sysdig Falco是一種開源的行為監(jiān)測(cè)應(yīng)用婴洼,旨在檢測(cè)基于其技術(shù)的異彻强樱活動(dòng)。Sysdig Falco在任何Linux主機(jī)上都是一種入侵檢測(cè)系統(tǒng)。
Falco是一種與眾不同的審計(jì)工具欢唾,它在用戶空間中運(yùn)行且警,使用內(nèi)核模塊來(lái)攔截系統(tǒng)調(diào)用,而其他類似的工具在內(nèi)核級(jí)執(zhí)行系統(tǒng)調(diào)用過(guò)濾/監(jiān)視礁遣。用戶空間實(shí)現(xiàn)的優(yōu)點(diǎn)是能夠與Docker斑芜、Docker Swarm、Kubernetes祟霍、Mesos等外部系統(tǒng)集成杏头,并導(dǎo)入其資源知識(shí)和標(biāo)簽。
Docker上下文:Falco支持特定于容器的上下文沸呐〈纪酰可以監(jiān)視容器的行為,不必修改它們崭添。定制規(guī)則的創(chuàng)建很容易掌握寓娩,默認(rèn)的規(guī)則文件以正常的默認(rèn)值填充。
11 HashiCorp Vault
主頁(yè):https://www.vaultproject.io/
授權(quán):免費(fèi)企業(yè)版呼渣。
場(chǎng)景:安全容器的憑證存儲(chǔ)棘伴,信任管理。
Hashicorp的密碼庫(kù)是用于管理密碼的高級(jí)套件:密碼屁置、Ssl/Tls證書排嫌、API密鑰、訪問(wèn)令牌缰犁、SSH證書等等淳地。支持基于時(shí)間的 Secrets租賃、細(xì)粒度的 Secrets訪問(wèn)帅容、新Secrets的生成颇象、關(guān)鍵的滾動(dòng)(更新密鑰,而不使用舊的密鑰生成的秘密)等等并徘。
Vaults Keeps保存了詳細(xì)的審計(jì)日志遣钳,記錄每個(gè)用戶/實(shí)體執(zhí)行的所有 Secrets和訪問(wèn)及操作,因此操作人員可以很容易地跟蹤任何可疑的交互麦乞。
Docker上下文:在新的微服務(wù)和容器環(huán)境中蕴茴,安全的分發(fā)和可跟蹤性是一個(gè)核心問(wèn)題,在此環(huán)境中姐直,軟件實(shí)體不斷地被派生和刪除倦淀。Vaults本身可以作為Docker容器進(jìn)行部署。
12 NeuVector
主頁(yè):http://neuvector.com/
授權(quán):商用声畏。
場(chǎng)景:運(yùn)行時(shí)保護(hù)撞叽、遵從性和審計(jì)姻成。
NeuVector專注于運(yùn)行時(shí)的實(shí)時(shí)安全保護(hù)。自動(dòng)發(fā)現(xiàn)應(yīng)用程序愿棋、容器和服務(wù)的行為科展,以及與其他Linux Id類似方式檢測(cè)安全升級(jí)和其他威脅。NeuVector“強(qiáng)制”容器部署在每個(gè)物理主機(jī)上糠雨,并完全訪問(wèn)本地的Docker守護(hù)進(jìn)程才睹,所使用的內(nèi)部技術(shù)在公開可訪問(wèn)的文檔中并沒(méi)有詳細(xì)地詳細(xì)說(shuō)明。
NeuVector的目標(biāo)是非侵入式甘邀、插裝式安全套件琅攘、自動(dòng)發(fā)現(xiàn)運(yùn)行的容器以及它們的默認(rèn)行為,幫助和建議操作人員設(shè)計(jì)他們的基礎(chǔ)設(shè)施安全配置文件鹃答。
13 Notary
主頁(yè):https://github.com/docker/notary
授權(quán):開源。
用例:可信的映像庫(kù)突硝、信任管理和可驗(yàn)證性测摔。
鏡像偽造和篡改是基于文檔的部署的一個(gè)主要安全問(wèn)題,Notary是一種發(fā)布和管理受信任的內(nèi)容集合的工具解恰,可以通過(guò)與Linux系統(tǒng)中提供的軟件存儲(chǔ)庫(kù)管理工具類似的方式批準(zhǔn)可信發(fā)布和創(chuàng)建簽名的集合锋八。
一些Notary目標(biāo)包括保證圖像的新鮮度(大部分是最新的內(nèi)容,避免已知的漏洞)护盈,用戶之間的信任委托挟纱,或可信的分布在不可信的鏡像或傳輸通道上。
14 OpenSCAP
主頁(yè):https://www.open-scap.org/
授權(quán):開源腐宋。
場(chǎng)景:法規(guī)遵循和審核紊服,認(rèn)證
OpenSCAP提供了一套自動(dòng)化的審計(jì)工具,以檢查應(yīng)用中的配置和已知的漏洞胸竞,遵循了Nist認(rèn)證的安全內(nèi)容自動(dòng)化協(xié)議(SCAP)欺嗤。
可以創(chuàng)建自己的自定義規(guī)則,并定期檢查部署在公司中的任何軟件是否嚴(yán)格遵守規(guī)則卫枝。
這些工具集不僅關(guān)注于安全性本身煎饼,還提供了測(cè)試和報(bào)告。
Docker上下文:OpenSCAP套件提供了一個(gè)特定于docdocker的工具——Oscap-Docker校赤,來(lái)審計(jì)鏡像吆玖,同時(shí)評(píng)估運(yùn)行的容器和云端鏡像。
15 Remnux
主頁(yè):https://remnux.org/
許可:開源马篮。
場(chǎng)景:取證沾乘。
基于Ubuntu的安全發(fā)行版。REMnux是一個(gè)免費(fèi)的Linux工具包浑测,幫助惡意應(yīng)用分析人員使用逆向工程的應(yīng)用意鲸,通常稱為取證。系統(tǒng)綁定了大量預(yù)先安裝的分析和安全工具:Wireshark, ClamAV, Tcpextract, Rhino Debugger, Sysdig, Vivisect。
16 SELinux
主頁(yè):https://selinuxproject.org
授權(quán):開源怎顾。
場(chǎng)景:運(yùn)行時(shí)保護(hù)读慎、強(qiáng)制訪問(wèn)控制(MAC)。
SELinux是Linux內(nèi)核安全模塊槐雾。也是一個(gè)強(qiáng)制性的訪問(wèn)控制系統(tǒng)夭委。從強(qiáng)制訪問(wèn)控制到強(qiáng)制性的完整性控制、基于角色的訪問(wèn)控制(RBAC)和類型強(qiáng)制架構(gòu)募强。
Docker上下文:類似于AppArmor株灸,SELinux提供了一層額外的訪問(wèn)策略,并在主機(jī)和容器應(yīng)用之間進(jìn)行隔離擎值。
17 Seccomp
主頁(yè):https://www.kernel.org
授權(quán):開源慌烧。
場(chǎng)景:運(yùn)行時(shí)保護(hù)、強(qiáng)制訪問(wèn)控制(MAC)鸠儿。
Seccomp是Linux內(nèi)核中的一個(gè)沙箱化工具屹蚊,可以將其看做基于規(guī)則的防火墻,但對(duì)于系統(tǒng)調(diào)用进每,使用Berkeley包過(guò)濾(BPF)規(guī)則來(lái)過(guò)濾Syscall API汹粤,并控制它們的處理方式。
有了Seccomp田晚,可以選擇哪些系統(tǒng)是禁止的嘱兼,哪些是允許的,如贤徒,您可以禁止在容器內(nèi)進(jìn)行文件權(quán)限操作芹壕。
18 Sysdig
主頁(yè):https://www.sysdig.org/
許可證:開放源碼,商業(yè)產(chǎn)品建立在免費(fèi)技術(shù)之上接奈。
場(chǎng)景:異常行為調(diào)試哪雕,取證。
Sysding是針對(duì)Linux系統(tǒng)的全系統(tǒng)的探索鲫趁、故障排除和調(diào)試工具斯嚎。它記錄任何進(jìn)程所做的所有系統(tǒng)調(diào)用,允許系統(tǒng)管理員在操作系統(tǒng)或運(yùn)行在它上的任何進(jìn)程中查找BUG挨厚。
19 Tenable Flawcheck
主頁(yè):https://www.tenable.com/flawcheck
授權(quán):商用堡僻。
場(chǎng)景:預(yù)生產(chǎn)分析、漏洞新聞提要疫剃。
與此列表中的其他商業(yè)工具一樣钉疫,缺陷檢查可以存儲(chǔ)容器映像,并在它們構(gòu)建之前進(jìn)行掃描巢价,然后才能推到生產(chǎn)環(huán)境牲阁。缺陷檢查利用了漏洞/Nessus的技術(shù)和數(shù)據(jù)庫(kù)漏洞固阁,惡意軟件和入侵載體,并將其調(diào)整為容器化和敏捷/CD的環(huán)境城菊。
20 Twistlock
主頁(yè):https://www.twistlock.com/
授權(quán):商用备燃。
場(chǎng)景:預(yù)生產(chǎn)分析、運(yùn)行時(shí)保護(hù)凌唬、法規(guī)遵循和審核等并齐。
用于支持容器化環(huán)境的商業(yè)安全套件:漏洞管理、訪問(wèn)控制客税、分析和對(duì)安全標(biāo)準(zhǔn)遵從性的取證况褪。
Twistlock與CI/CD集成,為像Jenkins或TeamCity和可調(diào)用的Webhooks這樣的工具提供原生插件更耻,這樣即可為每一個(gè)構(gòu)建和測(cè)試環(huán)境觸發(fā)索引和掃描過(guò)程测垛。
Docker是一個(gè)錯(cuò)綜復(fù)雜的有著各種移動(dòng)和靜態(tài)部件的網(wǎng)絡(luò),顯然插入這些安全工具中的任何一個(gè)都不會(huì)立即使整個(gè)堆棧安全秧均,在所有層面上食侮,都需要將這些工具結(jié)合起來(lái)確保Docker的安全。