DeFi 프로토콜은 스마트 컨트랙트 익스플로잇을 통해 수십억 달러를 잃었습니다. 시장 침체나 규제 조치 때문이 아니라, 개발자가 예상한 대로 작동하지 않는 코드가 누군가에 의해 의도적으로 왜곡되었기 때문입니다. 이러한 공격이 어떻게 작동하는지 이해하는 것은 단순한 학술적 연습이 아닙니다. DeFi를 사용한다면, 당신의 자금은 이러한 컨트랙트 내부에 있습니다.
Ethereum ETH$2,200ETH$2,20024h+0.46%7d+6.96%30d+8.02%1y+31.82%via Statility 생태계만 해도 2020년 DeFi가 확대되기 시작한 이후 익스플로잇을 통해 50억 달러 이상이 유출되었습니다. 일부는 정교한 제로데이 공격이었습니다. 많은 경우 감사자가 놓친 잘 알려진 취약점 패턴이거나 감사 완료 후 도입된 것들이었습니다. 계속해서 나타나는 공격 벡터들을 살펴보겠습니다.
흔한 용의자들
재진입(Reentrancy)
재진입은 가장 오래된 스마트 컨트랙트 취약점이며 여전히 작동합니다. 이 공격은 간단한 논리적 결함을 악용합니다. 컨트랙트가 자체 내부 잔액을 업데이트하기 전에 외부 주소로 자금을 보냅니다. 공격자의 컨트랙트가 자금을 받은 후, 즉시 원래 컨트랙트로 다시 호출하여 다시 인출합니다. 잔액이 아직 업데이트되지 않았으므로, 컨트랙트는 공격자가 여전히 자금을 보유하고 있다고 생각하고 더 많은 자금을 보냅니다.
가장 유명한 재진입 공격은 2016년의 DAO 해킹으로, 약 6천만 달러의 ETH를 유출시켰으며 궁극적으로 Ethereum Classic을 만든 Ethereum 하드포크로 이어졌습니다. 업계가 교훈을 얻었을 것이라고 생각할 수도 있습니다. 그렇지 않았습니다.
2023년 7월, Vyper 컴파일러의 재진입 취약점(개별 프로토콜의 코드가 아니라 프로그래밍 언어 자체)으로 인해 여러 Curve Finance 풀에서 익스플로잇이 발생하여 6천만 달러 이상이 유출되었습니다. 버그는 Vyper 버전 0.2.15부터 0.3.0까지 수년간 존재했습니다. 이것이 중요한 이유는 재진입이 프로토콜 개발자와 감사자가 살펴보지도 않는 스택의 계층에 숨어있을 수 있음을 보여주기 때문입니다.
오라클 조작
DeFi 프로토콜이 작동하려면 가격 데이터가 필요합니다. 대출 플랫폼은 담보 가치를 알아야 합니다. DEX는 슬리피지 보호를 위한 참조 가격이 필요합니다. 이러한 가격 데이터는 오라클에서 비롯되며, 오라클을 조작하면 프로토콜을 조작하는 것입니다.
2022년 10월의 Mango Markets 익스플로잇은 교과서적인 사례입니다. Avraham Eisenberg는 500만 달러를 사용하여 Mango의 자체 거래소에서 MNGO 토큰의 가격을 인위적으로 상승시켜 자신의 담보 포지션 가치를 부풀렸습니다. 그런 다음 그 부풀려진 담보에 대해 1억 1,400만 달러를 빌려 이를 인출했습니다. 기술적으로 프로토콜은 설계된 대로 정확히 작동했습니다. 오라클은 본 가격을 보고했습니다. 대출 로직은 규칙을 따랐습니다. 하지만 시스템은 오라클 가격이 실제 시장 가치를 반영한다고 가정했으며, 그 가정은 잘못되었습니다.
단일 온체인 소스, 특히 유동성이 낮은 토큰의 자체 거래 풀을 가격 데이터로 사용하는 프로토콜은 본질적으로 이에 취약합니다. Chainlink 및 기타 분산 오라클 네트워크는 여러 소스에서 데이터를 집계하여 이를 완화하기 위해 존재하지만, 모든 프로토콜이 이를 사용하는 것은 아니며, 집계된 피드도 극단적인 조건에서 조작될 수 있습니다.
플래시 론 공격
플래시 론은 단일 거래 내에서 빌려지고 상환해야 하는 담보가 없는 대출입니다. 상환이 일어나지 않으면, 전체 거래가 되돌려져 마치 발생하지 않은 것처럼 됩니다. 이것은 전통 금융에 동등한 것이 없는 진정으로 참신한 금융 기본 단위입니다.
또한 많은 익스플로잇을 경제적으로 실행 가능하게 만드는 도구입니다. 플래시 론 이전에, 5천만 달러 풀을 조작하고 싶은 공격자는 5천만 달러가 필요했습니다. 플래시 론을 사용하면, 가스 수수료와 플래시 론 프리미엄을 충당할 수 있는 ETH만 필요하며, 종종 단 몇백 달러입니다.
패턴이 수십 개의 익스플로잇에 걸쳐 반복됩니다. 플래시 론을 통해 막대한 양을 빌려서, 이를 사용하여 가격 오라클을 조작하거나 취약한 풀을 드레인하고, 대출을 상환한 후 이익을 유지합니다. 2020년의 bZx 공격은 이 패턴을 처음 시연한 것 중 하나였습니다. 2021년의 Pancake Bunny는 플래시 론 기반 가격 조작으로 4,500만 달러를 잃었습니다. 목록은 계속 늘어나고 있습니다.
플래시 론은 취약점을 만들지 않습니다. 이를 증폭시킵니다. 대규모 자본 이동에 취약한 모든 프로토콜은 이미 손상되었습니다. 플래시 론은 누구든지 대규모 자본이 될 수 있도록 만들었을 뿐, 무료로 말입니다.
감사가 실제로 하는 것(그리고 하지 않는 것)
스마트 컨트랙트 감사는 보통 특화된 보안 회사에서 수행하는 라인별 코드 검토로, 알려진 취약점 패턴, 논리 오류, 명세로부터의 편차를 찾습니다. 좋은 감사자는 또한 엣지 케이스를 테스트하고, 공격 시나리오를 시뮬레이션하며, 경제적 인센티브 구조를 검토합니다.
감사가 아닌 것은 다음과 같습니다. 보장. 감사된 프로토콜도 정기적으로 해킹됩니다. 이에 대한 여러 가지 이유가 있습니다.
첫째, 감사된 코드가 배포된 코드가 아닐 수 있습니다. 프로토콜은 감사 후 변경을 가하기도 하며, 때로는 상당한 변경을 한 후 재감사 없이 배포합니다. 둘째, 감사는 제한된 범위 내에서 컨트랙트를 독립적으로 또는 격리된 상태로 검토합니다. DeFi 프로토콜은 구성 가능하므로, 단일 감사가 예측할 수 없는 새로운 동작을 만드는 방식으로 다른 프로토콜과 상호 작용합니다. 대출 프로토콜은 그 자체로는 안전할 수 있지만, 누군가가 이와 예상치 못한 방식으로 상호 작용하는 새로운 풀을 만들 때 취약해질 수 있습니다.
셋째, 많은 익스플로잇은 기술적이기보다는 경제적입니다. 코드가 작성된 대로 작동하지만, 경제적 인센티브 구조에 공격자가 악용할 수 있는 결함이 있습니다. 순수 공학 배경을 가진 감사자는 이를 놓칠 수 있습니다. 이것이 일부 보안 회사가 이제 감사 팀에 경제학자와 메커니즘 설계자를 포함하는 이유입니다.
감사가 포착하는 것 대 놓치는 것
| 감사가 일반적으로 포착 | 감사가 종종 놓침 |
|---|---|
| 재진입 패턴 | 감사 후 코드 변경 |
| 정수 오버플로우/언더플로우 | 크로스 프로토콜 구성 가능성 위험 |
| 접근 제어 오류 | 경제적 또는 인센티브 설계 결함 |
| 알려진 취약점 패턴 | 새로운 공격 벡터 |
| 가스 최적화 문제 | 거버넌스 공격 표면 |
| 표준 준수 (ERC-20 등) | 인프라 계층 버그 (컴파일러, EVM) |
사후 분석 패턴
충분한 익스플로잇 사후 분석 후, 패턴이 나타납니다. 대부분의 익스플로잇은 새로운 것이 아닙니다. 이들은 취약점이 있던 프로토콜에 적용된 알려진 테마의 변형입니다.
확인되지 않은 가정이 가장 일반적인 근본 원인입니다. 개발자는 오라클 가격이 정확할 것이라고 가정했습니다. 의도된 컨트랙트만 특정 함수를 호출할 것이라고 가정했습니다. 아무도 단일 블록에서 시장을 40% 이상 움직일 만큼의 자본을 가지지 않을 것이라고 가정했습니다. 모든 가정은 잠재적 공격 표면입니다.
업그레이드 가능한 컨트랙트와 관리자 키는 또 다른 반복되는 주제입니다. 많은 프로토콜은 배포 후 컨트랙트 로직을 업그레이드할 수 있도록 하는 프록시 패턴을 사용합니다. 이것은 개발자가 버그를 빠르게 수정할 수 있도록 하는 안전 메커니즘으로 의도되었습니다. 하지만 이는 또한 손상된 관리자 키가 작동하는 컨트랙트를 악의적인 것으로 교체하는 데 사용될 수 있음을 의미합니다. 2022년 6억 2,500만 달러를 잃은 Ronin Bridge 해킹은 궁극적으로 스마트 컨트랙트 논리 결함이 아니라 관리자 키 침해였습니다.
주목할 만한 DeFi 익스플로잇
| 프로토콜 | 연도 | 손실액 | 공격 유형 |
|---|---|---|---|
| The DAO | 2016 | $60M | 재진입 |
| Ronin Bridge | 2022 | $625M | 검증자 키 침해 |
| Wormhole | 2022 | $320M | 서명 검증 우회 |
| Mango Markets | 2022 | $114M | 오라클 / 가격 조작 |
| Curve (Vyper) | 2023 | $60M | 컴파일러 수준 재진입 |
| Euler Finance | 2023 | $197M | 청산 논리 결함 |
자신을 보호하기
Solidity 개발자가 아닌 한 스마트 컨트랙트를 직접 감사할 수 없으며, 그렇다 해도 아마도 놓칠 것들이 있을 것입니다. 하지만 올바른 질문을 함으로써 위험을 더 명확하게 평가할 수 있습니다.
프로토콜이 감사되었는지, 누구에 의해, 얼마나 최근에 감사되었는지 확인하세요. 2년 전의 감사로 50번 업데이트된 코드베이스에 대해서는 많은 보증을 제공하지 않습니다. 독립적인 회사의 여러 감사가 하나보다 낫습니다. 버그 바운티 프로그램은 좋은 신호입니다. 왜냐하면 화이트햇 연구자가 공격자가 문제를 발견하기 전에 문제를 찾을 지속적인 인센티브를 만들기 때문입니다.
관리자 키를 누가 보유하고 있는지 이해하세요. 3명의 서명자가 있는 멀티시그가 컨트랙트를 업그레이드할 수 있는 능력을 제어한다면, 이는 의미 있는 중앙화 위험입니다. 변경이 적용되기 전에 사용자가 48시간 동안 빠져나갈 수 있는 타임락 뒤에 그 키들이 있다면, 그것은 더 나은 설계입니다.
포크에 주의하세요. 팀이 다른 프로토콜의 코드를 복사하고 새 버전을 출시할 때, 보안 영향을 완전히 이해하지 못하고 부분을 수정하는 경우가 많습니다. 최악의 익스플로잇 중 일부는 그렇지 않으면 안전한 프로토콜의 실행이 잘못된 포크에 타격을 입었습니다.
프로토콜 전반에 걸쳐 다양화하세요. 모든 법정화폐를 하나의 은행에 보관하지 않는 것과 같은 논리가 여기에도 적용됩니다. 사용 중인 프로토콜이 익스플로잇을 당하면, 포트폴리오의 일부로 제한된 노출은 생존 가능한 손실입니다. 집중은 그렇지 않습니다.
DeFi 보안은 개선되고 있습니다. 정식 검증 도구, 더 정교한 감사 관행, Uniswap 및 Aave 같은 전투 테스트를 거친 코드베이스가 잘 구축된 컨트랙트가 몇 년에 걸쳐 인시던트 없이 수십억 달러를 보호할 수 있음을 증명했습니다. 하지만 프론티어는 항상 혼란스럽고, 새로운 코드는 새로운 위험을 가집니다. 가장 높은 수익률을 제공하는 프로토콜은 종종 시간과 적대적 조건으로 가장 적게 테스트된 것들입니다. 이것은 우연이 아닙니다.
암호 플랫폼, 거래소, DeFi 앱을 찾고 있습니까? 우리의 큐레이션된 디렉토리를 둘러보세요: