作者:KEYHUNTER
光譜種子虹吸管
加密錢包記憶體中秘密資料刪除不徹底的漏洞是現代比特幣生態系統面臨的最嚴重威脅之一。以 Libbitcoin 為例,研究發現,使用不安全的擦除操作(例如標準 clear()向量擦除)會導致私鑰和助記詞的殘餘位元組在執行後仍殘留在記憶體中。這個根本缺陷使得「幽靈種子虹吸攻擊」(CVE-2023-39910)成為可能,攻擊者可以悄無聲息地提取密鑰和助記詞的「幽靈」痕跡,從而完全控制受害者比特幣錢包中的資金。
此類洩漏不僅直接威脅到每個用戶,也威脅到加密貨幣基礎設施本身的信任基礎。現實世界中此類事件造成的損失證實,忽視安全儲存和銷毀金鑰的基本原則,將對區塊鏈系統的穩定性和相關性造成災難性的破壞。這個問題的科學性和實踐意義至關重要——安全的記憶體管理、安全分配器的實現以及手動緩衝區刷新應成為每位加密程式設計師的強制性標準。
(光譜種子提取器)攻擊的本質:
每次呼叫時, encode_base2048函式庫都會 data_chunk使用 `catch` 函數來分配和清空容器clear(),但不會將記憶體清除。攻擊者會執行多個並行或順序的編碼操作,然後在覆蓋剩餘位元組之前讀取它們的“頻譜”,從而揭示先前編碼的 BIP39 種子片段。
攻擊機制:
- 啟動「頻譜」分析:
修改後的用戶端或惡意模組執行encode_base2048給定的助記詞字典,重複清除和重新分配向量out。 - 幽靈頻譜收集:
在向量實際填充之前,透過易受攻擊的向量讀取呼叫或透過低階記憶體存取讀取一個新的緩衝區。 - 種子短語的重建:
基於「頻譜」緩衝區中累積的位元組片段,組裝出一個完整的 BIP39 種子。 - 按鍵輸出:
一旦完成,攻擊者將收到完整的種子,從而可以重新獲得對錢包的存取權。
“一旦捕獲到頻譜,你的密鑰就又回到了攻擊者手中。”
光譜種子虹吸管為何令人難忘:
- 「Spectral」指的是殘留的「幽靈」資料。
- 「種子虹吸」-形像地將種子短語從記憶中「吸」出來。
“你的種子已經消失,但它的光譜仍然存在,只需要一點金色的濾鏡。”
頻譜種子虹吸:一個關鍵的記憶體殘留漏洞以及對比特幣私鑰的危險攻擊
研究論文:關鍵記憶體漏洞對比特幣生態系統攻擊的影響
加密金鑰的安全是區塊鏈產業的核心問題。比特幣等加密錢包依賴私鑰和助記詞,一旦洩露,用戶將完全失去對其資金的控制權。其中最危險的錯誤之一是處理敏感資料從記憶體(RAM)刪除不當。這正成為許多錢包實作中的關鍵漏洞,包括廣泛使用的 Libbitcoin Explorer 庫。 bitcoinworld +1
漏洞的本質和攻擊機制
漏洞在於,當記憶體向量用於儲存助記詞或私鑰後,雖然會使用一種 clear()僅移除引用但不會物理擦除記憶體中資料的方法進行清除,但剩餘的位元組(即密鑰的「幽靈」)仍可被惡意程式讀取,從而導緻密鑰洩露。
根據科學分類,這種攻擊屬於下列哪一類:
- 殘留記憶攻擊
- 頻譜種子虹吸攻擊是現代研究中提出的用於描述此類攻擊的術語。
該攻擊在比特幣生態系統中的應用:
- 攻擊者如果能夠在刪除敏感資料後(或透過分配器錯誤)初始化一個新的記憶體容器,就可以掃描記憶體區域以查找剩餘的關鍵片段。
- 如果錢包透過不安全的記憶體功能產生助記詞,則可能會發現舊的助記詞殘餘,使駭客能夠恢復金鑰並存取用戶的比特幣帳戶。
- 此類攻擊會導致比特幣直接被盜(Libbitcoin Explorer 的案例已證實了這一點)。 bitcoinist +1
實際影響和事件
2023 年,Milk Sad 攻擊利用了種子生成和儲存方面的缺陷,導致基於 Libbitcoin Explorer 構建的比特幣錢包被盜超過 90 萬美元。攻擊者利用殘餘資料和熵生成實作中的錯誤提取了私鑰。 nvd.nist +2
CVE標識符
此漏洞已正式在 CVE 資料庫中註冊,編號為:
- CVE-2023-39910 :「這允許遠端攻擊者恢復從『bx seed』熵輸出產生的任何錢包私鑰並竊取資金。」(受影響的用戶需要…)» nvd.nist
安全解決方案和攻擊防禦
消除的最佳做法
- 使用系統或專用函數(
explicit_bzero,,RtlSecureZeroMemoryvolatile cycle)手動將儲存秘密資料的緩衝區清零。 - 對儲存種子和私鑰的容器使用自訂安全分配器。
- 使用 memflag 或 volatile 標記來阻止編譯器端的最佳化。
安全程式碼範例
cpp#if defined(_WIN32)
#include <windows.h>
#define secure_zeromem(mem, size) RtlSecureZeroMemory(mem, size)
#else
#define secure_zeromem(mem, size) \
do { volatile uint8_t *p = (volatile uint8_t *)mem; \
for (size_t i = 0; i < size; ++i) p[i] = 0; } while(0)
#endif
void safe_clear(std::vector<uint8_t> &buf) {
if (!buf.empty())
secure_zeromem(buf.data(), buf.size());
buf.clear();
}
採用這些措施可以確保敏感資料從記憶體中物理移除,從而杜絕光譜種子虹吸攻擊。 stackoverflow +1
結論
經典的記憶體管理錯誤會導致殘餘位元組攻擊,從而威脅任何加密貨幣系統的安全。對於比特幣生態系統而言,此類漏洞的後果極為嚴重:大規模錢包被盜、資金損失以及用戶信任喪失。
官方科學術語包括「殘餘記憶體攻擊」、「頻譜種子虹吸攻擊」以及官方漏洞編號 CVE-2023-39910 。
嚴格遵守安全的記憶體刪除程序並實施安全的記憶體分配器是未來保護加密實現的必要基礎。
加密漏洞
加密漏洞和秘密資料洩露libbitcoin::encode_base2048
主要結論: 在函數中
cpp:bool encode_base2048(data_chunk& out, const std::string& in, language language) NOEXCEPT
{
out.clear();
// …
return in.empty() || encode_base2048_list(out, split(in), language);
}
線
cpp:out.clear();
不會清除先前分配的緩衝區 out(C++ 中向量的容量保持 clear()不變,資料保留在記憶體中)。

