바이낸스가 63억 달러를 도둑맞았다
이번 바이낸스 해킹, 다들 뉴스에서 들었지? 세계 최대의 암호화폐 거래소에서 엄청난 규모의 해킹사건이 발생한 거야. 이건 단순히 금고 열쇠를 훔쳐서 돈을 빼간 사건이 아니야. 금고가 앞으로 누구 말을 들을지를 바꿔버렸던 사건이야.
쉽게 말하자면... 평소에는 고객이 은행에 가서 출금을 요청하면 직원이 출금전표를 확인하고 돈을 내주잖아.
그런데 이번에는 누군가 출금전표 한 장을 위조한 수준을 넘어, 금고 안의 돈을 계속 꺼낼 수 있는 자동 출금 장치를 심어 놓은 수준이었어. 그래서 이번 해킹 사건에서는 처음에 바이낸스의 금고에 들어 있던 돈만 빠져나간 게 아니야.
그 장치가 작동하는 동안 새로 들어온 돈도 계속 빠져나갈 수 있었지.
✦ 금고 열쇠 탈취 vs 작동 방식 변경
이번 사건이 다른 이유
이번 사건에서 드러난 약점은 단순히 거래소에 코인이 많이 모여 있다는 사실만이 아니야. 지갑에 대한 승인 권한이 지갑의 작동 방식 자체를 바꿀 수 있고, 그 권한의 효력이 남아 있는 동안 피해가 계속 커질 수 있다는 거야.
출금전표 한 장이 아니라 금고의 작동 방식을 바꾼 승인
✦ 일회성 승인 vs 위임 승인
승인 종류에 따라 효력이 달라져
| 승인 종류 | 범위 | 효력 |
|---|---|---|
| 일회성 송금 승인 | 정해진 송금 한 건 | 한 번 처리되고 끝 |
| EIP-7702 위임 승인 | 지갑이 실행할 프로그램 | 설정이 유지되는 동안 지갑이 호출될 때 위임된 코드가 실행 |
보통 코인을 보낼 때는 ‘이 주소로 얼마를 보내라’는 내용을 승인해. 은행으로 치면 ‘내 계좌에서 A에게 100만 원을 보내라’고 적은 출금전표 한 장에 도장을 찍는 것과 비슷하지. 그 전표가 유효하면 정해진 송금 한 건이 처리돼.
그런데 이더리움에는 지갑이 다른 프로그램을 자신의 권한으로 실행하도록 설정하는 기능이 있어. 이름은 EIP-7702야. 원래는 여러 결제를 한꺼번에 처리하거나 지갑 사용을 편리하게 만들기 위한 기능이지.
마치 우리가 AI 에이전트에게 커넥터를 연결해서 다양한 기능을 활용하게 하는 것과 비슷한 거야.
이걸 은행 금고라고 본다면, '이번에 100만 원을 꺼내라'는 종이전표를 매번 승인하는게 너무 느리고 번잡하니까 금고의 자동 장치에 어떤 작동 프로그램을 연결하는 것과 비슷해.
그러면 전표처럼 단순히 한 번 돈을 보내고 끝나는 게 아니라, 그 이후에도 연결 프로그램이 지갑의 권한을 이용할 수 있는 거야. 그 프로그램이 정상적이면 편리한 기능이 되지만, 악성 프로그램이라면 지갑 안의 코인을 다른 곳으로 옮길 수 있지.
이번 사건에서 공격자는 바이낸스의 이더리움 출금 지갑인 ‘바이낸스 14’가 자신이 준비한 악성프로그램을 실행하도록 설정을 바꿨어. 바로 이 방법을 이용한 거야.
50장 중 1장만 통했다. 하지만 운이 아니라 계산이었어
✦ 50개 승인서 준비 과정
연속 번호 50개로 순번 변화를 흡수
여기서 '거래 순번'이라는 개념이 나와. 이더리움 지갑은 자기 이름으로 거래를 내보낼 때마다 일련번호를 하나씩 올려. 은행 창구에서 대기표 번호가 101번, 102번, 103번으로 올라가는 것과 비슷해. 이 번호는 비밀번호가 아니야.
따라서 블록체인에 공개돼 있고, 이미 처리한 거래를 다시 처리하지 못하게 구분하는 역할을 할 뿐이야.
이번에 공격자가 사용한 '지갑 설정 변경 승인'에도 일련번호가 붙어 있었어. 은행으로 치면 ‘대기표가 101번일 때 이 승인서를 처리하세요’라고 적힌 서류인 거지.
이더리움 시스템상, 실제 지갑의 순번이 정확히 101번일 때만 그 서류가 받아들여지고, 이미 102번으로 넘어갔다면 101번 서류는 쓸 수 없어.
그런데 바이낸스 14는 고객 출금을 계속 처리하는 바쁜 지갑이잖아. 세계 최대의 암호화폐 거래소니까. 그래서 공격자가 지갑의 순번을 확인한 뒤 공격을 시도하더라도 다른 출금이 먼저 처리되면 실패할 위험이 있었어.
그래서 공격자는 승인서를 한 장만 준비하지 않았어. 확인한 순번부터 그다음 순번들까지 이어지는 50개의 승인서를 미리 준비했지. 복권 번호처럼 수많은 숫자 중 50개를 무작위로 고른 게 아니야.
대기표가 곧 바뀔 수 있으니 101번부터 150번까지 연속 번호가 적힌 승인서를 준비해서, 그 중에 하나는 통과되도록 세팅을 해둔 거야.
온체인 분석에 따르면 공격자는 10월 29일 20:17:47 UTC에 바이낸스 14의 순번은 18,914,775였어. 공격자는 18,914,775부터 18,914,824까지 연속된 50개 번호의 승인 서명을 준비했지.
50개 번호로는 당시 지갑의 거래 속도를 기준으로 약 6분 24초 범위를 커버할 수 있었어.
실제 승인 거래가 블록체인에 기록된 시각은 20:20:59 UTC였어. 그 직전 바이낸스 14는 18,914,808번 거래를 마쳤고, 다음 순번은 18,914,809였어.
준비한 50개 중 35번째 승인서의 번호가 바로 이 숫자와 일치했고, 공격자의 판단은 적중했어.
여기서 한 가지 더 중요한 사실이 있어. 이 50개 승인 서명은 모두 바이낸스 14의 키로 만들어진 서명이었어. 은행으로 치면 공격자가 "바이낸스 14"라는 계좌의 진짜 도장이 찍힌 승인서 50장을 준비해 둔 거야.
그 중에 하나인 18,914,809번이 현재 순번과 일치했지. 그런데 도대체 그 도장을 어떻게 확보했는지는 공개된 블록체인 기록만으로 확인되지 않았어.
✦ 위임이 유지되는 동안 커진 피해
첫 유출 이후에도 계속 유출
승인이 적용된 지 약 3분 24초 뒤, 공격자가 준비한 프로그램이 실행됐고 바이낸스 14에 있던 약 25억 달러 상당의 코인이 빠져나갔어. 하지만 진짜 문제는 첫 출금으로 끝나지 않았다는 거야.
공격자가 바꿔 놓은 지갑 설정은 약 3시간 50분 동안 유지됐고, 그동안 새로 들어온 자산이 여러 차례 추가로 유출됐어.
바이낸스 14를 신뢰하도록 설정된 별도 바이낸스 스마트 지갑인 Hot Wallet 34에서도 약 8억 2,300만 달러 상당의 USDC가 빠져나갔고.
이게 이번 사건이 단순한 코인지갑 탈취와 다른 점이야. 공격자는 지갑에 있던 코인을 한 번 가져가는 데 그치지 않고, 지갑이 움직이는 규칙을 바꿔서 코인을 계속 털어갔어.
왜 거래소 해킹은 계속 반복될까
✦ 거래소가 노려지는 공격 대상
키 저장 장치부터 승인 프로그램까지
| 공격 대상 | 설명 |
|---|---|
| 암호키 저장 장치 | 키가 저장된 곳 |
| 서명 요청 직원 계정·서버 | 서명을 요청하는 곳 |
| 승인 프로그램 | 승인을 처리하는 곳 |
거래소에는 고객이 맡긴 코인이 모여 있고, 출금을 처리하는 권한도 거래소의 지갑과 운영 시스템에 집중돼 있어.
공격자 입장에서는 고객 한 명의 계정을 노리는 것보다 거래소의 금고를 움직이는 승인 체계를 노리는 편이 훨씬 큰 피해를 만들 수 있겠지.
공격자는 반드시 금고 열쇠 자체를 훔쳐야 하는 것도 아니야. 시스템이 가짜 출금 지시를 승인하게 만들거나, 자동 출금 장치에 잘못된 명령을 밀어넣으면 돼. 그러면 굳이 열쇠를 탈취하지 않아도 돈을 빼낼 수가 있어.
따라서 암호화폐 거래소에서는 각종 암호키가 저장된 장치만이 아니라, 그 장치에 서명을 요청하는 직원 계정·서버·승인 프로그램이 모두 공격 대상이 될 수 있어. 그 중에 하나라도 뚫리면 언제든지 이런 일이 발생할 수 있겠지.
바이낸스는 초기 조사에서 관계자(DevOps 엔지니어)의 노트북이 해킹당했을 가능성을 언급했고, 이후 추가적인 해킹 정황도 확인했다고 밝혔어. 다만, 지갑 개인키가 유출됐다는 증거는 찾지 못했다고 설명했지.
블록체인 기록으로는 바이낸스 14의 유효한 서명이 사용된 사실을 확인할 수 있지만, 그 서명을 만들어 낸 내부 경로까지 알 수 있는 건 아니거든.
지난해 바이비트 해킹에서도 공격자는 지갑 관리 서비스 업체 Safe의 개발자 자격 증명을 탈취하고 거래 화면을 조작했어. 바이비트 직원들은 정상적인 내부 이체라고 생각해 승인했지만, 실제로는 공격자에게 지갑 통제권을 넘기는 거래였지.
이번 사건과 공격방법이 조금 달랐지만, 코인 지갑 자체가 아니라 코인을 움직이는 승인 과정을 공격했다는 공통점이 있어.
블록체인은 무엇을 지켜주고, 무엇은 지켜주지 못할까
✦ 블록체인이 지키는 것과 지키지 못하는 것
기록은 지키지만 서명자는 가리지 못해
블록체인은 거래 기록을 검증하고, 기록을 함부로 바꾸기 어렵게 만드는 기술이야. 하지만 거래를 승인한 사람이 거래소의 정당한 담당자인지, 실제 고객이 출금을 요청했는지까지 판단하지는 않아.
출금전표에 찍힌 도장이 진짜인지는 확인할 수 있어도, 그 도장을 찍은 사람이 정당한 권리자인지, 사기꾼인지까지는 알아내지 못한다는 거야.
일반서명거래는 지갑의 개인키로 거래에 서명해서 보내는 평범한 방식이야. 거래소 지갑에서는 지갑 주인이 직접 서명하지 않고, 개인키를 쓰는 거래소의 서명 시스템이 서명하기도 해.
보낼 주소와 금액을 담은 거래에 도장을 찍으면, 네트워크가 그 서명을 확인하고 거래를 실행해.
EIP-7702 위임과는 달라. 위임은 지갑이 실행할 프로그램 자체를 바꿔서 그 프로그램이 지갑 권한으로 움직이게 하는 거야.
일반서명거래는 지갑의 작동 방식을 바꾸지 않고 한 건 한 건 직접 서명해서 보내는 거야. 이번 사건에서 바이낸스 16과 다른 체인의 유출이 바로 이 방식이었어.
물론 이번 사건 전체가 EIP-7702 때문에 발생한 건 아니야. 약 63억 달러 규모의 전체 피해에는 다른 블록체인의 지갑들도 포함돼. EIP-7702를 이용한 방식은 바이낸스 14라는 이더리움 지갑에서 확인된 거고.
그리고 이더리움에서도 바이낸스 16에 대한 유출은 일반서명거래였고, 다른 블록체인에서도 일반서명거래로 자산이 빠져나간 거였어.
그러니까 이번 사건이 드러낸 암호화폐의 치명적인 약점은 장부 자체가 아니라, 장부에 거래를 기록하도록 허락하는 승인 권한이야. 블록체인은 유효한 서명이 있는 거래를 실행하지만, 그 서명이 해커의 손에서 나왔는지까지 구분하지 못하니까.
거래소가 고객 자산을 모아 보관하고 출금을 대신 처리하는 한, 공격자는 코인을 움직이는 권한과 그 권한을 행사하는 시스템을 언제든지 또 노릴 수 있어.
이건 투자조언은 아니야. 알고 있지? 내 소중한 돈은 스스로 지키자구.
이번 글은 여기서 마칠게. 또 만나자.
관련 글
- 90억원에 달하는 비트코인이 지갑에서 증발.. 리셀러에서 산 코인 지갑이 범인?
- 시바이누 가짜 에어드롭의 범인은 지갑 드레이너? 코인투자자 주의보
- 비트코인 투자회사 스트래티지(MSTR), MSCI 지수에서 퇴출 위기
🌐 영어 버전: Binance's $6.3B Hack: Crypto's Fatal Weakness, Explained
💬 댓글
아직 댓글이 없어. 첫 댓글을 남겨줄래?
댓글 쓰기