資安研究人員揭露了一個先前未被記錄的 Python 植入框架,名為 TWINLOOT。

Ontinue 在分享給 The Hacker News 的技術報告中表示:「TWINLOOT 是一個模組化的、經過 PyArmor 加密的 Python 植入工具,旨在將其整個指揮與控制 (C2) 基礎設施運作在受信任的 Microsoft 服務內部。」「任務透過 Microsoft Graph API 的 SharePoint 線上檔案死信箱進行。操作者的互動式存取則透過 Microsoft Teams TURN 伺服器中繼的 WebRTC DataChannels 進行。」

透過受害者自身的 Edge 瀏覽器無頭執行個體來驅動與 Graph API 的流量往返,使其幾乎無法與合法網路活動區分。該植入工具配備了利用像素級精確的偽造鎖定畫面來竊取 Windows 憑證、提供反向 SOCKS5 代理以進行受害者網路橫向移動、執行任意命令,以及在主機上建立持久性連線的功能。

Ontinue 的網路防禦中心表示,在調查 2026 年 7 月進行的一項持續性攻擊活動時發現了此植入工具。此惡意軟體的一個顯著特點是它使用了多個指揮與控制 (C2) 通道,所有這些通道都利用了 Microsoft 服務。

初步存取向量被評估為透過 Microsoft Teams 進行的社交工程攻擊,其中威脅行為者偽裝成 IT 支援人員,說服目標執行一個 PowerShell 命令,該命令負責下載一個包含 Python 運行時和一個 39 MB 編譯載荷(「bootstrap-fat.pyc」)的壓縮檔案,該載荷作為 TWINLOOT 的載入器。

Ontinue 將威脅行為者描述為精通攻擊手法和 Microsoft 的雲端架構,並表示該 Python 框架是第一個將 Microsoft 365 死信箱 C2、Teams TURN 中繼濫用以及無頭瀏覽器傳輸整合在一個傘下的工具。

TWINLOOT 在受害者機器上運行兩個並行通道:一個是 SharePoint 死信箱,它會向攻擊者的 Azure 租戶進行身份驗證,並每 15 秒輪詢一次 SharePoint 磁碟機以獲取指令,讓操作者能夠接收指令、執行它們,並將資料滲透回伺服器。

第二個通道利用反向 SOCKS5 隧道來實現互動式存取和橫向移動。「它透過直接 TLS/WebSocket 連線到攻擊者伺服器,或透過 Teams TURN WebRTC 中繼進行運作,」Ontinue 表示。

「操作者在其自己的機器上獲得一個 SOCKS5 監聽器 (127.0.0.1:1080),並透過它將流量代理到受害者的內部網路。這些連線從受害者主機上的 pythonw.exe 退出到內部目標,連接埠如 445 (SMB)、3389 (RDP)、5985 (WinRM) 和 1433 (MSSQL)。對於受害者的內部網路來說,這看起來像是受感染的主機正在進行正常的橫向連接。」

為了實現橫向移動,操作者透過偽造的鎖定畫面提示捕獲受害者的密碼,並透過 SharePoint 通道將其滲透出去。當威脅行為者發出「credz_waiting」命令時,就會渲染偽造的畫面。

值得注意的是,輸入的密碼不會經過 Windows 身份驗證來檢查受害者是否輸入了正確的系統密碼。無論輸入什麼,受害者都會看到一則錯誤訊息「密碼不正確。請再試一次」,這很可能會導致他們第二次輸入正確的密碼。

輸入憑證後,偽造的鎖定畫面會自動關閉。螢幕捕獲的每個密碼都會被加密並上傳到 SharePoint 磁碟機。然後,這些憑證會透過 SOCKS5 隧道被濫用,以使用遠端桌面協定 (RDP) 或 WinRM 進行橫向移動到下一個主機。

這並非攻擊者首次利用基於 TURN 的機制與威脅行為者進行通信。在 2026 年 6 月,博通旗下的賽門鐵克 (Symantec) 和 Carbon Black 詳細介紹了 DragonForce 勒索軟體使用一種名為 Backdoor.Turn 的 Go 語言遠端存取木馬 (RAT) 來隱藏其指揮與控制 (C2) 流量在 Microsoft Teams 中繼基礎設施內。

雖然整體操作模式相同,但這兩種工具的實施方式卻有所不同:Backdoor.Turn 使用透過中繼的 QUIC 會話。另一方面,TWINLOOT 則透過 aiortc 使用 WebRTC DataChannels。

接著,在上個月下旬,另一種新的基於 Rust 的 RAT,名為 msaRAT,被觀察到使用相同的 TURN 方法,但針對的是 Twilio 而非 Teams。該惡意軟體歸因於 Chaos 勒索軟體組織,它使用 Tokio 非同步運行時來控制無頭瀏覽器會話,並建立一個隱蔽通道到攻擊者的伺服器。

在部署勒索軟體之前,透過從外部主機下載的 MSI 安裝程式啟動 DLL 惡意軟體(「lib.dll」)。然後,它會定位 Chrome 或 Edge 的安裝路徑,以無頭模式啟動瀏覽器,並將 JavaScript 程式碼注入到一個新的瀏覽器標籤頁中,以初始化與 C2 伺服器的 WebRTC 通訊通道。

Cisco Talos 在上個月下旬指出:「此 RAT 從不直接接觸網路 — 它完全透過 Chrome DevTools Protocol (CDP),一個瀏覽器偵錯 API 來控制其 C2 通訊通道。」「該二進位檔案包含一個 Cloudflare Workers 端點,但它本身從不與該網域建立 HTTP 連線;它將所有工作完全卸載給瀏覽器。」

「msaRAT 透過 CDP 操作瀏覽器,與 Cloudflare Workers 進行信令交換 (SDP Offer/Answer),並使用 Twilio TURN (Traversal Using Relays around NAT) 作為中繼,在瀏覽器和 C2 伺服器之間建立 WebRTC DataChannel。」

Ontinue 的最新發現表明,在 Praetorian 公開披露名為 Ghost Calls 的技術一年內,有多個威脅行為者獨立採用了相同的 TURN 中繼濫用技術。

與 msaRAT 的情況一樣,TWINLOOT 以無頭模式啟動受害者的 Edge 瀏覽器,啟用其遠端偵錯介面,並透過 CDP 連線到它。完成此步驟後,它會在瀏覽器標籤頁中導航到「graph.microsoft[.]com」,然後利用 Drive API 與威脅行為者的 SharePoint 進行互動。

Ontinue 解釋說:「Chaos 組織的 msaRAT 使用相同的無頭瀏覽器透過 CDP 架構,但用於透過 Cloudflare Workers 進行 WebRTC 信令。」「這種匯聚值得注意:兩個不相關的攻擊者在同一個月內獨立地達到了『將受害者自己的瀏覽器作為 C2 傳輸』。」

持久性設定基於建置 (PERSIST_ENABLED=True 或 False)。它使用了四種方法:

第四種方法利用了 Praetorian 去年發布的開源工具 Swarmer,該工具用於「將 Windows 登錄檔匯出檔案轉換為 Windows hive 檔案,可用於替換 NTUSER.MAN」。這種方法可以在沒有管理員權限的情況下,創建隱蔽的登錄檔鍵到 HKEY_CURRENT_USER (又稱 HKCU),而不會被安全軟體偵測到。

Ontinue 表示:「該植入工具使用兩個 API 完全離線地建置了一個強制性的 Windows 設定檔 hive:RegLoadAppKeyW (該 API 在無需管理員權限的情況下將登錄檔 hive 加載到私有應用程式命名空間) 和 Microsoft 的離線登錄檔庫 offreg.dll (ORCreateKey, ORSetValue, ORSaveHive)。」

「生成的 hive 被寫入 %USERPROFILE% \NTUSER.MAN。當 Windows 加載使用者設定檔時,它會在 NTUSER.DAT 之前檢查 NTUSER.MAN (一個強制設定檔覆蓋)。如果 NTUSER.MAN 存在,其內容將優先。」

這項開發標誌著這種持久性方法首次在野外被惡意使用。除了這些功能之外,TWINLOOT 還支援偵察、發現、螢幕截圖捕獲,以及在 Azure Blob 儲存死信箱方法失敗時,能夠回退到 EtherHiding 風格的機制來獲取運行時配置。建置中未使用基於以太坊的解析,這表明該框架正在積極開發中。

目前尚不清楚是誰在幕後操縱這個工具包,但 Ontinue 表示它與一個名為 STAC4749 的群組在操作上有相似之處,該群組曾策劃 Teams 語音網路釣魚活動來部署 Chaos 勒索軟體。

該資安公司表示:「STAC4749 的重疊之處值得注意,包括 Teams 語音網路釣魚傳遞、PyArmour 混淆的 Python 後門、反向 SOCKS5 代理、HKCU Run Key 持久性,以及相鄰的時間線。」「然而,底層實施方式差異很大。」

「STAC4749 使用 PyInstaller、打包、基於 Go 的植入工具、獨立的 SOCKS5 代理工具,以及位於 Cloudflare 後面的 .top 網域。TWINLOOT 使用原始的 .pyc 執行、純 Python、整合的 SOCKS5 多工器,以及帶有 SharePoint 死信箱 C2 的 Drop-caught 老舊網域。如果這是同一操作者,那麼該工具包是從頭開始重建的,而不是演進的。」