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