雲洩露通常源于配置錯誤的存儲服務或暴露的憑據,越來越多的攻擊專門針對雲計算服務,以竊取相關憑據并非法訪問雲基礎設施。這些攻擊的目的就是使目标組織付出經濟或其他方面的代價。
本文重點介紹了兩個雲計算憑據被攻擊的示例。雖然初始訪問階段很重要,但我們将重點關注攻擊期間執行的攻擊後操作,并分享這兩種針對雲基礎設施的攻擊流程。攻擊流程顯示了攻擊者如何濫用竊取的計算憑據來尋找各種攻擊方法 ( 如加密挖掘、數據竊取等 ) ,并以意想不到的方式濫用雲服務。
爲了檢測下面描述的攻擊,由 Amazon Web Services ( AWS ) 和 Google cloud 概述的雲日志記錄和監控最佳實踐是必不可少的,因爲它們提供了對雲基礎設施級别活動的可見性。這強調了遵循 Amazon Web Services 和 Google Cloud 日志記錄和監控最佳實踐的重要性。
Palo Alto Networks 通過 Cortex XDR for cloud 和 Prisma cloud 幫助組織解決雲安全問題,Cortex XDR for cloud 可檢測雲計算憑據被盜等雲攻擊,Prisma cloud 以最少的權限管理身份授權。
雲工作的關鍵原則
在深入研究之前,我們應該了解在雲計算中工作的一個非常基本和重要的規則。實體 ( 無論是人還是計算工作負載 ) 都需要合法和相關的憑據才能在基礎設施級訪問雲環境。憑據用于身份驗證 ( 驗證實體的标識 ) 和授權 ( 驗證實體被允許做什麽 ) 。
作爲一種最佳實踐,當計算工作負載在雲中執行 API 調用 ( 例如,查詢存儲服務 ) 時,工作負載的相關憑據應該僅專用于它。它們還應該僅供該工作負載或人員使用,而不能供其他任何人使用。
正如我們将在這兩個示例中看到的,有助于降低雲計算憑據攻擊風險的一個重要安全原則是最低權限訪問。特别是,這意味着與這些憑據相關聯的權限應該縮小到使用它們的代碼實際所需的最小權限集。這限制了攻擊者在計算憑據被盜用時可以采取的行動。
攻擊示例 1:AWS Lambda 憑據受攻擊導緻網絡釣魚攻擊
攻擊者可以通過竊取 Lambda 的憑據來執行代表 Lambda 函數的 API 調用,這允許攻擊者可以在雲環境中執行多個 API 調用并枚舉不同的服務,如下圖所示。雖然由于缺乏權限,大多數 API 調用都不被允許,但該攻擊導緻了由攻擊者創建的 AWS 簡單電子郵件服務(SES)發起的網絡釣魚攻擊。
攻擊者使用受攻擊的 Lambda 函數的憑據枚舉雲環境
這種網絡釣魚攻擊不僅給組織帶來了意想不到的成本,也使其他組織面臨額外的風險。
在本示例中,受害者沒有活躍的 SES,如果有,攻擊者可能會濫用它來對受害者的組織發起攻擊,或者他們甚至可以使用合法的電子郵件帳戶進行網絡釣魚攻擊。
由于組織使用的雲服務種類繁多,因此很難預測雲攻擊将在何處結束。從雲計算到網絡釣魚并不是隻有一個實現方法。
攻擊流
攻擊者能夠竊取 Lambda 的環境變量并将它們導出到攻擊設備 ( AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN ) 。
當憑據被竊取後,攻擊者通過以下步驟發起攻擊:
WHOAMI - 2022-05-20T20:35:49 UTC
攻擊從 GetCallerIdentity 命令開始,該命令相當于 whoami,因爲它提供了與憑據相關聯的實體的信息。從響應中,攻擊者可以獲得其他信息,例如被盜的帳戶 ID 和憑據類型。但是,它們不能确定與身份相關聯的任何權限。
IAM 枚舉 - 2022-05-20T20:35:55 UTC
攻擊的下一個階段是身份和訪問管理 ( IAM ) 枚舉,IAM 被認爲是攻擊的最佳途徑。通過獲得對 IAM 的訪問權,攻擊者可以提升權限并獲得受害者帳戶的持久性。
IAM 枚舉包括兩個 API 調用,由于缺乏權限而被拒絕:
ListAttachedRolePolicies
ListRolePolicies
可以假設,攻擊者注意到缺少權限,因此僅在兩個命令後終止 IAM 枚舉(可能是爲了避免産生不必要的噪音)。
通用枚舉 2022-05-20T20:39:59 UTC
在枚舉 IAM 失敗後,攻擊者開始對不同區域的不同服務進行枚舉。這種技術的噪音很大,因爲攻擊者試圖了解目标帳戶的體系結構,更重要的是,獲得可能存在于雲帳戶中的敏感信息的訪問權。
執行的一些主要服務和 API 調用包括:
存儲枚舉
ListBucketsGetBucketCorsGetBucketInventoryConfigurationGetBucketPublicAccessBlockGetBucketMetricsConfigurationGetBucketPolicyGetBucketTagging
EC2 枚舉
GetConsoleScreenshotGetLaunchTemplateDataDescribeInstanceTypesDescribeBundleTasksDescribeInstanceAttributeDescribeReplaceRootVolumeTasks
網絡枚舉
DescribeCarrierGatewaysDescribeVpcEndpointConnectionNotificationsDescribeTransitGatewayMulticastDomainsDescribeClientVpnRoutesDescribeDhcpOptionsGetTransitGatewayRouteTableAssociations
日志記錄枚舉
GetQueryResultsGetBucketLoggingGetLogRecordGetFlowLogsIntegrationTemplateDescribeLogGroupsDescribeLogStreamsDescribeFlowLogsDescribeSubscriptionFiltersListTagsLogGroup
備份枚舉
GetPasswordDataGetEbsEncryptionByDefaultGetEbsDefaultKmsKeyIdGetBucketReplicationDescribeVolumesDescribeVolumesModificationsDescribeSnapshotAttributeDescribeSnapshotTierStatusDescribeImages
SES 枚舉
GetAccountListIdentities
通用枚舉
DescribeRegionsDescribeAvailabilityZonesDescribeAccountAttributes
後門 2022-05-20T20:43:22 UTC
在枚舉 IAM 失敗時,攻擊者試圖通過執行 CreateUser 命令創建一個新用戶 ( 未成功 ) 。
從雲計算到網絡釣魚攻擊 2022-05-20T20:44:40 UTC
由于枚舉期間的大多數 API 調用導緻權限被拒絕,因此攻擊者能夠成功枚舉 SES。因此,攻擊者通過濫用雲電子郵件服務發起了釣魚攻擊,其中包括執行 VerifyEmailIdentity 和 UpdateAccountSendingEnabled 等命令。
逃避檢測 2022-05-20T23:07:06 UTC
最後,攻擊者試圖通過執行 DeleteIdentity 命令删除 SES 标識來隐藏他的一些活動。
其他情況分析
此攻擊的一個非常重要的攻擊指标(IoC)是 IP 地址 50.82.94 [ . ] 112。
來自 Lambda 函數的 API 調用通常使用爲 Lambda 生成的憑據(包括 AccessKeyId)從其 IP 執行。因此,具有該 AccessKeyId 的每個 API 調用都被認爲是 Lambda 函數。然而,在攻擊過程中,攻擊者能夠竊取 Lambda 的憑據,從而允許攻擊者冒充 Lambda。
因此,IP 是關鍵的 IoC,因爲它是檢測冒充 Lambda 的方法。攻擊者使用竊取的憑據來模拟和執行代表 Lambda 函數的 API 調用,但是他們是從一個未連接到 Lambda 的 IP 地址執行的,該 IP 地址也不屬于雲環境。
攻擊示例 2:部署加密挖礦的 Google Cloud 應用程序引擎服務帳戶受攻擊
攻擊者能夠竊取 Google Cloud 應用程序引擎服務帳戶 ( SA ) 的憑據,攻擊者有許多方法可以實現這一點,這些方法不一定與雲服務提供商中的任何漏洞有關。例如,在許多示例中,用戶将憑據存儲在不安全的位置,或者使用容易猜到或強行設置的密碼。
在本示例中,被盜竊的 SA 是默認 SA,它具有高權限的角色 ( 項目編輯器 ) 。這允許攻擊者發起攻擊,最終創建了多個用于加密挖掘的核心 CPU 虛拟機(VM),如下圖所示。
攻擊者濫用受攻擊的 App Engine SA 來分配多個雲示例進行竊取攻擊
當攻擊者在受害者的環境中啓動數千個虛拟機時,将顯著增加其預期成本。即使有人在短時間内注意到在他們的環境中發生了這樣的攻擊,它仍然會産生嚴重的攻擊後果。
谷歌應用引擎是 Google Cloud 完全管理的無服務器平台,服務賬戶是令牌。當用戶創建一個 App Engine 示例時,雲提供商創建一個默認 SA,并将其附加到創建的 App Engine 上。
此應用程序引擎默認 SA 在項目中具有編輯功能。編輯器具有很高權限,這是攻擊者能夠發起攻擊的關鍵,編輯器允許執行高權限的 API 調用,例如:
啓動計算工作負載;
FW ( Firewall ) 規則修改;
創建 SA 密鑰;
權限升級 2022-06-16T12:21:17.624 UTC
這次攻擊一開始是爲了升級權限。如上所述,默認情況下,應用程序引擎的 SA 對項目具有編輯權限。憑借這些權限,攻擊者試圖通過将以下對象添加到 IAM 策略中來添加計算 / 管理功能:
正如我們所看到的,SA 域前綴中的 appspot 表示該 SA 屬于 App Engine 服務。
允許任何 2022-06-16T12:21:29.406 UTC
接下來,攻擊者修改了項目級别的 FW 規則。首先,攻擊者試圖創建一個子網(名爲 default)。然後,攻擊者将以下規則添加到該子網中:
此操作進一步推進了攻擊者挖掘加密貨币的目标,爲了實現無限制的加密貨币挖掘,攻擊者删除了對網絡級别的任何限制。
注意優先級字段是很重要的。通過将其設置爲零,攻擊者的規則被設置爲最高優先級,這意味着它将按照現有 FW 規則的順序首先生效。
挖礦攻擊 2022-06-16T12:21:38.916 UTC
安裝完成後,攻擊的主要階段就開始了,在多個區域啓動虛拟機。
雖然攻擊者可以創建高 CPU 設備,但在本示例中,攻擊者反而創建了一個配備了四個高性能 GPU ( 例如 nvidia-tesla-p100 ) 的标準虛拟機 ( 例如 n1-standard-2 ) :
總的來說,在這次攻擊中創建了超過 1600 個虛拟機。
後門 2022-06-16T13:25:56.037 UTC
攻擊者假設用于攻擊的 SA 密鑰會被檢測到并被删除,因此通過執行 google.iam.admin.v1.CreateServiceAccountKey API 調用創建了多個 SA 密鑰供以後使用。
其他情況分析
就像我們讨論的第一個示例一樣,IP 是一個重要的 IoC。在這種情況下,攻擊是從多個 IP(總共九個不同的 IP)發起的,其中一些是活動的 Tor 出口節點。
同樣,我們希望從雲環境中的 IP 使用 App Engine 的 SA,它絕對不應該從 Tor 出口節點使用。
修改防火牆規則是此類攻擊中常用的技術,許多組織強制執行拒絕訪問活動挖礦池的網絡流量規則,因此攻擊者必須修改防火牆規則來實現他們的目标。
最後,通過編輯名爲 default 的網絡,攻擊者試圖逃避檢測。除非禁用此選項,否則默認情況下,将使用默認網絡創建每個新項目。攻擊者似乎試圖利用這一點,從而避免創建自己的網絡。
總結:竊取計算令牌是一個日益嚴重的威脅
竊取計算工作負載的令牌是上述兩個攻擊示例的共同點,雖然上述兩個示例都涉及無服務器服務,但此攻擊向量與所有計算服務都相關。
需要強調的是,這種類型的攻擊可能來自不同的攻擊路徑,包括應用程序漏洞或零日漏洞 ( 如 Log4Shell ) ,而不僅僅來自錯誤配置或糟糕的雲安全态勢管理 ( CSPM ) 。
爲了處理此類攻擊,雲審計日志對于檢測和調查與響應 ( IR ) 都至關重要。對于無法安裝代理的無服務器工作負載,雲審計監控更爲關鍵,因此更難阻止此類攻擊。
AWS 和 Google Cloud 提供的日志記錄和監控最佳實踐爲如何防止此類情況提供了明确的指導。AWS GuardDuty 服務還可以幫助檢測和警告類似的攻擊,例如從另一個 AWS 帳戶使用的 EC2 示例憑據。另一種預防方法是爲 Lambda 配置接口端點策略,限制 Lambda 僅在 VPC 内使用。
Palo Alto Networks 的用戶可以通過以下方式免受計算令牌盜竊
Cortex XDR for cloud,通過将來自雲主機、雲流量和審計日志的活動與端點和網絡數據集成,爲安全團隊還原完整事件過程。
Prisma Cloud 幫助組織管理身份授權,解決了在雲環境中管理 IAM 的安全挑戰。Prisma Cloud IAM 安全功能自動計算跨雲服務提供商的有效權限,檢測過度許可的訪問,并建議獎權限降到最低。
了解如何使用 Unit 42 雲事件響應服務 ( 用于調查和響應攻擊 ) 和網絡風險管理服務 ( 用于在攻擊發生前評估你的安全态勢 ) ,從而保護組織免受雲環境攻擊。