国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Docker脆弱性分析與安全增強

2016-05-14 11:05楊文林譚曦郭俊廷王碩
網(wǎng)絡(luò)空間安全 2016年4期
關(guān)鍵詞:計算機應用虛擬化

楊文林 譚曦 郭俊廷 王碩

【 摘 要 】 容器虛擬化技術(shù)并沒有虛擬任何硬件,它使用宿主機的系統(tǒng)內(nèi)核,通過Namespace技術(shù)來隔離不同的容器隔離應用程序來實現(xiàn)虛擬化。因此它是工作在操作系統(tǒng)級的虛擬化技術(shù)。然而共享內(nèi)核的方式也帶來了許多安全問題。因此我們著手分析Docker主要部件Docker容器、Docker配置和Docker共享內(nèi)核的技術(shù)原理,并且嘗試尋找其脆弱點,從而針對存在的威脅提出解決方案,使得Docker的安全性足以適應生產(chǎn)環(huán)境。

【 關(guān)鍵詞 】 計算機應用;Docker安全;脆弱性分析;虛擬化

【 中圖分類號 】 TP309 【 文獻標識碼 】 A

【 Abstract 】 Linux Container technology does not virtualize any hardware, it just uses the hosts system kernel with namespace technology to isolate different containers and applications to achieve virtualization. Therefore, it is a virtualization technology that works on the operating system level. However, the way of sharing the kernel also brings many security problems. So in this paper, we had focused on analyze the major components of Docker: Docker Engine, Docker Repositories and the technology principles of Docker sharing kernel, and tried to find its vulnerability. Moreover, we had strengthened the most fragile places, so that we can finally propose solutions to resolve the risks of the existence now.

【 Keywords 】 computer application; docker security; vulnerability analysis; virtualization

1 引言

虛擬化技術(shù)是一種區(qū)別于傳統(tǒng)的資源管理技術(shù),它將計算機的計算能力、網(wǎng)絡(luò)、存儲等各類物理資源抽象化,打破了各物理結(jié)構(gòu)間原本不可切割的障礙,使得用戶可以按照需求更加經(jīng)濟、合理地去分配使用這些資源。虛擬化技術(shù)能夠?qū)崿F(xiàn)在一個平臺上獨立地運行多個既可以互不干擾而又可以協(xié)同工作的運算單元。Docker容器將用戶程序、運行時庫、系統(tǒng)工具、系統(tǒng)庫等所有你會在服務器上需要的東西打包到一個完備的文件系統(tǒng)中。虛擬機通過模擬計算機硬件,每個虛擬機使用相互獨立的硬件模擬器,都像擁有獨立的硬件平臺一樣。對于虛擬機而言,每一個虛擬機都包含應用程序、運行庫和相互獨立的操作系統(tǒng)。

容器技術(shù)的虛擬化則是依托于Linux內(nèi)核的LXC技術(shù),輔以Namespace技術(shù)隔離不同的容器。容器內(nèi)僅包含應用程序和必要的運行庫,容器內(nèi)運行的系統(tǒng)內(nèi)核則使用與宿主機共享的系統(tǒng)內(nèi)核。然而Docker共享系統(tǒng)內(nèi)核的模式較虛擬機這種獨立內(nèi)核的模式自然安全性會降低很多,因為Docker暴露了更多的攻擊面。不過只要在Docker內(nèi)運行并提供合理的服務,同時再做好一些防護和監(jiān)控措施,Docker仍然是一個非常實用的虛擬化工具。

2 Docker組件安全分析

Docker組件主要包含Docker引擎,Docker容器和Docker倉庫三個部分。Docker引擎是Docker運行時的服務提供者,為整個Docker提供支持。其中包含了Docker使用的各種安全技術(shù),比如Namespace、ControlGroup等。Docker容器是用戶需要運行提供生產(chǎn)力的服務包,這里面運行著許多自定義的應用程序。Docker倉庫是用戶集中存放管理鏡像的地方,當用戶需要時Docker將會從這里下載指定容器或鏡像。因此我們將攻擊面概括為Docker引擎、系統(tǒng)內(nèi)核以及Docker倉庫三個部分。本文將深入討論各部分內(nèi)部以及之間的脆弱性。

2.1 Docker引擎脆弱性分析

2.1.1文件系統(tǒng)隔離

