摘要

這份報告針對鎖定 Braintree NuGet SDK 的精密同名詐騙攻擊提供技術分析。一個惡意套件 Braintree.Net 被發現會從正式環境應用程式中外洩敏感的支付卡資料、商家 API 金鑰及主機環境機密。分析深入探討攻擊的執行流程、資料攔截機制、混淆技術,並提供建議的緩解策略。此事件突顯了在現代軟體開發中,實施穩健的供應鏈安全實務至關重要。

你的合法 SDK 正在幫駭客開後門?Braintree 同名詐騙開啟供應鏈攻擊新紀元! | 資訊安全新聞

1. 簡介

軟體供應鏈攻擊 已成為日益普遍的威脅途徑,攻擊者利用開發者對開源儲存庫和套件管理員的信任。這份報告探討一起近期案例,涉及惡意 NuGet 套件 Braintree.Net ,該套件偽裝成合法的 Braintree SDK。攻擊者利用「 同名詐騙 」手法散佈惡意軟體,用以側錄信用卡資料,並從未警覺的開發者及其正式環境中竊取敏感認證[1]。此分析目的在剖析攻擊的技術細節,並與一般的惡意軟體分析方法進行類比,強調在依賴關係管理中保持警覺的必要性。

2. 攻擊概述與運作手法

惡意 Braintree.Net 套件被設計成在 API 表面和 metadata 上模仿官方 Braintree .NET 程式庫 Braintree 。然而,它額外加入了資料外洩的功能。攻擊者採用了多種欺騙戰術,包括使用相似的套件名稱、偽造下載次數,以及複製官方文件來誤導開發者 [1]。其核心目標是在不中斷合法應用程式功能的情況下,攔截支付相關資料和環境機密,從而確保隱蔽性和持續性。

2.1 受影響的套件

被識別出的主要惡意套件為 Braintree.Net ,特別是 3.35.8 到 3.36.1 版本。此外,一個附屬依賴項 DependencyInjector.Core (1.4.1 及以上版本)被用於收集 Token 和環境變數。其他套件如 SipNet SipNet.OpenAI.Realtime 也因同一個 Threat actor 的類似同名詐騙活動而間接受到影響 [1]

2.2 與合法套件的比較

此攻擊能夠隱蔽的關鍵在於惡意套件能夠緊密模仿合法 Braintree SDK 的公開 API 介面。開發者可以實例化閘道並處理交易,而不會立即出現錯誤。然而,透過靜態分析可以識別出關鍵差異:

  • 合法的 CreditCardGateway.Create() 會直接向 Braintree 的 API 發送請求,沒有 side-channel 記錄。
  • 合法的 BraintreeGateway.PrivateKey 設定器僅指派設定值。
  • 合法的組件中不包含 CardOperationLogger DependencyInjectorLoader ,或對 DependencyInjector.Core 的參考。

惡意套件中存在這些額外元件,是其惡意意圖的明顯跡象 [1]

3. 執行流程與資料外洩

惡意套件採用了多階段的外洩策略,在 .NET 應用程式的不同生命週期點觸發。攻擊利用了「Module initializer」,確保在組件載入時即執行,無需直接呼叫惡意 API [1]

應用程式啟動
       │
       ▼
┌──────────────────────────────────────────────────────────┐
│  [Module Init] Braintree.DependencyInjectorLoader.Load() │
│  (亦包含:DependencyInjector.Core.AutoInitializer)       │
│       └─► CodebaseAnalyzer.AnalyzeAndPrint()             │
│               └─► POST env/config/cloud metadata         │
│                   → /api/analytics/report                │
└──────────────────────────────────────────────────────────┘
       │
       ▼
開發者設定閘道:
  gateway.PrivateKey = "..."
       │
       ▼
┌──────────────────────────────────────────────────────────┐
│  [Property Setter] BraintreeGateway.PrivateKey           │
│  (僅當 Environment == PRODUCTION 時)                    │
│       └─► GatewayInput.AddAccountAsync()                 │
│               └─► POST merchantId, publicKey, privateKey │
│                   → /api/account                         │
└──────────────────────────────────────────────────────────┘
       │
       ▼
應用程式處理付款:
  gateway.CreditCard.Create(request)
       │
       ▼
┌──────────────────────────────────────────────────────────┐
│  [Gateway Hook] CardOperationLogger.LogCreditCardCreate()│
│  (僅當 Environment == production 時)                    │
│       └─► SendAsync()                                    │
│               └─► POST cardNumber, cvv, expiration, ...  │
│                   → /api/card                            │
└──────────────────────────────────────────────────────────┘
       │
       ▼
合法的 Braintree API 呼叫正常進行
(商家不會看到錯誤;付款可能成功)
    

程式碼片段 1:原文中的執行流程圖 [1]。此圖說明了惡意套件觸發的三個主要外洩路徑。

執行流程可視為一系列事件:

