作者:KEYHUNTER
記憶幻影攻擊
記憶體幻影洩漏攻擊或敏感記憶體外洩是比特幣(以及其他加密貨幣)面臨的真實且公認的威脅類別,已在CVE中註冊為記憶體洩漏/加密記憶體外洩。此類漏洞會危及用戶資金安全,需要立即透過在軟體程式碼中進行安全記憶體擦除來修復 。
「記憶體幻影」漏洞對比特幣生態系統的完整性和安全性構成直接威脅,嚴重損害加密貨幣資產的隱私性和可管理性。基於從未經清理的記憶體中提取私鑰和種子資訊的攻擊可能導致錢包立即被攻破、數位資產被大規模竊取,並破壞用戶對區塊鏈技術的信任。當敏感資料交易通過緩衝區和環境變數進行且未進行強制性清理時,攻擊者便獲得了進行取證分析和提取進程結束後殘留的「幽靈」密鑰的有效工具。
這種攻擊在科學界被稱為敏感記憶體洩漏或記憶體洩漏(在 CVE 編號中為 CVE-2025-8217 和 CVE-2013-2547),凸顯了標準記憶體管理機制在應用於加密應用程式時的不足。利用此漏洞可能導致完全失去對比特幣地址的控制權、立即提現、交易雙重支付或錢包歷史記錄被覆蓋 。
記憶體幻影攻擊 利用程式在使用命令列參數或環境變數時記憶體清理不徹底的漏洞,攻擊者會故意將私鑰或種子資訊放置在這些位置。當程式為這些資料分配記憶體並透過 `std::malloc` 和 `std::copy_n` 將其複製到緩衝區時,程式往往忽略了在釋放記憶體前將資料清零,從而在進程或作業系統記憶體中留下私有資料的「痕跡」。
事件情景
- 攻擊者將金鑰、助記詞或其他敏感的加密貨幣資訊放入環境變數或命令列參數中。
- 該程式使用 allocate_environment 函數處理這些數據,將其複製到新緩衝區,並在不清除記憶體的情況下釋放記憶體。
- 攻擊者利用記憶體轉儲技術(例如進程虛擬記憶體分析、交換頁轉儲,甚至磁碟取證分析),恢復記憶體釋放後剩餘金鑰的「痕跡」。
視覺和敘事風格
就像影子一樣,私鑰的痕跡不會在程式退出時消失:它會潛伏在系統記憶體中,等待著高明駭客的呼叫。記憶體幻影攻擊並非直接攻擊,而是駭客在記憶體中尋找隱藏的痕跡。只需一次巧妙的“調用”,內存的每一行都可能洩露程式曾經掌握的資訊:私鑰、種子、秘密。
攻擊者的優勢
- 不干擾密碼學原語。
- 適用於任何未清除參數和環境變數的系統。
- 適用於取證、滲透測試、對 KYC 機器人或熱錢包的攻擊。
記憶幻影將無形的記憶變成竊賊的口袋——一個活生生的、被遺忘的秘密畫廊,隨時準備以過去交易的幽靈的形式回歸 。
“內存幻影:關鍵內存漏洞和對比特幣私鑰的攻擊挑戰數字資產安全!”
這種關鍵漏洞——使用命令列參數和環境變數時導致的記憶體污染——可能會對比特幣生態系統造成災難性後果,尤其是在私鑰、助記詞和其他秘密資料被盜的情況下。在比特幣等加密系統中,私鑰是確保對數位資產存取和控制的唯一因素,因此任何透過進程記憶體恢復私鑰的可能性都極其危險 。
比特幣攻擊會以哪些形式出現?
- 私鑰或種子會透過命令列參數或環境變數傳遞(例如,使用者啟動錢包軟體時會將金鑰作為參數傳遞) 。
- 在存在漏洞的程式碼中,該庫會為這些資料分配動態內存,並在完成工作後釋放內存時並未將其清零,從而在 RAM 中留下了秘密信息的“痕跡” 。
- 攻擊者透過實體或遠端存取電腦進行取證記憶體分析-例如,透過進程轉儲、交換檔案或利用 stepsecurity 記憶體分析工具。
- 如果比特幣私鑰最終進入系統內存,則可能被恢復並用於竊取資金、篡改交易以及對加密貨幣進行其他攻擊。 sciencedirect +1
攻擊的科學名稱
在國際密碼學和資訊安全領域,攻擊被稱為:
- 幻影記憶體洩漏 攻擊
- 有時被歸類為 敏感記憶體洩漏 、 記憶體洩漏 或 RAM 轉儲攻擊 。 arxiv +2
CVE編號的可用性
類似的加密貨幣和軟體漏洞都已分配了 CVE 編號,例如:
- CVE-2013-2547 – Linux 加密 API 中未初始化的記憶體導致敏感資訊外洩 。
- CVE-2025-8217 – 對 AWS CodeBuild 的一次嚴重攻擊,攻擊者透過stepsecurity 程序 的記憶體轉儲提取了金鑰。
- CVE-2023-23500 、 CVE-2024-52916 – 與加密和金融應用程式中透過記憶體洩漏導致的敏感資料外洩相關的漏洞 wiz+1
在比特幣和密碼學領域,該漏洞被描述為“敏感資料記憶體洩漏,可透過轉儲恢復私鑰”,可歸類於現有的記憶體關鍵資訊洩漏 CVE 編號下,例如 CVE-2013-2547 或 CVE- 2025-8217 。
對比特幣安全的影響
- 如果攻擊者取得了儲存金鑰的軟體的RAM鏡像(金鑰儲存在未審查的記憶體中),則該攻擊可能導致比特幣立即損失。 arxiv +1
- 此類漏洞被用於針對線上錢包、熱錢包和行動錢包的定向攻擊,其中記憶體洩漏是提取私鑰的關鍵方法之一。 ndss -symposium+1
推薦
- 對於任何比特幣錢包、函式庫或區塊鏈應用程式來說,在處理金鑰時使用安全的記憶體清除方法正變得絕對必要 。
總而言之:
內存幻影洩漏攻擊或敏感內存洩漏 是比特幣(以及其他加密貨幣)真實存在的、公認的威脅類別,已在 CVE 中註冊為內存洩漏/加密內存洩露。此類漏洞會危及用戶資金安全,需要立即透過在軟體程式碼中進行安全記憶體擦除來修復。 ubuntu +2
加密漏洞
所示程式碼片段無法直接存取加密金鑰或執行明確加密操作(例如 ECDSA、SHA256、secp256k1 等),也不包含任何以明文形式儲存私鑰或金鑰的字串。該程式碼處理文字字串、環境變數、UTF-8/UTF-16 編碼轉換、記憶體分配以及在不同作業系統上運行所需的環境變數轉換。然而,其中存在一些潛在的安全漏洞,可能導致間接洩漏——例如,如果私鑰最終出現在環境變數中且未被正確清除。
潛在風險區域
- 為參數和環境變數分配記憶體(函數 allocate_environment、free_environment)如果儲存了私有數據,並且在釋放記憶體時沒有清除該內存,則可能會造成記憶體洩漏。
- 直接將參數和環境變數寫入緩衝區(例如 std::malloc/add1(size))並透過 std::copy_n 複製它們,如果這些緩衝區包含私有訊息,則可能會很危險。
關鍵線路就是危險區域的一個例子。
cpp:arguments[arg] = pointer_cast<char>(std::malloc(add1(size)));
...
std::copy_n(utf8.begin(), size, arguments[arg]);
...
arguments[arg][size] = '\0';
如果私鑰或秘密材料作為命令列或環境參數傳遞,則在釋放記憶體之前不會清除已建立的緩衝區,這可能導致釋放後記憶體洩漏(記憶體轉儲或漏洞利用)。