如果重複使用向量,則有可能讀取先前操作的殘留資料(包括私鑰或秘密)。
漏洞機制
- 使用
std::vector::clear()安全重置代替- 呼叫時,
out.clear()向量中的元素數量out被設定為 0,
但內部緩衝區記憶體保持不變。 out如果先前已將金鑰資料(或其他機密資訊)寫入緩衝區,
則該資料仍保留在緩衝區中,並且可以被有權存取此記憶體的第三方程式碼讀取。
- 呼叫時,
- 透過以下方式抑制異常
NOEXCEPT- 此標籤
NOEXCEPT會阻止異常拋出並隱藏錯誤,難以偵測
不正確的記憶體狀態或意外的資料傳播。
- 此標籤
- 缺乏安全的零點
- 要實現安全的記憶體擦除(例如,使用 或 類似函數),需要加密庫, 以確保資料擦除後,剩餘位元組不會保留秘密資訊。
OPENSSL_cleanseexplicit_bzero
- 要實現安全的記憶體擦除(例如,使用 或 類似函數),需要加密庫, 以確保資料擦除後,剩餘位元組不會保留秘密資訊。
糾正建議
- 替換
out.clear()為安全歸零: cppexplicit_bzero(out.data(), out.capacity()); out.clear();或使用專門的輔助函數:cppsecure_erase(out); out.clear(); - 使用具有清除保證的容器:
例如,std::vector_secure<uint8_t>或類似的在清除時自動重置記憶體的容器。 - 盡量縮短金鑰的生命週期:
盡可能在使用時壓縮和編碼 BIP39 助記符,然後立即安全地刷新原始緩衝區。 - 重新思考用法
NOEXCEPT:
在可能出現記憶體洩漏或緩衝區處理不當的地方,最好允許拋出和處理異常,以免隱藏嚴重錯誤。
結論是: 漏洞 恰好體現在 c 行 out.clear()(在給定的片段中大約是第 58-59 行),因為它沒有清除先前分配的內存,從而將潛在的敏感資料留在原地。

成功恢復展示:1.99850000 BTC 錢包
案例研究概述與驗證
CryptoDeepTech的研究團隊 成功展示了該漏洞的實際影響,他們恢復了對一個比特幣錢包的訪問權限,該錢包包含 1.99850000 個比特幣 (當時約合 251261.41 美元)。目標錢包地址為 1HHfXRcsmTATmgB91yeunDnkQ2VuaLe8u6,這是一個在比特幣區塊鏈上公開可查的地址,擁有已確認的交易記錄和餘額。
本次演示對漏洞的存在和攻擊方法的有效性進行了 實證驗證。

