云服務器攻防矩陣
前言
云服務器(Cloud Virtual Machine,CVM)是一種較為常見的云服務,為用戶提供安全可靠以及高效的計算服務。用戶可以靈活的擴展以及縮減計算資源,以適應變化的業務需求。使用云服務器可以極大降低用戶的軟硬件采購成本以及IT 運維成本。
由于云服務器中承載著用戶的業務以及數據,其安全性尤為重要而云服務器的風險往往來自于兩方面:云廠商平臺側的風險與用戶在使用云服務器時的風險。與用戶側風險相比,平臺側的漏洞往往帶來更廣泛的影響,例如于2018 披露的AWS LaunchingEC2s did not require specifying AMI owner漏洞(CVE-2018-15869)、2020年披露的AWS XSS onEC2 web console漏洞;而與平臺側漏洞相比,用戶側漏洞更容易產生,并且可以對用戶資產代理嚴重影響,例如2020年美高梅(MGM.US)大規模客戶數據泄露為例,美高梅酒店由于錯誤配置,導致云服務器可以在未經授權情況下訪問,導致1.42億有關客人的信息暗網上出售,這些數據包含客人的家庭住址、聯系信息、出生日期、駕照號碼和護照號碼。
云服務器的安全性至關重要,只有深入了解針對云服務器的風險以及攻擊手段,才能夠有效的幫助云廠商以及用戶在面對這些威脅時有效的識別并采取對應的防護手段,從而保護云上業務以及數據的安全。
云服務器攻防矩陣概覽
騰訊安全云鼎實驗室以公開的云廠商歷史漏洞數據、安全事件,以及騰訊云自身的安全數據為基礎,抽象出針對云的攻防矩陣,并于2021年9月26日西部云安全峰會上發布的《云安全攻防矩陣v1.0》中首次亮相。《云安全攻防矩陣v1.0》由云服務器、容器以及對象存儲服務攻防矩陣共同組成。
本文將詳細介紹《云安全攻防矩陣》中關于云服務器攻防矩陣部分內容,以幫助開發、運維以及安全人員了解云服務器的安全風險。