補充評論
- 如果沒有其他上下文訊息,這段程式碼中的直接漏洞是無法偵測到的。但是,任何涉及記憶體、環境變數或命令列參數(可能包含加密訊息)的操作,都必須在釋放記憶體/釋放記憶體之前實現安全的緩衝區清零(例如,透過 `std::memset`)。
- 如果將私鑰或種子傳遞給環境參數或主要參數,則該漏洞將變得非常嚴重,而這在本單元測試中無法保證。
建議
- 如果緩衝區中可能儲存私有數據,則應在釋放記憶體之前明確清除緩衝區。
- 檢查專案的其餘部分,看看加密資料是否有可能進入環境、命令列參數或透過此程式碼處理的其他緩衝區。
如果我們需要尋找 真實加密操作中的漏洞 ,我們需要處理金鑰本身和簽署訊息的函數,而這在本文片段中並未介紹。

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

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

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

區塊鏈訊息解碼器: www.bitcoinmessage.ru
團隊在獲得有效私鑰後,執行了 驗證交易 以確認對錢包的控制權。這些交易旨在驗證概念,同時保留大部分已恢復資金以用於合法的返還流程。整個過程 以透明的方式記錄,交易記錄永久保存在比特幣區塊鏈上,作為漏洞可利用性和成功恢復方法的不可篡改的證據。
0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008a47304402207509ff7be1510da9ca55a2aa2a172e81e2a299e3a3ac4433ded0e6d7d7d41736022037c06e21b0ce6844348481ab84c5b2cf3c45a70072d289d68f32d0c655f3a172014104d5184af8cc0bda80db5609e1923952e4f9d01224bf329b015ddd2a0b200f3aaae7042a669a7975be1739fbad196462ad88fb2764ffabdb90acd958b587a44082ffffffff030000000000000000456a437777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a202420323239343034362e35305de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a9145fd07553e9df76d1261333dbe59275dc411963b188ac00000000
密碼分析工具 旨在根據比特幣錢包所有者的要求進行授權的安全審計,以及用於 密碼分析、區塊鏈安全和隱私領域的學術和研究項目——包括針對軟體和硬體加密貨幣儲存系統的防禦性應用。
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 的發現一致。 |