Docker 總體上使用Mount 命名空間來隔離文件系統(tǒng)。在寫入數(shù)據(jù)時Docker使用了一種叫做“寫時復制”的方式來保證容器內(nèi)的寫入操作。對于一個正在運行的容器,其文件系統(tǒng)都是從一個根目錄開始的虛擬文件系統(tǒng),在容器內(nèi)部看起來像是一個真實的文件系統(tǒng),然而在宿主機內(nèi)則默認位于“//docker/containers/ /rootfs”。Mount 命名空間通過隔離文件系統(tǒng)掛載點對文件系統(tǒng)的隔離提供支持,不同的命名空間中的文件結(jié)構(gòu)互不影響。但由于容器內(nèi)root用戶幾乎等價于宿主機root用戶,所以如果容器在創(chuàng)建時“rw mount”了宿主機的某個文件系統(tǒng)且容器內(nèi)有root權(quán)限,那么在容器內(nèi)執(zhí)行“chmod a+s [program file]”操作則會導致所有運行這個程序的用戶都將獲得root權(quán)限,由此宿主機內(nèi)用戶得以提升特權(quán),而且對于不同的容器,并不是所有文件都是完全獨立的,比如/proc/fs,/proc/meminfo,/proc/debug,可能造成宿主機的這些敏感信息的泄露。

2.1.2進程隔離和通信隔離

Docker對于進程隔離使用的是PID 命名空間(PID namespace)技術(shù),它對需要隔離的進程的PID重新標號,由此來隔離不同容器及容器和Host。每個PID 命名空間都有獨有的計數(shù)程序。系統(tǒng)內(nèi)核為所有的PID 命名空間維護了一個樹,最頂層的是根命名空間(Root Namespace),是系統(tǒng)初始時創(chuàng)建的。運行于父節(jié)點的進程能夠讀取子節(jié)點的信息,反之則不可以。注意如果容器內(nèi)PID為1的進程被終止,也就是容器內(nèi)所有節(jié)點的根節(jié)點進程被終止,則該容器將完全停止。這可能存在DoS漏洞(Deny of Service,拒絕服務)的隱患。容器中進程間通信的方式為相同PID 命名空間的進程間進行通信,因此需要一個唯一標識符進行區(qū)別。IPC 命名空間包含系統(tǒng)IPC標識符和實現(xiàn)POSIX信息隊列的文件系統(tǒng)。

2.1.3設(shè)備隔離與宿主機資源限制

Docker中使用UTS 命名空間來進行容器內(nèi)的主機名和域名的隔離,這樣每個容器都可以被網(wǎng)絡(luò)上的其他節(jié)點看作是一個獨立的節(jié)點。Docker作為虛擬化服務提供軟件,我們必須重視拒絕服務漏洞。Docker使用Cgroups技術(shù)來限制資源的使用,然而默認狀況下是不開啟的,由此可能導致DoS的攻擊面有磁盤空間、I/O帶寬、CPU計算資源、內(nèi)存空間,網(wǎng)絡(luò)帶寬甚至設(shè)備資源占用等的耗盡。由于容器內(nèi)的資源是用戶可以獲取到的,如果允許用戶自定義的代碼的話,不做好適當?shù)南拗?,將很有可能引發(fā)宿主機拒絕服務。這些限制在IaaS、PaaS、SaaS等的應用時需要十分注意。

2.1.4網(wǎng)絡(luò)隔離與鏡像傳輸

Network 命名空間為Docker提供網(wǎng)絡(luò)資源隔離,包括網(wǎng)絡(luò)設(shè)備、TCP/IP 協(xié)議棧、IP路由表等。Docker默認使用橋接方式,這種方式為每一個容器指定一個Network命名空間并分配IP地址,然后將其接入到虛擬網(wǎng)橋上。雖然這種方式能夠很好的運行,但它只是單純地轉(zhuǎn)發(fā)所有流量而沒有任何過濾,因此這可能會存在MAC Flooding風險。由于Docker目前并沒有對拉回的鏡像做正確的校驗,使得在鏡像傳輸?shù)倪^程中可能被替換一些數(shù)據(jù),即存在中間人攻擊的可能性。

2.2 系統(tǒng)內(nèi)核安全

Docker依賴于系統(tǒng)共享內(nèi)核,因此系統(tǒng)內(nèi)核的安全同時影響著Host和Container的安全。我們必須考慮系統(tǒng)內(nèi)核的脆弱性可能會導致的嚴重后果。好在這種致命漏洞發(fā)現(xiàn)難度很大,利用起來也是很困難。容器內(nèi)的用戶所擁有的權(quán)限是由權(quán)能表決定的,不合理的權(quán)能分配會為攻擊者提供更多的攻擊途徑。

2.3 Docker倉庫安全