sequenceDiagram participant App as Application participant MalPackage as Malicious Package (Braintree.Net) participant C2 as Attacker C2 Server App->>MalPackage: Loads Assembly (Application Starts) activate MalPackage MalPackage->>MalPackage: [Module Init] Braintree.DependencyInjectorLoader.Load() MalPackage->>MalPackage: CodebaseAnalyzer.AnalyzeAndPrint() MalPackage->>C2: POST env/config/cloud metadata to /api/analytics/report deactivate MalPackage App->>MalPackage: Configures gateway (e.g., gateway.PrivateKey = "...") activate MalPackage alt Environment == PRODUCTION MalPackage->>MalPackage: [Property Setter] BraintreeGateway.PrivateKey MalPackage->>MalPackage: GatewayInput.AddAccountAsync() MalPackage->>C2: POST merchantId, publicKey, privateKey to /api/account end deactivate MalPackage App->>MalPackage: Processes payment (e.g., gateway.CreditCard.Create(request)) activate MalPackage alt Environment == production MalPackage->>MalPackage: [Gateway Hook] CardOperationLogger.LogCreditCardCreate() MalPackage->>MalPackage: SendAsync() MalPackage->>C2: POST cardNumber, cvv, expiration, ... to /api/card end MalPackage->>App: Legitimate Braintree API call proceeds normally deactivate MalPackage

圖 1:Mermaid 序列圖,說明執行流程與資料外洩點。

3.1 支付卡攔截

惡意套件引入了一個新的類別 Braintree.CardOperationLogger ,這在合法的 SDK 中是不存在的。此記錄器被策略性地放置在支付關鍵程式碼路徑中、合法的 Braintree HTTP 請求之前被呼叫。例如,在惡意組件的 CreditCardGateway.Create() 方法中,插入了一個對 CardOperationLogger.Instance.LogCreditCardCreate(gateway, request) 的呼叫 [1]

  1. public virtual Result<CreditCard> Create(CreditCardRequest request)
  2. {
  3. CardOperationLogger.Instance.LogCreditCardCreate(gateway, request);
  4. return new ResultImpl<CreditCard>(
  5. new NodeWrapper(service.Post(service.MerchantPath() + "/payment_methods", request)),
  6. gateway);
  7. }

程式碼片段 2:惡意的 CreditCardGateway.Create() 方法,帶有信用卡資料外洩 Hook [1] CardOperationLogger 在實際付款處理之前被呼叫。

相比之下,合法的方法會直接向 Braintree 發送請求:

  1. public virtual Result<CreditCard> Create(CreditCardRequest request)
  2. {
  3. return new ResultImpl<CreditCard>(
  4. new NodeWrapper(service.Post(service.MerchantPath() + "/payment_methods", request)),
  5. gateway);
  6. }

程式碼片段 3:合法的 CreditCardGateway.Create() 方法 [1]。此方法缺少惡意的記錄呼叫。

3.2 商家認證竊取

惡意套件也針對商家認證(Credential)。當開發者設定 BraintreeGateway PrivateKey 時,其 setter method 被 hook,將 merchantId publicKey privateKey 外洩至攻擊者的 C2 伺服器。此洩漏僅在 Braintree 環境設為 'production' 時才會觸發 [1]

3.3 環境變數與 Token 收集

附屬套件 DependencyInjector.Core 在收集環境變數和 Token 方面扮演了關鍵角色。與支付卡和商家認證外洩不同,此收集機制在組件載入時即無條件執行,無論 Braintree 環境設定為何。這確保了即使是使用受感染套件的開發或沙箱環境,也會洩漏主機機密 [1]

4. 混淆與隱蔽技術

為躲避偵測,攻擊者採用了多種混淆和隱蔽技術:

  • 靜默失敗: 所有外洩路徑都包裝在空的 catch 區塊中,確保網路故障或格式錯誤的 Payload 會被靜默吞噬。這允許主應用程式繼續正常運作,防止立即被發現 [1]
  • 僅正式環境觸發: 支付卡和商家認證外洩機制被設計為僅在 Braintree SDK 的環境設為 'production' 時才啟動。此戰術降低了在開發或沙箱環境中進行常規 QA 時被發現的機率 [1]。相關的程式碼片段如下:
  1. private bool IsProduction(IBraintreeGateway gateway)
  2. {
  3. try
  4. {
  5. return gateway?.Configuration?.Environment?.EnvironmentName == "production";
  6. }
  7. catch
  8. {
  9. return false;
  10. }
  11. }

程式碼片段 4:用於僅正式環境觸發的 IsProduction() 方法 [1]

  • C2 端點混淆: 雖然信用卡和帳戶外洩端點以明文字串儲存,但 DependencyInjector.Core 所使用的 analytics/report 端點則使用了 XOR 混淆。這使得單純的字串擷取工具更難識別所有 C2 通訊管道 [1]。其混淆邏輯如下所示:
  1. internal static class EndpointObfuscator
  2. {
  3. private static readonly byte[] Key;
  4. internal static string Decode(byte[] data)
  5. {
  6. byte[] array = new byte[data.Length];
  7. for (int i = 0; i < data.Length; i++)
  8. {
  9. array[i] = (byte)(data[i] ^ Key[i % Key.Length]);
  10. }
  11. return Encoding.UTF8.GetString(array);
  12. }
  13. }

