什么是云計(jì)算?
在談到云安全的概念就不得不聊一下云計(jì)算了。簡(jiǎn)而言之,云計(jì)算就是一種新興的計(jì)算資源利用方式,云計(jì)算的服務(wù)商通過(guò)對(duì)硬件資源的虛擬化,將基礎(chǔ)IT資源變成了可以自由調(diào)度的資源池,從而實(shí)現(xiàn)IT資源的按需分配,向客戶提供按使用付費(fèi)的云計(jì)算服務(wù)。用戶可以根據(jù)業(yè)務(wù)的需求動(dòng)態(tài)調(diào)整所需的資源,而云服務(wù)商也可以提高自己的資源使用效率,降低服務(wù)成本,通過(guò)多種不同類型的服務(wù)方式為用戶提供計(jì)算、存儲(chǔ)和數(shù)據(jù)業(yè)務(wù)的支持。
云計(jì)算的部署模式
1.?公有云(Public Cloud)——出租給公眾的大型的基礎(chǔ)設(shè)施的云
由云服務(wù)提供商擁有和管理,通過(guò)互聯(lián)網(wǎng)向企業(yè)或個(gè)人提供計(jì)算資源,就類似城市的水電,居民共享,每家每戶各取所需,按量統(tǒng)計(jì)付費(fèi)。
2.?私有云(Private Cloud)——企業(yè)利用自有或租用的基礎(chǔ)設(shè)施資源自建的云
單個(gè)組織專用的云服務(wù),而無(wú)需與其他組織共享資源,私有云可以在內(nèi)部管理,也可以由第三方云服務(wù)提供商托管,而公有云和私有云的區(qū)別,就好比自家的洗衣機(jī)(私有)和干洗店(對(duì)公)的區(qū)別。
3.?混合云(Hybrid Cloud)——由兩種或兩種以上部署模式組成的云
同時(shí)使用公有云和私有云,從而允許公司將敏感數(shù)據(jù)保留私有云中(安全性),同時(shí)使用公有云來(lái)運(yùn)行應(yīng)用程序(低成本),就類似于我們現(xiàn)實(shí)打點(diǎn)中遇到的企業(yè)官網(wǎng)等業(yè)務(wù)放在云上,核心業(yè)務(wù)部署在內(nèi)網(wǎng)。
4.?社區(qū)云/行業(yè)云(Community Cloud) ——為特定社區(qū)或行業(yè)所構(gòu)建的共享基礎(chǔ)設(shè)施的云
特定組織或行業(yè)共享使用的云計(jì)算服務(wù)方案,行業(yè)云是由幾個(gè)具有類似關(guān)注點(diǎn)(例如安全性、隱私性、和合規(guī)性)的多個(gè)組織共享,像政務(wù)云、金融機(jī)構(gòu)、醫(yī)療等特殊客戶群體,需要滿足其一定的行業(yè)規(guī)范和數(shù)據(jù)安全標(biāo)準(zhǔn)。
云計(jì)算的服務(wù)模式
1.?云基礎(chǔ)設(shè)置即服務(wù)(IaaS)——出租處理能力、存儲(chǔ)空間、網(wǎng)絡(luò)容量等基本計(jì)算資源
IaaS就是由云服務(wù)提供商,提供底層設(shè)施基礎(chǔ)資源(CPU、內(nèi)存、硬盤(pán)、帶寬等),用戶需要自己部署和執(zhí)行操作系統(tǒng)或應(yīng)用程序等各種軟件,就比如我們平時(shí)在阿里云、騰訊云等云廠商哪里購(gòu)買的VPS服務(wù)器就屬于IaaS服務(wù)模式。
2.?云平臺(tái)即服務(wù)(PaaS)——為客戶開(kāi)發(fā)的應(yīng)用程序提供可部署的云環(huán)境
PaaS可提供各種開(kāi)發(fā)和分發(fā)應(yīng)用的解決方案,如虛擬服務(wù)器、操作系統(tǒng)等。如我們常見(jiàn)的docker、k8s等。
3.?云軟件即服務(wù)(SaaS)——在網(wǎng)絡(luò)上提供可直接使用的應(yīng)用程序
在PaaS之上,用戶不需要管理和控制任何云計(jì)算基礎(chǔ)設(shè)施,包括網(wǎng)絡(luò)、服務(wù)器、操作系統(tǒng)、存儲(chǔ)等,普通用戶所接觸到的互聯(lián)網(wǎng)服務(wù),幾乎都是SaaS。
什么是云安全?
那么現(xiàn)在回歸到我們的正題當(dāng)中,什么是云安全?如剛剛我們上文所提到的,云計(jì)算徹底改變了數(shù)據(jù)存儲(chǔ)的世界,它使企業(yè)可以遠(yuǎn)程存儲(chǔ)數(shù)據(jù)和管理業(yè)務(wù),并隨時(shí)隨地從任何位置訪問(wèn)業(yè)務(wù),存和取變得簡(jiǎn)單,同時(shí)也使得云上數(shù)據(jù)極易造成泄露或被篡改,如云服務(wù)器一般都會(huì)由專業(yè)的運(yùn)維工程師去運(yùn)維,但是在大多數(shù)開(kāi)發(fā)小公司,是沒(méi)有運(yùn)維工程師的,這個(gè)時(shí)候一般都是開(kāi)發(fā)人員自己去維護(hù),這個(gè)時(shí)候就會(huì)缺乏基本的安全常識(shí),如身份驗(yàn)證控制不當(dāng)、配置錯(cuò)誤、數(shù)據(jù)庫(kù)設(shè)置等等,這些操作都會(huì)使得服務(wù)器遭到攻擊。
云安全和傳統(tǒng)安全有什么區(qū)別?
一方面,傳統(tǒng)環(huán)境下的安全問(wèn)題在云環(huán)境下仍然存在,比如SQL注入、弱口令、文件上傳、網(wǎng)站備份泄露等,另一方面,除了常規(guī)的WEB漏洞之外云環(huán)境下又不斷涌現(xiàn)出一堆新的安全問(wèn)題例如:Access Key泄露利用、配置不當(dāng)利用等。
云安全攻擊分類
在我的理解中,云安全分為兩類,一類為云服務(wù),一類為云原生
云服務(wù)
云服務(wù),顧名思義就是云上的服務(wù),簡(jiǎn)單的來(lái)說(shuō)就是在云廠商(阿里云、騰訊云)那里購(gòu)買的服務(wù)。目前國(guó)內(nèi)代表廠商有阿里云、騰訊云、華為云等,國(guó)外代表廠商有亞馬遜、微軟云、google云等。各個(gè)云廠商對(duì)云服務(wù)的叫法都不統(tǒng)一,這里以阿里云為例主要講述一下常用的云服務(wù)與其作用。
以上圖阿里云的產(chǎn)品服務(wù)為例:
1. 對(duì)象存儲(chǔ)OSS(Object Storage Service):簡(jiǎn)單來(lái)說(shuō)就是一個(gè)類似網(wǎng)盤(pán)的東西,當(dāng)然跟網(wǎng)盤(pán)是有一定區(qū)別的,用來(lái)存儲(chǔ)用戶上傳文件等功能。
2. 彈性計(jì)算服務(wù)ECS(Elastic Compute Service):簡(jiǎn)單來(lái)說(shuō)就是云上的一臺(tái)虛擬機(jī)。
3. 云數(shù)據(jù)庫(kù)(Relational Database Service):簡(jiǎn)單來(lái)說(shuō)就是云上的一個(gè)數(shù)據(jù)庫(kù)。
4. 身份和訪問(wèn)管理(Identity and Access Management):簡(jiǎn)單來(lái)說(shuō)就是云控制臺(tái)上的一套身份管理服務(wù),可以用來(lái)管理每個(gè)子賬號(hào)的權(quán)限。
云服務(wù)攻擊知識(shí)面
上圖為火線云安全知識(shí)庫(kù)的云服務(wù)攻防矩陣,以下為我自己所整理的云服務(wù)所面臨的安全問(wèn)題大概,后面會(huì)根據(jù)此框架詳細(xì)講解安全問(wèn)題。
對(duì)象存儲(chǔ)
1.?Bucket權(quán)限配置錯(cuò)誤-公開(kāi)訪問(wèn)
在創(chuàng)建Bucket桶時(shí),默認(rèn)是private(私有)的權(quán)限,如果在錯(cuò)誤的配置下,給了listobject(列表對(duì)象)權(quán)限,就會(huì)導(dǎo)致可遍歷存儲(chǔ)桶。
2.?Bucket桶爆破
當(dāng)不知道Bucket名稱的時(shí)候,可以通過(guò)爆破獲得Bucket名稱,有些類似于目錄爆破。
3.?特定的Bucket策略配置
有些Bucket會(huì)將策略配置成只允許某些特定條件才允許訪問(wèn),當(dāng)我們知道這個(gè)策略后,就可以訪問(wèn)該Bucket的相關(guān)對(duì)象了。
4.?Bucket Object遍歷
如果策略中允許了Object的List操作,則在目標(biāo)資源范圍下,會(huì)將所有的Bucket Object顯示出來(lái),通過(guò)拼接可獲取相對(duì)應(yīng)的文件
5.?任意文件上傳與覆蓋
由于Bucket不支持重復(fù)命名,所以當(dāng)匿名用戶擁有寫(xiě)入權(quán)限時(shí),可通過(guò)任意文件上傳對(duì)原有文件進(jìn)行覆蓋,通過(guò)PUT請(qǐng)求可上傳和覆蓋任意文件。
6.?AccessKeyID、SecretAccessKey泄露
在開(kāi)發(fā)過(guò)程中可能操作失誤會(huì)導(dǎo)致SecretID/SecretKey泄露,獲得SecretID/SecretKey相當(dāng)于擁有了對(duì)應(yīng)用戶的權(quán)限,從而操縱Bucket。
7.?Bucket接管
由于Bucket接管是由于管理人員未刪除指向該服務(wù)的DNS記錄,攻擊者創(chuàng)建同名Bucket進(jìn)而讓受害域名解析所造成的。
8.?修改策略導(dǎo)致網(wǎng)站癱瘓
當(dāng)策略可寫(xiě)時(shí),將原來(lái)可以訪問(wèn)的資源權(quán)限設(shè)置為不可訪問(wèn),這樣就會(huì)導(dǎo)致網(wǎng)站癱瘓。
彈性計(jì)算服務(wù)
1.?憑證泄露
??云場(chǎng)景下的憑證泄露可以分為以下幾種:
??控制臺(tái)密碼泄露
??AccessKeyID、SecretAccessKey泄露
??臨時(shí)憑證泄露
??實(shí)例登錄憑證泄露
??對(duì)于這類憑證信息的收集,一般可以通過(guò)以下幾種方法進(jìn)行收集:
??Github敏感信息搜索
??反編譯目標(biāo)APK、小程序
??目標(biāo)網(wǎng)站源代碼泄露
2.?元數(shù)據(jù)
元數(shù)據(jù)服務(wù)是一種提供查詢運(yùn)行中的實(shí)例內(nèi)元數(shù)據(jù)的服務(wù),通過(guò)元數(shù)據(jù),攻擊者除了可以獲得當(dāng)前ECS上的一些屬性信息之外,也可獲得與其實(shí)例綁定角色的臨時(shí)憑證,并通過(guò)該臨時(shí)憑證獲得云服務(wù)的控制臺(tái)權(quán)限。
3.?惡意的鏡像
獲取控制臺(tái)權(quán)限后,可導(dǎo)入存在后門(mén)的鏡像,下次目標(biāo)用戶在選用鏡像創(chuàng)建實(shí)例的時(shí)候,就會(huì)觸發(fā)我們?cè)阽R像中植入的惡意代碼。
云數(shù)據(jù)庫(kù)
1.?訪問(wèn)憑證泄露
如上面兩個(gè)云服務(wù)一樣,云數(shù)據(jù)庫(kù)在配置不當(dāng)?shù)那闆r下也有可能會(huì)出現(xiàn)訪問(wèn)憑證、臨時(shí)憑證等泄露
2.?備份文件
在獲得相應(yīng)權(quán)限后,可嘗試下載數(shù)據(jù)庫(kù)
3.?弱口令
最大的0day,弱口令,如果數(shù)據(jù)庫(kù)存在弱口令,則可通過(guò)密碼爆破,猜解出RDS的賬號(hào)密碼。
云原生
云原生是基于分布式存儲(chǔ)和統(tǒng)一運(yùn)管的分布式云,云原生的代表技術(shù)包括容器、容器編排、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。
Kubernetes
kubernetes簡(jiǎn)稱K8s,是Google于2014年開(kāi)源的容器編排調(diào)度管理平臺(tái)。相比與Swarm、Mesos等平臺(tái)簡(jiǎn)化了容器調(diào)度與管理,是目前最流行的容器編排平臺(tái)。
如上圖所示,我們可以看到,Kubernetes集群主要分為Master和Node兩部分,也是典型的分布式架構(gòu)。首先,外部應(yīng)用程序通過(guò)Api-Server提供的HTTP接口與Master進(jìn)行交互,而在與APIs進(jìn)行交互前,需要經(jīng)過(guò)一步認(rèn)證的階段。而Node由多個(gè)pod組成,pod中運(yùn)行著的便是大家比較熟悉的容器(Docker),我們將運(yùn)行在一組Pods上的應(yīng)用服務(wù)公開(kāi)為網(wǎng)絡(luò)服務(wù)的抽象方法稱為服務(wù)(Service),服務(wù)上一般配置了能夠被公開(kāi)訪問(wèn)的IP地址、端口映射關(guān)系等,通過(guò)服務(wù)我們就能夠訪問(wèn)到相應(yīng)的Pods。
Docker
Docker是一個(gè)開(kāi)放源代碼軟件,是一個(gè)開(kāi)放平臺(tái),用于開(kāi)發(fā)應(yīng)用、交付(shipping)應(yīng)用、運(yùn)行應(yīng)用。Docker允許用戶將基礎(chǔ)設(shè)施(Infrastructure)中的應(yīng)用單獨(dú)分割出來(lái),形成更小的容器,從而提高交付軟件的速度。Docker容器與虛擬機(jī)類似,但二者在原理上不同,容器是將操作系統(tǒng)層虛擬化,虛擬機(jī)則是虛擬化硬件,因此容器更具有便攜性、高效地利用服務(wù)器。下圖是Docker官方給出的架構(gòu)圖,里面包括了Docker客戶端、Docker容器所在的宿主機(jī)和Docker鏡像倉(cāng)庫(kù)三個(gè)部分。
Docker可以讓開(kāi)發(fā)者基于選定鏡像(image),打包目標(biāo)應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器(Container)中,并通過(guò)客戶端的docker命令實(shí)現(xiàn)對(duì)Docker主機(jī)內(nèi)容器的操控;當(dāng)前容器也可創(chuàng)建成新的鏡像,而所有的鏡像放到倉(cāng)庫(kù)(Registry)中,類似github一樣分為共有倉(cāng)庫(kù)和私有倉(cāng)庫(kù)。
云原生攻擊知識(shí)點(diǎn)
隨著云計(jì)算技術(shù)的發(fā)展,目前很多企業(yè)都將業(yè)務(wù)部署到了云上,并開(kāi)始廣泛使用docker、Kubernetes等云原生技術(shù),但隨之而來(lái)也有一些新的風(fēng)險(xiǎn)和挑戰(zhàn),如docker逃逸、docker/K8s配置安全、容器鏡像安全、DevOps安等。
K8s安全問(wèn)題
配置不當(dāng)引發(fā)的組件接口安全問(wèn)題
1.?Api Server未授權(quán)訪問(wèn)
如上圖k8s的結(jié)構(gòu)圖所示,外部應(yīng)用程序是通過(guò)Api-Server所提供的HTTP接口與Master進(jìn)行交互的,
2.?Kubelet 未授權(quán)訪問(wèn)
與API Server類似,Kubelet也運(yùn)行著API服務(wù),如果Kubelet存在未授權(quán)訪問(wèn),就可以控制所在節(jié)點(diǎn)的權(quán)限。
3.?Dashboard 未授權(quán)訪問(wèn)
Dashboard可以給用戶提供一個(gè)可視化的web界面來(lái)查看當(dāng)前集群的各種信息,用戶可以用Kubernetes Dashboard部署容器化的應(yīng)用、監(jiān)控應(yīng)用的狀態(tài)、執(zhí)行故障排查任務(wù)以及管理Kubernetes各種資源。在Dashboard中默認(rèn)是存在鑒權(quán)機(jī)制的,用戶可以通過(guò)kubeconfig或token兩種方式登錄,當(dāng)用戶開(kāi)啟了enable-skip-login時(shí)可以在登錄界面點(diǎn)擊skip跳過(guò)登錄進(jìn)入Dashboard。
4.?K8s Config文件泄露
如果攻擊者通過(guò)webshell、Github等特定方式拿到了該K8s配置的Config文件,就可以通過(guò)該文件操作集群,從而接管所有容器。
5.?Etcd未授權(quán)訪問(wèn)
etcd默認(rèn)監(jiān)聽(tīng)2379、2380端口,前者用于客戶端連接,后者用于多個(gè)etcd實(shí)例之間的通信。如果2379端口暴露在公網(wǎng),可能會(huì)造成敏感信息泄露。
集群風(fēng)險(xiǎn)存在的風(fēng)險(xiǎn)
1.?Kubectl proxy命令未安全使用
攻擊者可通過(guò)kube-proxy代理來(lái)未授權(quán)訪問(wèn)本地kube-apiserver組件,創(chuàng)建惡意pod或控制已有pod,后續(xù)可嘗試逃逸至宿主機(jī)
2.?未開(kāi)啟RBAC控制
基于角色(Role)的訪問(wèn)控制(RBAC)是一種基于組織中用戶的角色來(lái)調(diào)節(jié)控制對(duì)計(jì)算機(jī)或網(wǎng)絡(luò)資源訪問(wèn)的方法,如果運(yùn)維在環(huán)境中沒(méi)有設(shè)置RBAC或者Kubernetes版本低于1.16版本,則默認(rèn)是不會(huì)開(kāi)啟RBAC訪問(wèn)控制策略。
Docker安全問(wèn)題
1.?容器鏡像存在的風(fēng)險(xiǎn)
??如果開(kāi)發(fā)者為了開(kāi)發(fā)、調(diào)試方便,可能會(huì)將數(shù)據(jù)庫(kù)賬號(hào)密碼、云服務(wù)密鑰之類的敏感數(shù)據(jù)打包到鏡像里,那別人獲取到這個(gè)鏡像后,就容易導(dǎo)致安全風(fēng)險(xiǎn)。
??在公共鏡像倉(cāng)庫(kù)比如docker Hub里,會(huì)存在一些有漏洞的鏡像或者惡意鏡像,如果使用了這些鏡像那就存在了安全風(fēng)險(xiǎn)。
??例如開(kāi)發(fā)者在代碼中引用了存在漏洞版本的log4j組件,然后將其打包成了業(yè)務(wù)鏡像,這樣即使代碼沒(méi)有漏洞,但因?yàn)橐肓瞬话踩牡谌浇M件也變得有了安全風(fēng)險(xiǎn)。
??不安全的第三方組件
??不安全的鏡像
??敏感信息泄露
2.?活動(dòng)中的容器存在的風(fēng)險(xiǎn)
??如果為容器設(shè)定了不完全的配置,會(huì)導(dǎo)致容器本身的隔離機(jī)制失效,如--privileged:使容器內(nèi)的root權(quán)限和宿主機(jī)上的root權(quán)限一致,權(quán)限隔離被打破。
??容器運(yùn)行在宿主機(jī)中,容器必須要使用宿主機(jī)的各種CPU、內(nèi)存等資源,如果沒(méi)有對(duì)容器進(jìn)行資源使用限制,那么就存在宿主機(jī)資源耗盡的風(fēng)險(xiǎn)。
??在使用容器時(shí),往往需要將端口映射出來(lái),如果一個(gè)web服務(wù)端口被映射出來(lái),同時(shí)這個(gè)web服務(wù)存在漏洞,那么也同樣是存在風(fēng)險(xiǎn)的。
??不安全的容器應(yīng)用
??不受限制的資源共享
??不安全的配置與掛載
3.?容器管理程序接口的風(fēng)險(xiǎn)
Docker 守護(hù)進(jìn)程主要監(jiān)聽(tīng)UNIX socket和Tcp socket,默認(rèn)情況下,Docker只會(huì)監(jiān)聽(tīng)UNIX socket。
??UNIX Socket
? UNIX socket的風(fēng)險(xiǎn)主要在于Docker守護(hù)進(jìn)程默認(rèn)以宿主機(jī)的root權(quán)限運(yùn)行,因此就可以借助這點(diǎn)進(jìn)行提權(quán)或者容器逃逸。
4.?軟件自身的漏洞
??Docker自身存在的漏洞,比如CVE-2019-14271、CVE-2021-22555等都可以導(dǎo)致容器逃逸,也是風(fēng)險(xiǎn)點(diǎn),關(guān)于Docker逃逸,可以參考我之前的文章https://mp.weixin.qq.com/s/tiniAQ5AhCXm2_mqj_j7iA,這里不再贅述。
編輯:黃飛
?
評(píng)論
查看更多