版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 Docker容器安全性解決方案目 錄 TOC o 1-3 h z u HYPERLINK l _Toc60740660 一、從虛擬化安全到容器安全 PAGEREF _Toc60740660 h 3 HYPERLINK l _Toc60740661 1、傳統(tǒng)虛擬化技術(shù) PAGEREF _Toc60740661 h 3 HYPERLINK l _Toc60740662 2、容器技術(shù) PAGEREF _Toc60740662 h 3 HYPERLINK l _Toc60740663 二、Docker容器安全風(fēng)險分析 PAGEREF _Toc60740663 h 7 HYPERLINK l _Toc
2、60740664 1、鏡像安全風(fēng)險 PAGEREF _Toc60740664 h 7 HYPERLINK l _Toc60740665 2、容器虛擬化安全風(fēng)險 PAGEREF _Toc60740665 h 10 HYPERLINK l _Toc60740666 3、網(wǎng)絡(luò)安全風(fēng)險 PAGEREF _Toc60740666 h 13 HYPERLINK l _Toc60740667 三、Docker容器安全機(jī)制與解決方案 PAGEREF _Toc60740667 h 16 HYPERLINK l _Toc60740668 1、容器虛擬化安全 PAGEREF _Toc60740668 h 16 HY
3、PERLINK l _Toc60740669 3、容器網(wǎng)絡(luò)安全 PAGEREF _Toc60740669 h 27 HYPERLINK l _Toc60740670 四、總結(jié) PAGEREF _Toc60740670 h 30Docker是目前最具代表性的容器技術(shù)之一,對云計算及虛擬化技術(shù)產(chǎn)生了顛覆性的影響。本文對Docker容器在應(yīng)用中可能面臨的安全問題和風(fēng)險進(jìn)行了研究,并將Docker容器應(yīng)用環(huán)境中的安全機(jī)制與相關(guān)解決方案分為容器虛擬化安全、容器安全管理、容器網(wǎng)絡(luò)安全三部分進(jìn)行分析。一、從虛擬化安全到容器安全1、傳統(tǒng)虛擬化技術(shù)虛擬化技術(shù)是實現(xiàn)硬件基礎(chǔ)設(shè)施資源的充分利用、合理分配和有效調(diào)度的
4、重要技術(shù)手段。例如,在基于OpenStack的典型IaaS服務(wù)中,云服務(wù)提供商可通過搭建設(shè)備集群建立資源池,并將服務(wù)器、存儲和網(wǎng)絡(luò)等底層資源進(jìn)行彈性虛擬化提供給租戶。傳統(tǒng)虛擬化技術(shù)以虛擬機(jī)為管理單元,各虛擬機(jī)擁有獨立的操作系統(tǒng)內(nèi)核,不共用宿主機(jī)的軟件系統(tǒng)資源,因此具有良好的隔離性,適用于云計算環(huán)境中的多租戶場景。2、容器技術(shù)容器技術(shù)可以看作一種輕量級的虛擬化方式,將應(yīng)用與必要的執(zhí)行環(huán)境打包成容器鏡像,使得應(yīng)用程序可以直接在宿主機(jī)(物理機(jī)或虛擬機(jī))中相對獨立地運行。容器技術(shù)在操作系統(tǒng)層進(jìn)行虛擬化,可在宿主機(jī)內(nèi)核上運行多個虛擬化環(huán)境。相比于傳統(tǒng)的應(yīng)用測試與部署,容器的部署無需預(yù)先考慮應(yīng)用的運行環(huán)境
5、兼容性問題;相比于傳統(tǒng)虛擬機(jī),容器無需獨立的操作系統(tǒng)內(nèi)核就可在宿主機(jī)中運行,實現(xiàn)了更高的運行效率與資源利用率。Docker是目前最具代表性的容器平臺之一,它模糊了傳統(tǒng)的IaaS和PaaS的邊界,具有持續(xù)部署與測試、跨云平臺支持等優(yōu)點。在基于Kubernetes等容器編排工具實現(xiàn)的容器云環(huán)境中,通過對跨主機(jī)集群資源的調(diào)度,容器云可提供資源共享與隔離、容器編排與部署、應(yīng)用支撐等功能。Docker容器技術(shù)以宿主機(jī)中的容器為管理單元,但各容器共用宿主機(jī)內(nèi)核資源,分別通過Linux系統(tǒng)的Namespaces和CGroups機(jī)制實現(xiàn)資源的隔離與限制。1、Namespaces為了保證容器進(jìn)程之間的資源隔離,
6、避免相互影響和干擾,Linux內(nèi)核的Namespaces(命名空間)機(jī)制提供了UTS、User、Mount、Network、PID、IPC等命名空間實現(xiàn)了主機(jī)名、用戶權(quán)限、文件系統(tǒng)、網(wǎng)絡(luò)、進(jìn)程號、進(jìn)程間通信等六項資源隔離功能。通過調(diào)用clone()函數(shù)并傳入相應(yīng)的系統(tǒng)調(diào)用參數(shù)創(chuàng)建容器進(jìn)程,可實現(xiàn)對應(yīng)資源內(nèi)容的隔離,具體情況如表1所示。表1:Namespaces隔離機(jī)制命名空間系統(tǒng)調(diào)用參數(shù)隔離內(nèi)容Linux內(nèi)核版本UTSCLONE_NEWUTS主機(jī)名和域名2.6.19IPCCLONE_NEWIPC信號量、信息隊列和共享內(nèi)存2.6.19PIDCLONE_NEWPID進(jìn)程編號2.6.24Networ
7、kCLONE_NEWNET網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)棧、端口等2.6.29MountCLONE_NEWNS掛載點(文件系統(tǒng))2.4.19UserCLONE_NEWUSER用戶和用戶組3.8對于某個進(jìn)程而言,可通過查看/proc/PID/ns文件,獲取該進(jìn)程下的命名空間隔離情況,如圖1所示。其中,每一項命名空間都擁有一個編號對其進(jìn)行唯一標(biāo)識,如果宿主機(jī)中兩個進(jìn)程指向的命名空間編號相同,則表示他們同在一個命名空間之下。圖1:進(jìn)程命名空間2、CGroupsCGroups(Control Groups,控制組)機(jī)制最早于2006年由Google提出,目前是Linux內(nèi)核的一種機(jī)制,可以實現(xiàn)對任務(wù)組(進(jìn)程組或線程組
8、)使用的物理資源(CPU、內(nèi)存、I/O等)進(jìn)行限制和記錄,通過多種度量標(biāo)準(zhǔn)為各個容器相對公平地分配資源,以防止資源濫用的情況。在實際應(yīng)用中,CGroups會為每個執(zhí)行任務(wù)創(chuàng)建一個鉤子,在任務(wù)執(zhí)行的過程中涉及到資源分配使用時,就會觸發(fā)鉤子上的函數(shù)并對相應(yīng)的資源進(jìn)行檢測,從而對資源進(jìn)行限制和優(yōu)先級分配。CGroups提供了資源限制(Resource Limitation)、優(yōu)先級分配(Prioritization)、資源統(tǒng)計(Accounting)、任務(wù)控制(Control)四個功能,包含blkio、cpu、cpuacct、cpuset、devices、freezer、memory、perf_ev
9、ent、net_cls、net_prio、ns、hugetlb等子系統(tǒng),每種子系統(tǒng)獨立地控制一種資源,可分別實現(xiàn)塊設(shè)備輸入/輸出限制、CPU使用控制、生成CPU資源使用情況報告、內(nèi)存使用量限制等功能。幾個主要子系統(tǒng)的具體功能如表2所示。表2:CGroups子系統(tǒng)子系統(tǒng)功能blkio為塊設(shè)備(如磁盤、固態(tài)硬盤等物理驅(qū)動設(shè)備)設(shè)定輸入/輸出限制cpu通過調(diào)度程序控制任務(wù)對CPU的使用cpuacct生成任務(wù)對CPU資源使用情況的報告cpuset為任務(wù)分配獨立的CPU和內(nèi)存devices開啟或關(guān)閉任務(wù)對設(shè)備的訪問freezer掛起或恢復(fù)任務(wù)memory設(shè)定任務(wù)對內(nèi)存的使用量限制,生成任務(wù)對內(nèi)存資源使用
10、情況的報告3、安全性傳統(tǒng)虛擬化技術(shù)與Docker容器技術(shù)在運行時的安全性差異主要體現(xiàn)在隔離性方面,包括進(jìn)程隔離、文件系統(tǒng)隔離、設(shè)備隔離、進(jìn)程間通信隔離、網(wǎng)絡(luò)隔離、資源限制等。在Docker容器環(huán)境中,由于各容器共享操作系統(tǒng)內(nèi)核,而容器僅為運行在宿主機(jī)上的若干進(jìn)程,其安全性特別是隔離性與傳統(tǒng)虛擬機(jī)相比在理論上與實際上都存在一定的差距。二、Docker容器安全風(fēng)險分析根據(jù)Docker容器的主要特點及其在安全應(yīng)用中的實際問題,本文將Docker容器技術(shù)應(yīng)用中可能存在的技術(shù)性安全風(fēng)險分為鏡像安全風(fēng)險、容器虛擬化安全風(fēng)險、網(wǎng)絡(luò)安全風(fēng)險等類型進(jìn)行具體分析,如圖2所示。圖2:容器安全風(fēng)險分類1、鏡像安全風(fēng)險
11、Docker鏡像是Docker容器的靜態(tài)表示形式,鏡像的安全決定了容器的運行時安全。Docker容器官方鏡像倉庫Docker Hub中的鏡像可能由個人開發(fā)者上傳,其數(shù)量豐富、版本多樣,但質(zhì)量參差不齊,甚至存在包含惡意漏洞的惡意鏡像,因而可能存在較大的安全風(fēng)險。具體而言,Docker鏡像的安全風(fēng)險分布在創(chuàng)建過程、獲取來源、獲取途徑等方方面面。1、Dockerfile安全問題Docker鏡像的生成主要包括兩種方式,一種是對運行中的動態(tài)容器通過docker commit命令進(jìn)行打包,另一種是通過docker build命令執(zhí)行Dockerfile文件進(jìn)行創(chuàng)建。為了確保最小安裝原則,同時考慮容器的易維
12、護(hù)性,一般推薦采用Dockerfile文件構(gòu)建容器鏡像,即在基礎(chǔ)鏡像上進(jìn)行逐層應(yīng)用添加操作。Dockerfile是包含用于組合鏡像命令的文本文件,一般由基礎(chǔ)鏡像信息(FROM)、維護(hù)者信息(MAINTAINER)、鏡像操作指令(RUN、ADD、COPY等)、容器啟動時執(zhí)行指令(CMD等)四個部分組成,Docker可通過讀取Dockerfile中的命令創(chuàng)建容器鏡像。Dockerfile文件內(nèi)容在一定程度上決定了Docker鏡像的安全性,其安全風(fēng)險具體包括但不限于以下情況:如果Dockerfile存在漏洞或被插入惡意腳本,那么生成的容器也可能產(chǎn)生漏洞或被惡意利用。例如,攻擊者可構(gòu)造特殊的Docke
13、rfile壓縮文件,在編譯時觸發(fā)漏洞獲取執(zhí)行任意代碼的權(quán)限。如果在Dockerfile中沒有指定USER,Docker將默認(rèn)以root用戶的身份運行該Dockerfile創(chuàng)建的容器,如果該容器遭到攻擊,那么宿主機(jī)的root訪問權(quán)限也可能會被獲取。如果在Dockerfile文件中存儲了固定密碼等敏感信息并對外進(jìn)行發(fā)布,則可能導(dǎo)致數(shù)據(jù)泄露的風(fēng)險。如果在Dockerfile的編寫中添加了不必要的應(yīng)用,如SSH、Telnet等,則會產(chǎn)生攻擊面擴(kuò)大的風(fēng)險。2、鏡像漏洞對于大多數(shù)一般的開發(fā)者而言,通常需要獲取一系列基礎(chǔ)鏡像進(jìn)行容器云的部署和進(jìn)一步開發(fā),因此,基礎(chǔ)鏡像的安全性在一定程度上決定了容器云環(huán)境的安
14、全性。鏡像漏洞安全風(fēng)險具體包括鏡像中的軟件含有CVE漏洞、攻擊者上傳含有惡意漏洞的鏡像等情況。 CVE漏洞由于鏡像通常由基礎(chǔ)操作系統(tǒng)與各類應(yīng)用軟件構(gòu)成,因此,含有CVE漏洞的應(yīng)用軟件同樣也會向Docker鏡像中引入CVE漏洞。鏡像的獲取通常是通過官方鏡像倉庫Docker Hub或網(wǎng)易、阿里云等提供的第三方鏡像倉庫。然而,根據(jù)對Docker Hub中鏡像安全漏洞的相關(guān)研究,無論是社區(qū)鏡像還是官方鏡像,其平均漏洞數(shù)均接近200個,包括nginx、mysql、redis在內(nèi)的常用鏡像都含有高危漏洞。 惡意漏洞惡意用戶可能將含有后門、病毒等惡意漏洞的鏡像上傳至官方鏡像庫。2018年6月,安全廠商For
15、tinet和Kromtech在Docker Hub上發(fā)現(xiàn)17個包含用于數(shù)字貨幣挖礦惡意程序的Docker鏡像,而這些惡意鏡像當(dāng)時已有500萬次的下載量。目前,由于Docker應(yīng)用在世界范圍內(nèi)具有廣泛性,全網(wǎng)針對Docker容器的攻擊很多都被用于進(jìn)行數(shù)字貨幣挖礦,為攻擊者帶來實際經(jīng)濟(jì)利益,損害Docker用戶的正常使用。3、鏡像倉庫安全作為搭建私有鏡像存儲倉庫的工具,Docker Registry的應(yīng)用安全性也必須得到保證。鏡像倉庫的安全風(fēng)險主要包括倉庫本身的安全風(fēng)險和鏡像拉取過程中的傳輸安全風(fēng)險。倉庫自身安全:如果鏡像倉庫特別是私有鏡像倉庫被惡意攻擊者所控制,那么其中所有鏡像的安全性將無法得到
16、保證。例如,如果私有鏡像倉庫由于配置不當(dāng)而開啟了2357端口,將會導(dǎo)致私有倉庫暴露在公網(wǎng)中,攻擊者可直接訪問私有倉庫并篡改鏡像內(nèi)容,造成倉庫內(nèi)鏡像的安全隱患。鏡像拉取安全:如何保證容器鏡像從鏡像倉庫到用戶端的完整性也是鏡像倉庫面臨的一個重要安全問題。由于用戶以明文形式拉取鏡像,如果用戶在與鏡像倉庫交互的過程中遭遇了中間人攻擊,導(dǎo)致拉取的鏡像在傳輸過程中被篡改或被冒名發(fā)布惡意鏡像,會造成鏡像倉庫和用戶雙方的安全風(fēng)險。Docker已在其1.8版本后采用內(nèi)容校驗機(jī)制解決中間人攻擊的問題。2、容器虛擬化安全風(fēng)險與傳統(tǒng)虛擬機(jī)相比,Docker容器不擁有獨立的資源配置,且沒有做到操作系統(tǒng)內(nèi)核層面的隔離,因
17、此可能存在資源隔離不徹底與資源限制不到位所導(dǎo)致的安全風(fēng)險。1、容器隔離問題對于Docker容器而言,由于容器與宿主機(jī)共享操作系統(tǒng)內(nèi)核,因此存在容器與宿主機(jī)之間、容器與容器之間隔離方面的安全風(fēng)險,具體包括進(jìn)程隔離、文件系統(tǒng)隔離、進(jìn)程間通信隔離等。雖然Docker通過Namespaces進(jìn)行了文件系統(tǒng)資源的基本隔離,但仍有/sys、/proc/sys、/proc/bus、/dev、time、syslog等重要系統(tǒng)文件目錄和命名空間信息未實現(xiàn)隔離,而是與宿主機(jī)共享相關(guān)資源。針對容器隔離安全風(fēng)險問題,主要存在以下兩種隔離失效的情況:攻擊者可能通過對宿主機(jī)內(nèi)核進(jìn)行攻擊達(dá)到攻擊其中某個容器的目的。由于容器
18、所在主機(jī)文件系統(tǒng)存在聯(lián)合掛載的情況,惡意用戶控制的容器也可能通過共同掛載的文件系統(tǒng)訪問其他容器或宿主機(jī),造成數(shù)據(jù)安全問題。2、容器逃逸攻擊容器逃逸攻擊指的是容器利用系統(tǒng)漏洞,“逃逸”出了其自身所擁有的權(quán)限,實現(xiàn)了對宿主機(jī)和宿主機(jī)上其他容器的訪問。由于容器與宿主機(jī)共享操作系統(tǒng)內(nèi)核,為了避免容器獲取宿主機(jī)的root權(quán)限,通常不允許采用特權(quán)模式運行Docker容器。在容器逃逸案例中,最為著名的是shocker.c程序,其通過調(diào)用open_by_handle_at函數(shù)對宿主機(jī)文件系統(tǒng)進(jìn)行暴力掃描,以獲取宿主機(jī)的目標(biāo)文件內(nèi)容。由于Docker1.0之前版本對容器能力(Capability)使用黑名單策略
19、進(jìn)行管理,并沒有限制CAP_DAC_READ_SEARCH能力,賦予了shocker.c程序調(diào)用open_by_handle_at函數(shù)的能力,導(dǎo)致容器逃逸的發(fā)生。因此,對容器能力的限制不當(dāng)是可能造成容器逃逸等安全問題的風(fēng)險成因之一。所幸的是,Docker在后續(xù)版本中對容器能力采用白名單管理,避免了默認(rèn)創(chuàng)建的容器通過shocker.c案例實現(xiàn)容器逃逸的情況。此外,在Black Hat USA 2019會議中,來自Capsule8的研究員也給出了若干Docker容器引擎漏洞與容器逃逸攻擊方法,包括CVE-2019-5736、CVE-2018-18955、CVE-2016-5195等可能造成容器逃逸
20、的漏洞。CVE-2019-5736是runC的一個安全漏洞,導(dǎo)致18.09.2版本前的Docker允許惡意容器覆蓋宿主機(jī)上的runC二進(jìn)制文件。runC是用于創(chuàng)建和運行Docker容器的CLI工具,該漏洞使攻擊者能夠以root身份在宿主機(jī)上執(zhí)行任意命令。CVE-2018-18955漏洞涉及到User命名空間中的嵌套用戶命名空間,用戶命名空間中針對uid(用戶ID)和gid(用戶組ID)的ID映射機(jī)制保證了進(jìn)程擁有的權(quán)限不會逾越其父命名空間的范疇。該漏洞利用創(chuàng)建用戶命名空間的子命名空間時損壞的ID映射實現(xiàn)提權(quán)。CVE-2016-5195臟牛(Dirty CoW)Linux內(nèi)核提權(quán)漏洞可以使低權(quán)限
21、用戶在多版本Linux系統(tǒng)上實現(xiàn)本地提權(quán),進(jìn)而可能導(dǎo)致容器逃逸的發(fā)生。Linux內(nèi)核函數(shù)get_user_page在處理Copy-on-Write時可能產(chǎn)生競態(tài)條件,導(dǎo)致出現(xiàn)向進(jìn)程地址空間內(nèi)只讀內(nèi)存區(qū)域?qū)憯?shù)據(jù)的機(jī)會,攻擊者可進(jìn)一步修改su或者passwd程序以獲取root權(quán)限。3、拒絕服務(wù)攻擊由于容器與宿主機(jī)共享CPU、內(nèi)存、磁盤空間等硬件資源,且Docker本身對容器使用的資源并沒有默認(rèn)限制,如果單個容器耗盡宿主機(jī)的計算資源或存儲資源(例如進(jìn)程數(shù)量、存儲空間等)可能導(dǎo)致宿主機(jī)或其他容器的拒絕服務(wù)。 計算型DoS攻擊Fork Bomb是一類典型的針對計算資源的拒絕服務(wù)攻擊手段,其可通過遞歸方式
22、無限循環(huán)調(diào)用fork()系統(tǒng)函數(shù)快速創(chuàng)建大量進(jìn)程。由于宿主機(jī)操作系統(tǒng)內(nèi)核支持的進(jìn)程總數(shù)有限,如果某個容器遭到了Fork Bomb攻擊,那么就有可能存在由于短時間內(nèi)在該容器內(nèi)創(chuàng)建過多進(jìn)程而耗盡宿主機(jī)進(jìn)程資源的情況,宿主機(jī)及其他容器就無法再創(chuàng)建新的進(jìn)程。 存儲型DoS攻擊針對存儲資源,雖然Docker通過Mount命名空間實現(xiàn)了文件系統(tǒng)的隔離,但CGroups并沒有針對AUFS文件系統(tǒng)進(jìn)行單個容器的存儲資源限制,因此采用AUFS作為存儲驅(qū)動具有一定的安全風(fēng)險。如果宿主機(jī)上的某個容器向AUFS文件系統(tǒng)中不斷地進(jìn)行寫文件操作,則可能會導(dǎo)致宿主機(jī)存儲設(shè)備空間不足,無法再滿足其自身及其他容器的數(shù)據(jù)存儲需求
23、。3、網(wǎng)絡(luò)安全風(fēng)險網(wǎng)絡(luò)安全風(fēng)險是互聯(lián)網(wǎng)中所有信息系統(tǒng)所面臨的重要風(fēng)險,不論是物理設(shè)備還是虛擬機(jī),都存在難以完全規(guī)避的網(wǎng)絡(luò)安全風(fēng)險問題。而在輕量級虛擬化的容器網(wǎng)絡(luò)環(huán)境中,其網(wǎng)絡(luò)安全風(fēng)險較傳統(tǒng)網(wǎng)絡(luò)而言更為復(fù)雜嚴(yán)峻。1、容器網(wǎng)絡(luò)攻擊Docker提供橋接網(wǎng)絡(luò)、MacVLAN、覆蓋網(wǎng)絡(luò)(Overlay)等多種組網(wǎng)模式,可分別實現(xiàn)同一宿主機(jī)內(nèi)容器互聯(lián)、跨宿主機(jī)容器互聯(lián)、容器集群網(wǎng)絡(luò)等功能。 網(wǎng)橋模式Docker默認(rèn)采用網(wǎng)橋模式,利用iptables進(jìn)行NAT轉(zhuǎn)換和端口映射。Docker將所有容器都通過虛擬網(wǎng)絡(luò)接口對連接在一個名為docker0的虛擬網(wǎng)橋上,作為容器的默認(rèn)網(wǎng)關(guān),而該網(wǎng)橋與宿主機(jī)直接相連。容器
24、內(nèi)部的數(shù)據(jù)包經(jīng)過虛擬網(wǎng)絡(luò)接口對到達(dá)docker0,實現(xiàn)同一子網(wǎng)內(nèi)不同容器間的通信。在網(wǎng)橋模式下,同一宿主機(jī)內(nèi)各容器間可以互相通信,而宿主機(jī)外部無法通過分配給容器的IP地址對容器進(jìn)行外部訪問。由于缺乏容器間的網(wǎng)絡(luò)安全管理機(jī)制,無法對同一宿主機(jī)內(nèi)各容器之間的網(wǎng)絡(luò)訪問權(quán)限進(jìn)行限制。具體而言,由于各容器之間通過宿主機(jī)內(nèi)部網(wǎng)絡(luò)的docker0網(wǎng)橋連接以實現(xiàn)路由和NAT轉(zhuǎn)換,如果容器間沒有防火墻等保護(hù)機(jī)制,則攻擊者可通過某個容器對宿主機(jī)內(nèi)的其他容器進(jìn)行ARP欺騙、嗅探、廣播風(fēng)暴等攻擊,導(dǎo)致信息泄露、影響網(wǎng)絡(luò)正常運行等安全后果。因此,如果在同一臺宿主機(jī)上部署的多個容器沒有進(jìn)行合理的網(wǎng)絡(luò)配置進(jìn)行訪問控制邊界隔
25、離,將可能產(chǎn)生容器間的網(wǎng)絡(luò)安全風(fēng)險。 MacVLANMacVLAN是一種輕量級網(wǎng)絡(luò)虛擬化技術(shù),通過與主機(jī)的網(wǎng)絡(luò)接口連接實現(xiàn)了與實體網(wǎng)絡(luò)的隔離性。MacVLAN允許為同一個物理網(wǎng)卡配置多個擁有獨立MAC地址的網(wǎng)絡(luò)接口并可分別配置IP地址,實現(xiàn)了網(wǎng)卡的虛擬化。MacVLAN模式無需創(chuàng)建網(wǎng)橋,即無需NAT轉(zhuǎn)換和端口映射就可以直接通過網(wǎng)絡(luò)接口連接到物理網(wǎng)絡(luò),不同MacVLAN網(wǎng)絡(luò)間不能在二層網(wǎng)絡(luò)上進(jìn)行通信。然而,處于同一虛擬網(wǎng)絡(luò)下各容器間同樣沒有進(jìn)行訪問權(quán)限控制,因此MacVLAN模式依然存在與網(wǎng)橋模式類似的內(nèi)部網(wǎng)絡(luò)攻擊的安全風(fēng)險。 Overlay網(wǎng)絡(luò)Overlay網(wǎng)絡(luò)架構(gòu)主要用于構(gòu)建分布式容器集群,
26、通過VxLAN技術(shù)在不同主機(jī)之間的Underlay網(wǎng)絡(luò)上建立虛擬網(wǎng)絡(luò),以搭建跨主機(jī)容器集群,實現(xiàn)不同物理主機(jī)中同一Overlay網(wǎng)絡(luò)下的容器間通信。與其他組網(wǎng)模式一樣,Overlay網(wǎng)絡(luò)也沒有對同一網(wǎng)絡(luò)內(nèi)各容器間的連接進(jìn)行訪問控制。此外,由于VxLAN網(wǎng)絡(luò)流量沒有加密,需要在設(shè)定IPSec隧道參數(shù)時選擇加密以保證容器網(wǎng)絡(luò)傳輸內(nèi)容安全。因此,無論采用何種網(wǎng)絡(luò)連接模式,都難以避免容器間互相攻擊的安全風(fēng)險。2、網(wǎng)絡(luò)DoS攻擊由于網(wǎng)絡(luò)虛擬化的存在,容器網(wǎng)絡(luò)面臨著與傳統(tǒng)網(wǎng)絡(luò)不同的DoS攻擊安全風(fēng)險。Docker容器網(wǎng)絡(luò)的DoS攻擊分為內(nèi)部威脅和外部威脅兩種主要形式。內(nèi)部威脅:針對Docker容器網(wǎng)絡(luò)環(huán)境
27、,DoS攻擊可不通過物理網(wǎng)卡而在宿主機(jī)內(nèi)部的容器之間進(jìn)行,攻擊者通過某個容器向其他容器發(fā)起DoS攻擊可能降低其他容器的網(wǎng)絡(luò)數(shù)據(jù)處理能力。因此,存在容器虛擬網(wǎng)絡(luò)間的DoS攻擊風(fēng)險。外部威脅:由于同一臺宿主機(jī)上的所有容器共享宿主機(jī)的物理網(wǎng)卡資源,若外部攻擊者使用包含大量受控主機(jī)的僵尸網(wǎng)絡(luò)向某一個目標(biāo)容器發(fā)送大量數(shù)據(jù)包進(jìn)行DDoS攻擊,將可能占滿宿主機(jī)的網(wǎng)絡(luò)帶寬資源,造成宿主機(jī)和其他容器的拒絕服務(wù)。三、Docker容器安全機(jī)制與解決方案1、容器虛擬化安全在傳統(tǒng)虛擬化技術(shù)架構(gòu)中,Hypervisor虛擬機(jī)監(jiān)視器是虛擬機(jī)資源的管理與調(diào)度模塊。而在容器架構(gòu)中,由于不含有Hypervisor層,因此需要依靠
28、操作系統(tǒng)內(nèi)核層面的相關(guān)機(jī)制對容器進(jìn)行安全的資源管理。1、容器資源隔離與限制在資源隔離方面,與采用虛擬化技術(shù)實現(xiàn)操作系統(tǒng)內(nèi)核級隔離不同,Docker通過Linux內(nèi)核的Namespace機(jī)制實現(xiàn)容器與宿主機(jī)之間、容器與容器之間資源的相對獨立。通過為各運行容器創(chuàng)建自己的命名空間,保證了容器中進(jìn)程的運行不會影響到其他容器或宿主機(jī)中的進(jìn)程。在資源限制方面,Docker通過CGroups實現(xiàn)宿主機(jī)中不同容器的資源限制與審計,包括對CPU、內(nèi)存、I/O等物理資源進(jìn)行均衡化配置,防止單個容器耗盡所有資源造成其他容器或宿主機(jī)的拒絕服務(wù),保證所有容器的正常運行。但是,CGroups未實現(xiàn)對磁盤存儲資源的限制。若
29、宿主機(jī)中的某個容器耗盡了宿主機(jī)的所有存儲空間,那么宿主機(jī)中的其他容器無法再進(jìn)行數(shù)據(jù)寫入。Docker提供的storage-opt=磁盤限額僅支持Device Mapper文件系統(tǒng),而Linux系統(tǒng)本身采用的磁盤限額機(jī)制是基于用戶和文件系統(tǒng)的quota技術(shù),難以針對Docker容器實現(xiàn)基于進(jìn)程或目錄的磁盤限額。因此,可考慮采用以下方法實現(xiàn)容器的磁盤存儲限制:為每個容器創(chuàng)建單獨用戶,限制每個用戶的磁盤使用量;選擇XFS等支持針對目錄進(jìn)行磁盤使用量限制的文件系統(tǒng);為每個容器創(chuàng)建單獨的虛擬文件系統(tǒng),具體步驟為創(chuàng)建固定大小的磁盤文件,并從該磁盤文件創(chuàng)建虛擬文件系統(tǒng),然后將該虛擬文件系統(tǒng)掛載到指定的容器目
30、錄。此外,在默認(rèn)情況下,容器可以使用主機(jī)上的所有內(nèi)存??梢允褂脙?nèi)存限制機(jī)制來防止一個容器消耗所有主機(jī)資源的拒絕服務(wù)攻擊,具體可使用使用-m或-memory參數(shù)運行容器。(命令示例:dockerrun運行參數(shù)-memory內(nèi)存大小容器鏡像名或ID命令)2、容器能力限制Linux內(nèi)核能力表示進(jìn)程所擁有的系統(tǒng)調(diào)用權(quán)限,決定了程序的系統(tǒng)調(diào)用能力。容器的默認(rèn)能力包括CHOWN、DAC_OVERRIDE、FSETID、SETGID、SETUID、SETFCAP、NET_RAW、MKNOD、SYS_REBOOT、SYS_CHROOT、KILL、NET_BIND_SERVICE、AUDIT_WRITE等等,具
31、體功能如表3所示。表3:容器默認(rèn)能力容器默認(rèn)能力作用CHOWN允許任意更改文件UID以及GIDDAC_OVERRIDE允許忽略文件的讀、寫、執(zhí)行訪問權(quán)限檢查FSETID允許文件修改后保留setuid/setgid標(biāo)志位SETGID允許改變進(jìn)程組IDSETUID允許改變進(jìn)程用戶IDSETFCAP允許向其他進(jìn)程轉(zhuǎn)移或刪除能力NET_RAW允許創(chuàng)建RAW和PACKET套接字MKNOD允許使用mknod創(chuàng)建指定文件SYS_REBOOT允許使用reboot或者kexec_loadSYS_CHROOT允許使用chrootKILL允許發(fā)送信號NET_BIND_SERVICE允許綁定常用端口號(端口號小于10
32、24)AUDIT_WRITE允許審計日志寫入如果對容器能力不加以適當(dāng)限制,可能會存在以下安全隱患:內(nèi)部因素:在運行Docker容器時,如果采用默認(rèn)的內(nèi)核功能配置可能會產(chǎn)生容器的隔離問題。外部因素:不必要的內(nèi)核功能可能導(dǎo)致攻擊者通過容器實現(xiàn)對宿主機(jī)內(nèi)核的攻擊。因此,不當(dāng)?shù)娜萜髂芰ε渲每赡軙U(kuò)大攻擊面,增加容器與宿主機(jī)面臨的安全風(fēng)險,在執(zhí)行docker run命令運行Docker容器時可根據(jù)實際需求通過cap-add或cap-drop配置接口對容器的能力進(jìn)行增刪。(命令示例:docker run -cap-drop ALL -cap-add SYS_TIME ntpd /bin/sh)3、強(qiáng)制訪問
33、控制強(qiáng)制訪問控制(Mandatory Access Control, MAC)是指每一個主體(包括用戶和程序)和客體都擁有固定的安全標(biāo)記,主體能否對客體進(jìn)行相關(guān)操作,取決于主體和客體所擁有安全標(biāo)記的關(guān)系。在Docker容器應(yīng)用環(huán)境下,可通過強(qiáng)制訪問控制機(jī)制限制容器的訪問資源。Linux內(nèi)核的強(qiáng)制訪問控制機(jī)制包括SELinux、AppArmor等。 SELinux機(jī)制SELinux(Security-Enhanced Linux)是Linux內(nèi)核的強(qiáng)制訪問控制實現(xiàn),由美國國家安全局(NSA)發(fā)起,用以限制進(jìn)程的資源訪問,即進(jìn)程僅能訪問其任務(wù)所需的文件資源。因此,可通過SELinux對Docker
34、容器的資源訪問進(jìn)行控制。在啟動Docker daemon守護(hù)進(jìn)程時,可通過將selinux-enabled參數(shù)設(shè)為true,從而在Docker容器中使用SELinux。SELinux可以使經(jīng)典的shocker.c程序失效,使其無法逃逸出Docker容器實現(xiàn)對宿主機(jī)資源的訪問。(命令示例:docker daemon -selinux-enabled = true) AppArmor機(jī)制與SELinux類似,AppArmor(Application Armor,應(yīng)用程序防護(hù))也是Linux的一種強(qiáng)制訪問控制機(jī)制,其作用是對可執(zhí)行程序進(jìn)行目錄和文件讀寫、網(wǎng)絡(luò)端口訪問和讀寫等權(quán)限的控制。在Docker
35、 daemon啟動后會在/etc/apparmor.d/docker自動創(chuàng)建AppArmor的默認(rèn)配置文件docker-default,可通過在該默認(rèn)配置文件中新增訪問控制規(guī)則的方式對容器進(jìn)行權(quán)限控制,同時可在啟動容器時通過security-opt指定其他配置文件。例如,在配置文件中加入一行deny /etc/hosts rwklx限制對/etc/hosts的獲取,同樣可使shocker.c容器逃逸攻擊失效。(命令示例:docker run -rm -ti -cap-add=all -security-opt apparmor:docker-default shocker bash)4、Sec
36、comp機(jī)制Seccomp(Secure Computing Mode)是Linux內(nèi)核提供的安全特性,可實現(xiàn)應(yīng)用程序的沙盒機(jī)制構(gòu)建,以白名單或黑名單的方式限制進(jìn)程能夠進(jìn)行的系統(tǒng)調(diào)用范圍。在Docker中,可通過為每個容器編寫json格式的seccomp profile實現(xiàn)對容器中進(jìn)程系統(tǒng)調(diào)用的限制。在seccomp profile中,可定義以下行為對進(jìn)程的系統(tǒng)調(diào)用做出響應(yīng):SCMP_ACT_KILL:當(dāng)進(jìn)程進(jìn)行對應(yīng)的系統(tǒng)調(diào)用時,內(nèi)核發(fā)出SIGSYS信號終止該進(jìn)程,該進(jìn)程不會接受到這個信號;SCMP_ACT_TRAP:當(dāng)進(jìn)程進(jìn)行對應(yīng)的系統(tǒng)調(diào)用時,該進(jìn)程會接收到SIGSYS信號,并改變自身行為;
37、SCMP_ACT_ERRNO:當(dāng)進(jìn)程進(jìn)行對應(yīng)的系統(tǒng)調(diào)用時,系統(tǒng)調(diào)用失敗,進(jìn)程會接收到errno返回值;SCMP_ACT_TRACE:當(dāng)進(jìn)程進(jìn)行對應(yīng)的系統(tǒng)調(diào)用時,進(jìn)程會被跟蹤;SCMP_ACT_ALLOW:允許進(jìn)程進(jìn)行對應(yīng)的系統(tǒng)調(diào)用行為。默認(rèn)情況下,在Docker容器的啟動過程中會使用默認(rèn)的seccomp profile,可使用security-opt seccomp選項使用特定的seccomp profile。(命令示例:docker run -rm -it -security-opt seccomp:/path/to/seccomp/profile.jsonhello-world)2、容器安
38、全管理1、鏡像倉庫安全 內(nèi)容信任機(jī)制Docker的內(nèi)容信任(Content Trust)機(jī)制可保護(hù)鏡像在鏡像倉庫與用戶之間傳輸過程中的完整性。目前,Docker的內(nèi)容信任機(jī)制默認(rèn)關(guān)閉,需要手動開啟。內(nèi)容信任機(jī)制啟用后,鏡像發(fā)布者可對鏡像進(jìn)行簽名,而鏡像使用者可以對鏡像簽名進(jìn)行驗證。具體而言,鏡像構(gòu)建者在通過docker build命令運行Dockerfile文件前,需要通過手動或腳本方式將DOCKER_CONTENT_TRUST環(huán)境變量置為1進(jìn)行啟用。在內(nèi)容信任機(jī)制開啟后,push、build、create、pull、run等命令均與內(nèi)容信任機(jī)制綁定,只有通過內(nèi)容信任驗證的鏡像才可成功運行這些
39、操作。例如,Dockerfile中如果包含未簽名的基礎(chǔ)鏡像,將無法成功通過docker build進(jìn)行鏡像構(gòu)建。(命令示例:export DOCKER_CONTENT_TRUST = 1) Notary項目Notary是一個從Docker中剝離的獨立開源項目,提供數(shù)據(jù)收集的安全性。Notary用于發(fā)布內(nèi)容的安全管理,可對發(fā)布的內(nèi)容進(jìn)行數(shù)字簽名,并允許用戶驗證內(nèi)容的完整性和來源。Notary的目標(biāo)是保證服務(wù)器與客戶端之間使用可信連接進(jìn)行交互,用于解決互聯(lián)網(wǎng)內(nèi)容發(fā)布的安全性,并未局限于容器應(yīng)用。在Docker容器場景中,Notary可支持Docker內(nèi)容信任機(jī)制。因此,可使用Notary構(gòu)建鏡像倉
40、庫服務(wù)器,實現(xiàn)對容器鏡像的簽名,對鏡像源認(rèn)證、鏡像完整性等安全需求提供更好的支持。2、鏡像安全掃描為了保證容器運行的安全性,在從公共鏡像倉庫獲取鏡像時需要對鏡像進(jìn)行安全檢查,防止存在安全隱患甚至惡意漏洞的鏡像運行,從源頭端預(yù)防安全事故的發(fā)生。鏡像漏洞掃描工具是一類常用的鏡像安全檢查輔助工具,可檢測出容器鏡像中含有的CVE漏洞。針對Docker鏡像的漏洞掃描,目前已經(jīng)有許多相關(guān)工具與解決方案,包括Docker Security Scanning、Clair、Anchore、Trivy、Aqua等等。 Docker Security Scanning服務(wù)Docker Security Scanni
41、ng是Docker官方推出的不開源鏡像漏洞掃描服務(wù),用于檢測Docker Cloud服務(wù)中私有倉庫和Docker Hub官方倉庫中的鏡像是否安全。Docker Security Scanning包括掃描觸發(fā)、掃描器、數(shù)據(jù)庫、附加元件框架以及CVE漏洞數(shù)據(jù)庫比對等服務(wù)。當(dāng)倉庫中有鏡像發(fā)生更新時,會自動啟動漏洞掃描;當(dāng)CVE漏洞數(shù)據(jù)庫發(fā)生更新時,也會實時更新鏡像漏洞掃描結(jié)果。 Clair工具Clair是一款開源的Docker鏡像漏洞掃描工具。與Docker Security Scanning類似,Clair通過對Docker鏡像進(jìn)行靜態(tài)分析并與公共漏洞數(shù)據(jù)庫關(guān)聯(lián),得到相應(yīng)的漏洞分析結(jié)果。Clair
42、主要包括以下模塊:Fetcher(獲取器):從公共的CVE漏洞源收集漏洞數(shù)據(jù);Detector(檢測器):對鏡像的每一個Layer進(jìn)行掃描,提取鏡像特征;Notifier(通知器):用于接收WebHook從公開CVE漏洞庫中的最新漏洞信息并進(jìn)行漏洞庫更新;Databases(數(shù)據(jù)庫):PostSQL數(shù)據(jù)庫存儲容器中的各個層和CVE漏洞; Trivy工具Trivy是一個簡單而全面的開源容器漏洞掃描程序。Trivy可檢測操作系統(tǒng)軟件包(Alpine、RHEL、CentOS等)和應(yīng)用程序依賴項(Bundler、Composer、npm、yarn等)的漏洞。此外,Trivy具有較高的易用性,只需安裝二
43、進(jìn)制文件并指定掃描容器的鏡像名稱即可執(zhí)行掃描。Trivy提供了豐富的功能接口,相比于其他容器鏡像漏洞掃描工具更適合自動化操作,可更好地滿足持續(xù)集成的需求。(命令示例:trivy 鏡像名)3、容器運行時監(jiān)控為了在系統(tǒng)運維層面保證容器運行的安全性,實現(xiàn)安全風(fēng)險的即時告警與應(yīng)急響應(yīng),需要對Docker容器運行時的各項性能指標(biāo)進(jìn)行實時監(jiān)控。針對Docker容器監(jiān)控的工具與解決方案包括docker stats、cAdvisor、Scout、DataDog、Sensu等等,其中最常見的是Docker原生的docker stats命令和Google的cAdvisor開源工具。 docker stats命令d
44、ocker stats是Docker自帶的容器資源使用統(tǒng)計命令,可用于對宿主機(jī)上的Docker容器的資源使用情況進(jìn)行手動監(jiān)控,具體內(nèi)容包括容器的基本信息、容器的CPU使用率、內(nèi)存使用率、內(nèi)存使用量與限制、塊設(shè)備I/O使用量、網(wǎng)絡(luò)I/O使用量、進(jìn)程數(shù)等信息。用戶可根據(jù)自身需求設(shè)置format參數(shù)控制docker stats 命令輸出的內(nèi)容格式。(命令示例:docker stats 容器名) cAdvisor工具由于docker stats只是簡單的容器資源查看命令,其可視化程度不高,同時不支持監(jiān)控數(shù)據(jù)的存儲。cAdvisor是由Google開源的容器監(jiān)控工具,優(yōu)化了docker stats在可視
45、化展示與數(shù)據(jù)存儲方面的缺陷。cAdvisor在宿主機(jī)上以容器方式運行,通過掛載在本地卷,可對同一臺宿主機(jī)上運行的所有容器進(jìn)行實時監(jiān)控和性能數(shù)據(jù)采集,具體包括CPU使用情況、內(nèi)存使用情況、網(wǎng)絡(luò)吞吐量、文件系統(tǒng)使用情況等信息,并提供本地基礎(chǔ)查詢界面和API接口,方便與其他第三方工具進(jìn)行搭配使用。cAdvisor默認(rèn)將數(shù)據(jù)緩存在內(nèi)存中,同時也提供不同的持久化存儲后端支持,可將監(jiān)控數(shù)據(jù)保存Google BigQuery、InfluxDB或Redis等數(shù)據(jù)庫中。cAdvisor基于Go語言開發(fā),利用CGroups獲取容器的資源使用信息,目前已被集成在Kubernetes中的Kubelet組件里作為默認(rèn)啟
46、動項。(命令示例:docker run -v /var/run:/var/run:rw-v/sys:/sys:ro-v/var/lib/docker:/var/lib/docker:ro-p8080:8080-d-namecadvisorgoogle/cadvisor)4、容器安全審計 Docker守護(hù)進(jìn)程審計在安全審計方面,對于運行Docker容器的宿主機(jī)而言,除需對主機(jī)Linux文件系統(tǒng)等進(jìn)行審計外,還需對Docker守護(hù)進(jìn)程的活動進(jìn)行審計。由于系統(tǒng)默認(rèn)不會對Docker守護(hù)進(jìn)程進(jìn)行審計,需要通過主動添加審計規(guī)則或修改規(guī)則文件進(jìn)行。(命令示例:auditctl -w /usr/bin/do
47、cker -k docker或修改/etc/audit/audit.rules文件) Docker相關(guān)文件目錄審計除Docker守護(hù)進(jìn)程之外,還需對與Docker的運行相關(guān)的文件和目錄進(jìn)行審計,同樣需要通過命令行添加審計規(guī)則或修改規(guī)則配置文件,具體文件和目錄如表4所示。表4:Docker相關(guān)文件和目錄審計需要審計的文件或目錄備注/var/lib/docker包含有關(guān)容器的所有信息/etc/docker包含Docker守護(hù)進(jìn)程和客戶端TLS通信的密鑰和證書docker.serviceDocker守護(hù)進(jìn)程運行參數(shù)配置文件docker.socket守護(hù)進(jìn)程運行socket/etc/default/d
48、ocker支持Docker守護(hù)進(jìn)程各種參數(shù)/etc/default/daemon.json支持Docker守護(hù)進(jìn)程各種參數(shù)/usr/bin/docker-containerdDocker可用containerd生成容器/usr/bin/docker-runcDocker可用runC生成容器Docker公司與美國互聯(lián)網(wǎng)安全中心(CIS)聯(lián)合制定了Docker最佳安全實踐CIS Docker Benchmark,目前最新版本為1.2.0。為了幫助Docker用戶對其部署的容器環(huán)境進(jìn)行安全檢查,Docker官方提供了Docker Bench for Security安全配置檢查腳本工具docker-bench-security,其檢查依據(jù)便是CIS制定的Docker最佳安全實踐。3、容器網(wǎng)絡(luò)安全1、容器間流量限制由于Docker容器默認(rèn)的網(wǎng)橋模式不會對網(wǎng)絡(luò)流量進(jìn)行控制和限制,為了防止?jié)撛诘木W(wǎng)絡(luò)DoS攻擊風(fēng)險,需要根據(jù)實際需求對網(wǎng)絡(luò)流量進(jìn)行相應(yīng)的配置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共資源優(yōu)化配置-第2篇-深度研究
- 大數(shù)據(jù)標(biāo)準(zhǔn)化法規(guī)研究-深度研究
- K歌平臺算法優(yōu)化研究-深度研究
- 光聲顯微鏡技術(shù)進(jìn)展-深度研究
- 智慧城市物聯(lián)網(wǎng)數(shù)據(jù)挖掘-深度研究
- 數(shù)字經(jīng)濟(jì)與減貧機(jī)制-深度研究
- 農(nóng)村非物質(zhì)文化遺產(chǎn)保護(hù)-第1篇-深度研究
- 云平臺在教師培訓(xùn)中的應(yīng)用-深度研究
- 公共服務(wù)均等化路徑-深度研究
- 休閑時間利用研究-深度研究
- 2025年度版權(quán)授權(quán)協(xié)議:游戲角色形象設(shè)計與授權(quán)使用3篇
- 心肺復(fù)蘇課件2024
- 《城鎮(zhèn)燃?xì)忸I(lǐng)域重大隱患判定指導(dǎo)手冊》專題培訓(xùn)
- 湖南財政經(jīng)濟(jì)學(xué)院專升本管理學(xué)真題
- 全國身份證前六位、區(qū)號、郵編-編碼大全
- 2024-2025學(xué)年福建省廈門市第一中學(xué)高一(上)適應(yīng)性訓(xùn)練物理試卷(10月)(含答案)
- 《零售學(xué)第二版教學(xué)》課件
- 廣東省珠海市香洲區(qū)2023-2024學(xué)年四年級下學(xué)期期末數(shù)學(xué)試卷
- 房地產(chǎn)行業(yè)職業(yè)生涯規(guī)劃
- 江蘇省建筑與裝飾工程計價定額(2014)電子表格版
- MOOC 數(shù)字電路與系統(tǒng)-大連理工大學(xué) 中國大學(xué)慕課答案
評論
0/150
提交評論