程式碼片段 5:C2 端點的 XOR 混淆方法 [1]

5. 相關惡意軟體分析技術

對此同名詐騙攻擊的分析,與一般的惡意軟體分析技術有共通之處,特別是在 .NET 惡意軟體領域。前期文章有關 Automated QuasarRAT Configuration Extraction 的文章 [2] 提供了對 .NET 二進位檔案進行靜態分析的見解。該文章強調了分析中繼語言 (IL) 指令以及利用 dnlib 等工具,從靜態欄位(特別是在類別的靜態建構函式 ( .cctor ) 中)程式化地提取設定資料的重要性 [2]。這種方法論可直接應用於理解惡意 Braintree.Net 套件的運作方式,因為它涉及檢查編譯後的 .NET 組件,以找出注入的程式碼和被改變的執行路徑。如 QuasarRAT 分析中所述,能夠識別 ldstr (載入字串)和 stsfld (儲存至靜態欄位)指令對的能力,對於精確定位 Braintree 同名詐騙中敏感資料或 C2 端點被處理的位置至關重要 [2]

此外,QuasarRAT 文章中有關處理混淆的討論,例如字串加密、控制流程扁平化和重新命名,與在 Braintree 攻擊的 DependencyInjector.Core 元件中觀察到的 XOR 混淆有相似之處 [1] [2]。雖然 Braintree 同名詐騙對其一個 C2 端點使用了較簡單的 XOR 方案,但通過識別解密常式或模擬其執行來對混淆字串進行逆向工程的原則,在兩種情況下都是基礎性的 [1][2]。前期文章有關 PupkinStealer 的文章 [3] 也強化了 .NET 資訊竊取程式的普遍性及其資料外洩技術,這些惡意軟體通常利用 Telegram Bot API 等合法平台,這凸顯了攻擊者使用現成工具和服務的更廣泛趨勢。

6. 攻擊活動屬性與緩解策略

Braintree NuGet 同名詐騙事件展現了幾個特徵,表明這是一次蓄意的、以財務為動機的供應鏈攻擊行動 [1]

  • 鎖定支付 SDK: 專注於支付閘道方法和 PCI 敏感資料(PAN、CVV、商家 API 金鑰),目標指向直接的金融詐欺。
  • 同名詐騙與 metadata 冒充: 使用相似的套件 ID ( Braintree.Net )、偽造的作者資訊和複製的文件,展現了明確的意圖來欺騙開發者。
  • 命名空間預先佔用: 在引入功能性 Payload 之前,部署大量空的佔位版本 ( 0.0.x ) 來保留套件名稱,這是一種建立欺騙性存在的已知策略。
  • 分離混淆策略: 將支付外洩的明文 C2 字串(依賴正式環境觸發來隱蔽)與附屬依賴項中 XOR 編碼的分析端點相結合,表明了一種經過計算的規避偵測的方法。
  • 附屬套件模式: 使用 DependencyInjector.Core 作為跨多個同名詐騙活動的可重複使用植入框架,表明了一個可擴展的攻擊基礎設施。
  • 靜默失敗: 在外洩路徑上實作空的 catch 區塊,確保惡意活動不會在受害者應用程式中觸發錯誤或警報。
  • 多階段 .NET 模組初始化器: 使用 [ModuleInitializer] 屬性保證在組件載入時即執行,無需明確呼叫惡意 API。

為緩解此類威脅,建議採取以下措施 [1]

  • 立即移除: 從所有專案和 CI 快取中移除 Braintree.Net 及任何相關的惡意套件(例如 DependencyInjector.Core 、版本 ≥12.8.4 的 SipNet )。
  • 認證輪換: 如果受影響的套件曾在正式環境中使用過,請輪換所有 Braintree 商家認證。
  • 事件應變: 將信用卡資料視為可能已遭洩露,如果生產流量曾經過受感染的 SDK,則啟動 PCI 事件應變程序。
  • 依賴項稽核: 定期稽核鎖定檔案和依賴關係圖,檢查是否有可疑套件。
  • 網路出口阻擋: 阻擋對已知惡意 C2 端點(例如 348672-shakepay[.]com )的對外流量。
  • 日誌搜尋: 監控 Proxy 和防火牆日誌,尋找可疑的對外 POST 請求或與攻擊相關的特定 HTTP 標頭。

7. 結論

Braintree NuGet 同名詐騙攻擊強烈提醒我們,軟體供應鏈中存在著持續且不斷演變的威脅。通過精心模仿合法套件並採用複雜的隱蔽技術,攻擊者能夠入侵正式環境並外洩高度敏感的資料。此事件強調了開發者和組織必須採取嚴格的安全實務,包括徹底審查第三方依賴項、持續監控異常情況,以及主動進行威脅情資分析。對此類攻擊的技術分析,借鑒一般惡意軟體分析的方法論,對於理解攻擊者的戰術和開發有效的防禦措施以保護數位生態系統至關重要。