許多公司在生產(chǎn)環(huán)境中通常使用自建的Docker倉庫來存放和管理Docker容器,那么如果Docker倉庫如果可以被攻陷或者修改數(shù)據(jù),那么從這里部署出去的所有容器都將成為攻擊著的傀儡。所以需要確保鏡像存放在可信倉庫內(nèi)。

3 Docker安全增強

3.1 容器間安全增強

Docker間安全主要來研究如何全面地增強不同Docker之間的獨立性與抗影響性,因此本文又將范圍繼續(xù)細分到幾個方面。

3.1.1 網(wǎng)絡(luò)訪問限制

對于網(wǎng)絡(luò)面臨的威脅,主要是網(wǎng)絡(luò)流量的過濾以及限制威脅。得益于Linux系統(tǒng)中Iptables的強大和便捷,我們可以使用Iptables來進行各種網(wǎng)絡(luò)限制,包括網(wǎng)絡(luò)隔離以及網(wǎng)絡(luò)區(qū)域劃分等。當然,我們也可以使用更加開放的SDN類軟件,比如OpenVSwitch,用它來替代Docker的默認網(wǎng)絡(luò),從而更加便捷地管理容器網(wǎng)絡(luò)。

3.1.2 使用SSL 加密傳輸

由于Docker目前并沒有對Pull的Images做正確性校驗,使得當某宿主機在拉回鏡像的時候可能被替換掉一些數(shù)據(jù),從而存在中間人攻擊的可能性。對于解決方案,自然可以通過自行修改Docker的源碼的方式來添加相應校驗代碼,也可以直接利用SSL協(xié)議能夠防中間人攻擊的特性,使用SSL協(xié)議傳輸替代驗證。

3.2 容器與宿主機間安全增強

容器與宿主機間安全增強我們主要討論如何防止容器內(nèi)部影響到宿主機,即當容器內(nèi)部被攻陷的時候,如何防止攻擊者進入到宿主機內(nèi),本文又將范圍細分到幾個方面。

3.2.1 控制容器內(nèi)Linux權(quán)能表且使用SELinux等Linux安全模塊

因為SUID 和SGID的存在以及Docker沒有使用user namespace技術(shù)隔離root用戶,意味著root用戶在容器內(nèi)外是沒有區(qū)別的,從而可能存在容器內(nèi)提升宿主機權(quán)限的風險。這時候通過“--cap-drop SETUID/SETGID ”參數(shù)就可以禁止容器內(nèi)的用戶使用此權(quán)限。同理,我們應該遵循最小特權(quán)原則,將容器內(nèi)擁有的權(quán)限最小化,從而盡可能避免給攻擊者很多權(quán)限。

安全增強模(Security-Enhanced Linux, SELinux) 是一個能夠在內(nèi)核中提供強訪問控制(MAC)策略的內(nèi)核模塊。Docker默認是不開啟SELinux功能的,如果需要使用它,可以通過執(zhí)行“ setenforce enforcing”命令來開啟它,并且在啟動Docker Daemon的時候使用" --selinux-enabled "參數(shù)。當成功開啟此功能之后,就可以通過“ --security-opt="YOUR PLOLICY"”來加載用戶自定義的規(guī)則。縱觀服務器安全配置問題,SELinux這種強大的工具被證明能夠有效地增強服務器的安全性,因而也能極大地增強Docker容器和宿主機的安全。

3.2.2避免影響系統(tǒng)設(shè)備且對資源分配進行限制

