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