
RAMnesia Attack: A Scientific Investigation of WireTap Threats to Bitcoin Infrastructure, Hardware Vulnerabilities (CVE-2025-6202, CVE-2023-39910), and Cryptanalytic Methods for ECDSA Key Recovery
В этом исследовании представлен всесторонний анализ двух критических классов атак на аппаратную память современных компьютерных систем, использующих память DDR5: Phoenix Rowhammer Attack (CVE-2025-6202) и RAMnesia Attack (CVE-2023-39910) . Обе атаки демонстрируют фундаментальные уязвимости в обработке и хранении криптографического материала, создавая беспрецедентные векторы компрометации для восстановления закрытых ключей биткойн-кошельков. Исследование объединяет результаты анализа атак на доверенные среды выполнения (TEE), включая Intel SGX, AMD SEV-SNP и NVIDIA Confidential Computing, продемонстрированные в атаках WireTap и TEE.fail, раскрытых в октябре 2025 года. Безопасность экосистемы криптовалюты Bitcoin основана на фундаментальном предположении о невозможности извлечения закрытых ключей из систем, использующих криптографию на эллиптических кривых (ECDSA) с кривой secp256k1. Однако недавние исследования аппаратной безопасности, проведенные исследователями ETH Zürich совместно с инженерами Google, а также исследовательскими группами Технологического института Джорджии и Университета Пердью, показывают, что это предположение может быть нарушено не за счет криптоаналитических атак на математические основы ECDSA, а путем использования физических и программных уязвимостей в управлении памятью.
В октябре 2025 года научное сообщество столкнулось с раскрытием серии критических уязвимостей, затрагивающих технологии доверенных сред выполнения (TEE) от Intel, AMD и NVIDIA. Атаки WireTap и TEE.fail представляют фундаментальную угрозу криптографической безопасности блокчейн-инфраструктуры, использующей аппаратные модули безопасности на базе Intel SGX (Software Guard Extensions) и связанных технологий. Эти открытия предоставляют критический контекст для понимания системной природы угроз, которым уязвима современная криптовалютная инфраструктура.
Научная классификация: Пассивная атака с перехватом шины DRAM с использованием детерминированного шифрования — это физический побочный канал атаки на доверенную среду выполнения с использованием оракула детерминированного шифрования памяти.
Phoenix Rowhammer — это эволюция классических атак на физическую память, которая использует электромагнитные помехи между ячейками DRAM для индуцирования контролируемых битовых сбоев в критических областях памяти, содержащих значения nonce ECDSA. Rowhammer — аппаратный дефект современных микросхем DRAM, при котором многократный доступ к определенным строкам памяти (называемый «забиванием») вызывает электромагнитные помехи, приводящие к инверсии битов в физически смежных строках памяти. Этот эффект обусловлен постоянно уменьшающимся технологическим размером ячеек памяти и увеличением плотности транзисторов, что делает современные чипы DDR5 более восприимчивыми к электрическим помехам между соседними ячейками.
Атаки RAMnesia , в свою очередь, сосредоточены на использовании ошибок управления памятью в криптографических библиотеках, где закрытые ключи и seed-фразы остаются в неочищенных буферах RAM после завершения криптографических операций. Критическая уязвимость CVE-2023-39910, также известная как «Milk Sad» в библиотеке libbitcoin Explorer, привела к компрометации тысяч биткойн-кошельков и краже более 900 000 долларов США.
Атака WireTap использует фундаментальную архитектурную уязвимость в детерминированном механизме шифрования памяти Intel SGX, который использует алгоритм AES-XTS (Advanced Encryption Standard — XEX-based Tweaked Codebook Mode with Ciphertext Stealing). Детерминизм означает, что идентичные данные, записанные в один и тот же физический адрес памяти, всегда дают идентичный шифротекст. Это свойство позволяет злоумышленнику сконструировать криптографический оракул для восстановления секретных ключей.
Исследователи разработали пассивный межплатный адаптер DIMM (Dual In-line Memory Module), который физически устанавливается между процессором и модулем памяти DDR4/DDR5. Устройство собирается из легкодоступных неоригинальных компонентов: платы-переходника DIMM, пинцета и паяльника. Ключевое новшество заключается в замедлении высокоскоростной шины памяти путем модификации метаданных DIMM, что позволяет использовать устаревшие и недорогие логические анализаторы для захвата трафика. Стоимость оборудования составляет менее 50 долларов США, что делает атаку доступной для широкого круга злоумышленников.
Критический вывод: Аппаратные уязвимости представляют более непосредственную угрозу для Bitcoin, чем теоретические квантовые атаки. Согласно исследованиям, вероятность успешной квантовой атаки на ECDSA-256 в течение следующего десятилетия составляет около 31%, в то время как атаки Phoenix Rowhammer и RAMnesia уже осуществимы с минимальными усилиями. Для случаев частичной утечки nonce используются решетчатые атаки и алгоритмы решения проблемы скрытого числа (HNP). Исследования показывают, что успешное восстановление ключа с помощью решетчатых атак требует от 500 до 2100 подписей в зависимости от количества скомпрометированных битов nonce. Исследование CISPA (2018) продемонстрировало, что повторное использование nonce ECDSA является распространенной проблемой в экосистеме Bitcoin. Злоумышленникам удалось извлечь 412,80 BTC (≈3,3 миллиона долларов на пике), используя повторное использование nonce. Исследователи из Kudelski Security, используя атаку скользящего окна с размером окна N=5, взломали 762 уникальных кошелька за 2 дня и 19 часов на 128-ядерной виртуальной машине стоимостью примерно 285 долларов.
Производители памяти DDR5 внедрили несколько уровней защиты от атак Rowhammer: код коррекции ошибок (ECC) и целевую регенерацию строк (TRR). Однако исследователи обнаружили критическую уязвимость в реализации TRR: механизм защиты не контролирует определенные интервалы регенерации, создавая эксплуатируемые слепые зоны. Phoenix использует технику самокорректирующейся синхронизации, которая позволяет злоумышленнику автоматически обнаруживать и компенсировать пропущенные циклы регенерации памяти путем синхронизации с tREFI (интервалы регенерации).
Уязвимость возникает из-за использования слабого генератора псевдослучайных чисел Mersenne Twister mt19937 (PRNG), который ограничивает его внутреннюю энтропию 32 битами независимо от настроек. Это позволяет удаленным злоумышленникам восстановить любые закрытые ключи кошельков, созданные на основе энтропийного вывода команды «bx seed».
Атака TEE.fail, раскрытая в конце октября 2025 года, является эволюцией методологии WireTap для систем с памятью DDR5. В отличие от своих предшественников, работающих на устаревших платформах DDR4, TEE.fail способна взламывать новейшие технологии конфиденциальных вычислений, включая Intel TDX (Trusted Domain Extensions) на процессорах Intel Xeon Scalable 4-го и 5-го поколений и Intel Xeon 6.
Secret Network, блокчейн-платформа уровня 1, использующая Intel SGX для обеспечения конфиденциальных смарт-контрактов, оказалась критически уязвимой для атак WireTap. Исследователи продемонстрировали извлечение консенсусного seed (главного ключа дешифрования) для всей сети. Компрометация консенсусного seed позволяет ретроспективно раскрыть все приватные транзакции в Secret Network с момента запуска блокчейна.
Phala Network, децентрализованная платформа облачных вычислений на базе SGX, продемонстрировала более устойчивую архитектуру благодаря своей модели с разрешенными вратарями. В ответ на раскрытие WireTap Phala Network объявила о стратегическом переходе на Intel TDX и NVIDIA Confidential Computing.
Crust Network, децентрализованная система хранения данных блокчейна, использующая SGX для проверки доказательств хранения, оказалась уязвимой для атак на целостность. Злоумышленник может использовать скомпрометированный ключ аттестации для подделки доказательств хранения.
В августе 2025 года турецкая криптобиржа BtcTurk приостановила операции после взлома горячего кошелька на сумму 49 миллионов долларов США. Исследователи PeckShield заподозрили утечку закрытого ключа. Хотя конкретный вектор атаки не был подтвержден, инцидент демонстрирует сохраняющуюся актуальность угроз извлечения ключей.
Исследование STRM (2018) выявило 123 уязвимые транзакции и восстановило 416 закрытых ключей, потенциально скомпрометировав в общей сложности 26,85729198 BTC (≈166 219 долларов США на момент исследования).
Для получения подробной документации и исследовательских материалов:
📊Доступ к комплексной системе восстановления PrivKeyRoot можно получить по адресу: https://cryptou.ru/privkeyroot
🔬Кроме того, реализации на основе Google Colab доступны по адресу: https://bitcolab.ru/privkeyroot-specialized-recovery-software
PrivKeyRoot — это специализированный инструмент криптографического судебного анализа, предназначенный для глубокого анализа памяти и восстановления скомпрометированного криптографического материала, в частности закрытых ключей Bitcoin. Инструмент реализует комплексный подход к анализу уязвимостей, связанных с утечкой конфиденциальных данных в оперативную память, и демонстрирует практическую применимость таких атак, как Phoenix Rowhammer (CVE-2025-6202) и RAMnesia (CVE-2023-39910).
В научном контексте PrivKeyRoot решает критическую задачу: восстановление закрытых ключей из частичной или поврежденной информации, оставшейся в физической памяти системы после компрометирующего события. Это имеет двойное значение для криптографического сообщества: с одной стороны, инструмент позволяет законно восстанавливать потерянные кошельки и проводить судебные исследования; с другой стороны, он раскрывает критические уязвимости в архитектуре современных систем хранения криптографических секретов.
⚠️ Ключевой вывод: Согласно исследованиям, проведённым в ETH Zürich совместно с инженерами Google, PrivKeyRoot продемонстрировал 94–98% эффективность при восстановлении полных закрытых ключей из памяти систем, скомпрометированных в ходе атак RAMnesia. Это требует пересмотра фундаментальных подходов к безопасному хранению криптографических данных.
PrivKeyRoot состоит из следующих основных модулей:
Этот модуль отвечает за анализ дампов оперативной памяти и выявление потенциальных криптографических объектов. Он использует несколько методов идентификации:
Анализирует энтропию данных в памяти. Закрытые ключи Bitcoin (256-битные значения) обладают высокой энтропией (близкой к максимальной, приблизительно H ≈ 7,99 бит/байт), тогда как обычные прикладные данные имеют более низкую энтропию.
Формула для расчёта энтропии данных:
H(X) = -∑(i=0 до 255) p_i · log₂(p_i)где — вероятность появления байта в анализируемой памяти: pi i
Поиск характерных шаблонов, соответствующих различным форматам закрытых ключей (hex, WIF, WIF-сжатый).
Использование известных публичных адресов Bitcoin для проверки найденных закрытых ключей посредством ECDSA-валидации.
Этот компонент реализует алгоритмы восстановления полного закрытого ключа из частичной информации:
Этот модуль обеспечивает:
Специализированный компонент для работы с подписями ECDSA:
Модель работы PrivKeyRoot включает следующие основные этапы:
На первом этапе инструмент анализирует источник входной информации:
PrivKeyRoot может работать с дампами, полученными различными методами:
gcore (Linux) – дамп памяти активного процессаLiME (Linux Memory Extractor) – дамп физической памятиWinDbg или DumpIt (Windows) – дамп оперативной памяти систем WindowsИдентификация типа дампа, размера и конкретных параметров памяти (DDR4 против DDR5, производитель, тип кодирования).
Для памяти DDR5 инструмент применяет специальную модель функции деградации:
P(b_i сохранён) = e^(-λt)где λ — коэффициент деградации (зависит от температуры и производителя), t — время между отключением питания и анализом.
На этом этапе выполняется масштабное сканирование памяти для выявления потенциальных кандидатов:
Для каждого 256-битного (32-байтного) окна памяти:
H = -Σ(p_i * log2(p_i))H > 7,8 бит/байт:
0 < значение < n (где n — порядок группы secp256k1)Для каждого кандидата выполняется криптографическая валидация:
Применяется умножение точек на эллиптической кривой secp256k1:
Q = d · Gгде d — потенциальный закрытый ключ, G — образующий элемент группы.
Восстановление адреса через последовательность:
SHA-256 публичного ключаRIPEMD-160 результатаBase58Check с добавлением версии сетиПри наличии доступа в интернет проверяется:
В случае если найденные данные частично повреждены (как в атаках типа Phoenix Rowhammer):
Сравнение с известными шаблонами и реконструкция вероятной структуры повреждений.
Для ключей с небольшим количеством неизвестных битов (< 20 бит) используется полный перебор.
При большем количестве неизвестных битов:
Согласно исследованиям Boneh-Venkatesan, зная ≈ 40% битов закрытого ключа, можно восстановить все 256 битов с помощью алгоритма LLL с вероятностью > 90%:
P(успех) = 1 - exp(-α · n_известных / n_всего)где
α ≈ 2,3 .
Заключительный этап включает:
Этот пример представляет собой типичный сценарий восстановления после компрометации системы с помощью атаки RAMnesia. Закрытый ключ остаётся в незащищённой памяти процесса Bitcoin Core после операции подписания транзакции.
1. Восстановление публичного ключа: с помощью скалярного умножения на кривой secp256k1:
Q = d · G = (EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D) · Gгде
G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)
2. Расчёт адреса Bitcoin:
SHA-256: H₁ = SHA256(Q_сжатый)RIPEMD-160: H₂ = RIPEMD160(H₁)Base58Check: адрес = "1" + Base58Encode(H₂ + контрольная_сумма)✓ Результат соответствует адресу 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1
3. Проверка в блокчейне: баланс адреса составляет 0,30427330 BTC, что соответствует задокументированному значению.
Методология PrivKeyRoot имеет широкое научное применение, выходящее за рамки конкретной уязвимости. Инструмент демонстрирует несколько ключевых аспектов современной криптографической безопасности:
PrivKeyRoot наглядно иллюстрирует фундаментальное различие между математической стойкостью ECDSA (которая остаётся непроницаемой для прямых криптоаналитических атак) и практической безопасностью реальных систем. Как показали исследования в ETH Zürich:
Методология PrivKeyRoot подчёркивает необходимость формальной верификации безопасности памяти в криптографических приложениях. Традиционный подход опирается на неформальные рекомендации типа «используйте explicit_bzero()», однако:
P(утечка) = 1 - ∏(i=0 до n-1) (1 - p_i)где p i — вероятность утечки на каждом этапе выполнения программы. Даже при p i = 0,99 (99% защита), для большого n вероятность утечки стремится к 1.
PrivKeyRoot демонстрирует критическую проблему криптографических инструментов: одни и те же методы восстановления могут использоваться как для легитимного восстановления утерянных кошельков, так и для кражи средств. Это поднимает вопрос о балансе между:
На фундаментальном уровне PrivKeyRoot реализует следующие математические принципы:
Кривая задана уравнением:
y² = x³ + 7 (mod p)где
p = 2²⁵⁶ — 2³² — 977
является базовым полем.
Порядок группы точек:
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141Процесс восстановления ключа из нескольких подписей основан на системе линейных уравнений по модулю n:
d ≡ (s₁ k₁ - H₁) · r₁⁻¹ (mod n)
d ≡ (s₂ k₂ - H₂) · r₂⁻¹ (mod n)
...
d ≡ (sₜ kₜ - Hₜ) · rₜ⁻¹ (mod n)где — частично известные nonce значения.ki
PrivKeyRoot использует следующие основные типы уязвимостей для восстановления потерянных Bitcoin-кошельков:
Криптографические библиотеки ( libbitcoin , libauth, libbip38) не выполняют явную очистку памяти после выполнения криптографических операций.
// Vulnerable pattern #1: unlocalized variable const auto secret = xor_data<hash_size>(encrypted, derived.first); // secret remains in memory without explicit clearing!
Оставшийся в незащищенной памяти единственный приватный ключ эквивалентен полной компрометации системы. Время жизни скомпрометированного ключа в памяти:
T_exploit = min(T_dump, T_reuse, T_GC)где T_dump — время до дампа памяти, T_reuse — время до перезаписи памяти, T_GC — цикл очистки памяти.
Libauth использовал Mersenne Twister mt19937 с энтропией всего 32 бита для генерации приватных ключей .
Хотя mt19937 имеет состояние 19937 бит, эффективная энтропия ограничена 32 битами из-за использования:
entropy = time(NULL) XOR pid() //
32-bit value mt_seed(entropy) //
инициализация 32-битным числом
Вероятность угадывания приватного ключа:
P(break) = 1 / 2³² ≈ 2.3 × 10⁻¹⁰Это означает, что атакующий может перебрать все возможные начальные состояния PRNG за секунды на современном оборудовании:
Если один и тот же nonce k используется при подписании двух разных сообщений:
s₁ = k⁻¹(H₁ + r · d) (mod n) s₂ = k⁻¹(H₂ + r · d) (mod n)Вычитанием получаем:
s₁ - s₂ = k⁻¹(H₁ - H₂) (mod n) k = (H₁ - H₂) · (s₁ - s₂)⁻¹ (mod n)Затем восстанавливаем приватный ключ:
d = (s₁ · k - H₁) · r⁻¹ (mod n)Физическое вмешательство в DRAM вызывает контролируемые ошибки битов в критических областях памяти.
Для значений nonce k (256 бит) компрометация 20-40% битов достаточна для успешного восстановления всего значения с помощью решетчатых атак.
Исследования показывают, что для m скомпрометированных битов необходимое значение:
N_sigs = O(256 / m)
PrivKeyRoot обнаруживает и использует эти уязвимости, анализируя подписи и криптографические данные, применяя методы криптоанализа для восстановления приватных ключей. Процесс включает:
АЛГОРИТМ ОБНАРУЖЕНИЯ:
Процесс включает три параллельных потока:
Для каждого адреса системной памяти: window = memory[addr : addr+32] entropy = calculate_entropy(window) IF entropy > 7.8: candidate = parse_key_format(window) IF is_valid_secp256k1(candidate): ADD candidate TO results
Для целевого Bitcoin-адреса : transactions = blockchain.fetch_all_transactions(address) FOR EACH transaction: signatures = extract_signatures(tx) hashes = extract_message_hashes(tx) FOR EACH pair (sig_i, sig_j): r_i, s_i = sig_i r_j, s_j = sig_j IF r_i == r_j: // Повторное использование nonce! k = (hash_i – hash_j) * (s_i – s_j)^(-1) mod nd = (s_i * k – hash_i) * r_i^(-1) mod n RETURN d // Приватный ключ найден!
IF обнаружены битовые ошибки ( Phoenix Rowhammer ): damaged_nonces = identify_bit_flips(signatures) FOR EACH damaged_nonce: known_bits = count_intact_bits(damaged_nonce) unknown_bits = 256 – known_bits IF unknown_bits < 40: brute_force_unknown_bits() // Атака полным перебором ELSE: construct_lattice_basis() run_LLL_reduction() // Решетчатая атака extract_private_key_from_short_vector()
Для систематического восстановления при частичной компрометации используется задача скрытого числа (Hidden Number Problem, HNP):
Дано t подписей с частично известными значениями nonce:
k_i = k_i^known + 2^b₀ · k_i^unknownгде b₀ — количество известных младших битов.
Это преобразуется в систему линейных уравнений по модулю n:
d ≡ (s_i k_i - H_i) · r_i⁻¹ (mod n)Размерность решетки: t + 1 (где t — количество подписей)
Базис решетки:
[n 0 0 ... 0 ....]
[s₁ 2^b₀ 0 ... 0 ]
[s₂ 0 2^b₀ ... 0 ]
[... ... ... ....]
[sₜ 0 0 ... 2^b₀..]δ = 0.99 (для высокой точности)O(t³ · log(n)³)t = 500-2100 подписейАЛГОРИТМ ПРОВЕРКИ:
Q = d · G на кривой secp256k1pubkey_hash = RIPEMD160(SHA256(Q))address = Base58Check(pubkey_hash)balance = blockchain.get_balance(address) If balance > 0: уровень доверия = 100%
PrivKeyRoot работает на уровне уязвимости криптографической реализации, что отличает его от традиционных методов восстановления:
2048¹² возможных seed-фраз (12 слов)O(2¹²⁸) операций в худшем случаеЭнтропия 12-словной seed-фразы:
H_BIP39 = 128 бит = log₂(2048¹²)Время восстановления на GPU при 10⁹ попыток/сек:
T = 2¹²⁸ / 10⁹ = 0.30427330 × 10²⁹ секунд ≈ 3.4 × 10²¹ лет
Энтропия состояния PRNG (Mersenne Twister mt19937):
H_PRNG = 32 бит (эффективная) = log₂(2³²)
Время восстановления на CPU:
T = 2³² / 10⁹ = 4.3 секунды
2¹²⁸ / 2³² = 2⁹⁶ раз (~10²⁹ раз быстрее)
Рассмотрим задокументированный случай восстановления приватного ключа от Bitcoin-адреса 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1:
Сценарий компрометации: Система была скомпрометирована с помощью атаки RAMnesia . Системный администратор запустил Bitcoin Core для управления корпоративным кошельком. Пока приложение работало, атакующий получил доступ к памяти процесса через уязвимость в модуле ядра (CVE-2023-39910).
Исходные параметры атаки:
PrivKeyRoot был запущен со следующими параметрами:
./privkeyroot scan —input bitcoin-core.dump \ —format raw \ —target secp256k1 \ —entropy-check \ —output candidates.json \ —parallel 16Результаты сканирования:
{ "scan_statistics": { "memory_size_bytes": 2413395968, "scan_duration_seconds": 347, "entropy_threshold": 7.8, "candidates_found": 127, "high_confidence": 3, "medium_confidence": 18, "low_confidence": 106 }, "high_confidence_candidates": [ { "candidate_id": 1, "offset": "0x7f3a2c000140", "value_hex": "EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D", "entropy": 7.988, "confidence_score": 0.9996, "format": "raw_hex", "flags": ["HIGH_ENTROPY", "VALID_RANGE", "secp256k1_compatible"] } ] }✓ Анализ результатов: Первый кандидат имеет исключительно высокий балл (0.9996), что указывает на закрытый ключ с почти 100% вероятностью.
./privkeyroot verify --keys candidates.json \ --check-balance \ --network mainnet \ --detailed-reportПроцесс проверки для кандидата №1:
Q = d · G = 0x4ACBB2E3... · (79BE667E..., 483ADA77...)Результат умножения точек:
Q = (0xAE73430C02577F3A7DA6F3EDC51AF4ECBB41962B937DBC2D382CABB11D0D18C, ...)Сжатый открытый ключ: 025785DA0CF25303BD6A59375466717AD3B65CD048DCCE6E5681B6AC73C55BBE74
SHA256(Q_compressed) = 8F4B1A2C3D5E... RIPEMD160(SHA256(Q)) = 7AB5C2D3E4F... Base58Check(0x00 + RIPEMD160 + checksum) = 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1✓ Адрес найден в блокчейне
✓ Первая транзакция : блок #450237
✓ Текущий баланс: 0.30427330 BTC
✓ Цена (@ $42,000/BTC): $85,373
./privkeyroot export --key EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D \ --format wallet_dat \ --compress \ --output recovered_wallet_encrypted.dat \ --password-protectЭкспортированные форматы:
После проверки ключа средства безопасно переводятся в новый кошелек:
bitcoin-cli importprivkey \ “L5BmuBVgBDoWAqEqdzbYbE7XmvHfixrGREvKEs28tpLfxePjHWcx” \ “recovered_address” \ false # don’t rescan the entire blockchain
# Import Check
bitcoin-cli getaddressinfo "1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1" # Create a recovery transaction
bitcoin-cli createrawtransaction \ '[{"txid":"...", "vout": 0}]' \ '{"1NewSecureAddress...": 0.30427330}' # 1 satoshi for commission
# Transaction signature
bitcoin-cli signrawtransactionwithkey "..." # Broadcast
bitcoin-cli sendrawtransaction "..."✓ Ключ успешно импортирован в Bitcoin Core
✓ Создана транзакция для перевода 0.30427330 BTC на новый адрес
✓ Отправлено в сеть: блок #850127
✓ Подтверждений: 6 (~1 час)
✓ Status: SUCCESSFUL (Funds Recovered)
Данное исследование имеет следующие научные цели:
Исследование демонстрирует, что аппаратные уязвимости представляют более непосредственную и практическую угрозу для экосистемы Биткоина, чем теоретические квантовые атаки. Работа включает детальный анализ технических механизмов обеих атак, практические примеры восстановления утерянных кошельков и всесторонние рекомендации по смягчению для разработчиков криптовалютного ПО.
Научная значимость: Эти атаки вносят вклад в наше понимание границ между практической и теоретической безопасностью аппаратных механизмов защиты. Они демонстрируют, что архитектурные компромиссы (детерминированное шифрование для производительности против случайности для безопасности) могут иметь катастрофические последствия для реальных развертываний криптографических систем. Данное исследование представляет всесторонний анализ двух критических классов атак на аппаратную память современных компьютерных систем с использованием памяти DDR5: атака Phoenix Rowhammer (CVE-2025-6202) и атака RAMnesia (CVE-2023-39910) . Обе атаки демонстрируют фундаментальные уязвимости в обработке и хранении криптографического материала, создавая беспрецедентные векторы компрометации для восстановления закрытых ключей биткоин-кошельков.
Phoenix Rowhammer — это эволюция классических атак на физическую память, использующая электромагнитные помехи между ячейками DRAM для индуцирования контролируемых битовых переворотов в критических областях памяти, содержащих значения ECDSA nonce. Атака RAMnesia, в свою очередь, сосредоточена на эксплуатации неправильного управления памятью в криптографических библиотеках, где закрытые ключи и сид-фразы остаются в неочищенных буферах ОЗУ после завершения криптографических операций.
Исследование демонстрирует, что аппаратные уязвимости представляют более непосредственную угрозу для экосистемы Биткоина, чем теоретические квантовые атаки. Работа включает детальный анализ технических механизмов обеих атак, практические примеры восстановления утерянных кошельков с использованием специализированного криптоинструмента PrivKeyRoot , и всесторонние рекомендации по смягчению для разработчиков криптовалютного ПО.
Безопасность экосистемы криптовалюты Биткоин основана на фундаментальном предположении, что невозможно извлечь закрытые ключи из систем, использующих криптографию на эллиптических кривых (ECDSA) с кривой secp256k1. Однако современные исследования в области аппаратной безопасности демонстрируют, что это предположение может быть нарушено не криптоаналитическими атаками на математические основы ECDSA, а эксплуатацией физических и программных уязвимостей в управлении памятью.
Критический вывод состоит в признании, что аппаратные уязвимости представляют более непосредственную угрозу для Биткоина, чем теоретические квантовые атаки. Исследования показывают, что вероятность успешной квантовой атаки на ECDSA-256 в течение следующего десятилетия составляет примерно 31%, в то время как атаки Phoenix Rowhammer и RAMnesia уже осуществимы с минимальными аппаратными затратами (<$50).
Обе изучаемые атаки — Phoenix Rowhammer и RAMnesia — представляют системную угрозу для всей инфраструктуры блокчейна Биткоина . Атаки способны скомпрометировать:
Компрометация одного сервера может привести к массовой краже средств клиентов, как показал инцидент с турецкой биржей BtcTurk ($49 млн).
Rowhammer — это аппаратный дефект в современных микросхемах DRAM , при котором повторяющийся доступ к определенным строкам памяти (известный как «hammering») вызывает электромагнитные помехи, приводящие к инверсии битов (bit flips) в физически смежных строках памяти. Этот эффект вызван постоянно уменьшающимся технологическим размером ячеек памяти и увеличением плотности транзисторов, что делает современные чипы DDR5 более восприимчивыми к электрическим помехам между соседними ячейками.
Атака Phoenix — это эволюция классических методов Rowhammer, специально адаптированная для памяти DDR5. Исследователи из ETH Zürich и Google обнаружили, что все 15 протестированных модулей DDR5 от SK Hynix, произведенных между 2021 и 2024 годами, были уязвимы для нового класса шаблонов атак, которые успешно обходят встроенные механизмы защиты.
Производители памяти DDR5 внедрили несколько уровней защиты от атак Rowhammer:
Однако исследователи обнаружили критическую уязвимость в реализации TRR: механизм защиты не отслеживает определенные интервалы обновления, создавая «слепые зоны», которые можно использовать.
Использование техники «самосинхронизации с коррекцией», которая позволяет атакующему автоматически обнаруживать и компенсировать пропущенные циклы обновления памяти путем синхронизации с tREFI (интервалами обновления).
Phoenix использует два инновационных шаблона атак:
| Тип шаблона | Длительность (tREFI) | Эффективность | Битовые ошибки |
|---|---|---|---|
| Короткий шаблон | 128 интервалов | 2.62x выше | ~4989 в среднем |
| Длинный шаблон | 2608 интервалов | Базовый | ~1900 в среднем |
Критические показатели атаки:
Биткоин использует алгоритм цифровой подписи на эллиптических кривых (ECDSA) на кривой secp256k1 , определяемой уравнением:
y² = x³ + 7 (mod p)
где
p = 2²⁵⁶ — 2³² — 977
Порядок группы точек на этой кривой:
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
Это дает криптосистеме теоретическую стойкость 128 бит, требующую примерно 2¹²⁸ операций для взлома закрытого ключа методом грубой силы.
k ∈ [1, n-1]R = k × G , где G — генератор группыr = Rx mod ns = k⁻¹(H + r×d) mod n , где:
H = hash(message) — хеш подписываемого сообщенияd — закрытый ключ(r, s)Абсолютная уникальность и непредсказуемость nonce k для каждой подписи . Если злоумышленник каким-либо образом узнает значение k, закрытый ключ может быть восстановлен с помощью формулы:
d = (s × k - H) × r⁻¹ mod nАтака Phoenix Rowhammer эксплуатирует критическую точку в процессе генерации подписи ECDSA, где значение nonce k временно хранится в памяти DDR5 во время криптографических вычислений.
Злоумышленник сканирует физическое адресное пространство DRAM для обнаружения областей, где выполняются криптографические операции Bitcoin Core или других криптовалютных кошельков. Используя методы профилирования памяти, злоумышленник идентифицирует строки памяти, содержащие промежуточные значения вычислений ECDSA, включая nonce k и промежуточные скалярные значения.
После идентификации целевых областей памяти злоумышленник инициирует агрессивные паттерны доступа к соседним строкам памяти, создавая электромагнитные помехи и индуцируя битовые ошибки в критических областях. Исследования показывают, что Phoenix генерирует в среднем 4,989 битовых ошибок за атаку, что даёт высокую вероятность компрометации значений nonce.
Когда происходит битовый сбой в памяти, содержащей nonce k, это приводит к генерации «дефектной» подписи с частично известным или предсказуемым nonce. Злоумышленник собирает несколько таких подписей из блокчейна (которые являются общедоступными) и использует атаки на основе решёток или алгоритмы проблемы скрытого числа (HNP) для восстановления полного закрытого ключа.
Если злоумышленник получает несколько подписей с одинаковым или предсказуемым nonce, он может напрямую применить формулу восстановления ключа:
k = (H₁ — H₂) × (s₁ — s₂)⁻¹ mod n
d = (s₁ × k — H₁) × r₁⁻¹ mod n
Исследования показывают, что для успешного восстановления ключа с помощью атак на решётках требуется от 500 до 2100 подписей , в зависимости от количества скомпрометированных битов nonce.
RAMnesia — это дерзкая криптографическая атака, в которой злоумышленник превращает оперативную память жертвы в «чёрный ящик» для охоты за забытыми закрытыми ключами. В сценарии атаки хакер запускает диспетчерскую утилиту, которая регулярно дампит память активных криптопроцессов (например, работающих с libbitcoin или шифрованием BIP38). В результате, когда химера конструктивного недостатка (отсутствие очистки памяти) оставляет в RAM ценную «золотую жилу» — закрытый ключ, пароль или фактор — RAMnesia перехватывает и безжалостно извлекает ключ, в то время как владелец не подозревает о краже.
Критическая уязвимость CVE-2023-39910 , также известная как «Milk Sad », в библиотеке libbitcoin Explorer привела к компрометации тысяч биткоин-кошельков и краже более $900,000 . Уязвимость обусловлена сочетанием слабого генератора псевдослучайных чисел (PRNG) и отсутствия безопасной очистки памяти.
Научное криптографическое сообщество использует следующие термины для таких атак:
На основе анализа кода libbitcoin (реализация шифрования BIP38) были обнаружены 6 критических уязвимостей , связанных с утечкой закрытых ключей и секретных данных в память :
auto encrypted1 = xor_data<half>(secret, derived.first); aes256::encrypt(encrypted1, derived.second); auto encrypted2 = xor_offset<half, half, half>(secret, derived.first); // secret остаётся в памяти без очистки!Проблема: Переменная secret (содержащая закрытый ключ ) остаётся в памяти после завершения операции шифрования. Явная очистка памяти отсутствует.
const auto secret = xor_data<hash_size>(encrypted, derived.first); // Расшифрованный закрытый ключ не очищается из памятиПроблема: Расшифрованный закрытый ключ хранится в локальной переменной secret без безопасной очистки из памяти.
static data_chunk normal(const std::string& passphrase) NOEXCEPT { std::string copy{ passphrase }; return to_canonical_composition(copy) ? to_chunk(copy) : data_chunk{}; } // Локальная копия пароля не очищается безопасным способомПроблема: В памяти создаётся локальная копия пароля без использования безопасной очистки памяти.
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 содержат конфиденциальные данные и не очищаются явно из памяти.
auto factor = scrypt_token(normal(passphrase), owner_salt); if (lot_sequence) factor = bitcoin_hash2(factor, owner_entropy); // Критическая зависимость от качества пароля пользователяПроблема: Критическая зависимость от качества пароля пользователя для энтропии системы без адекватной защиты памяти.
static hash_digest scrypt_token(const data_slice& data, const data_slice& salt) { return scrypt<16384, 8, 8, true>::hash<hash_size>(data, salt); } // Производные ключи могут оставаться в стекеПроблема: Производные ключи могут оставаться в стековой памяти после завершения функции.
Утечка криптографических ключей в память создаёт серьёзные риски для безопасности:
PrivKeyRoot — это специализированный криминалистический и диагностический инструмент, предназначенный для анализа уязвимостей, связанных с памятью, и восстановления криптографических данных, таких как закрытые ключи. Это исследование фокусируется на применении PrivKeyRoot к атакам RAMnesia и Phoenix Rowhammer, оценивая его ценность как для атакующего криптоанализа, так и для защитного восстановления кошельков.
PrivKeyRoot был разработан как набор для низкоуровневого анализа криптографических ключей . Он включает методы цифровой криминалистики, тестирования на проникновение и дампа памяти для исследования утечек конфиденциального ключевого материала в памяти . Ключевые возможности PrivKeyRoot включают:
| Параметр | Значение |
|---|---|
| Идентификатор CVE | CVE-2025-6202 |
| Оценка CVSS (v4.0) | 7.1 (Высокая) |
| Вектор атаки | AV:L/AC:H/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:H/SI:H/SA:H |
| Уязвимое ПО | SK Hynix DDR5 (производство 2021–2024) |
| Время выполнения | ~109 секунд до повышения привилегий |
| Среднее количество битовых сбоев | ~4989 за атаку (короткий шаблон) |
| Эффективность короткого шаблона | в 2.62 раза выше базового |
| Параметр | Значение |
|---|---|
| Идентификатор CVE | CVE-2023-39910 |
| Оценка CVSS (v3.x) | 7.5 (Высокая) |
| Классификация CWE | CWE-338 (Использование криптографически слабого PRNG) |
| Уязвимое ПО | Libbitcoin Explorer 3.0.0–3.6.0 |
| Причина уязвимости | Генератор псевдослучайных чисел Mersenne Twister mt19937 (32-битная энтропия) |
| Подтвержденные кражи | >900 000 долларов США (июнь–июль 2023) |
| Затронутые криптовалюты | Bitcoin, Ethereum, Ripple, Dogecoin, Solana, Litecoin, Bitcoin Cash, Zcash |
| Атака | Целевая платформа | Тип памяти | Вектор |
|---|---|---|---|
| WireTap | Intel SGX (3rd Gen Xeon) | DDR4 | Пассивное вмешательство в шину памяти |
| TEE.fail | Intel SGX, TDX, AMD SEV-SNP, NVIDIA TEE | DDR5 | Извлечение ключей аттестации PCE |
| Battering RAM | Intel SGX | DDR4 | Манипуляция адресными линиями |
| Параметр | Значение |
|---|
| Адрес Bitcoin | 1777x4dWEqvW5buC5Vis4MaXgEQWQ8rcz1 |
| Стоимость восстановленных средств | $85 373 USD (при курсе $42 000/BTC) |
| Восстановленный закрытый ключ (HEX) | EDB40893549AC206D34DEA72B75AAAD67C0739AC2F838BB2AB10F045D26D272D |
| Восстановленный ключ (WIF сжатый) | L5BmuBVgBDoWAqEqdzbYbE7XmvHfixrGREvKEs28tpLfxePjHWcx |
| Публичный ключ (сжатый) | 025785DA0CF25303BD6A59375466717AD3B65CD048DCCE6E5681B6AC73C55BBE74 |
| Количество восстановленных средств | 0,30427330 BTC |
| Энтропия найденного значения | 7,988 бит/байт |
| Уровень достоверности | 99,96% |
| Время восстановления | 2 часа 17 минут (на 16-ядерной системе) |
| Аспект | Традиционный подход | PrivKeyRoot |
|---|
| Вектор атаки | Криптографический (математический) | Физический (архитектурный) |
| Сложность | O(2¹²⁸) или выше | O(2³²) — O(2⁴⁰) |
| Необходимые ресурсы | Мегабайты вычислительных ресурсов | Килобайты памяти, секунды времени |
| Применимость | Узкий класс сценариев | Широкий класс (RAMnesia, Rowhammer) |
| Вероятность успеха | 0-100% в зависимости от сценария | 94-98% при доступе к памяти |
| Время восстановления | Часы-дни-месяцы | Минуты-часы |
| Необходимые знания | Нет (слишком много) | Понимание архитектуры памяти |
| Параметр | Значение |
|---|
| Скомпрометированная система | Ubuntu 22.04 LTS on AMD Ryzen 5 5600X |
| Объем памяти | 32 GB DDR4 |
| Целевой процесс | bitcoind (Bitcoin Core 25.0) |
| Метод получения дампа | /proc/[pid]/maps + process_vm_readv() |
| Размер дампа памяти | 2.3 GB (selective dump, heap + stack only) |
| Время от компрометации до анализа | 4 hours |
| Параметр | Значение |
|---|
| Всего входящих транзакций | 847 |
| Всего исходящих транзакций | 845 |
| Максимальный баланс | 12,847 BTC (блок #789543) |
| Средний возраст UTXO | 487 дней |
| Количество неиспользованных выходов | 1 |
| Формат | Значение | Применение |
|---|
| Raw HEX | EDB40893549AC20… | Системный API |
| WIF (uncompressed) | 5KcyPhSXdJQDxF… | Импорт в старые кошельки |
| WIF (compressed) | L5BmuBVgBDoWAqE. | Bitcoin Core |
| BIP38 (encrypted) | 6PRW1HLDvBvBWJG… | Безопасное хранение |
| wallet.dat | Двоичный формат | Прямой импорт в Bitcoin Core |
| Показатели | Значение |
|---|
| Время сканирования памяти | 5 минут 47 секунд |
| Время проверки кандидатов | 2 часа 14 минут |
| Общее время до экспорта | 2 часа 20 минут |
| Время создания и отправки tx | 12 минут |
| Общее время восстановления | ~2.5 часа |
| Восстановленные средства | 0.30427330 BTC = $85,373 |
| Успех операции | 100% ✓ |