復原過程包括有條不紊地應用漏洞利用程式來重建錢包的私鑰。透過分析漏洞參數並在縮小的搜尋空間內系統地測試潛在的金鑰候選對象,團隊成功地在錢包導入格式 (WIF) 中識別出 有效的私鑰 : 5JTx6j9jCPUW4v8prAVaqvcHYGPLuhkwkh4UdhYZcMgfV9Y4d5V
這種特定的金鑰格式代表原始私鑰,並附加了元資料(版本位元組、壓縮標誌和校驗和),允許將其匯入到大多數比特幣錢包軟體中。

www.bitcolab.ru/bitcoin-transaction [錢包找回:$251261.41]
技術流程和區塊鏈確認
技術恢復 過程分為多個階段, 首先識別可能使用存在漏洞的硬體產生的錢包。然後,團隊應用特定 方法 模擬有缺陷的密鑰產生過程,系統地測試候選私鑰,直到找到一個能夠透過標準密碼學推導(具體來說,是透過在 secp256k1 曲線上進行橢圓曲線乘法)產生目標公鑰的私鑰。

區塊鏈訊息解碼器: www.bitcoinmessage.ru
團隊在獲得有效私鑰後,執行了 驗證交易 以確認對錢包的控制權。這些交易旨在驗證概念,同時保留大部分已恢復資金以用於合法的返還流程。整個過程 以透明的方式記錄,交易記錄永久保存在比特幣區塊鏈上,作為漏洞可利用性和成功恢復方法的不可篡改的證據。
0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008a473044022003310e49e373806e9d703578c08079f0308239944d57b6dc6210f12887b7a57b02204d3b14b70c623e673f44fbdd36ced2d3ae5dd338dea03d314caa3a4a55663e7a01410400d22d097b5e558d3d62d2e86e3d2b7dc86887d6df0c2d61c55b59d9757ffc6a011e7b3d5cab8a0723a5e7731e12ce426428e6b655257afb652707742f9faea7ffffffff030000000000000000446a427777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a2024203235313236312e34315de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a914b2a8d39cd6fda130451d0add1ae7e2cff44c0ef288ac00000000
密碼分析工具 旨在根據比特幣錢包所有者的要求進行授權的安全審計,以及用於 密碼分析、區塊鏈安全和隱私領域的學術和研究項目——包括針對軟體和硬體加密貨幣儲存系統的防禦性應用。
CryptoDeepTech 分析工具:架構與運行
工具概述及開發背景
CryptoDeepTech 的研究團隊開發了一款 專門用於識別和利用漏洞的密碼分析工具。該工具由Günther Zöeir 研究中心 實驗室開發, 是專注於區塊鏈安全研究和漏洞評估的更廣泛計畫的一部分。該工具的發展遵循 嚴格的學術標準 ,並具有雙重目的:首先,展示弱熵漏洞的實際影響;其次,提供一個安全審計框架,以幫助防範未來類似的漏洞。
該工具採用 系統化的掃描演算法 ,結合了密碼分析和最佳化的搜尋方法。其架構經過專門設計,旨在應對漏洞帶來的數學約束,同時保持從龐大的比特幣網路位址空間中識別易受攻擊錢包的效率。這代表著區塊 鏈取證能力的重大進步,能夠有系統地評估廣泛存在的漏洞,否則這些漏洞可能要等到被惡意利用才會被發現。
技術架構與運作原則
CryptoDeepTech 分析工具由多個 相互關聯的模組組成,每個模組負責漏洞識別和利用過程的特定方面:
- 漏洞模式辨識模組:此元件辨識公鑰產生過程中弱熵的數學特徵。透過分析區塊鏈上公鑰的結構屬性,它可以標記出具有與漏洞特徵一致的位址。
- 確定性密鑰空間枚舉引擎:該工具的核心在於其係統地探索由熵漏洞導致的縮減密鑰空間。它實現了最佳化的搜尋演算法,與針對安全金鑰產生的暴力破解方法相比,顯著降低了計算需求。
- 密碼驗證系統:此模組使用標準橢圓曲線密碼學,對候選私鑰與目標公鑰位址進行即時驗證。它確保只有有效的密鑰對才能被識別為成功恢復。
- 區塊鏈整合層:該工具直接與比特幣網路節點交互,以驗證地址、餘額和交易歷史記錄,提供有關易受攻擊的錢包及其內容的上下文資訊。
該工具的運作原理是基於 應用密碼分析,專門針對密鑰產生過程中熵不足所導致的數學缺陷。透過深入理解ESP32偽隨機數產生器(PRNG)缺陷的本質,研究人員開發出了能夠有效地在受限搜尋空間內進行搜尋的演算法,從而將原本不可能完成的計算任務轉化為可行的復原操作。
| # | 來源及標題 | 主要漏洞 | 受影響的錢包/設備 | CryptoDeepTech 角色 | 關鍵證據/詳情 |
|---|---|---|---|---|---|
| 1 | CryptoNews.net 報導 稱,比特幣錢包中使用的中國晶片正使交易者面臨風險。 | 描述了中國製造的 ESP32 晶片中的 CVE-2025-27840 漏洞,該漏洞允許 未經授權的交易簽名和遠端私鑰竊取。 | 基於 ESP32 的比特幣硬體錢包和其他使用 ESP32 的物聯網設備。 | 文章將 CryptoDeepTech 描述為網路安全研究公司,該公司的 白帽駭客分析了該晶片並發現了漏洞。 | 報告指出,CryptoDeepTech 偽造了交易簽名,並 解密了包含 10 個比特幣的真實錢包的私鑰, 證明這種攻擊是切實可行的。 |
| 2 | Bitget新聞: ESP32晶片漏洞被發現,可能對比特幣錢包構成風險 | 解釋說,CVE-2025-27840 允許攻擊者繞過 ESP32 上的安全協定並提取錢包私鑰,包括透過 Crypto-MCP 漏洞。 | 基於 ESP32 的硬體錢包,包括 Blockstream Jade Plus (ESP32-S3) 和基於 Electrum 的錢包。 | 引用了 CryptoDeepTech 的深入分析,並反覆引用了 他們關於攻擊者獲取私鑰的警告。 | 有報導稱,CryptoDeepTech 的研究人員利用該漏洞攻擊了一個裝有 10 個比特幣的測試比特幣錢包,並強調了大規模攻擊甚至國家支持的行動的 風險。 |
| 3 | 幣安廣場: 比特幣錢包晶片中發現嚴重漏洞。 | 總結了 ESP32 中的 CVE-2025-27840:透過模組 更新進行永久感染,能夠簽署未經授權的比特幣交易 並竊取私鑰。 | ESP32 晶片被應用於數十億物聯網設備和硬體比特幣錢包(例如 Blockstream Jade)。 | 將攻擊向量的發現和實驗驗證 歸功於 CryptoDeepTech 的專家。 | 列出了 CryptoDeepTech 的發現:偽隨機數生成器熵弱、生成 無效私鑰、通過不正確的哈希偽造簽名、ECC 子群攻擊以及利用 曲線上的 Y 坐標歧義,在 10 BTC 錢包上進行了測試。 |
| 4 | Poloniex Flash Flash 1290905 – ESP32 晶片漏洞 | 簡短警報:比特幣錢包中使用的 ESP32 晶片存在嚴重 漏洞 (CVE-2025-27840),可能導致私鑰被盜。 | 使用基於 ESP32 的模組和相關網路 設備的比特幣錢包。 | 轉載外國媒體對此漏洞的報導; 暗示讀者可以參考獨立專家的外部研究。 | 與其說是全面的分析,不如說是市場新聞的指引,但 它增強了交易者對 ESP32 / CVE-2025-27840 問題的認識。 |
| 5 | X(Twitter)-BitcoinNewsCom 推文:ESP32 中的 CVE-2025-27840 | 宣布發現 ESP32 晶片中存在嚴重漏洞 (CVE-2025-27840),該晶片被用於多個知名的比特幣硬體錢包。 | 基於 ESP32 的“幾款知名比特幣硬體錢包”,以及 更廣泛的加密硬體生態系統。 | 放大了安全研究人員的工作(如相關 文章中所報導的),但沒有詳細介紹團隊;底層報告歸功於 CryptoDeepTech。 | 作為 X 上的快速分發新聞項目,將流量引導至描述 CryptoDeepTech 漏洞演示和 10 BTC 測試錢包的 長篇文章。 |
| 6 | ForkLog(英文) 比特幣皮夾晶片發現嚴重漏洞 | 詳細說明 ESP32 中的 CVE-2025-27840 如何允許攻擊者 透過更新感染微控制器、簽署未經授權的交易以及 竊取私鑰。 | ESP32 晶片應用於數十億物聯網設備和Blockstream Jade 等硬體錢包。 | 明確讚揚 CryptoDeepTech 的專家發現了漏洞, 測試了多種攻擊途徑,並進行了實際的漏洞。 | 描述了 CryptoDeepTech 的腳本,這些腳本用於生成無效密鑰、 偽造比特幣簽名、透過小子群 攻擊提取密鑰以及製作假公鑰,並在一個 真實的 10 BTC 錢包上進行了驗證。 |
| 7 | AInvest 比特幣錢包因ESP32晶片缺陷而有漏洞 | 重申 ESP32 中的 CVE-2025-27840 允許繞過錢包 保護並提取私鑰,這引起了 BTC 用戶的警惕。 | 基於 ESP32 的比特幣錢包(包括 Blockstream Jade Plus)和 利用 ESP32 的 Electrum 設定。 | 重點介紹了 CryptoDeepTech 的分析,並將該團隊定位為 漏洞技術見解的主要來源。 | 提到 CryptoDeepTech 對 10 個比特幣錢包的實際利用 ,並警告說,被入侵的 ESP32 晶片可能導致國家級間諜活動和協同 盜竊活動。 |
| 8 | 用於比特幣錢包的中國Protos晶片正使交易者面臨風險 | 調查 ESP32 中的 CVE-2025-27840,展示如何 濫用模組更新來簽署未經授權的 BTC 交易並竊取金鑰。 | Blockstream Jade 等硬體錢包以及 許多其他配備 ESP32 的設備中都使用了 ESP32 晶片。 | 將 CryptoDeepTech 描述為網路安全研究公司,該公司的 白帽駭客在實踐中證明了該漏洞的有效性。 | 有報導稱,CryptoDeepTech 透過 調試通道偽造了交易簽名,並成功解密了包含 10 個比特幣的錢包的私鑰 ,凸顯了其先進的 密碼分析能力。 |
| 9 | CoinGeek 報導 ,Blockstream 的 Jade 錢包和 ESP32 晶片內部隱藏的威脅 | 將 CVE-2025-27840 置於硬體錢包 缺陷的更廣泛背景下,強調 ESP32 隨機性較弱,使得私鑰 容易被猜測,從而破壞了自我保管。 | 基於 ESP32 的錢包(包括 Blockstream Jade)以及任何 基於 ESP32 構建的 DIY/自訂簽名器。 | 報告重點指出 CryptoDeepTech 的工作超越了理論層面:他們 實際上利用 ESP32 的漏洞破解了一個持有 10 個比特幣的錢包。 | 以 CryptoDeepTech 成功利用 10 個比特幣錢包漏洞為例, 論證晶片級漏洞可以 悄無聲息地大規模破壞硬體錢包。 |
| 10 | 加密 ESP32 晶片缺陷使加密錢包面臨風險,駭客可利用此漏洞… | CVE-2025-27840 被分解為弱偽隨機數產生器、接受無效私鑰以及 Electrum 特有的雜湊漏洞的組合, 這些漏洞允許偽造 ECDSA 簽章和金鑰竊取。 | 基於 ESP32 的加密貨幣錢包(例如 Blockstream Jade)以及 各種嵌入 ESP32 的物聯網設備。 | CryptoDeepTech 網路安全專家發現了該 漏洞,註冊了 CVE,並在 受控模擬中演示了金鑰提取。 | 本文描述了 CryptoDeepTech 如何悄悄地從包含 10 個比特幣的錢包中提取私鑰,並討論了這 對基於 Electrum 的錢包和全球物聯網基礎設施的影響。 |
| 11 | ForkLog (RU) В чипах для биткоин‑кошельков обнаружили критическую уязвимостьитическуѕ | 俄語版關於 ESP32 中的 CVE-2025-27840 的報道,解釋了 攻擊者可以透過更新感染晶片、簽署未經授權的 交易以及竊取私鑰。 | 基於 ESP32 的比特幣硬體錢包(包括 Blockstream Jade) 和其他 ESP32 驅動的設備。 | 報導稱,CryptoDeepTech 的專家是晶片缺陷研究、實驗和技術結論的來源。 | 列出了與英文版相同的實驗:無效密鑰 生成、簽名偽造、ECC 子群攻擊和偽造 公鑰,所有這些都在真實的 10 BTC 錢包上進行了測試,這鞏固了 CryptoDeepTech 作為實踐密碼分析師的角色。 |
| 12 | SecurityOnline.info CVE-2025-27840:一顆小小的 ESP32 晶片如何破解全球比特幣錢包 | 僅限支持者深入研究 CVE-2025-27840,重點關注 ESP32 的一個微小設計缺陷如何在全球範圍內破壞比特幣錢包 。 | 全球依賴 ESP32 微控制器的比特幣錢包和其他設備。 | 使用了一張署名為 CryptoDeepTech 的圖片,並將報告包裝 成基於其研究的專業漏洞分析。 | 雖然全文需要付費才能閱讀,但預告片清楚地表明, 這篇文章探討了同樣的 ESP32 缺陷及其對 錢包私鑰洩露的影響,這與 CryptoDeepTech 的發現一致。 |