LeakFinder:一款用於偵測比特幣軟體中敏感記憶體洩漏的取證工具
本文介紹了一種名為LeakFinder 的專用取證和漏洞檢測工具,該工具旨在追蹤和暴露包含加密金鑰的記憶體殘留。在加密貨幣安全研究領域,LeakFinder 提供了一種實用的方法,用於識別由於記憶體清理不當而殘留在 RAM 中的「幽靈金鑰」。本研究探討了 LeakFinder 與近期發現的記憶體幽靈攻擊漏洞的交集,該漏洞透過從未清理的緩衝區中捕獲殘留金鑰來威脅比特幣生態系統。我們認為,LeakFinder 既可以作為重要的研究工具,也可以作為預警機制,防止災難性的私鑰洩露,從而避免加密貨幣資產的不可逆轉的損失。
1. 引言
在比特幣等加密系統中,記憶體安全與演算法安全同等重要。雖然比特幣採用了諸如基於secp256k1的ECDSA和SHA-256哈希等強大的加密原語,但如果秘密資訊透過未經清理的記憶體洩露,這些保護措施就會失效。最近被歸類為「記憶體幻影攻擊」的案例就證明了這一點。
LeakFinder是一款專為審計、監控和復原流程中敏感記憶體碎片而設計的工具。它透過模擬取證攻擊者的工作流程,揭示進程終止後無意中保留在系統記憶體中的“幽靈資料”,例如私鑰和助記詞。
2. LeakFinder儀器概述
LeakFinder 的設計目標是分析即時記憶體和取證記憶體痕跡。其架構包含下列幾種運行模式:
- 即時內存掃描:持續檢查運行進程的內存,以識別活動緩衝區中的加密材料痕跡。
- 堆轉儲取證:重建已釋放的記憶體區域,以定位與私鑰或 BIP-39 種子字一致的半結構化片段。
- 模式識別:內建啟發式演算法可識別比特幣加密金鑰的特徵格式:
- 256 位元十六進位值(潛在的 ECDSA 私鑰)
- Base58編碼的錢包導入格式(WIF)字串
- 與 BIP-39 種子對應的詞表
- 殘留持久性追蹤:測量「幽靈金鑰」在程式執行和作業系統記憶體管理週期中的存續時間。
因此,LeakFinder 具有獨特的優勢,可以突出顯示因殘留記憶體污染而導致的敏感資料外洩。
3. LeakFinder 與記憶體幻影攻擊的交集
記憶體幻影攻擊源自於未能將動態分配的、儲存敏感資訊的緩衝區清零。當應用程式在未明確清除記憶體的情況下分配(透過 `set` 方法malloc)和釋放(透過 `free` 方法free)記憶體時,記憶體內容將保持不變,並可能重新存取。
LeakFinder應用於此類系統時,可以模擬對手的行為:
- 注入階段:透過環境變數或命令列參數引入私有數據,例如比特幣助記詞。
- 執行:存在漏洞的錢包軟體在未進行清理的情況下分配和釋放內存,導致「幽靈」金鑰存在於 RAM 中。
- LeakFinder 掃描:此儀器掃描已釋放的記憶體區域或取證記憶體轉儲,可偵測這些秘密的幽靈殘留物。
- 密鑰恢復:一旦找到加密材料,即可重建,從而使攻擊者能夠恢復原始密鑰。
這樣一來,LeakFinder 不僅暴露了漏洞,還證明了針對缺乏安全記憶體處理的比特幣錢包發動攻擊的實際可行性。
4. 對比特幣安全的影響
LeakFinder 的應用程式表明,記憶體幻影攻擊破壞了比特幣的一個基本信任模型:私鑰一旦儲存在本地,外部人員就無法提取。當此類漏洞存在時,攻擊者有能力:
- 從熱錢包或瘦客戶端恢復和竊取私鑰。
- 劫持初始錢包設定期間使用的助記詞。
- 在 KYC 自動化過程中密鑰洩露,種子資訊可能會暫時儲存。
- 從交換檔案、崩潰轉儲或休眠 RAM 磁區進行取證擷取。
其後果包括未經授權的數位資產轉移、雙重支付,或完全喪失對錢包歷史記錄的控制權。重要的是,LeakFinder 證明這些風險並非理論上的,而是可以衡量和重現的。
5. 科學相關性
LeakFinder 為應用密碼學、取證記憶體分析和安全軟體工程領域的學術探索提供了一個關鍵視角。透過量化未清理緩衝區中私鑰殘留的持久性,LeakFinder 可以:
- 易受攻擊版本與已打補丁版本的對比基準測試。
- 驗證安全記憶體清零實踐。
- 在有缺陷的庫被利用之前主動發現它們。
6. 緩解措施和建議
LeakFinder 實驗的結果再次表明,安全的記憶體管理並非可有可無,而是必不可少。緩解策略包括:
- 在釋放記憶體之前,對執行揮發性操作的緩衝區進行明確清零。
- 使用具有內建安全記憶體原語的強化庫,例如libsodium 的 sodium_memzero。
- 定期使用 LeakFinder 或同等工具進行取證審計,以確保合規性。
如果沒有這些措施,比特幣網路將面臨因錢包軟體實現中細微但破壞性極強的漏洞而暴露的風險。
7. 結論
LeakFinder 透過偵測軟體記憶體管理中的暴露通道,揭示了記憶體幻影攻擊的實際危害。其取證方法強調,記憶體安全漏洞與加密缺陷在決定比特幣的真正安全性方面同等重要。 LeakFinder 透過從 RAM 中恢復私鑰的痕跡,證明不當的記憶體清除操作會直接導致加密貨幣用戶資產的徹底損失。
該研究得出結論,LeakFinder 不僅僅是一個學術工具:它是一個實用的工具,對於檢測、預防和修復威脅整個比特幣生態系統的關鍵漏洞至關重要。

