가이드보안
스마트 컨트랙트 해킹: 재진입·플래시론·MEV 등 주요 공격 정리
스마트 컨트랙트 해킹 유형을 재진입, 플래시론, 오라클 조작, 접근 제어, MEV까지 실제 사례와 손실, 취약점 점검 신호, 방지책과 함께 정리했습니다.
스마트 컨트랙트 해킹은 코드로 쓰인 규칙 사이의 아주 작은 틈을 공격자가 무기로 삼는 데서 시작됩니다. 스마트 컨트랙트는 코드로 정해진 규칙이지만, 재진입(reentrancy), 플래시론과 오라클 조작, 접근 제어 결함, MEV 기반 순서 조작, 비즈니스 로직 오류 같은 공격 유형이 2025년 온체인 탈취액을 34억 달러 넘게 끌어올린 사건 대부분의 배경에 있었습니다. 아래에서 공격 유형마다 작동 방식, 실제 피해 사례, 직접 확인할 수 있는 경고 신호를 정리합니다. 프로토콜에 첫 토큰을 넣기 전에 알아야 할 내용입니다.
스마트 컨트랙트는 왜 여전히 취약한가
세 가지 구조적 현실이 스마트 컨트랙트를 끊임없는 표적으로 만듭니다.
불변성은 양날의 검입니다. 코드를 몰래 고칠 수 없고, 업그레이드 가능한 프록시 설계는 위험을 업그레이드 키를 쥔 사람에게 옮길 뿐입니다.
트랜잭션은 블록 확정 전에 모두에게 공개됩니다. 대기 중인 트랜잭션은 멤풀을 지켜보는 누구에게나 내가 어떤 가격에 사려는지 알려 줍니다.
가치가 큰 시스템은 전문 공격자를 끌어들입니다. 이들은 프로토콜을 금융 기계처럼 역공학하고 취약점으로 이익을 내는 일을 업으로 삼습니다.
2025년 최대 단일 사건은 한 거래소가 서명 작업 흐름의 보안 허점 때문에 약 15억 달러를 잃은 일이었습니다. 이 금액은 그해 공격 열 건을 합친 것과 맞먹었고, 스마트 컨트랙트 보안이 이제 솔리디티 코드만이 아니라 운영 보안과 키 관리까지 뜻한다는 점을 보여 줬습니다.
COINOTAG의 시각: 공격은 따로 오지 않고 겹쳐 온다
오늘날의 디파이 프로토콜은 브리지, 레이어2 환경, 가격 피드와 떼려야 뗄 수 없습니다. 그 자체로는 흠잡을 데 없는 프로토콜도 믿고 쓰는 오라클이 빌린 자본으로 움직일 수 있다면 무너질 수 있습니다. 컨트랙트를 평가할 때는 그 코드 줄만이 아니라 맞닿아 있는 모든 표면을 봐야 합니다.
피해가 가장 큰 다섯 가지 공격 유형
아래 표는 가장 자주, 가장 크게 피해를 낸 다섯 가지 공격을 실제 손실과 함께 비교합니다.
| 공격 유형 | 핵심 취약점 | 실제 손실 | 1차 방어 |
|---|---|---|---|
| 재진입(Reentrancy) | 상태 갱신 전에 제어권을 넘김 | 약 360만 ETH(The DAO) | 확인-효과-상호작용 + 재진입 잠금 |
| 플래시론 + 오라클 조작 | 순간적이고 움직일 수 있는 가격을 신뢰 | 약 4,500만 달러(PancakeBunny) | 시간 가중 가격 + 편차 한도 |
| 접근 제어 결함 | 권한 함수가 보호 없이 노출 | 15만 ETH 이상(Parity 멀티시그) | 멀티시그 + 타임락 + 역할 분리 |
| 오라클·데이터 피드 오류 | 단일·지연·얇은 풀 가격 출처 | 약 1억 1,600만 달러(Mango Markets) | 다중 출처 피드 + 최신성 확인 |
| MEV·샌드위치 공격 | 예측 가능한 트랜잭션 순서 | 약 11억 달러(2022~2024, 이더리움) | 슬리피지 관리 + 비공개 주문 흐름 |
재진입: 제어권을 너무 일찍 넘기는 실수
재진입 공격은 컨트랙트가 자기 장부를 갱신하기 전에 가치를 보내거나 외부 주소를 호출할 때 일어납니다. 공격자의 컨트랙트는 그 틈에 피해 컨트랙트를 다시 호출해 잔액이 줄어들기 전에 자금을 빼냅니다.
The DAO 사건과 오늘의 의미
The DAO 해킹은 정확히 이 순서 오류를 파고들었습니다. 자금은 이체됐는데 내부 잔액은 끝내 줄지 않았습니다. 반복된 출금 루프로 약 360만 ETH가 빠져나갔고, 뒤이은 논쟁적인 하드포크가 생태계의 방향을 바꿨습니다. 같은 오류는 지금도 프로토콜 업그레이드, ERC-777 토큰 훅, 컨트랙트 간 콜백에서 다시 나타납니다.
올바른 순서 세 단계
- 사용자 잔액을 확인한다.
- 사용자 잔액을 갱신한다.
- 자금은 마지막에 보낸다.
이 순서를 확인-효과-상호작용 패턴이라고 부릅니다. 재진입 잠금은 민감한 상태 변경이 끝나기 전에 같은 함수가 다시 실행되지 않게 막습니다. 출금 방식(풀 페이먼트)은 사용자가 민감한 변경 도중이 아니라 별도 단계에서 자금을 청구하게 합니다.
플래시론과 오라클 조작
플래시론은 같은 트랜잭션 안에서 갚는다는 조건으로 담보 없이 큰돈을 빌리는 장치입니다. 플래시론 자체는 취약점이 아닙니다. 허술한 가격·담보·유동성 가정을 드러내는 돋보기일 뿐입니다.
공격 흐름은 늘 비슷합니다. 크게 빌린다 → 가격이나 잔액을 잠시 비튼다 → 그 일시적 상태를 믿는 계산을 실행시킨다 → 가치를 빼낸다 → 대출을 갚는다 → 차익을 챙긴다.
숫자로 보는 예시
어떤 대출 프로토콜이 100,000 USDC와 100 TOKEN이 든 얇은 유동성 풀 하나에서 현물 가격을 읽는다고 해 봅시다. 이 구조는 TOKEN 1개당 1,000 USDC라는 가격을 뜻합니다.
공격자는 다음 단계를 밟습니다.
- 플래시론으로 900,000 USDC를 빌립니다.
- 이 자본을 풀에 넣어 트랜잭션이 진행되는 동안 온체인 가격을 TOKEN당 약 4,000 USDC로 밀어 올립니다.
- 소량의 TOKEN을 담보로 넣고, 프로토콜은 이를 실제 가치의 네 배로 평가합니다.
- 부풀려진 담보로 과도하게 빌립니다.
- TOKEN을 되팔아 풀을 원상태로 돌리고 플래시론을 갚은 뒤 차액을 가져갑니다.
PancakeBunny는 이런 공격으로 약 4,500만 달러를, Harvest Finance는 비슷한 가격 결정 취약점으로 약 2,400만 달러를 잃었습니다.
지금도 유효한 방어책
- 단일 현물 읽기 대신 시간 가중 평균 가격.
- 여러 출처의 중앙값 계산.
- 블록 안의 과도한 움직임을 거부하는 편차 검사.
- 서킷 브레이커와 일시 중지 조건.
- 얇은 풀 하나가 현실을 정하지 못하도록 하는 유동성 깊이 요건.
사용자라면 얕은 풀에서 단일 현물 가격을 읽는 프로토콜은 고위험으로 보고 슬리피지 설정을 빡빡하게 유지하십시오.
오라클·데이터 피드 오류
오라클 공격은 프로토콜이 잘못됐거나 싸게 움직일 수 있는 입력값에 기대게 만듭니다. 블록체인 오라클이 한 곳에서만 데이터를 가져온다면 그것이 곧 단일 장애점입니다.
조작은 보통 가격을 싸게 흔들 수 있는 저유동성 풀에서 시작해 플래시론 자본으로 규모를 키웁니다. Mango Markets가 교과서적인 사례입니다. 왜곡된 담보 가격 때문에 약 1억 1,600만 달러가 빠져나갔고, Vee Finance도 단일 오라클에 의존하다 약 3,400만 달러를 잃었습니다.
방어는 이 오류의 정반대입니다. 출처를 합치고, 중앙값을 쓰고, 최신성을 강제하고, 이상값을 걸러 내십시오.
접근 제어 결함
접근 제어는 누가 컨트랙트를 업그레이드하고, 출금을 멈추고, 토큰을 발행하고, 금고 자금을 옮길지 정합니다. 이 층이 무너지면 공격자는 권한 함수를 호출하기만 하면 되고 다른 모든 통제를 건너뜁니다.
가장 흔한 실수는 다음과 같습니다.
- 권한 확인 누락.
- 잘못된 함수 가시성 설정.
- 너무 많은 주소가 민감한 작업을 실행할 수 있음.
- 인증에 msg.sender 대신 tx.origin 사용(중간 컨트랙트를 통한 피싱의 문을 엶).
Parity 멀티시그 해킹으로 15만 ETH 이상이 빠져나갔고, 별개의 Parity 버그는 약 2억 8,000만 달러 상당의 ETH를 동결시켰습니다. 튼튼한 구조는 핵심 작업에 멀티시그 지갑을, 위험한 변경을 늦추는 타임락을, 어떤 키도 제안과 실행을 함께 할 수 없는 역할 분리를 결합합니다.
사용자라면 즉시 업그레이드가 가능한 구조를 경고 신호로 보고, 멀티시그와 타임락 보호가 없는 프로토콜과는 거리를 두십시오.
MEV, 선행 매매, 샌드위치 공격
최대 추출 가능 가치(MEV)는 트랜잭션 순서를 통해 얻는 이익입니다. 서처가 대기 중인 트랜잭션을 보고 블록 안의 위치에 영향을 줄 수 있으면 그 가치를 내 비용으로 가져가고, 이는 더 나쁜 체결 가격과 숨은 슬리피지로 나타납니다.
주요 MEV 유형:
- 삽입(Insertion): 내 트랜잭션 앞에 다른 트랜잭션이 끼어듭니다.
- 밀어내기(Displacement): 내 트랜잭션이 블록 뒤쪽으로 밀립니다.
- 억제(Suppression): 블록 포함이 늦춰집니다.
- 샌드위치: 내 트랜잭션 앞에서 사고 뒤에서 팔아 그 차이를 공격자가 가져갑니다.
규제 당국 제출 자료에 인용된 이더리움 투명성 데이터에 따르면 2022년 9월부터 2024년 6월 초까지 약 526,207 ETH의 추출 가치가 발생했으며, 이는 약 11억 달러에 해당합니다.
프로토콜 차원의 해법은 커밋-리빌 방식, 일괄 경매, MEV를 고려한 오라클 읽기입니다. 사용자라면 슬리피지 한도를 엄격히 정하고, 얕은 풀을 피하고, 가능하면 MEV 보호 트랜잭션 릴레이를 거치십시오.
비즈니스 로직과 경제 설계 오류
로직 오류는 문법이 아니라 규칙 자체가 틀린 데서 생깁니다. 컨트랙트가 완벽하게 돌아가도 인센티브 구조, 거버넌스, 가격 움직임에 대해 안전하지 않은 가정을 했다면 허점이 생깁니다.
거버넌스 장악이 대표적입니다. Beanstalk 사건에서 공격자는 충분한 거버넌스 권한을 손에 넣었고, 컨트랙트가 설계된 그대로 작동하는 가운데 약 1억 8,200만 달러를 빼 갔습니다. DAO 거버넌스를 의도적으로 악용한 Mango Markets 사례는 왜곡된 경제 입력값이 어떻게 포지션을 실제보다 안전해 보이게 만드는지 보여 줬습니다.
대응: 가정을 적대적인 주장처럼 시험하고, 불변 조건을 강제하고, 시나리오와 카오스 시뮬레이션을 돌리고, 위험 규모가 크다면 표적 형식 검증을 적용하십시오. 즉시 반영되고 정족수가 낮은 거버넌스 변경이 가능한 프로토콜은 더 꼼꼼히 봐야 합니다.
꼭 알아야 할 고급 취약점
어떤 약점은 강력한 기능 속에 숨어 있습니다.
delegatecall의 위험
delegatecall은 다른 컨트랙트의 코드를 내 저장소를 대상으로 실행합니다. 라이브러리와 업그레이드를 가능하게 하는 기능이지만, 저장소 배치가 맞지 않거나 믿을 수 없는 대상 코드라면 핵심 상태를 덮어쓸 수 있습니다. 신뢰할 수 있는 코드에만 delegatecall을 쓰고 저장소 배치는 검토를 거쳐 고정하십시오.
서명 재사용(리플레이)
유효한 서명을 다른 맥락에서 다시 쓰면 공격자가 승인된 작업을 반복할 수 있습니다. 2022년 한 복구 과정에서 서명 재사용 공격으로 옵티미즘 토큰 약 1,500만 개가 탈취됐습니다. 이를 막으려면 모든 서명을 논스, 만료 시간, EIP-712 도메인 분리로 묶으십시오. 개념적으로 리플레이 공격과 연결됩니다.
강제로 보내지는 이더
컨트랙트는 payable 함수가 없어도 ETH를 받을 수 있습니다. 컨트랙트 잔액을 내부 상태의 증거로 쓰지 말고, 회계는 반드시 별도로 추적하십시오.
정수 오버플로
솔리디티 0.8이 검사된 산술 연산을 도입하면서 위험은 줄었지만, 오래된 포크에는 여전히 남아 있습니다. 과거 언더플로 하나로 866 ETH가 빠져나간 적이 있습니다.
서비스 거부
끝이 정해지지 않은 목록을 반복하는 함수는 블록 가스 한도를 넘겨 영구적으로 작동하지 않을 수 있고, 그러면 자금이 잠깁니다. 범위가 정해진 작업과 푸시 대신 풀(pull) 패턴을 쓰십시오.
스마트 컨트랙트 해킹 사례: 2025년 대형 사건 돌아보기
| 사건 | 추정 손실 | 핵심 메커니즘 |
|---|---|---|
| 거래소 서명 해킹 | 약 15억 달러 | 승인·키 작업 흐름 보안 침해 |
| Cetus Protocol | 약 2억 2,300만 달러 | 집중 유동성 수학 악용 |
| Balancer V2 스테이블 풀 | 약 9,500만 달러 | 정밀도·반올림 회계의 경계 조건 |
| UPCX | 약 7,000만 달러 | ProxyAdmin을 통한 권한 키의 악성 업그레이드 |
| GMX V1 | 약 4,000만 달러 | 재진입 중심의 상태 전이 |
패턴이 뚜렷합니다. 집중 유동성 로직, 반올림 정밀도, 권한 키 통제가 이제 고전적인 재진입 오류와 나란히 서 있습니다. 2025년의 가장 큰 손실은 순수한 코드 오류가 아니라 여러 시스템이 엮인 구조의 운영상 약점에서 나왔습니다.
위험과 함정: 보안 작업을 계획할 때
- 감사는 위험을 줄일 뿐 없애지 못합니다. 거버넌스와 비즈니스 로직 오류가 얽힌 대형 해킹의 상당수는 감사를 받은 코드가 쓰인 그대로 작동하는 중에 일어났습니다.
- 핵심 로직, 의존성, 권한, 새로운 업그레이드 경로를 바꿨다면 다시 감사를 받으십시오.
- 배포 후 모니터링, 일시 중지 장치, 공개 제보나 버그 바운티 프로그램이 없으면 출시 뒤에는 눈을 감은 것과 같습니다.
- 보호되지 않은 업그레이드 키 하나가 다른 모든 통제를 무력화할 수 있습니다. 2025년이 이를 거듭 증명했습니다.
스마트 컨트랙트 해킹 방지를 위한 실전 보안 작업 흐름
보안은 더 이상 감사라는 단발성 이벤트가 아닙니다. 실제 손실 대부분은 코드가 실제 사용자와 실제 유동성을 만날 때 생기므로, 보안 작업은 배포 전에 시작해 출시 후에도 이어져야 합니다.
서로 다른 실패 유형을 잡아내는 테스트 방법
- 정적 분석(Slither): 흔한 위험 패턴을 빠르게 표시합니다.
- 기호 실행(Mythril): 수많은 실행 경로를 탐색합니다.
- 퍼징(Echidna, Foundry): 적대적인 입력값을 자동으로 만듭니다.
- 수동 검토: 도구가 이해하지 못하는 거버넌스·경제 가정을 확인합니다.
- 표적 형식 검증(Certora): 반드시 참이어야 하는 소수의 속성을 증명합니다.
더 깊은 프로토콜 점검과 도구 비교는 스마트 컨트랙트 감사 방법과 블록체인 보안 감사 가이드에서 볼 수 있습니다.
60초 안에 확인할 수 있는 경고 신호
- 담보나 청산이 얇은 풀의 현물 가격에 의존한다.
- 예비 피드나 타당성 검사가 없는 단일 오라클을 쓴다.
- 관리자가 타임락 없는 프록시로 즉시 업그레이드할 수 있다.
- 금고나 업그레이드 권한에 멀티시그가 없다.
- 무한 발행 경로나 취약한 페그 장치를 가진 토크노믹스 설계다.
'예상 밖' 해킹 대부분은 돌이켜 보면 전혀 예상 밖이 아닙니다. 이 패턴들을 익히고, 경고 신호를 가볍게 넘기지 말고, 모든 프로토콜을 여러 부품으로 이뤄진 기계로 보십시오. 공격자에게 필요한 것은 헐거운 나사 하나뿐입니다. 자산을 지키기 위한 더 넓은 점검 목록이 필요하다면 암호화폐 보안 가이드를 참고하십시오.
이더리움 생태계나 비트코인 주변 디파이 인프라를 쓰는 모든 사용자에게 이 내용은 투자 조언이 아니라 기본적인 보안 상식입니다.
자주 묻는 질문
가장 흔한 스마트 컨트랙트 해킹 유형은 무엇인가요?
재진입과 오라클 기반 조작이 가장 자주 악용되는 범주입니다. 재진입은 자금을 보내기 전에 잔액을 갱신하지 않는 컨트랙트를 노리고, 오라클 공격은 프로토콜에 잘못되거나 조작된 가격을 넣습니다. 두 유형 모두 The DAO와 Mango Markets를 포함한 역대 최대급 디파이 손실을 낳았습니다.
플래시론 자체가 취약점인가요?
아닙니다. 플래시론은 같은 트랜잭션 안에서 갚는다는 조건으로 담보 없이 빌리는 장치입니다. 진짜 문제는 프로토콜이 단일 현물 가격이나 얇은 풀 유동성을 믿는 데 있고, 플래시론은 그 허술한 가정을 악용하는 데 필요한 값싼 자본을 제공할 뿐입니다.
일반 사용자가 스마트 컨트랙트 취약점을 알아챌 수 있나요?
다음 경고 신호를 확인하십시오. 단일 오라클 의존, 타임락 없는 즉시 관리자 업그레이드, 금고 기능의 멀티시그 부재, 얕은 유동성 풀에서 읽는 가격입니다. 대출 한도가 지나치게 넉넉하거나 무한 발행 경로가 있는 토크노믹스도 자금을 넣기 전에 멈춰 볼 이유가 됩니다.
감사를 받은 스마트 컨트랙트는 안전한가요?
감사는 위험을 줄이지만 없애지는 못합니다. 거버넌스와 비즈니스 로직 오류가 얽힌 대형 해킹의 상당수가 쓰인 그대로 작동한 감사 완료 코드에서 일어났습니다. 감사는 모니터링, 일시 중지 장치, 버그 바운티까지 포함하는 더 넓은 보안 과정의 한 층으로 보십시오.
MEV는 무엇이고 사용자에게 어떤 영향을 주나요?
최대 추출 가능 가치(MEV)는 블록 안의 트랜잭션 순서를 통해 얻는 이익입니다. 사용자에게는 선행 매매와 샌드위치 공격으로 나타나, 거래가 더 나쁜 가격에 체결되고 숨은 손실이 생깁니다. 엄격한 슬리피지 한도와 MEV 보호 트랜잭션 릴레이가 이 숨은 비용을 크게 줄여 줍니다.

