
약 64억 달러, 우리 돈으로 약 8조 9천억 원이 2026년 10월 바이낸스 출금용 핫월릿에서 빠져나갔습니다. 주요 유출은 약 20분 만에 끝났고, 암호화폐 해킹 사상 최대 규모로 기록됐습니다. 그런데 블록체인의 암호는 하나도 깨지지 않았습니다. 2025년의 바이비트와 업비트 사고도 마찬가지였습니다. 공격자는 무엇을 장악했을까요?
사고 원인: 서명 경로 장악. 블록체인은 서명이 올바른지만 확인합니다. 그 앞단인 개발자 PC, 서명 화면, 서명 서버를 장악하면 정상 서명으로 보이는 악성 거래가 나갑니다.
바이낸스 사건은 공개 직후의 자료입니다. 바이낸스는 공식 원인을 발표하지 않았고, 수치는 2026년 10월 말 기준이라 바뀔 수 있습니다. 원화는 1달러=1,400원으로 환산했습니다.
용어 두 개를 먼저 정리합니다. 핫월릿은 인터넷에 연결된 출금용 지갑이고, 콜드월릿은 인터넷과 떨어뜨려 보관하는 지갑입니다. 멀티시그는 여러 명이 서명해야 출금되는 지갑입니다.
| 항목 | 바이낸스 | 바이비트 | 업비트 |
|---|---|---|---|
| 발생 | 2026-10-29 20:05 UTC(한국 10-30 05:05), 주요 유출 약 20분 | 2025-02-21 | 2025-11-27 04:42 KST 탐지 |
| 피해 | 약 63.6억~64억 달러(약 8.9조 원), 10개 체인 | 약 15억 달러(약 2.1조 원), ETH 40만 개 이상 | 445억 원(최초 540억 원으로 공지), 솔라나 계열 토큰 |
| 대상 지갑 | 출금용 핫월릿 | 이더리움 콜드월릿(Safe 멀티시그)에서 웜월릿으로 옮기던 중 | 솔라나 핫월릿 |
| 공격 주체 | FBI가 북한 TraderTraitor로 확인(10-31) | FBI가 북한 TraderTraitor로 지목(2025-02-26) | 당국이 라자루스 유력 검토, 최종 결론 미확인 |
| 동결·회수 | 약 24억~28억 달러 동결(Tether·Circle 등, 출처별 차이) | mETH 4,300만 달러, 2025-07 기준 8.68억 달러 이상 추적 불가 | 23억 원 |
| 거래소 대응 | 도난분의 90% 보전, 출금 재개 예고 | 대출·매수로 약 44.7만 ETH를 확보해 손실을 메움, 10% 현상금 | 회원 피해 전액 보전, 자산 콜드월릿 이전 |
세 사건의 경로를 원리 수준으로 그리면 아래와 같습니다.