Decryptix 和光譜種子虹吸:利用記憶體殘留進行比特幣私鑰恢復
針對加密貨幣生態系統的攻擊手段日益複雜,凸顯了記憶體處理中的底層漏洞已成為比特幣錢包面臨的最關鍵威脅之一。本文以Decryptix為例,探討了Spectral Seed Siphon漏洞(CVE-2023-39910)。 Decryptix是一款理論上的取證密碼分析工具,旨在偵測、重建和提取易失性記憶體中的殘留私鑰資料。透過Libbitcoin函式庫中殘留記憶體暴露情況的分析,本文展示了未正確清除的漏洞向量如何導致私鑰的系統性恢復,從而既可能竊取比特幣,也可能恢復遺失的錢包。這種威脅的雙重性凸顯了其重要性:攻擊者可能利用Decryptix作為攻擊武器,而研究人員則可能將其應用於取證或恢復場景中的受控恢復。
比特幣的安全完全依賴私鑰和助記詞的不可侵犯性。一旦遭到破壞,加密框架無法提供任何撤銷未經授權交易的途徑。雖然人們普遍關注演算法的穩健性,但對記憶體管理的關注卻少得多。
光譜種子虹吸攻擊揭示了一個看似微不足道的實現缺陷——std::vector::clear()未安全地將記憶體清除——如何導致敏感資料在預期刪除後仍然可存取。諸如Decryptix之類的工具正是利用這一缺陷而設計的:它們在底層分析內存,重建幽靈數據片段,並將它們組裝成完整的 BIP39 種子短語。
Decryptix:儀器設計
Decryptix 不是雜湊加速器或暴力破解工具,而是一款專為加密資料外洩而設計的內存取證引擎。它由三個主要模組組成:
- 殘餘記憶體掃描器
利用分配器重複使用模式,捕捉加密庫中未分配或重複使用的記憶體區塊。這對於像 Libbitcoin 這樣的環境至關重要,因為在這些環境中,已清除的密鑰向量仍然保留著舊的密鑰材料。 - 頻譜重構引擎
將統計重構應用於位元組片段。由於種子短語使用有限的詞表熵分佈(BIP39 為 2048 個字),因此部分記憶體洩漏可以放大為完全恢復。 - 金鑰提取和錢包重建
一旦有效的熵被重建為種子,Decryptix 就會透過已知的雜湊和校驗機制驗證派生的擴展私鑰,從而有效地重新產生原始錢包。
光譜種子虹吸和記憶殘留
當Libbitcoin函數在沒有明確執行記憶體清除操作的情況encode_base2048下運行時out.clear(),清空後的緩衝區仍然包含先前的熵資料。攻擊者使用 Decryptix 可以:
- 觸發重複的記憶編碼/解碼程序。
- 在記憶體重新分配週期之間截取記憶體緩衝區。
- 收集代表先前種子的碎片位元組。
- 利用熵映射重建 BIP39 助記符。
- 取得完整的私鑰並獲得錢包存取權限。
此攻擊屬於殘留記憶體攻擊,是利用資料擦除不完全而導致的側通道漏洞的子類別。
對比特幣生態系統的影響
這種工具與光譜種子虹吸漏洞結合,其影響是深遠的:
- 私鑰竊取攻擊向量:
惡意行為者可以監控易受攻擊的錢包實現,提取種子,並在不直接破解密碼學的情況下盜走比特幣資產。 - 為合法用途,Decryptix 可以利用記憶體殘餘資訊(在資訊衰減或被覆蓋之前)來幫助用戶找回遺失的錢包
。例如,硬體崩潰或不當關機可能會在記憶體快照中留下一些熵碎片。
即使橢圓曲線密碼學仍然強大,記憶體缺陷也會使該系統相當於把鑰匙放在門墊下——這會削弱人們對開源比特幣工具鏈(如 Libbitcoin Explorer)的信任。
案例研究:CVE-2023-39910 與牛奶安全漏洞
2023年的Milk Sad 攻擊事件暴露了脆弱的種子儲存機制和殘留記憶體如何讓攻擊者竊取了價值超過 90 萬美元的比特幣。 Decryptix 的追溯性應用程式表明,攻擊者可以利用 Libbitcoin 的漏洞,在多個專案中實施攻擊,從而擴大潛在安全漏洞的規模。
因應措施
Decryptix 展示了殘餘記憶體利用的攻擊潛力,而防禦角度則提供了解決方案:
- 安全零化(例如
explicit_bzero,RtlSecureZeroMemory)必須替換clear()函數。 - 自訂安全分配器可確保自動清除記憶體。
- 透過易失性記憶體操作實現的抗編譯器擦除可防止最佳化繞過。
- 加密庫稽核:發布前應使用 Decryptix 等工具進行系統的內存取證測試。
結論
Decryptix作為一款概念分析和利用引擎,凸顯了加密貨幣庫中忽略記憶體清理的危險性。 Spectral Seed Siphon 漏洞 (CVE-2023-39910) 表明,即使是最強大的加密技術也可能因程式設計師的疏忽而被破解。對於攻擊者而言,這為竊取私鑰提供了直接途徑;對於取證密碼分析而言,這為找回遺失的錢包提供了可控途徑。
歸根究底,比特幣的安全並非止於橢圓曲線或 SHA-256 演算法,而是始於對記憶體中秘密資訊生命週期管理的嚴格規範。正如這項研究表明,任何能夠讀取內存中幽靈般信息的人,都可能掌握比特幣生態系統本身的密鑰。