云服務器攻防矩陣
初始訪問
云平臺主API 密鑰泄露
云平臺主API密鑰重要性等同于用戶的登錄密碼,其代表了賬號所有者的身份以及對應的權限。
API 密鑰由SecretId和SecretKey組成,用戶可以通過API密鑰來訪問云平臺API進而管理賬號下的資源。在一些攻擊場景中,由于開發者不安全的開發以及配置導致憑據泄露;而在另一些針對設備的入侵場景中,攻擊者將入侵設備并獲取設備中存儲的云平臺憑據,例如2020年TeamTNT組織針對 Docker的攻擊事件中,惡意程序將會掃描受感染系統的 ~/.aws/credentials 和 ~/.aws/config文件并竊取,導致AWS 憑證泄露。
在攻擊者可以通過竊取到的云平臺主API 密鑰后,冒用賬號所有者的身份入侵云平臺,非法操作云服務器,篡改其中業務代碼、添加后門程序或竊取其中數據。
云平臺賬號非法登錄
云平臺提供多種身份驗證機制以供用戶登錄,包括手機驗證、賬號密碼驗證、郵箱驗證等。在云平臺登錄環節,攻擊者通過多種手法進行攻擊以獲取用戶的登錄權限,并冒用用戶身份非法登錄,具體的技術包括使用弱口令、使用用戶泄露賬號數據、騙取用戶登錄手機驗證碼、盜取用戶登錄賬號等。攻擊者使用獲取到的賬號信息進行非法登錄云平臺后,即可操作云服務器。
實例登錄信息泄露
在購買并創建云服務器后,用戶可以自行配置云服務器的登錄用戶名以及登錄密碼,Linux云服務器往往支持用戶通過ssh的方式使用配置的用戶名密碼或SSH密鑰的方式遠程登錄云服務器;在Windows服務器中,用戶可以通過RDP文件或是遠程桌面的形式登錄云服務器。當上述這些云服務器實例登錄信息被竊取后,攻擊者可以通過這些信息非法登錄云服務器實例。
賬戶劫持
當云廠商提供的控制臺存在漏洞時,用戶的賬戶存在一定的劫持風險。以AWS 控制臺更改歷史記錄功能模塊處XSS漏洞以及AWS 控制臺實例tag處XSS為例,攻擊者可以通過這些XSS漏洞完成賬戶劫持攻擊,從而獲取云服務器實例的控制權。
網絡釣魚
為了獲取云服務器的訪問權限,攻擊者可采用網絡釣魚技術手段完成此階段攻擊。攻擊者通過向云服務器管理人員以及運維人員發送特定主題的釣魚郵件、或是偽裝身份與管理人員以及運維人員通過聊天工具進行交流,通過竊取憑據、登錄信息或是安插后門的形式獲取云服務器控制權。
應用程序漏洞
當云服務器實例中運行的應用程序存在漏洞、或是由于配置不當導致這些應用可以被非法訪問時,攻擊者可以通過掃描探測的方式發現并利用這些應用程序漏洞進行攻擊,從而獲取云服務器實例的訪問權限。
使用惡意或存在漏洞的自定義鏡像
云平臺為用戶提供公共鏡像、自定義鏡像等鏡像服務以供用戶快速創建和此鏡像相同配置的云服務器實例。這里的鏡像雖然與Docker鏡像不同,其底層使用的是云硬盤快照服務,但云服務器鏡像與 Docker鏡像一樣存在著類似的風險,即惡意鏡像以及存在漏洞的鏡像風險。當用戶使用其他用戶共享的鏡像創建云服務器實例時,云平臺無法保證這個共享鏡像的完整性或安全性。攻擊者可以通過這個方式,制作惡意自定義鏡像并通過共享的方式進行供應鏈攻擊。
實例元數據服務未授權訪問
云服務器實例元數據服務是一種提供查詢運行中的實例內元數據的服務,云服務器實例元數據服務運行在鏈路本地地址上,當實例向元數據服務發起請求時,該請求不會通過網絡傳輸,但是如果云服務器上的應用存在RCE、SSRF等漏洞時,攻擊者可以通過漏洞訪問實例元數據服務。通過云服務器實例元數據服務查詢,攻擊者除了可以獲取云服務器實例的一些屬性之外,更重要的是可以獲取與實例綁定的擁有高權限的角色,并通過此角色獲取云服務器的控制權。
執行
通過控制臺登錄實例執行
攻擊者在初始訪問階段獲取到平臺登錄憑據后,可以利用平臺憑據登錄云平臺,并直接使用云平臺提供的Web控制臺登錄云服務器實例,在成功登錄實例后,攻擊者可以在實例內部執行命令。
寫入userdata執行
Userdata是云服務器為用戶提供的一項自定義數據服務,在創建云服務器時,用戶可以通過指定自定義數據,進行配置實例。當云服務器啟動時,自定義數據將以文本的方式傳遞到云服務器中,并執行該文本。
通過這一功能,攻擊者可以修改實例userdata并向其中寫入待執行的命令,這些代碼將會在實例每次啟動時自動執行。攻擊者可以通過重啟云服務器實例的方式,加載userdata中命令并執行。
利用后門文件執行
攻擊者在云服務器實例中部署后門文件的方式有多種,例如通過Web應用漏洞向云服務器實例上傳后門文件、或是通過供應鏈攻擊的方式誘使目標使用存在后門的惡意鏡像,當后門文件部署成功后,攻擊者可以利用這些后門文件在云服務器實例上執行命令
利用應用程序執行
云服務器實例上部署的應用程序,可能會直接或者間接的提供命令執行功能,例如一些服務器管理類應用程序將直接提供在云服務器上執行命令的功能,而另一些應用,例如數據庫服務,可以利用一些組件進行命令執行。當這些程序存在配置錯誤時,攻擊者可以直接利用這些應用程序在云服務器實例上執行命令
利用SSH服務進入實例執行
云服務器Linux實例上往往運行著SSH服務,當攻擊者在初始訪問階段成功獲取到有效的登錄憑據后,即可通過SSH登錄云服務器實例并進行命令執行。
利用遠程代碼執行漏洞執行
當云服務器上部署的應用程序存在遠程代碼執行漏洞時,攻擊者將利用此脆弱的應用程序并通過編寫相應的EXP來進行遠程命令執行。
使用云API執行
攻擊者利用初始訪問階段獲取到的擁有操作云服務器權限的憑據,通過向云平臺API接口發送HTTP/HTTPS 請求,以實現與云服務器實例的交互操作。
云服務器實例提供了豐富的API接口以供用戶使用,攻擊者可以通過使用這些API接口并構造相應的參數,以此執行對應的操作指令,例如重啟實例、修改實例賬號密碼、刪除實例等。
使用云廠商工具執行
除了使用云API接口完成云服務器命令執行之外,還可以選擇使用云平臺提供的可視化或命令行工具進行操作。在配置完成云服務器實例信息以及憑據后,攻擊者即可使用這類工具進行服務器實例的管理以及執行相應命令。
持久化
利用遠程控制軟件
為了方便管理云服務器實例,管理員有可能在實例中安裝有遠程控制軟件,這種情況在windows實例中居多。攻擊者可以在服務器中搜索此類遠程控制軟件,并獲取連接憑據,進行持久化。攻擊者也可以在實例中安裝遠控軟件以達成持久化的目的。
在userdata中添加后門
正如“執行”階段所介紹,攻擊者可以利用云服務器提供的userdata服務進行持久化操作,攻擊者可以通過調用云API接口的方式在userdata中寫入后門代碼,每當服務器重啟時,后門代碼將會自動執行,從而實現了隱蔽的持久化操作目的。
在云函數中添加后門
云函數是是一種計算服務,可以為企業和開發者們提供的無服務器執行環境。用戶只需使用平臺支持的語言編寫核心代碼并設置代碼運行的條件,即可彈性、安全地運行代碼,由平臺完成服務器和操作系統維護、容量配置和自動擴展、代碼監控和日志記錄等工作。
以AWS Lambda為例,用戶可以創建一個IAM角色并賦予其相應的權限并在創建函數時提供該角色作為此函數的執行角色,當函數被調用時,Lambda 代入該角色,如果函數綁定的角色權限過高,攻擊者可以在其中插入后門代碼,例如在調用該函數后創建一個新用戶,以此進行持久化操作。
在自定義鏡像庫中導入后門鏡像
在攻擊者獲取云服務器控制臺權限后,可以對用戶自定義鏡像倉庫中的鏡像進行導入、刪除等操作,攻擊者可以將其構造的存在后門的鏡像上傳至用戶鏡像倉庫。此外,為了提高攻擊成功率,攻擊者還可以使用后門鏡像替換用戶鏡像倉庫中原有鏡像。當用戶使用后門鏡像進行實例創建時,即可觸發惡意代碼以完成持久化操作。
給現有的用戶分配額外的API密鑰
API密鑰是構建騰訊云 API 請求的重要憑證,云平臺運行用戶創建多個API密鑰,通過此功能,擁有API密鑰管理權限的攻擊者可以為賬戶下所有用戶分配一個額外的API密鑰,并使用這些API密鑰進行攻擊。
建立輔助賬號登錄
擁有訪問管理權限的攻擊者可以通過建立子賬號的形式進行持久化操作,攻擊者可以將建立的子賬號關聯等同于主賬號的策略,并通過子賬號進行后續的攻擊行為。
權限提升
通過Write Acl提權
對象存儲服務訪問控制列表(ACL)是與資源關聯的一個指定被授權者和授予權限的列表,每個存儲桶和對象都有與之關聯的ACL。
通過訪問管理提權
錯誤的授予云平臺子賬號過高的權限,也可能會導致子賬號通過訪問管理功能進行提權操作。由于錯誤的授予云平臺子賬號過高的操作訪問管理功能的權限,子賬號用戶可以通過訪問管理功能自行授權策略。通過此攻擊手段,攻擊者可以通過在訪問管理中修改其云服務器的權限策略,以達到權限提升。
利用應用程序提權
攻擊者通過云服務器中運行的Docker容器中應用漏洞,成功獲取Docker容器的權限,攻擊者可以通過Docker漏洞或錯誤配置進行容器逃逸,并獲取云主機的控制權,從而實現權限提升。當然,攻擊者也可以通過其他應用程序進行提權。
創建高權限角色
當攻擊者擁有訪問管理中新建角色的權限時,可以通過調用云API接口的方式,建立一個新的角色,并為這個角色賦予高權限的策略,攻擊者可以通過利用此角色進行后續的攻擊行為。
利用操作系統漏洞進行提權
與傳統主機安全問題相似,云服務器實例也同樣可能存在操作系統漏洞,攻擊者可以利用操作系統漏洞,進行權限提升。
防御繞過
關閉安全監控服務
云平臺為了保護用戶云主機的安全,往往會提供一些安全監控產品用以監控和驗證活動事件的真實性,并且以此辨識安全事件,檢測未經授權的訪問。攻擊者可以通過在攻擊流程中關閉安全監控產品以進行防御繞過,以AWS CloudTrail為例,攻擊者可以通過如下指令指令關閉CloudTrail監控:
aws cloudtrail delete-trail --name [my-trail]
但是進行此操作會在CloudTrail控制臺或GuardDuty中觸發告警,也可以通過配置禁用多區域日志記錄功能,并在監控區域外進行攻擊,以AWS CloudTrail為例,攻擊者可以通過如下指令關閉多區域日志記錄功能:
aws cloudtrail update-trail --name [my-trail]--no-is-multi-region-trail --no-include-global-service-events
監控區域外進行攻擊
云平臺提供的安全監控服務,默認情況下是進行全區域安全監控,但是在一些場景中可能出現一些監控盲區,例如用戶在使用安全監控服務時,關閉了全區域監控,僅開啟部分區域的監控,以AWS CloudTrail為例,可以使用如下指令來查看CloudTrail的監控范圍,并尋找監控外的云主機進行攻擊以防止觸發安全告警:
aws cloudtrail describe-trails
禁用日志記錄
與直接關閉安全監控服務相比,攻擊者可以通過禁用平臺監控告警日志的方式進行防御繞過,并在攻擊流程結束后再次開啟告警日志。以AWS CloudTrail為例,攻擊者可以通過使用如下指令關閉CloudTrail日志
aws cloudtrail stop-logging --name [my-trail]
并在攻擊完成后,使用如下指令再次開啟日志記錄功能:
aws cloudtrail start-logging --name [my-trail]
日志清理
攻擊者在完成攻擊流程后,可以刪除監控服務日志以及云主機上的日志,以防攻擊行為暴露。
通過代理訪問
大多數云服務器提供操作日志記錄功能,將記錄時間、操作內容等。攻擊者可以利用代理服務器來隱藏他們真實IP。
竊取憑證
獲取服務器實例登錄憑據
當攻擊者獲取云服務器實例的控制權后,可以通過一些方式獲取服務器上用戶的登錄憑據,例如使用mimikatz抓取Windows憑證,并將獲取到的這些登錄憑據應用到后續的攻擊流程中。
元數據服務獲取角色臨時憑據
云服務器為用戶提供了一種每名實例元數據的服務,元數據即表示實例的相關數據,可以用來配置或管理正在運行的實例。用戶可以通過元數據服務在運行中的實例內查看實例的元數據。以AWS舉例,可以在實例內部訪問如下地址來查看所有類別的實例元數據:
http://169.254.169.254/latest/meta-data/
在云服務器使用過程中,戶可以將角色關聯到云服務器實例。使用元數據服務可以查詢到此角色名稱以及角色的臨時憑據,以AWS為例,可以通過如下請求獲取角色名稱:
http://169.254.169.254/latest/meta-data/iam/info
在獲取到角色名稱后,可以通過以下鏈接取角色的臨時憑證:
http://169.254.169.254/latest/metadata/iam/security-credentials/
獲取配置文件中的應用憑證
云服務器應用中的配置文件中可能存儲著一些敏感信息,例如一些應用的訪問憑據或是登錄密碼,攻擊者可以在云服務器中搜尋這些配置文件,并將其中的敏感數據進行竊取并在后續的攻擊中加以利用。
云服務憑證泄露
在云服務器實例中運行應用程序中,往往使用環境變量或是硬編碼的方式明文存儲云服務憑據,應用程序使用這些憑據調用其他云上服務的憑據,攻擊者可以通過讀取環境變量中的參數,或是分析應用程序代碼的方式獲取這些憑據,以此獲取其他云服務的憑據,甚至是云平臺主API密鑰。
用戶賬號數據泄露
在一些場景中,開發者會在云服務器中存儲其業務中的用戶數據,例如用戶的姓名、身份證號碼、電話等敏感數據,當然也會包含用戶賬號密碼等憑據信息。
攻擊者通過對用戶數據的提取與分析以竊取這些用戶的憑據數據,并通過獲取的信息進行后續的攻擊。
探測
云資產探測
攻擊者在探測階段,會尋找環境中一切可用的資源,例如實例、存儲以及數據庫服務等。
通常攻擊者可以使用云平臺提供的API或工具來完成云資產探測,通過發出命令等方法來搜集基礎設施的信息。以AWS API接口為例,可以使用DescribeInstances接口來查詢賬戶中一個或多個實例的信息,或是使用ListBuckets API接口來查詢目標存儲桶列表信息。
網絡掃描
與傳統的內網掃描類似,攻擊者在此階段也會嘗試發現在其他云主機上運行的服務,攻擊者使用系統自帶的或上傳至云服務實例的工具進行端口掃描和漏洞掃描以發現那些容易受到遠程攻擊的服務。此外,如果目標云環境與非云環境連通,攻擊者也可能能夠識別在非云系統上運行的服務。
橫向移動
使用實例賬號爆破
當攻擊者在竊取憑據階段,在實例中成功獲取了有效的賬號信息后,攻擊者可以利用這些賬號數據制作賬號字典并嘗試爆破目標的云資產或非云資產,并橫向移動到這些資產中。
通過控制臺權限橫向移動
當攻擊者獲取了目標控制臺權限后,可以通過控制臺提供的功能,橫向移動到目標用戶的其他云資產中。
竊取角色臨時憑據橫向訪問
攻擊者通過實例元數據服務,可以獲取與實例綁定的角色的臨時憑據,攻擊者可以利用獲取的角色臨時憑據,橫向移動到角色權限范圍內的云資產中。
竊取憑據訪問云服務
通過云服務器中Web應用程序源代碼的分析,攻擊者可能會從Web應用程序的配置文件中獲取的應用開發者用來調用其他云上服務的憑據。攻擊者利用獲取到的云憑據,橫向移動到用戶的其他云上業務中。如果攻擊者獲取到的憑據為云平臺主API密鑰,攻擊者可以通過此密鑰橫向移動到用戶的其他云資產中。
竊取用戶賬號攻擊其他應用
攻擊者通過從云服務器中竊取的用戶賬號數據,用以橫向移動至用戶的其他應用中,包括用戶的非云上應用。
影響
竊取項目源碼
攻擊者通過下載云服務器中的應用程序源碼,造成源碼泄露事件發生。通過對源碼的分析,攻擊者可以獲取更多的可利用信息。
竊取用戶數據
當用云服務器中以文件、數據庫或者其他形式保存用戶數據時,攻擊者通過攻擊云服務器以竊取用戶敏感數據,這些信息可能包含用戶的姓名、證件號碼、電話、賬號信息等,當用戶敏感信息泄露事件發生后,將會造成嚴重的影響。
破壞文件
攻擊者在獲取云服務器控制權后,可能試圖對云服務器中的文件進行刪除或者覆蓋,以達到破壞服務的目的。
篡改文件
除了刪除以及覆蓋云服務器文件之外,攻擊者可以對云服務器中文件進行篡改,通過修改應用程序代碼、文本內容、圖片等對象以達到攻擊效果。在一些場景中,用戶使用云服務器部署靜態網站,攻擊者通過篡改其中頁面內的文本內容以及圖片,對目標站點造成不良的影響。
植入后門
攻擊者在云服務器應用中插入惡意代碼,或者在項目目錄中插入后門文件,攻擊者可以利用這些后門發起進一步的攻擊。
加密勒索
在獲取云服務器控制權后,攻擊者可能會對云服務器上的文件進行加密處理,從而勒索用戶,向用戶索要贖金。
寫在后面
云服務器作為一個基礎而又重要的云產品,面臨著眾多的安全挑戰。深入了解云服務器存在的風險點以及對應的攻擊手段,可以有效的保障用戶在使用云服務器時的安全性。
在騰訊安全云鼎實驗室推出《云安全攻防矩陣》中,用戶可以根據矩陣中所展示的內容,了解當前環境中所面臨的威脅,并以此制定監測手段用以發現風險,詳見騰訊安全云鼎實驗室攻防組官網:
https://cloudsec.tencent.com/#/home