作者:KEYHUNTER
RAMnesia 攻擊
RAMnesia 是一種大膽的密碼攻擊,攻擊者將受害者的 RAM 變成一個“黑盒子”,用來竊取遺忘的私鑰。在攻擊場景中,駭客執行一個調度程序,定期轉儲活躍的加密進程(例如執行 libbitcoin 或 BIP38 加密的進程)的記憶體。因此,一旦開發者出現疏忽(例如未能清除記憶體),導致 RAM 中遺留了寶貴的「金礦」——私鑰、密碼或金鑰因子——RAMnesia 就會立即捕獲並無情地提取金鑰,而所有者卻渾然不知。
「金鑰外洩攻擊」(墨漬攻擊、私鑰外洩)(CVE-2023-39910)這項嚴重漏洞可能導致加密貨幣安全徹底崩潰,並造成用戶資金的災難性損失。所有處理加密金鑰的軟體都必須實施記憶體檢查/清理,並嚴格遵循加密和系統安全最佳實踐 。
涉及私鑰從記憶體洩漏的嚴重漏洞對整個比特幣生態系統構成嚴重威脅。諸如密鑰洩露攻擊或墨跡攻擊(正式編號為 CVE-2023-39910)之類的攻擊會徹底破壞去中心化安全的基本原則:在攻擊者手中,即使單個私鑰瞬間洩露,也意味著資金的不可逆轉且無條件的損失,無法恢復訪問權限,並會徹底摧毀整個系統的信任。
忽視安全記憶體管理、公然無視記憶體清理標準以及金鑰材料產生或儲存錯誤,都為隱蔽攻擊敞開了大門。這些攻擊不會在區塊鏈上留下任何痕跡,但可能導致大規模盜竊、巨額資產損失和長期的聲譽損害。歷史事件和近期研究表明,技術上的疏忽足以摧毀數百萬個地址、數十萬枚比特幣,並摧毀用戶、開發者和整個行業的信任 。
關鍵記憶體漏洞:致命的私鑰洩漏攻擊以及對比特幣生態系統的全面威脅
研究論文:記憶體洩漏漏洞對比特幣安全性的影響
註解
本文探討了比特幣加密貨幣應用程式中與記憶體中私鑰洩漏相關的嚴重漏洞。文章分析了該漏洞對比特幣生態系統的影響,描述了典型的攻擊方式(墨跡攻擊、金鑰洩漏攻擊),並提供了來自通用漏洞揭露(CVE)資料庫的當前漏洞編號。此外,文章還討論了相關的科學術語、攻擊後果、實際案例和預防建議。
漏洞是如何產生的?
加密漏洞源自於對進程記憶體中私鑰和其他機密資訊的疏忽處理。在許多實作中,例如 libbitcoin、BIP38 和其他基於錢包的系統,私鑰、種子和派生值都儲存在常規變數中,這些變數在使用後並未被清除。這使得攻擊者可以透過存取進程記憶體(例如透過記憶體轉儲、冷啟動攻擊、交換檔案等)來恢復私鑰並控制用戶的加密資產 。
在最受關注的案例中,例如 Libbitcoin Explorer 的漏洞(CVE-2023-39910 – Milk Sad),洩漏的原因要么是熵不足,要么是不安全的內存管理(缺少 mlock/explicit_bzero/Rust RAII 等) 。
攻擊的科學名稱和形式化
在科學密碼學界,此類攻擊通常使用以下術語:
- 墨漬襲擊
- 密鑰外洩 攻擊
- 私鑰 洩漏
- 加密金鑰外洩 攻擊
- 密鑰 外洩攻擊
- 在英文文獻中,經常會遇到「金鑰外洩攻擊」或「私鑰揭露攻擊」這樣的通用名稱 。
CVE/漏洞 ID
比特幣生態系統中該漏洞最引人注目的應用案例:
- CVE-2023-39910(Milk Sad漏洞) 是Libbitcoin Explorer 3.0.0–3.6.0版本中熵生成器和記憶體處理的一個嚴重漏洞,攻擊者可以利用該漏洞批量提取私鑰並竊取用戶資金。 nvd.nist +3
對比特幣攻擊的影響
技術和經濟後果:
- 完全失去對資金的控制權。 私鑰遺失=比特幣遺失-無法挽回。 core +1
- 大規模用戶帳戶外洩 :該漏洞正自動被利用,影響數千個錢包,總價值超過 90 萬美元。 habr +1
- 對生態系統的信任度下降 :此類錯誤破壞了去中心化治理的概念,嚇跑了投資者和開發者。
- 這種攻擊既可以遠端進行,也可以透過實體方式進行:例如 存取使用者裝置上的進程記憶體、取得交換/核心轉儲文件,或無意中洩露機密資訊。
攻擊場景範例(密鑰外洩):
- 使用者產生金鑰或將金鑰匯入到易受攻擊的錢包(libbitcoin、bx 等)。
- 私鑰會暫時出現在進程的記憶體中,並且不會被清除(或透過弱熵來源產生)。
- 攻擊者取得記憶體轉儲(透過惡意應用程式、實體存取、作業系統漏洞、交換檔案等)。
- 從轉儲檔案中提取私鑰,並將資金轉移到攻擊者的地址。
討論和建議
- 這類漏洞對去中心化生態系統構成根本威脅,因為私鑰外洩就等於資金的絕對損失。
- 必須嚴格遵循記憶體管理最佳實務:使用 mlock、明確記憶體清除(
explicit_bzero例如 OpenSSL_cleanse 等)、以及 libsodium 等記憶體分配器。 stackoverflow +3 - 同樣重要的是使用加密安全的隨機數產生器,而不是像 CVE-2023-39910 那樣使用不安全或過時的偽隨機數產生器。
結論
「金鑰外洩攻擊」(墨漬攻擊、私鑰外洩)(CVE-2023-39910)這項嚴重漏洞可能導致加密貨幣安全徹底崩潰,並造成用戶資金的災難性損失。所有處理加密金鑰的軟體都必須實施記憶體檢查/清理,並嚴格遵循加密和系統安全最佳實踐 。
加密漏洞
對libbitcoin程式碼中的加密漏洞進行分析
透過對提供的 libbitcoin 程式碼(BIP38 加密的實作)的分析, 發現了 6 個與私鑰和秘密資料外洩到記憶體相關的嚴重漏洞。
主要漏洞及其位置
嚴重漏洞(私鑰外洩):
第 358-379 行: encrypt()Forklog+1 函數
cpp:auto encrypted1 = xor_data<half>(secret, derived.first);
aes256::encrypt(encrypted1, derived.second);
auto encrypted2 = xor_offset<half, half, half>(secret, derived.first);
問題:加密操作完成後,包含私鑰的 變數 secret 仍然駐留在記憶體中,沒有進行明確的記憶體清理。
第 446-448 行:函數 decrypt_secret()iacr+1
cpp:const auto secret = xor_data<hash_size>(encrypted, derived.first);
問題: 解密後的私鑰儲存在局部變數中 secret ,但沒有從記憶體安全清除。

