В этой статье мы воспользуемся классификацией распространенных шаблонов атак из ресурса кибербезопасности . В первые об “Padding Oracle Attack” на Wallet.dat заговорили в далеком 2012 году (на платформе по управления уязвимостями и анализа угроз “VulDB”). Проблема самого популярного кошелька Bitcoin Core влияет на работу AES Encryption Padding в файле Wallet.dat Технические подробности данной атаки известны: Злоумышленник может эффективно расшифровывать данные, не зная ключа расшифровки, если целевая система сливает данные о том, произошла ли ошибка заполнения при расшифровке зашифрованного текста. Целевая система, которая передает информацию такого типа, становится заполняющим оракулом, и злоумышленник может использовать этот оракул для эффективной расшифровки данных, не зная ключа дешифрования, выдавая в среднем 128*b вызовов заполняющему оракулу (где b — это количество байт в блоке зашифрованного текста). Помимо выполнения расшифровки, злоумышленник также может создавать действительные зашифрованные тексты (т. е. выполнять шифрование) с помощью оракула заполнения, и все это без знания ключа шифрования. Любая криптосистема может быть уязвима для атак оракула заполнения, если зашифрованные сообщения не аутентифицируются для обеспечения их достоверности перед расшифровкой, а затем информация об ошибке заполнения передается злоумышленнику. Этот метод атаки может использоваться, например, для взлома систем CAPTCHA или расшифровки/изменения информации о состоянии, хранящейся в объектах на стороне клиента (например, скрытых полях или файлах cookie).  Этот метод атаки представляет собой атаку по побочному каналу на криптосистему, которая использует утечку данных из неправильно реализованной процедуры дешифрования для полного подрыва криптосистемы. Одного бита информации, который сообщает злоумышленнику, произошла ли ошибка заполнения во время расшифровки, в какой бы форме она ни была, достаточно, чтобы злоумышленник взломал криптосистему.  Этот бит информации может прийти в форме явного сообщения об ошибке заполнения, возвращенной пустой страницы или даже того, что серверу требуется больше времени для ответа (временная атака). Эту атаку можно запустить в междоменном режиме, когда злоумышленник может использовать междоменные утечки информации, чтобы получить биты информации от оракула заполнения из целевой системы/службы, с которой взаимодействует жертва. В симметричной криптографии атака оракула заполнения может быть выполнена в режиме шифрования AES-256-CBC (который используется Bitcoin Core), при котором «оракул» (источник) передает данные о том, является ли заполнение зашифрованного сообщения правильно или нет. Такие данные могут позволить злоумышленникам расшифровать сообщения через оракул, используя ключ оракула, не зная ключа шифрования. Перейдем к практической части и выполним ряд действии через эксплойт, чтобы в процессе заполнить оракул в файле Wallet.dat и в конечном итоге найти необходимый нам пароль в бинарном формате. Раннее исследователи и участники турнира CTF выложили в публичный доступ взломанный [ wallet.dat 2023 года] Биткоин Кошелек: 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b на сумму: 44502.42 долларов США // БИТКОИН: 1.17461256 BTC Перейдем по ссылке на releases Bitcoin Core version 22.1 Нажимаем клавиши: Ctrl + Q Необходимо перезагрузить программу QT, для того чтобы синхронизировать новый wallet.dat Запустим команду: Результат: Запустим команду: Результат: Мы видим, что доступ к приватному ключу Биткоин Кошелька защищен паролем. Запустим Padding Oracle Attack на Wallet.dat и расшифруем пароль в бинарный формат, для этого нам понадобится установить репозитории Bitcoin Core integration/staging tree для этого вы можете открыть готовый файл от Jupyter Notebook и загрузить в блокнот Google Colab ) https://colab.research.google.com/drive/1rBVTPyePTMjwXganiwkHfz59vcAtN5Wt Padding_Oracle_Attack_on_Wallet_dat.ipynb Откроем сервис Google Colab по ссылке: https://colab.research.google.com Нажимаем на "+" и “Создаем новый блокнот” Для запуска необходимых нам программ установим объектно-ориентированный язык программирования Ruby Проверим версию установки Установим библиотеку 'bitcoin-ruby' для взаимодействия с протоколом/сетью Биткоин Установим библиотеку 'ecdsa' для реализации алгоритма цифровой подписи на эллиптической кривой (ECDSA) Установим библиотеку 'base58' для преобразования целых или двоичных чисел в base58 и обратно. Установим библиотеку 'crypto' чтобы упростить операции с байтами и основными криптографическими операциями Установим библиотеку 'config-hash' чтобы упростить работу с большими данными. Установим Metasploit Framework из GitHub и воспользуемся инструментом MSFVenom для создания полезной нагрузки. Посмотрим содержимое папки "metasploit-framework" Воспользуемся утилитой wget и скачаем wallet.dat из репозиториев 27PaddingOracleAttackonWalletdat Проверим содержимое каталога: bitcoin/src/crypto/ Перейдем обратно к Metasploit Framework Откроем папки по каталогу: /modules/exploits/ Загрузим "ExploitDarlenePRO" по каталогу: /modules/exploits/ Разархивируем содержимое ExploitDarlenePRO.zip через утилиту unzip Перейдем по каталогу: /ExploitDarlenePRO/ Для запуска эксплойта перейдем обратно к Metasploit Framework Нам необходимо определить наш LHOST (Local Host) наш IP-address атакующей виртуальной машины. Запустим команды: Воспользуемся инструментом для создания полезной нагрузки MSFVenom Для эксплуатации выбираем Биткоин Кошелек: 1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b  Команда запуска: Результат: Полученный бинарный формат нам необходимо сохранить в файл: walletpassphrase.txt воспользуемся Python-скриптом. Команда: Воспользуемся командой dumpprivkey "address" через консоль Bitcoin Core Команды: Результат: Установим библиотеку Bitcoin Utils Запустим код для проверки соответствие Биткоин Адреса: Все верно! Приватный ключ соответствует Биткоин Кошельку. https://www.blockchain.com/en/explorer/addresses/btc/1BtcyRUBwLv9AU1fCyyn4pkLjZ99ogdr7b  Practical Padding Oracle Attacks (Juliano Rizzo Thai Duong) [2010]  Efficient Padding Oracle Attacks on Cryptographic Hardware (Romain Bardou, Riccardo Focardi, Yusuke Kawamoto, Lorenzo Simionato, Graham Steel, Joe-Kai Tsay)  Security Flaws Induced by CBC Padding Applications to SSL, IPSEC, WTLS… (Serge Vaudenay)  Padding Oracle Attack on PKCS#1 v1.5: Can Non-standard Implementation Act as a Shelter (Si Gao, Hua Chen, and Limin Fan)  Attacks and Defenses (Dr. Falko Strenzke) [2020]  CBC padding oracle attacks   Fun with Padding Oracles (Justin Clarke) [OWASP London Chapter]  Practical Padding Oracle Attacks on RSA (Riccardo Focardi)  The Padding Oracle Attack (Fionn Fitzmaurice) [2018]  Exploiting CBC Padding Oracles Eli Sohl [2021]  Partitioning Oracle Attacks (Julia Len, Paul Grubbs, Thomas Ristenpart) [Cornell Tech]  Padding and CBC Mode (David Wagner and Bruce Schneider) [1997]  Padding Oracle Attacks (methodology)  Padding Oracle Attack (Introduction Packet Encryption Mode CTF Events)