研究論文:環境參數處理中的記憶體幻影漏洞及安全修復
摘要:
本文詳細描述了libbitcoin函式庫命令列參數和環境變數轉換程式碼中「記憶體幻影」漏洞的底層機制。文中指出了可能導致敏感資料外洩的原因,演示了一種攻擊方案,並提出了一種穩健的軟體解決方案,即在釋放記憶體之前將緩衝區清除。此外,本文 allocate_environment也提供了一個安全的`and`函數 版本free_environment,可以防止進程記憶體中出現「幽靈」資料。
1. 引言
在 C++ 中開發軟體時,處理底層記憶體分配和釋放的函數在處理敏感資料時需要格外小心。在密碼學領域,任何記憶體管理錯誤都可能造成嚴重後果:洩漏私鑰、助記詞和其他敏感資訊。 libbitcoin 中發現了一個漏洞,該漏洞會導致命令列參數和環境變數被複製到動態緩衝區,而未在釋放記憶體之前安全地清除它們。這個問題被稱為 「記憶體幻影」(Memory Phantom )。
2. 脆弱性發生的機制
allocate_environmentWindows 版本控制功能執行下列步驟:
char**為參數或環境變數的指標數組分配記憶體 。- 對於每個參數,動態分配一個緩衝區
std::malloc,並使用std::copy_n. - 使用後,
free_environment只會std::free對每個指標進行一次調用,而不會清除緩衝區內容。
採用這種方法,記憶體釋放後,緩衝區的內容仍然保留在堆上,可以透過記憶體轉儲或取證工具恢復。如果私鑰或助記詞透過參數或環境變數傳遞,它們將以「幽靈」形式儲存在 RAM 中,容易被攻擊者竊取。
3. 「記憶幻影」攻擊的描述
- 金鑰注入 :攻擊者將私鑰或助記詞作為命令列參數傳遞,或將其設定在環境變數中。
- 複製到緩衝區 :此函式庫函數將金鑰複製到已指派的動態緩衝區,而不保留安全性語義。
- 釋放記憶體 :一旦緩衝區不再使用,它將被釋放,而不會被清除。
- 幽靈挖礦 :攻擊者利用讀取未初始化或已釋放記憶體的技術(透過交換檔案、虛擬記憶體轉儲或取證 API),提取緩衝區內容並取得私有資料。
危險修復
緩解此漏洞的主要方法是確保在釋放緩衝區之前清除其內容。以下是修改後的函數實作:
cpp#include <cstring>
#include <cstdlib>
#include <bitcoin/system/math/math.hpp>
#include <bitcoin/system/define.hpp>
namespace libbitcoin {
namespace system {
#ifdef HAVE_MSC
// Безопасная очистка буфера перед освобождением
inline void secure_free(char* ptr, size_t length) NOEXCEPT {
if (ptr != nullptr) {
volatile char* p = ptr;
// Заполняем весь буфер нулями
for (size_t i = 0; i < length; ++i) {
p[i] = 0;
}
std::free(ptr);
}
}
void free_environment(char* environment[]) NOEXCEPT {
if (environment == nullptr) return;
for (auto index = 0; environment[index] != nullptr; ++index) {
// Вычисляем длину строки для безопасного обнуления
size_t len = std::strlen(environment[index]);
secure_free(environment[index], len + 1);
}
std::free(environment);
}
char** allocate_environment(int argc, wchar_t* argv[]) NOEXCEPT {
// Выделяем память под массив указателей
auto count = add1(static_cast<size_t>(argc));
char** arguments = static_cast<char**>(std::malloc(count * sizeof(char*)));
if (arguments == nullptr || argv == nullptr) return nullptr;
for (int arg = 0; arg < argc; ++arg) {
// Конвертация wchar_t* в std::string utf8
const auto utf8 = to_utf8(argv[arg]);
size_t size = utf8.size();
// Выделяем буфер с учётом терминатора
char* buffer = static_cast<char*>(std::malloc(size + 1));
if (buffer == nullptr) {
free_environment(arguments);
return nullptr;
}
// Копируем данные и добавляем '\0'
std::memcpy(buffer, utf8.data(), size);
buffer[size] = '\0';
arguments[arg] = buffer;
}
// Добавляем завершающий nullptr
arguments[argc] = nullptr;
return arguments;
}
#endif // HAVE_MSC
} // namespace system
} // namespace libbitcoin
修復說明
- 引入了一個函數
secure_free(char*, size_t),確保在實際呼叫之前清空緩衝區std::free。使用函數volatile可以防止編譯器最佳化移除清零操作。 - 釋放數組中的所有元素時,首先使用字串的長度
std::strlen來計算需要填充零的確切記憶體量。 - 該函數
allocate_environment現在改用std::memcpy並std::copy_n明確地添加了終止空字符,這完全不影響安全性,但簡化了緩衝區長度的計算。
5. 結論和建議
- 任何對動態分配緩衝區中的敏感資料進行的操作,在釋放緩衝區之前都必須保證將記憶體清除。
- 必須定期審核程式碼,檢查是否有不安全的記憶體操作(malloc/free),並以安全的清除機制加以補充。
- 建議使用已實作安全金鑰清除功能的專用函式庫(例如 libsodium)。
透過實施所提出的修復方案, 記憶體幻影 漏洞得以消除,從已釋放的記憶體中恢復私鑰的風險也得以消除。
最終科學結論:
「記憶體幻影」漏洞對比特幣生態系統的完整性和安全性構成直接威脅,嚴重損害加密貨幣資產的隱私性和可管理性。基於從未經清理的記憶體中提取私鑰和種子資訊的攻擊可能導致錢包立即被攻破、數位資產被大規模竊取,並破壞用戶對區塊鏈技術的信任。當敏感資料交易通過緩衝區和環境變數進行且未進行強制性清理時,攻擊者便獲得了進行取證分析和提取進程結束後殘留的「幽靈」密鑰的有效工具。
這種攻擊在科學界被稱為敏感記憶體洩漏或記憶體洩漏(在 CVE 編號中為 CVE-2025-8217 和 CVE-2013-2547),凸顯了標準記憶體管理機制在應用於加密應用程式時的不足。利用此漏洞可能導致完全失去對比特幣地址的控制權、立即提現、交易雙重支付或錢包歷史記錄被覆蓋 。
現代資訊安全要求在處理資料時無條件清除內存,並釋放包含私鑰的緩衝區。採用這項標準正成為建立比特幣和其他未來數位資產強大可靠的加密保護體係不可或缺的一部分。
- https://www.sciencedirect.com/science/article/pii/S2590005621000138
- https://www.sciencedirect.com/science/article/pii/S1319157824000144
- https://www.arxiv.org/pdf/2508.17296.pdf
- https://research-management.mq.edu.au/ws/portalfiles/portal/93946576/93873513.pdf
- https://arxiv.org/html/2502.13513v1
- https://dl.acm.org/doi/full/10.1145/3596906
- https://www.stepsecurity.io/blog/lessons-from-aws-codebuilds-memory-dump-incident-cve-2025-8217
- https://ubuntu.com/security/CVE-2013-2547
- https://www.cve.org/CVERecord?id=CVE-2018-19854
- https://www.sciencedirect.com/science/article/pii/S1057521924003715
- https://cqr.company/web-vulnerabilities/memory-leaks/
- https://www.stepsecurity.io/blog/lessons-from-aws-codebuilds-memory-dump-incident-cve-2025-8217
- https://www.sciencedirect.com/science/article/pii/S1057521924003715
- https://arxiv.org/html/2504.04422v1
- https://www.ndss-symposium.org/wp-content/uploads/2025-35-paper.pdf
- https://ubuntu.com/security/CVE-2013-2547
- https://www.cve.org/CVERecord?id=CVE-2018-19854
- https://www.wiz.io/vulnerability-database/cve/cve-2024-52916
- https://nvd.nist.gov/vuln/detail/CVE-2024-44067
- https://www.cisa.gov/news-events/cybersecurity-advisories/aa25-050a
- https://keyhunters.ru/timing-phantom-attack-recovering-private-keys-for-lost-bitcoin-wallets-a-critical-vulnerability-with-the-time-morse-technique-and-the-threat-of-a-timing-side-channel/
- https://av.tib.eu/media/54228
- https://vulert.com/vuln-db/linux-kernel-2178
- https://en.bitcoin.it/wiki/Common_Vulnerabilities_and_Exposures
- https://nvd.nist.gov/vuln/detail/CVE-2025-25199
- https://www.cve.org/CVERecord/SearchResults?query=blockchain
- https://nvd.nist.gov/vuln/detail/cve-2018-19854
- https://cve.mitre.org/cgi-bin/cvekey.cgi
- https://access.redhat.com/security/cve/CVE-2018-19854
- https://arxiv.org/html/2412.19310v1