과거 DEX 해킹 사례들을 살펴보며 실제로 어떤 취약점들이 있었는지, 그리고 어떤 교훈을 얻을 수 있는지 정리해봤습니다. 이를 통해 이론적 지식과 실제 보안 위험 사이의 간극을 이해할 수 있다고 생각합니다.
7.1 Bancor 사건 (June 2020)
요약
2020년 6월, Bancor는 새로 배포된 스마트 컨트랙트에서 치명적 취약점을 발견했고, 이를 방지하기 위해 내부적으로 (화이트햇 방식으로) 자금 이동을 시도함. 이 과정에서 프론트러너 등에 의해 약 $100k~$150k 규모의 자금이 실질적으로 이동하거나 손실된 것으로 보고됨.
취약점/원인(요지)
취약한 컨트랙트 로직과 배포 타이밍, 그리고 관련 승인(allowance)/권한 처리의 문제로 인해 공격자가 아닌 제3자가 이득을 본 사례가 존재.
피해/대응
유출 규모에 대한 보도는 다소 차이가 있으나, 사건은 Bancor 팀이 빠르게 대응하여 추가 피해를 줄이려 한 점이 특징.
교훈(요약)
컨트랙트 배포 전 검증(특히 사용자 승인·권한 관련 로직) 강화
긴급 대응 절차(화이트햇 이동 포함)와 그에 수반되는 프론트러닝 위험 고려
7.2 dYdX 사건 (Nov 2021 — Deposit Proxy)
요약
2021년 11월 말에 dYdX는 deposit proxy(입금 변환/프록시) 컨트랙트에서 취약점을 발견했고, 포스트모템을 공개하며 사용자 자금을 보호하기 위한 조치와 보상/환불 절차를 안내함.
취약점/원인(요지)
이전 버전에서 사용되던 컨트랙트를 기반으로 도입된 로직이 L2/프록시 환경에서 예상치 못한 입력을 처리할 수 있는 여지를 남겼음(예: 로우레벨 call 처리 등). dYdX는 이 취약점으로 인해 위험 가능성이 있었던 자금을 확인하고 보호 조치를 취함.
피해/대응
공식 포스트모템에 따르면 즉시 대규모 탈취는 발생하지 않았고, dYdX는 가스 비용 환불·버그 리포터 보상·영향받은 사용자에 대한 안내를 수행함. 일부 보도는 관련 보험기금 등을 겨냥한 후속 사건(또는 별도 사건)으로 약 $9M 규모의 문제를 다루기도 함.
교훈(요약)
레거시 컨트랙트나 재사용된 코드의 동작을 새로운 환경(L2, 프록시 등)에서 다시 검증할 것
빠른 포스트모템 공개와 사용자 보호 절차의 표준화
7.3 Curve Finance 사건 (30 July 2023)
요약
2023년 7월 30일경, Curve와 Curve 기반 풀들 중 일부가 Vyper 언어 및 특정 컴파일러/버전 연관 문제로 인해 공격을 받아 수천만 달러 규모의 손실이 발생함(여러 보고에서 약 $60M~$70M 규모 보도).
취약점/원인(요지)
Vyper의 특정 버전에서 재진입 방지 장치가 의도대로 동작하지 않는 구현/컴파일 문제로 인해 공격자가 복수의 풀을 연쇄적으로 악용할 수 있었음.
피해/대응
여러 프로젝트와 풀들이 손실을 봤고, Curve 측과 커뮤니티는 피해 복구 및 보상(예: CRV 할당 제안 등), 관련 컨트랙트 버전·컴파일러 사용 지침의 재검토를 진행함.
교훈(요약)
사용 언어(Vyper 등) 및 컴파일러의 알려진 버전 이슈에 대한 지속적 모니터링
다중 풀 상호작용 시나리오의 정교한 테스트(통합 테스트 포함)
사건 발생 시 신속한 온체인/오프체인 커뮤니케이션과 보상 정책
8. 라우팅 컨트랙트(Router): 설계·위험·권장 패턴
라우터는 사용자의 거래를 가장 좋은 경로로 안전하게 처리해주는 핵심 부분이라고 생각합니다. 이 섹션에서는 라우터의 역할, 주요 위험 요소, 그리고 안전한 구현을 위한 권장 패턴을 살펴 보았습니다.
8.1 역할 재정리
경로 최적화(멀티홉/스플릿)
슬리피지/데드라인 검사
토큰 수취·전달 오케스트레이션
가스·UX 고려한 경로 우선순위 결정
8.2 위험 포인트(설계부실 시)
경로·amount 정보의 과도한 온체인 노출 → MEV 표적화 증가
fee-on-transfer 등 비표준 토큰 미대응
멀티홉 원자성 미보장
per-tx limit 미설정
8.3 권장 구현 패턴 (2025년 기준)
deadlines와 amountOutMin 강제
nonReentrant 보호 (OpenZeppelin 최신 버전 활용)
call() 기반 안전한 토큰 전송 (deprecated된 transfer()/send() 대신)
실제 수령량 확인 후 다음 홉 계산 (EIP-1153 transient storage 활용)
오프체인 가격 오라클 통합 (온체인 getAmountsOut 대신)
per-tx maxImpact 숫자화(예: 0.5% of pool liquidity):
maxImpact = 0.005 \\times poolLiquidity
최신 보안 패턴 (2025년):
EIP-2771 메타 트랜잭션 지원
Foundry 테스트 프레임워크 활용
EIP-4844 blob 트랜잭션 고려
Uniswap V4 hooks 시스템 호환성
8.4 라우팅 알고리즘(권장) - 2025년 업데이트
오프체인 후보 경로 생성: 길이 ≤3, 피벗 토큰 제한(WETH/USDC 등)
각 후보 경로 시뮬: Uniswap V4 quoteExactInputSingle 또는 1inch V5 API 활용
netGain 계산으로 순위 결정:
netGain = amountOut - gasCostInToken
큰 주문→split heuristic(등분 또는 convex solve 근사)
최신 추가사항:
EIP-4844 blob 트랜잭션을 통한 배치 처리
Uniswap V4 hooks를 활용한 동적 수수료 최적화
MEV 보호를 위한 private mempool 통합
8.5 UX 권장 (2025년 기준)
예상 amount + slippage 확률(시뮬 결과 기반) 노출
private tx 옵션 안내(Flashbots, mev-boost, SUAVE)
large order warning modal
최신 UX 개선사항:
EIP-4844 blob 트랜잭션을 통한 저비용 배치 거래
Uniswap V4 hooks 기반 커스터마이징된 거래 경험
실시간 MEV 보호 상태 표시
다중 체인 브릿지 통합 인터페이스
8.6 실제 서비스 사례 (2025년 9월 기준)
라우팅 컨트랙트 활용 프로젝트:
1inch Network: 다중 DEX 애그리게이터로 복잡한 라우팅 알고리즘을 통해 최적 경로 제공
Paraswap: 20+ DEX 통합으로 효율적인 라우팅 서비스 제공
Matcha (0x Protocol): 0x Protocol 기반의 DEX 애그리게이터
Uniswap V4: hooks 시스템과 통합된 라우팅 최적화
Kyber Network: 동적 AMM과 라우팅 컨트랙트 결합
주요 특징:
평균 15-30% 가스 비용 절감
MEV 보호 기능 내장
실시간 가격 비교 및 최적화
8.7 실제 구현 전 준비사항
오프체인에서 진행하는 라우팅 알고리즘 최적화
여러 풀의 걸친 스왑을 하나의 트랜잭션에서 실행하지 못했을 때 유연하게 처리하는 방법
그 외 사용자 경험을 증대시킬 방법 찾기
어그리게이터까지 구현할 시 그래프 탐색인 벨만-포트와 함께 동작하는 경우의 수 고려 ?
분할실행, 보상트랜잭션 패턴 이해하기
9. 싱글톤(Singleton) 아키텍처: 동기·장단점·검증 요구
싱글톤 아키텍처는 모든 풀을 하나의 컨트랙트에서 관리하는 혁신적인 접근법이라고 생각합니다. 가스 효율성과 감사 비용 절약이라는 장점과 단일 실패 지점이라는 위험 사이의 트레이드오프를 살펴보았습니다.
9.1 개념
하나의 컨트랙트로 모든 풀 로직을 처리하고, 풀별 상태는 storage(맵핑)로 분리.
9.2 장점
가스 절감(코드 재사용)
배포·감사 비용 절감(코드 1회 감사로 전체 커버)
훅/플러그인으로 풀별 정책 적용 가능
9.3 위험
단일 실패 지점(SPoF) — 버그시 전 풀 노출
hook 악용 가능(검증 없이 등록되면)
복잡한 storage 인덱싱으로 인한 실수 위험
9.4 검증 요구사항
형식검증(formal verification) 권장
hook 등록 프로세스(심사 + timelock)
권한 분리: 운영자 emergency stop은 최소화, 멀티시그+timelock
9.5 실제 서비스 사례 (2025년 9월 기준)
싱글톤 아키텍처 활용 프로젝트:
Uniswap V4: 모든 풀을 단일 컨트랙트에서 관리, 풀 생성 비용 99.99% 절감
Balancer V3: Weighted Pool, Stable Pool, Linear Pool을 싱글톤으로 통합 관리
Curve Finance: 모든 스테이블코인 풀을 단일 컨트랙트에서 관리
SushiSwap Trident: 다양한 풀 유형을 싱글톤 프레임워크로 통합
Velodrome V2: Optimism 기반 싱글톤 AMM으로 가스 효율성 극대화
주요 성과:
풀 생성 비용: $50,000+ → $5 이하 (99.99% 절감)
가스 비용: 평균 40-60% 절감
감사 비용: 개별 풀 대비 80% 절감
배포 시간: 수분 → 수초 단축
9.6 실제 구현 전 준비사항
단일장애 지점과 유저경험사이의 고민
버그 발생시 모든 프로토콜이 위험에 노출됨
부분 수정이 불가능해 프록시 컨트랙트를 써도 인덱스 문제(스토리지 문제) 발생 가능
내부 상태관리의 복잡함 (컨트랙트에 풀을 어느정도 둘 것인가?)
테스트의 어려윰
높은 결합도
보안을 위한 준비
10. MEV, 프론트런, 백런: 정의·영향·완화
MEV(Maximal Extractable Value)는 블록체인에서 발생하는 새로운 형태의 경제적 현상이라고 생각합니다. 이 섹션에서는 MEV의 다양한 형태와 DEX에 미치는 영향, 그리고 이를 완화하기 위한 방안들을 살펴보았습니다.
10.1 정의 요약
MEV: 블록 프로듀서가 트랜잭션 순서/포함을 조작하여 추출할 수 있는 최대 가치 (운영 중 현상)
프론트런: 유저 tx 앞에 거래를 넣어 가격을 유리하게 조작 (운영 중 현상)
백런: 유저 tx 직후 생긴 기회를 잡아 차익을 얻음 (운영 중 현상)
샌드위치: 앞+뒤로 끼워 차익 확보 (운영 중 현상)
10.2 공격 메커니즘 (구체적 예시)
프론트런 (Front-running) 예시
시나리오: 사용자가 100 ETH → USDC 스왑을 mempool에 제출
Mempool 분석: MEV 봇이 사용자의 대량 스왑을 감지
가격 조작: 봇이 먼저 50 ETH를 매수하여 ETH 가격을 $2,000 → $2,100으로 상승