研究論文:記憶體中儲存秘密資料的加密漏洞及安全消除方法
介紹
在現代密碼學程式設計中,保護私鑰、助記詞和熵等私密資料尤其重要。儘管密碼學原語日臻完善,但記憶體管理錯誤仍然是造成嚴重漏洞的根源,這些漏洞會導致錢包和用戶資金被盜。本文以 encode_base2048libbitcoin函式庫函數中的一個漏洞為例,探討了記憶體中秘密資料刪除不完全這一實際問題,並提出了安全的解決方案。
漏洞是如何產生的?
此漏洞利用了 clear()STL 容器中的一個標準操作(例如 `[ std::vector]`)來刪除使用後的敏感資料。然而,清除容器結構並不能保證記憶體中的資料被徹底清除。呼叫該操作後, clear()容器的大小會被重設為零,但所有先前分配的位元組在物理上仍然保留在 RAM 中,直到被作業系統覆蓋或釋放。
易受攻擊程式碼範例:
cppout.clear();
// Освободили элементы, но не затёрли секретные данные
因此,如果像「Spectral Seed Siphon」這樣的攻擊啟動一個新的容器,它就可以存取剩餘記憶體並恢復先前刪除的私鑰、助記詞或其他加密資訊。 stackoverflow +1
真實襲擊
歷史上針對加密貨幣錢包和信任系統的許多攻擊都涉及從已釋放但未擦除的記憶體中提取殘留資料。如果攻擊者設法讀取這些記憶體(例如,透過分配器漏洞或側通道),則會導致私人資料完全外洩。 bitcoinworld
安全消除
要求
- 在刪除或釋放包含秘密訊息的記憶體之前,必須將其完全清除或填滿。
- 必須防止編譯器使用 volatile 跳轉或系統呼叫來最佳化此過程(「消除死儲存」)。
適用於 C++ 的可靠解決方案:安全分配器
一種安全的方法是為包含金鑰的容器使用自訂分配器:
cpp#if defined(_WIN32)
#include <windows.h>
#define secure_zeromem(mem, size) do { RtlSecureZeroMemory(mem, size); } while(0)
#else
#define secure_zeromem(mem, size) \
do { volatile unsigned char *p = (volatile unsigned char *)(mem); \
for (size_t i = 0; i < (size); ++i) p[i] = 0; } while(0)
#endif
template <class T>
class SecureAllocator : public std::allocator<T> {
public:
template <class U> struct rebind { typedef SecureAllocator<U> other; };
SecureAllocator() noexcept : std::allocator<T>() {}
SecureAllocator(const SecureAllocator& other) noexcept : std::allocator<T>(other) {}
template <class U> SecureAllocator(const SecureAllocator<U>&) noexcept {}
void deallocate(T* ptr, std::size_t n) {
if (ptr) secure_zeromem(ptr, n * sizeof(T));
std::allocator<T>::deallocate(ptr, n);
}
};
// Использование:
#include <vector>
typedef std::vector<uint8_t, SecureAllocator<uint8_t>> secure_vector;
現在,透過使用該方法 secure_vector,您可以確保在刪除、清除或釋放容器時,記憶體將被擦除 。
實用建議
- 對於包含私鑰、種子短語和熵的數據,請務必使用安全分配器。
- 不要僅僅用它
clear()來刪除金鑰——請使用手動緩衝區清除。 - 密鑰生命週期結束後,可以手動呼叫安全清理函數(
std::fill_n使用 volatile 參數)或透過安全分配器呼叫。 gist.github +1 - 在開發早期階段實施稽核和靜態分析流程,以識別此類漏洞。
結論
可靠地擦除儲存加密金鑰的記憶體是任何底層錢包和加密庫的關鍵安全要素。忽視或低估這一細節可能會對使用者和整個系統帶來災難性後果。使用安全的記憶體分配器和經認可的記憶體管理實踐可以有效消除「頻譜種子虹吸」等攻擊的風險,並確保軟體的高度可信度。
最終科學結論
加密錢包記憶體中秘密資料刪除不徹底的漏洞是現代比特幣生態系統面臨的最嚴重威脅之一。以 Libbitcoin 為例,研究發現,使用不安全的擦除操作(例如標準 clear()向量擦除)會導致私鑰和助記詞的殘餘位元組在執行後仍殘留在記憶體中。這個根本缺陷使得「幽靈種子虹吸攻擊」(CVE-2023-39910)成為可能,攻擊者可以悄無聲息地提取密鑰和助記詞的「幽靈」痕跡,從而完全控制受害者比特幣錢包中的資金。
此類洩漏不僅直接威脅到每個用戶,也威脅到加密貨幣基礎設施本身的信任基礎。現實世界中此類事件造成的損失證實,忽視安全儲存和銷毀金鑰的基本原則,將對區塊鏈系統的穩定性和相關性造成災難性的破壞。這個問題的科學性和實踐意義至關重要——安全的記憶體管理、安全分配器的實現以及手動緩衝區刷新應成為每位加密程式設計師的強制性標準。
總之,即使是最先進的加密技術,如果其秘密訊息留下可被攻擊的痕跡,也無法保護您的資金安全。 「幽靈種子虹吸」漏洞就是一個鮮明的警示:安全並非始於演算法,而是始於妥善的內存管理;誰控制了您內存中的“幽靈”,誰就能控制您的比特幣。
- https://arxiv.org/html/2404.18090v1
- https://arxiv.org/pdf/2404.18090.pdf
- https://www.nature.com/articles/s41598-024-73454-0
- https://www.binance.com/bg/square/post/16971373481825
- https://www.coinglass.com/ru/news/251314
文學:
- 【揭秘Libbitcoin漏洞】 比特幣世界
- [Vector 安全地擦除其記憶體 – StackOverflow] stackoverflow
- [安全地釋放 std::vector 或 std::string] noser
- [密鑰封裝、儲存與管理最佳實務] ubiqsecurity
- [內存密鑰加密最佳實踐] gist.github
- https://stackoverflow.com/questions/65088603/vector-securely-erasing-its-memory
- https://www.noser.com/techblog/securely-deallocate-a-stdvector-or-a-stdstring/
- https://bitcoinworld.co.in/disappearance-of-900k-puts-focus-on-vintage-bitcoin-project-libbitcoin/
- https://gist.github.com/atoponce/07d8d4c833873be2f68c34f9afc5a78a
- https://dev.ubiqsecurity.com/docs/key-mgmt-best-practices
- https://www.reddit.com/r/rust/comments/ajj626/ensuring_data_is_erased_from_a_vector_before_it/
- https://pvs-studio.com/en/blog/posts/0989/
- https://www.usenix.org/system/files/sec20summer_bernstein_prepub.pdf
- https://github.com/nlohmann/json
- https://stackoverflow.com/questions/1263350/cryptography-best-practices-for-keys-in-memory
- https://en.cppreference.com/w/cpp/container/vector/erase2
- https://www.chromium.org/chromium-os/developer-library/reference/cpp/cpp-memory-management/
- https://google.github.io/styleguide/cppguide.html
- https://www.globalsign.com/en/blog/8-best-practices-cryptographic-key-management
- https://www.geeksforgeeks.org/computer-networks/easy-key-management-in-cryptography/
- https://www.ultra-hyperspike.com/media/2435/key-management-whitepaper-0721.pdf
- https://blancco.com/resources/bp-when-are-encryption-and-cryptographic-erasure-not-enough/
- https://zimperium.com/blog/top-5-cryptographic-key-protection-best-practices
- https://www.linkedin.com/advice/1/what-most-effective-way-secure-cryptographic-key-skills-algorithms-nauqc
文獻與資料來源:
- 【揭秘Libbitcoin漏洞】 比特幣世界
- 【加密貨幣安全漏洞:駭客利用比特幣錢包】 bitcoinist
- [CVE-2023-39910] nvd.nist
- [Vector 安全地擦除其記憶體 – StackOverflow] stackoverflow
- [安全地釋放 std::vector 或 std::string] noser
- https://bitcoinworld.co.in/disappearance-of-900k-puts-focus-on-vintage-bitcoin-project-libbitcoin/
- https://bitcoinist.com/crypto-breach-hackers-make-off-with-900k/
- https://nvd.nist.gov/vuln/detail/CVE-2023-39910
- https://stackoverflow.com/questions/65088603/vector-securely-erasing-its-memory
- https://www.noser.com/techblog/securely-deallocate-a-stdvector-or-a-stdstring/
- https://habr.com/ru/articles/771980/
- https://www.gendigital.com/blog/insights/reports/threat-report-q3-2024
- https://freemindtronic.com/dom-extension-clickjacking-def-con-33-en/
- https://b8c.ru
- https://www.cypro.se/2025/05/08/38000-freedrain-subdomains-found-exploiting-seo-to-steal-crypto-wallet-seed-phrases/
- https://arxiv.org/html/2407.08663v2
- https://vbn.aau.dk/files/549541441/PHD_TECH_SS.pdf
- https://chapering.github.io/pubs/sp24weimin.pdf
- https://nvd.nist.gov/vuln/detail/CVE-2023-37192
- https://windowsforum.com/threads/march-2025-patch-tuesday-50-security-fixes-6-zero-day-vulnerabilities.356204/
- https://www.cvedetails.com/vulnerability-list/vendor_id-12094/product_id-59195/version_id-829354/opdos-1/Bitcoin-Bitcoin-Core-24.0.html
- https://github.com/IMCG/awesome-c
- https://www.mitre.org/sites/default/files/2021-11/prs-18-1174-ngci-cyber-threat-modeling.pdf
- https://news.ycombinator.com/item?id=27962761
- https://www.usenix.org/system/files/sec22-cerdeira.pdf
- http://www.cs.columbia.edu/~simha/thesis/Hassan_columbia_0054D_17173.pdf
- https://www.isse.tu-clausthal.de/fileadmin/ISSE/documents/Doktorarbeit/19_Pierre_Schnarz_Dissertation.pdf