
AWS漏洞揭秘:
JavaGhost如何打破防線發起網路釣魚
Palo Alto Network 的 Unit 42 研究人員一直在追蹤一個名為 JavaGhost 的Threat Actor Group,該組織以雲環境為目標。JavaGhost 已從 2019 年的網頁置換(Defacing website)發展到 2022 年開始發起網路釣魚攻擊(Phishing campaign)。該組織通過使用洩露的存取金鑰來設置網路釣魚基礎設施,從而利用設定錯誤的 AWS 環境。JavaGhost 使用高級規避技術(如類比 Scattered Spider)來避免在 CloudTrail 日誌中被檢測到。Unit 42 團隊為組織提供檢測查詢、IoC 和緩解策略,以抵禦 JavaGhost 的持續網路釣魚攻擊。

摘要
Unit 42 研究人員觀察到網路釣魚攻擊,他們將其編號 TGR-UNK-0011做為追蹤,並高度自信地評估此攻擊是否與Threat Actor Group JavaGhost 重疊。Threat Actor Group JavaGhost 已經活躍了五年多,並繼續以雲端環境為目標發送網路釣魚攻擊。
JavaGhost 歷史
從歷史上看,從 2019 年開始,JavaGhost 參與了對眾多實體的網站置換。JavaGhost 組織還擁有兩個網站,一個包含該組織的口號“we are there but not visible”,而另一個包含印尼語文本,翻譯為“停止責怪一切”,這與用於命名他們攻擊中的某些資源的語言相匹配。根據調查,該組織在 2022 年從網站置換轉向發送網路釣魚攻擊。Unit 42最近在 2024 年 12 月才發現過這種攻擊。
攻擊概述
Unit 42 在 2022-24 年處理了許多與 JavaGhost 相關的案件。這些攻擊利用了過於寬鬆的 IAM 許可權,允許受害者的 Amazon Simple Email Service (SES) 和 WorkMail 服務發送網路釣魚郵件。JavaGhost 受益於使用其他組織的 AWS 環境,因為他們不必為創建的任何資源付費。他們還可以使用預先存在的 SES 基礎設施來發送網路釣魚電子郵件。使用預先存在的 SES 基礎設施可以讓Threat Actor的網路釣魚電子郵件繞過電子郵件保護,因為這些電子郵件來自目標組織之前收到過電子郵件的已知實體。
初始存取與防禦規避
2022-24 年間,該組織將其策略發展為更先進的防禦規避技術,試圖混淆 CloudTrail 日誌中的身分。這項策略在歷史上曾被 Scattered Spider 利用。 JavaGhost 獲得了與身分識別和存取管理 (IAM) 使用者相關的洩露的長期存取金鑰,從而使他們能夠透過命令列介面 (CLI) 取得 AWS 環境的初始存取權。
當使用洩漏的存取金鑰進入組織的 AWS 環境時,Threat Actor不會執行應用程式介面 (API) 呼叫 GetCallerIdentity。相反,該組織在與受損 AWS 帳戶進行初次互動時,會執行不同的第一個 API 呼叫,例如 GetServiceQuota、GetSendQuota 和 GetAccount。在使用 CLI 中的長期存取金鑰確認可以存取組織的 AWS 帳戶後,JavaGhost 背後的Threat Actor會產生臨時認證和登入 URL,以允許自行存取控制台。透過這種方法存取控制台可以混淆他們的身份,並使他們更容易查看 AWS 帳戶內的資源。
GetFederationToken 和 GetSigninToken
從長期存取金鑰產生 AWS 主控台登入頁面需要多個步驟,但整個過程可以編寫腳本。此過程的第一步需要根據洩漏的長期存取金鑰建立臨時認證。為了取得臨時 AWS 認證,JavaGhost 使用 AWS Security Token Service (STS) 中的 GetFederationToken API。此 API 呼叫需要以下參數:
- 聯合使用者的名稱。
- 定義所需權限的Inline或Managed session policy。 JavaGhost 有意利用「允許所有」內嵌策略來利用允許底層 IAM 使用者的最大權限。
- 臨時認證的有效期限(以秒為單位)
一旦 GetFederationToken 要求傳回臨時認證(即 sessionId 、 sessionKey 和 sessionToken ),就需要編碼的 URL 才能產生sign-in token。為了產生encoded URL,Threat Actor使用 Python urllib3 函式庫。一旦獲得encoded URL,GetSigninToken 請求就會傳回建立允許聯合使用者存取 AWS 控制台的 URL 所需的資訊。在與 GetSigninToken 事件關聯的 CloudTrail 日誌中,使用者代理程式顯示 Python-urllib/3.10 ,這是 Unit 42 推斷 JavaGhost 用於執行這些操作的 Python 程式庫的方式。
產生的 URL 授予對控制台的存取權限,預設為 15 分鐘。若要撤銷與受損認證相關的Session,必須將 IAM 策略直接附加到使用者。為了阻止使用此控制台存取方法的Active Threat Actor,附加 AWS 管理的 AWSDenyAll 政策會使使用者的所有權限無效。
設定網路釣魚基礎架構
JavaGhost 使用 SES 和 WorkMail 來設定其網路釣魚基礎架構。該小組首先建立各種 SES 電子郵件身份,然後更新網域金鑰識別郵件 (DKIM) 設定。此Threat Actor Group也修改了 SES 虛擬交付管理器 (VDM) 和 Mail-from 屬性。若要傳送電子郵件,必須存在 SES 電子郵件或網域身分。新的 SES 身分的建立在 CloudTrail 日誌中顯示為 CreateEmailIdentity 事件,回應元素提供有關身分類型是網域還是電子郵件地址的更多詳細資訊。 DKIM 設定在使用者建立期間設定,並在 CloudTrail 日誌中產生 PutEmailIdentityDkimAttributes 事件。攻擊者也會更新電子郵件身分的自訂郵件寄件人域設定。這導致 PutEmailIdentityMailFromAttributes 事件在 CloudTrail 日誌中的請求參數欄位中顯示屬性更新。該組織對 SES 虛擬交付管理器 (VDM) 功能進行了各種更改,這也導致 PutAccountVdmAttributes 事件出現在 CloudTrail 日誌中。
除了設定各種電子郵件身分之外,JavaGhost 還設定了 AWS WorkMail 組織並新增了 WorkMail 使用者。建立 WorkMail 組織會導致 CloudTrail 日誌中出現大量 SES 和 AWS Directory Service (DS) 事件。完成 WorkMail 組織建立後,Threat Actor會建立各種 WorkMail 使用者。建立 WorkMail 使用者會產生一個 CreateUser 事件(以 workmail.amazonaws[.]com 作為事件來源),並且該使用者會自動註冊到 WorkMail,並且 CloudTrail 日誌中會出現 RegisterToWorkMail 事件。
在發送網路釣魚電子郵件之前,JavaGhost 會建立新的 SMTP 認證。建立新的 SMTP 認證會導致產生一個新的 IAM 用戶,該用戶的名稱與 SMTP 用戶名匹配,而不是 SMTP 顯示名稱。建立新的 SMTP 認證會導致產生一個新的 IAM 用戶,該用戶的名稱與 SMTP 用戶名匹配,而不是 SMTP 顯示名稱。如果 AWS 帳戶先前沒有使用過 SES,則會提示 SMTP 建立者建立新的 IAM 使用者群組。 SMTP 使用者名稱顯示存取金鑰 ID。當組織在其 AWS 環境中已經擁有 SES 基礎架構時,JavaGhost 會使用預先存在的資源傳送網路釣魚攻擊。
身分識別和存取管理 (IAM)
在整個攻擊期間,JavaGhost 創建了各種 IAM 用戶,其中一些用戶在攻擊期間使用,而另一些用戶從未使用過。未使用的 IAM 使用者似乎可以作為長期持久機制。所有新的 IAM 使用者都附加了 AWS 管理的 AdministratorAccess 原則並具有控制台存取權限。在最初的攻擊中,該組織大部分攻擊都使用了原始的洩漏存取金鑰。 2024 年,他們轉而使用 IAM 角色從Threat Actor入侵的 AWS 帳戶存取該組織的 AWS 帳戶,然後再進行攻擊。
為了實現此目的,Threat Actor創建了一個附加了信任策略的新 IAM 角色,允許從Threat Actor控制的 AWS 帳戶進行存取。成功建立新的管理角色後,Threat Actor可以從受信任的Threat Actor擁有的 AWS 帳戶登入 AWS 帳戶。
安全性群組
組織在攻擊過程中繼續留下相同的招牌,即建立新的 Amazon Elastic Cloud Compute (EC2) 安全性群組,名為 Java_Ghost,群組描述為「 We Are There But Not Visible 」。該小組描述與其舊網站上的口號相符。其他可疑動作 除了網路釣魚攻擊的主要組成部分外,該組織還在攻擊中嘗試了另外兩種獨特策略:
- 該組織試圖透過 LeaveOrganization 事件離開組織單位。
- 此群組啟用所有預設未啟用的 AWS 區域。
結論
Unit 42 對 JavaGhost 來自雲端的持續網路釣魚攻擊的研究突出了該組織在策略方面的演變,從網站置換到針對雲環境的複雜網路釣魚攻擊。該組織利用 AWS 環境中的錯誤設定來獲得初始存取許可權,並使用技術來逃避檢測,例如避免 GetCallerIdentity API 呼叫和產生用於控制台存取的臨時認證。研究的主要發現包括:
- JavaGhost 在 2022 年從網站置換轉向網路釣魚攻擊。
- 該組織使用洩露的存取金鑰和過於寬鬆的 IAM 許可權通過 SES 和 WorkMail 發送網路釣魚郵件。
- 高級防禦規避技術,例如不使用 GetCallerIdentity API 呼叫和產生臨時認證。
- 使用 AWS 託管的 AdministratorAccess 策略創建新的 IAM 用戶以實現持久性。
- 使用名為“Java_Ghost”的 EC2 安全群組,描述為“We Are There But Not Visible”作為名片(calling card)。
- 嘗試離開組織單位並允許所有 AWS 區域逃避安全控制。
該研究得出的結論是,雖然 JavaGhost 的策略已經發展,但他們的攻擊會在 CloudTrail 日誌中留下可檢測的事件。該報告建議限制對管理許可權的存取,定期輪換 IAM 認證,使用短期Access Token,並啟用多重身份驗證以緩解潛在攻擊。