
BRC-20 지갑의 잠재적 공격 방식에 대한 기술적 분석
글 작성: Trustless Labs
BRC-20 코드와 메커니즘을 심층 분석한 결과, 우리는 전송 단계에서 대규모 홀더(huge holder)를 대상으로 한 공격 수단이 존재할 수 있음을 발견했다. 거래소가 운영 프로세스에 문제점이 있는지 확인하는 데 도움을 주고 백햇(white hat) 정신을 실천하기 위해, 우리는 테스트를 통해 검증된 방법으로 바이낸스 ORDI 핫월렛 자산을 잠금 처리했으며, 이로 인해 바이낸스는 ORDI 출금을 일시 중단하게 되었다. 우리는 즉시 바이낸스 팀에 이를 통보하고 조작 세부 사항을 공유했으며, 가능한 한 빨리 출금 서비스를 복구하도록 지원했다. 약 3시간 후, 바이낸스는 ORDI 출금을 재개했다. 본문에서는 BRC-20의 설계 원리부터 시작하여 바이낸스가 왜 ORDI 출금을 일시 중단했는지를 체계적으로 분석하고, 누구나 여러분의 BRC-20 잔액을 잠글 수 있는 이유를 이해하는 데 도움을 드리고자 한다.
먼저 UniSat을 통해 체인 상에서 무슨 일이 있었는지 살펴보자.

본문 작성 당시 UniSat에 표시된 바이낸스 ORDI 핫월렛 잔액은 세 부분으로 나뉘어 있다: Transferable(송금 가능), Available(사용 가능), Balance(잔고). 여기서 BRC-20의 세 가지 기본 개념이 등장한다: Transferable balance(송금 가능 잔액), Available balance(사용 가능 잔액), Overall balance(총 잔액). Transferable balance란 직접 송금할 수 있는 잔액을 의미하며, Available balance는 Transferable balance로 변환될 수 있는 잔액을 말한다. Overall balance는 이 두 가지의 합계로, 해당 주소의 총 잔액을 나타낸다. 여기까지 보면 독자들은 이렇게 질문할 수 있다. 현재 바이낸스 ORDI 핫월렛에 이렇게 많은 잔액이 있는데, 왜 여전히 출금이 불가능한 것일까? 서두르지 말고 계속 살펴보자.
BRC-20의 전송은 두 단계의 작업을 필요로 한다. 첫 번째 단계에서는 transfer용 Inscription을 inscribe하고, 두 번째 단계에서 이 Inscription을 수취인에게 전송함으로써 BRC-20 전송을 완료한다. Inscription 이전은 UTXO 기반이므로, 첫 번째 단계에서 amt가 얼마인 Inscription을 inscribe했는지에 따라 두 번째 단계에서도 동일한 amt만큼의 BRC-20만 전송할 수 있다. 따라서 앞서 언급한 Transferable balance 역시 UTXO 기반으로 결정된다. 예를 들어 설명하자면, A라는 새롭게 생성된 주소가 있다고 하자. 당신이 A 주소로 m 개의 ORDI를 민트하거나 다른 주소로부터 m 개의 ORDI를 전송받았다면, 이때 A 주소의 Available balance와 Overall balance는 모두 m이며, Transferable balance는 0이다. 이후 A 주소에서 B 주소로 n 개의 ORDI를 전송한다고 하자. 첫 번째 단계로 A 주소에 amt가 n인 Inscription을 inscribe한다(단, n ≤ m일 때만 유효하다). 이 시점에서 A 주소의 Transferable balance는 n이 되고, Available balance는 m - n, Overall balance는 m이 된다. 두 번째 단계에서 이 amt가 n인 Inscription을 B 주소로 전송하면, A 주소의 Available balance와 Overall balance는 모두 m - n이 되며 Transferable balance는 0이 된다. 반면 B 주소의 Available balance와 Overall balance는 모두 n이 되고 Transferable balance는 0이 되며, 전송이 완료된다.

UniSat에 표시된 바이낸스 ORDI 핫월렛의 거래 내역을 예로 들면, 그림에서 Method가 inscribe-transfer인 항목은 위에서 설명한 첫 번째 단계 작업에 해당하며, receive 또는 send는 두 번째 단계에 해당한다. 또한 마지막 두 건의 거래는 하나의 완전한 BRC-20 전송을 구성한다. 나머지 세 건의 inscribe-transfer 거래는 각각 amt가 8,210,108, 6,099, 2,683인 세 개의 Inscription을 inscribe한 것이며, 이 세 개의 Inscription이 공동으로 Transferable balance를 구성한다. 따라서 현재 바이낸스 ORDI 핫월렛에서 ORDI를 전출하려면 오직 이 세 건의 amt에 해당하는 금액만 전송할 수 있으며, 당연히 사용자의 다양한 출금 요구를 충족시킬 수 없다.
이러한 상황이 발생하는 이유는 누구나 임의의 주소에 임의의 Inscription을 inscribe할 수 있기 때문에, 누구든지 BRC-20 전송의 첫 번째 단계 작업을 수행함으로써 임의의 주소의 BRC-20 잔액을 잠글 수 있기 때문이다. 그렇다면 바이낸스는 현재 직면한 문제를 어떻게 해결해야 할까? 사실 간단하다. 앞서 언급한 세 개의 Inscription을 자신에게 전송하면, Transferable balance를 다시 Available balance로 되돌릴 수 있고, 이후 사용자의 출금 요구에 맞춰 해당 amt의 Inscription을 inscribe하여 전송하면 된다. 그러나 이는 일시적인 해결책일 뿐이며 근본적인 문제 해결에는 부족하다. 프로토콜 자체를 개선하고 현재 BRC-20 설계상의 결함을 해결하는 것만이 궁극적인 해법이 될 수 있다.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News