高風險漏洞(密碼和臨時密鑰外洩):
第 257-259 行:功能 normal()Moldstud+1
cpp:static data_chunk normal(const std::string& passphrase) NOEXCEPT
{
std::string copy{ passphrase };
return to_canonical_composition(copy) ? to_chunk(copy) : data_chunk{};
}
問題: 在記憶體中建立了密碼的本機副本,但沒有使用安全記憶體清除( secure memory clearing)。
第 146-159 行:函數 create_private_key()geeksforgeeks+1
cpp:auto encrypt1 = xor_data<half>(seed, derived1);
aes256::encrypt(encrypt1, derived2);
const auto combined = splice(slice<quarter, half>(encrypt1), slice<half, half + quarter>(seed));
auto encrypt2 = xor_offset<half, zero, half>(combined, derived1);
問題: 臨時變數 包含秘密數據encrypt1, encrypt2並且 combined 沒有明確地從記憶體中清除。
平均漏洞數:
第 276-286 行: create_token()github+1 函數
cpp:auto factor = scrypt_token(normal(passphrase), owner_salt);
if (lot_sequence)
factor = bitcoin_hash2(factor, owner_entropy);
問題: 系統熵嚴重依賴使用者密碼的品質。
第 104-107 行:函數 scrypt_token()stackoverflow+1
cpp:static hash_digest scrypt_token(const data_slice& data, const data_slice& salt)
{
return scrypt<16384, 8, 8, true>::hash<hash_size>(data, salt);
}
問題: 函數執行後,派生鍵可能仍保留在堆疊記憶體中。
與已知漏洞的關係
這些問題在最近發現的 libbitcoin Explorer 3.x 中的CVE-2023-39910 (「Milk Sad」)漏洞的背景下尤其關鍵 ,該漏洞導致超過 90 萬美元的資金被盜 。雖然 CVE-2023-39910 與弱隨機數產生器 (PRNG) 有關,但已發現的記憶體 漏洞創建了額外的攻擊途徑。
安全影響
將加密金鑰洩漏到記憶體中會帶來嚴重的安全風險: fabianmonrose.github+1
- 記憶體轉儲攻擊 -攻擊者可以從進程轉儲中提取私鑰
- 交換攻擊 -敏感資料最終可能會進入作業系統交換檔案。
- 冷啟動攻擊 -斷電後資料仍會在記憶體中保留一段時間。
- 多用戶系統 -其他進程可以存取已釋放的內存
糾正建議
為了修復 發現的漏洞 ,建議: stackoverflow+2
- 使用安全記憶體清理:
explicit_bzero()適用於 Linux/BSDSecureZeroMemory()適用於 WindowsOPENSSL_cleanse()用於 OpenSSL
- 使用受保護的記憶體分配器 (例如,
libsodium使用函數sodium_malloc()) - 使用
volatile指標 可以防止編譯器進行最佳化。 - 在析構函數中實現 自動清理的RAII

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

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

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

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

PrivKeyRoot:用於分析比特幣錢包中基於 RAM 的私鑰洩漏的取證工具
比特幣生態系統的安全依賴於私鑰的絕對保密性。然而,近期的一些發現,例如RAMnesia 攻擊及其在CVE-2023-39910(Milk Sad)中的正式漏洞記錄,表明加密庫中的記憶體管理不當可能導致系統記憶體中密鑰的災難性洩漏。本文介紹了一種名為PrivKeyRoot的專用取證和診斷工具,該工具旨在分析基於記憶體的漏洞並恢復私鑰等加密材料。本研究重點在於 PrivKeyRoot 在 RAMnesia 類攻擊中的應用,並評估其對攻擊性密碼分析和防禦性錢包恢復的影響。
比特幣安全性最基本的假設之一是,私鑰一旦在錢包軟體中生成,就無法訪問。然而,當諸如libbitcoin或基於 BIP38 的工具等軟體庫錯誤地處理記憶體時,這一假設就會失效。 RAMnesia攻擊利用敏感資料在 RAM 中的持久性,透過不當的清零、交換檔案暴露或殘留記憶體區域等手段來恢復被遺忘的私鑰。
在此背景下,PrivKeyRoot成為一款雙用途工具:它最初被設計為一種取證恢復工具,用於幫助用戶恢復對受損錢包的存取權限,但同樣也能揭示加密系統設計中的關鍵缺陷。它整合了記憶體掃描、熵分析和洩漏偵測功能,以前所未有的視角展現了私鑰外洩如何對比特幣等去中心化系統造成毀滅性打擊。
PrivKeyRoot:儀器概述
PrivKeyRoot 是一款底層加密金鑰分析套件。它融合了數位取證、滲透測試和記憶體轉儲等技術,用於調查記憶體中敏感密鑰材料的洩漏。 PrivKeyRoot 的主要功能包括:
- 記憶體掃描器用於尋找金鑰模式:搜尋即時進程 RAM 和核心轉儲,以查找可能的比特幣私鑰候選者(32 位元組 secp256k1 標量)。
- 熵分析器:基於密碼熵模型區分真實密鑰材料和隨機雜訊。
- BIP32/BIP38 解碼器:將復原的記憶體片段轉換為分層確定性 (HD) 金鑰或加密金鑰格式。
- CVE 簽章檢測:映射發現的洩漏與已記錄的漏洞(例如CVE-2023-39910)相符,識別出不安全的金鑰材料持久性。
- 取證日誌:提供適用於加密貨幣復原場景和加密軟體庫漏洞評估的報告。
漏洞背景:將 PrivKeyRoot 與 RAMnesia 關聯
密鑰洩漏攻擊(墨漬攻擊)是由於比特幣錢包實作中存在的記憶體處理漏洞造成的。具體來說:
- 加密/解密後,私鑰和中間金鑰仍然保留在記憶體中,RAM 掃描器可以存取它們。
- 在密碼到金鑰轉換過程中產生的臨時值(例如,在 scrypt 中)永遠不會被安全性擦除。
- 系統交換或冷啟動殘留資料允許攻擊者或取證分析人員在系統故障後恢復資料。
透過將 PrivKeyRoot 應用於受RAMnesia漏洞影響的系統,研究人員(或攻擊者)可以提取「遺忘的」密鑰。例如,在受CVE-2023-39910影響的libbitcoin Explorer (bx)版本中,PrivKeyRoot 可以針對已知包含易受攻擊變數(例如 `<std::stack>`、`<std::stack>` 和 `<std::stack>`)的堆疊和堆疊記憶體段。其結果是直接恢復私鑰,從而實現錢包的完全入侵或合法恢復。secretencrypted1decrypt_secret
攻擊與恢復場景
PrivKeyRoot突出表明,同一工具既可以合乎道德地用於恢復密鑰,也可以被利用進行盜竊:
- 攻擊場景(密碼學漏洞利用)
- 攻擊者在正在運行的比特幣錢包旁邊注入記憶體轉儲程式。
- PrivKeyRoot 掃描轉儲,偵測 32 位元組的 secp256k1 結構,並套用熵辨識來過濾雜訊。
- 找回的私鑰可以完全未經授權地存取比特幣資金。
- 防禦性場景(法醫恢復)
- 使用者因軟體損壞或忘記密碼而無法存取錢包。
- 從崩潰的裝置中提取的 RAM 快照包含殘留的加密材料。
- PrivKeyRoot 可以識別碎片,重建私鑰,並允許用戶重新匯入恢復的資料以進行合法存取。
對比特幣安全性的影響
PrivKeyRoot 等工具的出現引發了加密貨幣安全的關鍵問題:
- 遺失的不可逆性:一旦私鑰以未受保護的形式出現在 RAM 中,發生不可逆洩漏的機率就會呈指數級增長。
- 靜默攻擊:基於記憶體的攻擊不會在區塊鏈上留下任何痕跡——被盜資金看起來像是合法轉帳。
- 生態系統信任:諸如 CVE-2023-39910(Milk Sad)之類的 CVE 漏洞的反覆披露削弱了用戶信心。光是漏洞外洩的可能性就威脅到比特幣無需信任的去中心化原則。
緩解措施和建議
根據 PrivKeyRoot 實驗的案例研究和取證分析,以下應對措施至關重要:
- 安全記憶體管理:套用明確零化(
explicit_bzero,OPENSSL_cleanse)和受保護的分配器(例如,libsodium_malloc)。 - 停用交換:關鍵資料絕對不能接觸系統交換檔案或磁碟快取。
- RAII 安全容器:使用加密包裝器確保在作用域退出時自動清理。
- 熵來源驗證:避免使用可能暴露可預測金鑰的弱偽隨機數產生器或有缺陷的偽隨機數產生器。
- 自動化金鑰洩漏測試:將 PrivKeyRoot 等工具整合到加密庫的持續審計管道中。
PrivKeyRoot展示了對比特幣錢包內存洩漏的研究並非僅僅停留在學術層面,而是具有深刻的實用價值:它既可能導致攻擊者實施災難性的盜竊,也可能使失去資金訪問權限的用戶能夠合法地找回資金。該工具的詳細取證應用強調了密碼學的一個核心原則——私鑰的保密性是絕對的,任何洩漏都會破壞所有安全保障。
在RAMnesia 攻擊和CVE-2023-39910漏洞之後,PrivKeyRoot 的存在敲響了警鐘:比特幣的安全性未來取決於對記憶體安全實踐的嚴格執行。如果沒有這些積極主動的措施,下一次加密貨幣信任危機的大規模爆發可能已經潛伏在未清理的記憶體緩衝區中。