由于Docker對于部分文件系統(tǒng),例如/dev/*等沒有完全隔離, 如果容器內(nèi)需要某些特殊權(quán)限的話,則應盡可能只分配最小的權(quán)限??梢酝ㄟ^使用類似“--device=/dev/snd:/dev/snd:r ”的命令來給予最小的read權(quán)限(或替換成其他你所需要的權(quán)限),這樣容器將無法獲得對此設(shè)備的其他操作權(quán)限,從而最大化保證安全。

為了防止因資源耗盡導致拒絕服務的發(fā)生,合理的資源限制是非常有效地解決方案。通過Docker的Cgroups功能,用戶可以輕易地部署限制策略。例如,若需要限制每個容器所占最大CPU資源可以使用“--cpuset=0,1 - c 2”參數(shù);內(nèi)存限制使用“-m 128m”參數(shù);對于磁盤I/O的限制,Docker目前沒有限制手段,不過我們?nèi)匀豢梢栽谒拗鳈C內(nèi)使用Cgroups來限制。

3.2.3禁用root權(quán)限且記錄日志

永遠不要運行安全性未知的用戶程序,尤其是使用root權(quán)限運行。因為容器內(nèi)外root用戶是幾乎等價的。如果需要使用的話,則應該使用經(jīng)過限制部分權(quán)能的“類root”用戶。雖然收集并歸檔日志文件并不能直接增強Docker的安全性,但對于管理人員去審核并發(fā)現(xiàn)未知漏洞或者對已知的入侵行為進行溯源能夠有非常大的幫助。

4 結(jié)束語

綜上所述,Docker是個非常有前景的虛擬化工具,它能夠快速地創(chuàng)建各種容器來為用戶提供各種服務。然而由于其原理的不安全性和開發(fā)人員的未知性,導致它輕便的同時也變得異常脆弱。為了使Docker的安全性足以保障在生產(chǎn)環(huán)境中使用,首先使用最新版本的Docker,因為通常最新版本的Docker存在的漏洞越少而且越安全,其次永遠不要運行安全性未知的容器,尤其是使用root權(quán)限運行,最后建立一套“預防漏洞-監(jiān)控異常-控制異?!比灰惑w的防御體系,來最大限度防止漏洞的利用,監(jiān)控報警危險行為并控制入侵行為的影響范圍。

參考文獻

[1] Docker, Inc. What is Docker [EB/OL]. http://www.docker.com/whatisdocker,2015-1-29.

[2] Docker, Inc. Understand what are the major Docker components [EB/OL].https://docs.docker.com/introduction/understanding-docker,2015-3-21.

[3] 孫健波.Docker背后的內(nèi)核知識[EB/OL]. http://infoq.com/cn/articles/docker-kernel-knowle-dge-namespace-resource-isolation, 2015-3-2.

[4] Merkel D. Docker: lightweight linux containers for consistent development and deployment [J]. Linux Journal,2014,2014(239): 2.

[5] Wikipedia. MAC-Flooding [EB/OL]. https://en.wikipedia.org/wiki/MAC-Flooding.

[6] Wikipedia. Responsible disclosure [EB/OL]. https://en.wikipedia.org/wiki/Responsible_disclo-sure,2015-9-9.

[7] Lantz B, Heller B, McKeown N. A network in a laptop: rapid prototyping for software-defined networks[C]//Proceedings of the 9th ACM SIGCOMM Workshop on Hot Topics in Networks. ACM,2010: 19.

[8] Docker, Inc. Protect Dockersocket [EB/OL]. https://docs.docker.com/articles/https,2015-4-7.

[9] Wikipedia. Security-Enhanced Linux [EB/OL]. https://en.wikipedia.org/wiki/Security-Enhanced_Linux,2015-8-9.

[10] Victor Vieux. Announcing Docker 1.2.0[EB/OL]. http://blog.docker.com/2014/08/announcing-docker-1-2-0/,2014-8-12.

作者簡介:

楊文林(1993-),男,吉林大學,本科在讀生;主要研究方向和關(guān)注領(lǐng)域:網(wǎng)絡(luò)與信息安全。

譚曦(1994-),女,吉林大學,本科在讀生;主要研究方向和關(guān)注領(lǐng)域:網(wǎng)絡(luò)與信息安全。

郭俊廷(1993-),男,吉林大學,本科在讀生;主要研究方向和關(guān)注領(lǐng)域:網(wǎng)絡(luò)計算。

王碩(1993-),男,吉林大學,本科在讀生;主要研究方向和關(guān)注領(lǐng)域:信息技術(shù)。

猜你喜歡
計算機應用虛擬化
網(wǎng)絡(luò)信息安全技術(shù)管理背景下計算機應用研討
高職計算機應用教學改革研究與實踐
詮釋CFC精髓的大數(shù)據(jù)時代醫(yī)學案例
關(guān)于應用計算機輔助藝術(shù)設(shè)計有關(guān)問題研究
計算機應用的發(fā)展現(xiàn)狀和發(fā)展趨勢探討
中職計算機應用課程教學改革與反思
淺談虛擬化工作原理
用戶怎樣選擇虛擬化解決方案
別再誤會客戶端虛擬化了
虛擬化整合之勢凸顯
敦煌市| 龙江县| 桂平市| 囊谦县| 石阡县| 佛教| 宣恩县| 本溪市| 莱芜市| 眉山市| 左云县| 富锦市| 来宾市| 龙州县| 玛曲县| 隆尧县| 兰州市| 青海省| 邛崃市| 黎平县| 麦盖提县| 城步| 曲松县| 应城市| 黄浦区| 曲麻莱县| 元阳县| 南木林县| 太康县| 肇东市| 屏东市| 遂川县| 兰坪| 锡林浩特市| 河北省| 莒南县| 津市市| 南宁市| 新兴县| 福清市| 汉沽区|