

밸런서(Balancer)의 특이한 리퀴디티 풀 구조
안녕하세요 프랩입니다.
밸런서 TVL이 1B 정도 되는 대형급 DEX 임에도 25.11.03 해킹 공격을 당한 다소 충격적인 사례입니다.
대체 밸런스는 왜 당했으며
어떻게 당했는지 분석해 보겠습니다.
밸랜서의 중앙화 볼트 구조
입문자 분들은 DEX의 리퀴디티 구조 이해가 어려울 수 있습니다.

위 사진은 1위 DEX 유니스왑 캡쳐입니다. ETH/USDC 풀에 유저는 ETH, USDC 2개의 토큰을 공급하여 ETH/USDC 페어를 거래하는 사람들의 수수료를 받아 수익을 낼 수 있습니다. 따라서 페어 즉 2개의 토큰을 1:1의 가치로 공급하는게 일반적입니다.
하지만 리퀴디티 풀에 참여해보신 적 있으신 분들은 알겠지만 1:1로 토큰 숫자 맞추는게 은근히 매우 귀찮습니다.
따라서 이러한 불편한 UX를 없애고자 밸런서가 아무 비율로 막 넣어도 되는 리퀴디티 풀 모델을 만들었습니다.

심지어 2개의 토큰이 아닌 3개 토큰을 한번에 공급할 수 있는 풀도 있습니다.
따라서 밸런서는 일반 DEX의 표준을 따른 것이 아닌 독특하고 매우 편리한 혁신적인 모델을 제시하여 운영하고있었습니다.
밸런서에서는 아무 비율로 대충 편하게 리퀴디티 풀에 참여할 수 있습니다.
이 구조가 이번에 밸런서가 당한 이유의 핵심입니다.
혁신적인 구조가 만든 리스크
밸런서는 이러한 모델을 구현하기 위해 독튼한 볼트 구조를 설계하게 됩니다.
아무 비율로 받은 토큰들을 정상적으로 운영하기 위해서 모든 풀들의 토큰을 하나의 스마트컨트랙트로 모으는 중앙화 볼트를 만들게 됩니다. 그리고 리퀴디티 풀들에게 정상적인 수익 분배를 하기 위해 “내부장부”를 만듭니다.
그리고 공격자들은 아주 소량의 토큰을 내부장부로부터 호출하면 누락되는 버그 발견
따라서 소량의 토큰을 계속 호출하여 내부장부를 조작하여 자신의 밸런스를 올려버립니다. 실제 온체인에서는 그대로지만요. 그리고 조작된 내부장부를 근거로 판단하는 밸런스에서 계속해서 출금할 수 있게 됩니다.
요약
1/6
원래 전통적 유동성풀은 “정확한 비율로 넣어야만” 제대로 LP가 발행되었죠. 불편해서 Balancer는 사용자가 임의 비율로 넣어도 알아서 보정해주는 Vault 방식을 도입했습니다. 결과: UX는 좋아졌지만 중앙 Vault라는 단일 회계 허브가 생겼습니다.
2/6
Vault 구조 핵심: 모든 풀의 실제 토큰은 Vault가 보관하고, 풀들은 Vault의 internal balance(장부) 만 참조합니다. 즉 실제 자산(on-chain)과 내부 장부(internal)가 항상 일치해야 안전합니다.
3/6
문제는 여기서 나옵니다 — internal과 on-chain이 불일치하면 악용당할 수 있다는 점. 예시로 아주 단순화해서 보여드릴게요.
4/6 (예시)
초기 상태: Vault에 ETH 1.0, WBTC 1.0 (internal도 각각 1.0)
공격자가 소수점 단위로 반복 호출해 내부 장부만 1.0 → 2.0으로 조작(또는 on-chain만 1.0 → 0.9로 줄여도 동일 효과).
결과: 실제는 ETH 1.0인데, 장부는 2.0으로 인식되는 상태가 됨.
5/6 (공격화)
그 상태에서 공격자는 정상적인 ‘리딤/withdraw’ 호출을 합니다. 프로토콜은 장부를 근거로 지급 권한을 판단하기 때문에, 표면적으로는 “유저 출금”처럼 보이지만 실제 토큰이 공격자 지갑으로 빠져나갑니다. 여러 풀에서 반복하면 대량 탈취가 가능합니다.
6/6 (요점)
핵심: 업그레이드 권한 탈취가 아니라, “공개 API + 엣지케이스(반올림/검증 누락) → internal vs on-chain 불일치”를 악용한 것. UX 개선(비율 자유)은 했지만, 그 대가로 생긴 회계 복잡성이 이번 사고의 뿌리였습니다.
쉬운 요약
1️⃣
예전 디파이는 귀찮았음.
리퀴디티 풀에 예치하려면 ETH:BTC 1:1 비율 딱 맞춰야 했음.
비율 조금만 틀려도 실패 😵💫
2️⃣
그래서 밸랜서가 등장함.
“아무 비율로 넣어도 자동으로 맞춰드려요~”
UX 혁신을 위해 모든 풀을 하나의 Vault로 묶음.
3️⃣
이 Vault가 풀 자산을 전부 보관하고,
각 풀은 단지 “장부 기록(internal balance)”만 관리.
즉, Vault는 은행 금고, 풀은 통장 기록 역할.
4️⃣
문제는 바로 여기.
소수점 단위 송금을 반복하면,
금고랑 통장 기록이 어긋나는 버그가 있었던 거임.
5️⃣
공격자는 그걸 이용해서
“내 통장에 돈이 더 있는 것처럼” 장부를 조작.
그리고 정상적인 출금 절차로 금고에서 진짜 코인 인출💰
6️⃣
즉, 해킹이 아니라
UX 혁신의 부작용 + 반올림·검증 누락 버그.
리퀴디티를 자유롭게 만들려다 Vault 회계가 털린 셈.
7️⃣
한 줄 요약
편리함엔 항상 대가가 있다.
Balancer는 1:1 비율의 불편함을 없앴지만,
대신 “정확함”을 잃었다.
교훈
“새로운 실험적 모델보단, 오랜 시간 검증된 업계 표준에만 들어가자.”
디파이 정보 공유 오픈채팅(질문가능)
https://open.kakao.com/o/gEbOyUYg
더 많은 디파이 / 김프 정보글 보기