記憶體中私鑰外洩導致的加密漏洞:分析與安全解決方案
註解
本文以 BIP38 和 libbitcoin 為例,探討了加密貨幣應用中一個根本性的安全問題:私鑰和其他加密資訊透過 RAM 洩漏。文章描述了該漏洞(RAMnesia 攻擊)的成因、潛在後果以及相應的技術診斷方法。此外,文章也透過一個 C++ 安全實作範例,闡述了一種經過科學驗證的安全資料管理方法。所提出的方法能夠有效預防漏洞,並使未來類似的攻擊成為不可能。
漏洞是如何產生的?
大多數現代加密庫都廣泛使用動態記憶體和基於堆疊的記憶體來儲存密碼、私鑰和派生資料(種子、因子、熵等)。對應函數執行完畢後,資料會一直保留在記憶體中,直到被作業系統覆蓋或釋放。編譯器和執行時間通常不保證敏感資料會被立即或完全擦除,最佳化甚至可能完全省略顯式清零操作 。
因此,私鑰、臨時熵或從 scrypt 或 hmac 函數派生的值很容易被獲取,從而可以用於分析記憶體轉儲、側通道攻擊、冷啟動攻擊或利用本地用戶權限進行的漏洞利用。 cgi.uoa +1
以下程式碼片段特別容易受到攻擊:
cpp:// Пример из libbitcoin (уязвимая реализация)
auto encrypted1 = xor_data<half>(secret, derived.first); // <--- secret в памяти
aes256::encrypt(encrypted1, derived.second);
auto encrypted2 = xor_offset<half, half, half>(secret, derived.first); // еще один дубликат
// secret не очищается, остается в памяти!
因此,像 RAMnesia 這樣的攻擊可以利用這種行為,定期掃描應用程式的內存,查找「遺忘的」金鑰和秘密。
後果和脆弱性
- 任何本地或遠端用戶存取進程記憶體 → 私鑰洩露,資金損失。
- 對設備進行實體存取(冷啟動) →即使斷電後也能從 RAM 中恢復金鑰。
- 透過交換/轉儲/崩潰進行存取 → 密鑰被寫入交換檔案或核心轉儲檔案。
一個可靠的解決方案:安全記憶體管理
關鍵原則
- 使用安全的記憶體分配器 :所有關鍵資料都應該只放在不會被交換出去的記憶體中(mlock)。
- 明確保證金鑰使用後記憶體清除 :使用 `__init__`
explicit_bzero、SecureZeroMemory`__init__`、OPENSSL_cleanse`__init__` 或來自爭議標準的安全函數。 stackoverflow +2 - RAII(資源取得即初始化): 透過專門的類別自動釋放和清理記憶體。
- 將鍵與編譯器最佳化隔離: 易失性記錄、用於保留清零操作的特殊指令。
更優方案:安全 RAII 封裝器和記憶體抓取範例
我們利用現代函式庫(例如[libsodium])的功能: libsodium+1
cpp:#include <sodium.h>
#include <stdexcept>
// Обёртка для безопасной работы с секретными данными (RAII)
class SecureBuffer {
void* ptr_;
size_t size_;
public:
SecureBuffer(size_t size) : size_(size) {
ptr_ = sodium_malloc(size_);
if (ptr_ == nullptr)
throw std::runtime_error("Cannot allocate secure memory");
sodium_mlock(ptr_, size_); // Запрет выгрузки в swap
}
void* get() const { return ptr_; }
size_t size() const { return size_; }
~SecureBuffer() {
sodium_memzero(ptr_, size_); // Явная чистка памяти
sodium_munlock(ptr_, size_); // Разблокировка
sodium_free(ptr_);
}
// запрет копирования!
SecureBuffer(const SecureBuffer&) = delete;
SecureBuffer& operator=(const SecureBuffer&) = delete;
};
// Пример использования
void encrypt_sensitive() {
SecureBuffer keybuf(32);
// ... наполнить keybuf, использовать ...
// Данные keybuf гарантированно будут очищены и освобождены при выходе из области видимости
}
- 現在所有關鍵操作都只能使用
SecureBuffer. - 如果使用常規內存,請使用
explicit_bzero(ptr, size)。
安全保障
- 密鑰不會儲存在磁碟/交換空間中 —而是使用 mlock 函數。
- 無論編譯器的行為如何,記憶體總是會被強制清除 。
- 異常安全(RAII) ——即使拋出異常,也能確保鍵的清理。
結論和建議
- 對所有加密代碼進行記憶體和金鑰洩漏審查至關重要。
- 強烈建議使用經過驗證的記憶體安全庫(
libsodium例如 RAII 方法、標準清理函數)。 manpages.debian +2 - 記錄並測試記憶體清理行為(包括透過模糊測試和動態分析)。
- 不要在沒有專用工具的情況下使用「手動」清零——編譯器可以對其進行最佳化。
- 對於涉及特別敏感按鍵的場景,應使用作業系統/核心手段停用記憶體交換輸出。
科學最終結論
涉及私鑰從記憶體洩漏的嚴重漏洞對整個比特幣生態系統構成嚴重威脅。諸如密鑰洩露攻擊或墨跡攻擊(正式編號為 CVE-2023-39910)之類的攻擊會徹底破壞去中心化安全的基本原則:在攻擊者手中,即使單個私鑰瞬間洩露,也意味著資金的不可逆轉且無條件的損失,無法恢復訪問權限,並會徹底摧毀整個系統的信任。
忽視安全記憶體管理、公然無視記憶體清理標準以及金鑰材料產生或儲存錯誤,都為隱蔽攻擊敞開了大門。這些攻擊不會在區塊鏈上留下任何痕跡,但可能導致大規模盜竊、巨額資產損失和長期的聲譽損害。歷史事件和近期研究表明,技術上的疏忽足以摧毀數百萬個地址、數十萬枚比特幣,並摧毀用戶、開發者和整個行業的信任 。
比特幣和加密貨幣安全的唯一保障在於密鑰儲存設備架構的嚴謹科學設計以及對安全記憶體管理方法的嚴格遵守。只有實施安全的演算法來產生、儲存和清除秘密數據,才能杜絕諸如 RAMnesia、Ink Stain 或 CVE-2023-39910 之類的攻擊,並維護加密無政府主義的本質——個人數字主權和真正的財務獨立。
- https://top-technologies.ru/ru/article/view?id=37634
- https://www.itsec.ru/articles/upravlenie-uyazvimostyami-v-kriptokoshelkah
- https://habr.com/ru/articles/430240/
- https://habr.com/ru/articles/817237/
- https://bluescreen.kz/niesiekretnyi-kliuch-issliedovatieli-obnaruzhili-uiazvimosti-v-kriptokoshielkakh/
- https://forklog.com/news/v-chipah-dlya-bitcoin-koshelkov-obnauzhili-kriticheskuyu-uyazvimost
- https://pikabu.ru/story/private_key_debug_nekorrektnaya_generatsiya_privatnyikh_klyuchey_sistemnyie_uyazvimosti_bitkoina_chast_1_12755765
- https://www.kaspersky.ru/blog/vulnerability-in-hot-cryptowallets-from-2011-2015/36592/
- https://osp.ru/os/2025/02/13059629
文學
- 安全記憶體 | LibSodium.Net libsodium
- 在 C 語言中安全地清除記憶體緩衝區以防止資料外洩 stackoverflow
- explicit_bzero(3) — manpages-dev — Debian 測試 manpages.debian
- 安全記憶體 | Libsodium 文件 – GitBook libsodium.gitbook
使用所描述的工具幾乎完全堵住了與透過記憶體洩露私人資料相關的漏洞,即使擁有對設備/進程的本地存取權限,也能使 RAMnesia 攻擊失效。
- https://stackoverflow.com/questions/10683941/clearing-memory-securely-and-reallocations
- https://www.bacancytechnology.com/blog/cpp-for-cybersecurity
- https://cgi.di.uoa.gr/~xenakis/Published/64-ARES-2016/protecting%20sensitive%20information%20in%20the%20volatile%20memory.pdf
- https://www.reddit.com/r/ProgrammingLanguages/comments/100tyxg/secrets_management_in_volatile_memory_best/
- https://stackoverflow.com/questions/77286578/clearing-memory-buffers-securely-to-prevent-data-leaks-in-c
- https://manpages.debian.org/testing/manpages-dev/explicit_bzero.3.en.html
- https://man.freebsd.org/cgi/man.cgi?query=explicit_bzero
- https://libsodium.net/guide/SecureMemory.html
- https://libsodium.gitbook.io/doc/memory_management
來源
- 墨漬攻擊:找回遺失的比特幣錢包私鑰 keyhunters
- CVE-2023-39910 github+3
- Libbitcoin Explorer 3.x中的 Milk Sad 漏洞 。
- 在 C 語言中安全地清除記憶體緩衝區以防止資料外洩 stackoverflow
- SecureMemory | LibSodium.Net libsodium
- 安全記憶體 | Libsodium 文件 – GitBook libsodium.gitbook
- https://keyhunters.ru/ink-stain-attack-recovering-private-keys-to-lost-bitcoin-wallets-a-critical-memory-vulnerability-and-secret-key-leakage-attack-leads-to-a-total-compromise-of-the-cryocity-attack-leads-to-a-total-compromise-of-the-dm-urr-k-k-alk-d-d-al-dal-dal-alk-dal-dal-d-w-alk-dion-d-w-al-dal-dal-d-w-ald-wrys-ald-ald-d-w-alk-dion-d-wry-alk-ald-d-w-k-ald-d-d-w-k-u-d-d-alk-dion-wrys-dion-ald-dal-d-w-alk-ald-d-alk-d-al-d-w點
- https://service.securitm.ru/vm/vulnerability/fstec/show/BDU:2023-06146
- https://www.incibe.es/en/incibe-cert/early-warning/vulnerabilities/cve-2023-39910
- https://habr.com/ru/articles/771980/
- https://nvd.nist.gov/vuln/detail/CVE-2023-39910
- https://core.ac.uk/download/pdf/301367593.pdf
- https://stackoverflow.com/questions/77286578/clearing-memory-buffers-securely-to-prevent-data-leaks-in-c
- https://libsodium.net/guide/SecureMemory.html
- https://libsodium.gitbook.io/doc/memory_management
- https://manpages.debian.org/testing/manpages-dev/explicit_bzero.3.en.html
- https://github.com/libbitcoin/libbitcoin-explorer/wiki/cve-2023-39910
- https://bitcoincore.org/logs/2016-05-zurich-meeting-notes.html
- https://www.academia.edu/88930244/Private_Key_Recovery_Combination_Attacks_On_Extreme_Fragility_of_Popular_Bitcoin
- https://bitcoinops.org/en/topic-dates/
- https://threatprotect.qualys.com/2020/12/14/amnesia33-multiple-vulnerabilities-in-open-source-tcp-ip-stacks/
- https://github.com/demining/Physical-Bitcoin-Attacks
- https://www.tenable.com/blog/amnesia33-researchers-disclose-33-vulnerabilities-tcpip-libraries-uip-fnet-picotcp-nutnet
- https://b8c.ru
- https://www.forescout.com/research-labs/amnesia33/
- https://www.first.org/cvss/v3-1/examples
- https://bdu.fstec.ru/vul/2023-06146
- https://www.trendmicro.com/en_us/research/25/c/cve-2025-26633-water-gamayun.html
- https://www.cynerio.com/blog/threat-intel-name-wreck-tcp-ip-vulnerabilities
- https://www.trendmicro.com/en_us/research/24/g/CVE-2024-38112-void-banshee.html
事情經過是這樣的:
- 每次加密或解密操作後,RAMnesia 都會監視該過程,以查看記憶體中是否殘留私鑰或解密金鑰的「痕跡」。
- 這個數位死靈法師梳理新創建和被遺忘的局部變量,尋找異常值(例如,與 secp256k1 密鑰對應的 32 位元組序列)。
- 一旦找到贓物,它會立即保存到非特權雲端,攻擊者可以悠閒地分析密鑰。
攻擊特性:
- 無需網路存取-可透過實體/服務存取或漏洞利用實現。
- 非常適合攻擊桌面錢包、雲端服務,甚至 運行易受攻擊代碼的冷系統。
- 利用「數位遺忘」的力量:所有未被清除的內容都會被找到。
RAMnesia:我遺忘的記憶,我一定會記得!
- https://cqr.company/ru/web-vulnerabilities/memory-leaks/
- https://trends.rbc.ru/trends/industry/600702d49a79473ad25c5b3e
- https://www.securitylab.ru/blog/personal/xiaomite-journal/353817.php
- https://cqr.company/ru/web-vulnerabilities/timing-attacks/
- https://www.kaspersky.ru/blog/apple-cpu-encryption-vulnerability/37217/
- https://habr.com/en/sandbox/19460/
- https://moluch.ru/archive/105/24676
- https://searchinform.ru/analitika-v-oblasti-ib/utechki-informatsii/sluchai-utechki-informatsii/skrytye-logicheskie-kanaly-utechki-informatsii/
- https://pvs-studio.ru/ru/blog/terms/6618/
- https://ru.wikipedia.org/wiki/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D1%80%D0%BE%D0%BC%D0%B8%D0%BF%D1%80%D0%BE%D0%BC%D0%B8 %D1%81%D1%81%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B50%B5%D0%BC%D0%B5%D0%BD%D0%B50%0050%0000%D0% 0%D0%BC%D1%8F%D1%82%D1%8C%D1%8E/%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8