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