블록체인은 누가 왜 서명했는지 묻지 않습니다. 공격자는 그 앞단의 일반 시스템을 노렸습니다. 개발자 PC나 서명 서버를 장악하면 서명할 내용을 바꿀 수 있고, 서명자는 평소처럼 승인합니다. 블록체인은 그 거래를 정상 거래로 받아들입니다.
Safe는 바이비트가 쓰던 멀티시그 지갑입니다. Sygnia 중간 보고에 따르면 공격자는 Safe 개발자 PC를 장악한 뒤, Safe의 AWS S3(클라우드 파일 저장소)에 악성 JavaScript를 올렸습니다. 이 코드는 바이비트 거래일 때만 서명 순간 내용을 바꿨습니다.
서명자는 실제 내용을 모른 채 서명했습니다. 이것을 블라인드 서명(서명할 내용을 직접 확인하지 못한 채 하는 서명)이라고 합니다. 탈취 약 2분 뒤에는 S3의 파일을 정상 파일로 되돌려 흔적을 지웠습니다.
바이낸스는 공식 원인을 아직 발표하지 않았습니다. 아래는 분석 회사 TRM과 Chainalysis의 분석입니다.
TRM은 여러 체인에 서명하는 핫월릿 서명 인프라가 장악됐을 가능성이 가장 크다고 봅니다.
업비트는 자체 점검에서 "개인키를 추론할 수 있는 취약점"을 찾아 고쳤다고 밝혔습니다. 다만 이 취약점과 해킹의 직접 연관은 밝히지 않았습니다. 공격 주체도 당국이 라자루스를 유력하게 검토했을 뿐 최종 결론은 확인되지 않았습니다(2026년 10월 말 기준).
탈취한 자산은 탈취 직후 수천 개 주소로 쪼개집니다. 스테이블코인은 발행사가 동결할 수 있어 가장 먼저 다른 자산으로 바뀝니다. 세탁 경로의 세부는 다루지 않습니다.
서명 화면과 서명 서버는 거래소에만 있는 것이 아닙니다. 결제 화면, 관리자 페이지, 승인 버튼이 있는 내부 도구도 같은 구조입니다(이 문장은 사고 사실이 아닌 일반적인 설명입니다). 아래 코드는 사고 회사의 코드가 아니라 같은 실수를 보여 주는 일반 예시입니다. 주소와 해시는 모두 가짜 값입니다.
위험한 모양입니다. 외부 CDN의 스크립트를 latest 주소로 불러오고, 무결성을 확인하지 않습니다. 그 파일이 바뀌면 서명 화면도 바뀝니다.
<script src="https://cdn.example.com/wallet-ui/latest/sign.js"></script>
<button onclick="onSign(tx)">
서명</button>
고친 모양입니다. 버전을 고정하고 SRI(Subresource Integrity, 파일 해시를 미리 적어 두고 다르면 실행을 거부하는 브라우저 기능) 값을 붙였습니다.
<script src="https://cdn.example.com/wallet-ui/2.4.1/sign.js"
integrity="sha384-FAKE0000AAAA"
crossorigin="anonymous"></script>
<button onclick="onSign(tx)">
서명</button>
버전을 올릴 때는 새 파일을 리뷰한 뒤 해시를 함께 바꿉니다. 프런트엔드 공급망은 거래소만의 문제가 아닙니다.
화면을 지켜도 서명 서버를 빼앗기면 소용이 없습니다. 위험한 모양은 요청이 오면 무엇이든 서명합니다.
def handle(tx):
# 요청이 오면 무엇이든 서명
return hsm.sign(tx)
고친 모양은 서명 전에 정책을 확인합니다. 허용한 주소, 금액 한도, 허용한 함수일 때만 서명하고, 나머지는 사람의 승인 대기열로 보냅니다.
ALLOWED_TO = {"0xFAKE00A1", "0xFAKE00B2"}
MAX_AMOUNT = 10_000
ALLOWED_CALLS = {"transfer"}
def handle(tx):
if (tx.to in ALLOWED_TO
and tx.amount <= MAX_AMOUNT
and tx.call in ALLOWED_CALLS):
return hsm.sign(tx)
# 그 밖의 요청은 사람이 승인
return queue_for_human(tx)
위임처럼 허용 목록에 없는 호출은 자동으로 서명되지 않습니다.
개발자 PC도 점검 대상입니다. 가짜 채용 제안과 코딩 과제로 들어오는 사회공학을 교육하고, 서명 인프라에 접근하는 기기는 따로 둡니다. 이 수법은 10편에서 자세히 봅니다.
이 사건들에는 과징금 같은 제재가 없습니다. 대신 동결과 회수가 시간 싸움이 됩니다.
탈취 규모는 해마다 커지고 있습니다.
| 연도 | 북한 탈취액 | 비고 |
|---|---|---|
| 2024 | 약 13.4억 달러 [추정] | 2025년 수치와 증가분으로 역산 |
| 2025 | 20.2억 달러(약 2.8조 원) | Chainalysis, 당시 역대 최대, 전체 해킹 피해의 64% |
| 2026(10월 말까지) | 약 75억 달러 이상 [추정] | Elliptic 9월 말 약 12억 + 바이낸스 63.6억, 공식 연간 집계 전 |
이 글은 투자 조언이나 법률 자문이 아닙니다.
오늘 본 사고의 원인은 대부분 서버와 코드의 기본기에서 막을 수 있는 것들이었습니다. 직접 손으로 막아 보고 싶다면 이런 강의도 있습니다.
백엔드 개발자를 위한 서버 보안 실무: 해킹 방어부터 정보유출 방지까지
수치는 2026년 10월 말 기준 공개 보도·발표입니다. 진행 중인 사건은 바뀔 수 있고, 이 글은 법률 자문이 아닙니다. 원인은 분석 회사 자료 기준이고 바이낸스 공식 원인은 미발표입니다. 원화는 1달러=1,400원 환산이며, 투자 조언이 아닙니다.
이전 글 AI가 바꾼 공격: 2026 금융권 연쇄 해킹과 AI 활용 해커
다음 글 코인 해킹 12년 연대기: 핫월릿에서 서명 경로까지
시리즈 전체 목록 해킹 사고 해부 전체 목록