Back to Blog

#2: 오일러 파이낸스 사건: 2023년 최대 규모의 해킹

Code Auditing
February 9, 2024
5 min read

2023년 3월 13일, 당사 시스템은 Euler Finance의 대출 풀이 플래시 론 공격을 받아 1억 9,700만 달러의 손실이 발생했음을 감지했습니다. 당사는 먼저 커뮤니티에 경고를 전달한 후, 근본 원인 파악에 도움이 되는 분석을 제공했습니다.

이번 사건의 근본 원인은 donateToReserves() 함수 내에 지급 불능 검사가 없었기 때문입니다. 구체적으로, 취약한 컨트랙트는 사용자가 자신의 포지션이 건전한지 여부를 확인하지 않고 담보를 프로토콜에 기부할 수 있는 기능을 제공했습니다. 더욱 심각한 것은, 이 불량 포지션을 처리하기 위해 프로토콜이 청산자에게 더 적은 부채를 지불하고 해당 포지션을 청산할 수 있도록 큰 할인을 제공했다는 점입니다. 공격자는 이 기능을 악용하여 대규모 포지션을 만들고 이를 지급 불능 상태로 만들었습니다. 그런 다음 할인된 가격으로 자신의 담보를 매입하여 이익을 얻을 수 있었습니다.

배경

Euler Finance 개요

Euler Finance는 이더리움 기반의 대출 프로토콜로, 사용자가 지정된 토큰을 빌려주거나 빌릴 수 있습니다. 대출자가 Euler의 유동성 풀에 예치하면, 그에 상응하는 양의 EToken(이자가 붙는 ERC20 토큰)이 발행되어 전송됩니다. 이 EToken은 예치한 기초 자산으로 상환할 수 있습니다.

반면, 유동성을 빌리는 차용자는 DToken을 받습니다. 이 DToken은 ERC20 호환 토큰으로, 보유자가 독립적으로 소각하는 것을 방지합니다. 구체적으로, 토큰을 누구에게나 전송할 수 있도록 허용하는 대신, 누구든지 가져갈 수 있지만 이를 수락하려면 승인이 필요합니다. 기초 자산 측면에서, 차용자는 대출에 대한 이자를 지불할 책임이 있으며, 이 이자의 일부는 프로토콜의 불량 채무를 충당하는 데 사용됩니다.

Euler Finance의 레버리지 차입(일명 셀프 차입)과 소프트 청산 메커니즘은 이번 공격의 원인을 더 잘 이해하는 데 도움이 되는 두 가지 핵심 개념입니다.

레버리지 차입

Euler Finance는 레버리지 차입 기능을 제공하여 사용자가 재귀적 차입 전략을 시뮬레이션할 수 있게 합니다. 간단히 말해, 사용자는 담보를 예치하고 EToken을 발행할 수 있으며, 이를 다시 담보로 사용하여 더 많은 EToken을 빌릴 수 있습니다. 컨트랙트는 또한 부채 토큰으로서 그에 상응하는 양의 dToken을 발행합니다. 사용자 포지션의 건전성은 EToken과 dToken의 가치를 기반으로 계산됩니다. Euler Finance의 문서에 따르면, 사용자는 최대 19배까지 레버리지를 활용할 수 있습니다. 레버리지 차입 기능은 이번 사건에서 중요한 역할을 했습니다. 이 기능의 도움 없이는 공격자가 이익을 얻을 수 없었을 것입니다. 레버리지 차입을 통해 공격자는 플래시 론으로 얻은 초기 자금의 약 11배에 달하는 포지션 규모를 키웠습니다.

소프트 청산

Euler Finance의 백서에 설명된 바와 같이, 소프트 청산 메커니즘은 Compound나 Aave와 같은 프로토콜에서 채택한 고정 계수 청산 방식에 제한받지 않고, 청산자가 청산 대상의 부채 상환을 유연하게 도울 수 있게 합니다. 소프트 청산이란 포지션의 건전성이 낮을수록 청산 가능한 담보 비율이 높아진다는 것을 의미하며, 이번 사건의 데이터에 따르면 불량 채무 발생 시 최대 75%까지 청산될 수 있습니다. 따라서 상당한 할인으로 청산된 담보는 공격자가 플래시 론을 상환하고 이익을 확보할 수 있게 해주었습니다.

취약점 분석

주요 취약점, 즉 지급 불능 검사의 부재는 donateToReserves() 함수 내에 존재하며, 이 함수는 사용자가 자신의 포지션에서 EToken을 프로토콜의 준비금으로 기부하는 데 사용됩니다. 일반 사용자의 경우, 이러한 행동을 수행할 인센티브나 동기가 일반적으로 없습니다. 실제로, 취약점은 donateToReserves() 함수가 사용자 포지션에서 EToken을 전송할 때 건전성 검사를 수행하지 않는다는 점에 있습니다. 이로 인해 공격자는 레버리지 차입을 통해 생성된 대규모 포지션에서 EToken을 직접 기부하여 포지션의 건전성을 100% 이하로 떨어뜨리고 불량 채무를 발생시킬 수 있었습니다.

설계에 따라 Euler Finance는 동적 청산 계수를 사용하여 포지션을 "소프트 청산"합니다. 간단히 말해, 포지션의 건전성이 낮을수록 해당 포지션 내 담보 중 청산될 수 있는 비율이 높아집니다. 불량 채무의 경우, 청산 비율은 포지션 내 담보의 최대 75%에 달할 수 있습니다(실제 공격 트랜잭션을 기준으로 계산). 결과적으로, 할인된 가격으로 청산된 상당한 양의 담보는 공격자가 플래시 론을 상환하고 이익을 얻을 수 있게 해주었습니다.

공격 분석

서로 다른 풀을 대상으로 하는 여러 공격 트랜잭션이 있습니다:

  • 0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d (DAI)
  • 0x71a908be0bef6174bccc3d493becdfd28395d8898e355d451cb52f7bac38617 (WBTC)
  • 0x62bd3d31a7b75c098ccf28bc4d4af8c4a191b4b9e451fab4232258079e8b18c4 (wstETH)
  • 0x465a6780145f1efe3ab52f94c006065575712d2003d83d85481f3d110ed13d9 (USDC)
  • 0x3097830e9921e4063d334acb82f6a79374f76f0b1a8f857e89b89bc58df1f311 (stETH)
  • 0x47ac3527d02e6b9631c77fad1cdee7bfa77a8a7bfd4880dccbda5146ace4088f (WETH)

공격 단계는 다음과 같습니다(첫 번째 공격 트랜잭션을 예시로):

  1. 공격자는 AAVE에서 플래시 론을 통해 3,000만 DAI를 빌렸습니다.
  2. 공격자는 2,000만 DAI를 예치하고 2,000만 eDAI를 돌려받았습니다.
  3. Euler Finance가 레버리지 차입 기능을 제공하므로, 공격자는 1억 9,500만 eDAI와 2억 dDAI를 발행할 수 있었습니다. 이제 공격자는 2억 1,500만 eDAI와 2억 dDAI를 보유합니다.
  4. 위 단계에 이어서, 1,000만 부채를 상환하여 공격자가 더 많은 eDAI를 발행할 수 있게 했습니다. 이제 공격자는 2억 1,500만 eDAI와 1억 9,000만 dDAI를 보유합니다.
  5. 3단계가 반복되었습니다. 이제 공격자는 4억 1,000만 eDAI와 3억 9,000만 dDAI를 보유합니다.
  6. 공격자는 donateToReserve 함수를 호출하여 1억 eDAI를 기부했습니다. 그러나 이 과정에서 공격자의 건전성 계수가 확인되지 않았습니다. 이 경우 포지션은 청산 가능한 상태(3억 1,000만 eDAI 대 3억 9,000만 dDAI)가 되어 이익을 얻을 기회가 생겼습니다.
  7. 공격자는 또 다른 주소 컨트랙트를 청산자(0xa0b3...)로 사용하여 포지션을 청산했습니다. 청산자(0xa0b3...)는 3억 1,000만 eDAI와 2억 5,900만 dDAI를 받았습니다.
  8. 공격자는 청산자의 포지션(0xa0b3...)에서 3,890만 eDAI를 소각하여 3,890만 DAI를 인출했습니다(지급 불능 검사로 인해 더 이상 인출 불가).
  9. 공격자는 플래시 론을 상환했습니다.

주요 공격 단계 2~7은 트랜잭션 추적에 표시되어 있습니다.

요약

이번 사건은 2023년 최대 규모의 해킹으로, Federico Jaime라는 20세 아르헨티나인이 1억 9,700만 달러라는 기록적인 금액을 탈취했으며, 그는 언론에 "복잡하고 때로는 혼란스러우며 심지어 모순적인 이야기"를 제공했습니다. 그럼에도 불구하고, "회수 가능한 모든 자금"은 이후 Euler Finance의 트레저리 주소로 반환되었습니다. 그러나 소액(약 20만 달러)이 "의도치 않게" 미국 재무부의 제재를 받은 북한 국가 지원 범죄 조직으로 알려진 라자루스 그룹에 전송되었습니다. 자세하고 흥미로운 이야기는 link2link2 링크를 참조하시기 바랍니다.

이번 사건의 근본 원인은 지급 불능 검사의 부재였으며, 이는 교훈으로 삼아야 합니다. 실제로 대출 프로토콜의 경우, 사용자 포지션에 영향을 미칠 수 있는 모든 절차에 포지션 건전성 검사를 구현해야 하는지 여부를 평가하는 것이 매우 중요합니다. 또한, 프로젝트 팀은 대출 프로토콜에서 대규모 청산을 능동적으로 모니터링하고, 이러한 이벤트를 신속하게 감지하고 대응하기 위한 효과적인 경보 시스템을 구축해야 합니다.

이 시리즈의 다른 기사 읽기:

Sign up for the latest updates
~$410만 손실: Taiko, SecondFi 익스플로잇 | BlockSec 위클리
Security Insights

~$410만 손실: Taiko, SecondFi 익스플로잇 | BlockSec 위클리

이 주간 블록체인 보안 리포트는 2026년 6월 22~28일 발생한 주요 사건 2건을 다루며, 이더리움과 카르다노에서 약 410만 달러의 피해가 확인됐습니다. Taiko 브릿지 공격은 노출된 SGX 서명 키와 디버그 엔클레이브를 거부하지 못한 증명 정책 결함을 이용해 악성 증명자를 등록하고 L2 상태 증명을 위조했습니다. SecondFi 지갑은 Ed25519 논스 도출 시 비밀 입력이 제거되는 결함으로 공개 트랜잭션 데이터만으로 개인 키 복구가 가능했습니다.

~$18M 손실: jaredFromSubway, Aztec 등 | BlockSec 위클리
Security Insights

~$18M 손실: jaredFromSubway, Aztec 등 | BlockSec 위클리

이 주간 블록체인 보안 보고서는 2026년 6월 15일~21일을 다루며, 이더리움과 BNB 체인에서 3건의 주요 사고가 발생해 약 $18.3M의 손실이 발생했습니다. jaredFromSubway 사건은 MEV 봇이 차익거래를 위해 신뢰할 수 없는 제3자 컨트랙트에 자산을 승인한 역방향 승인 공격으로, 가짜 래퍼 토큰과 스왑 풀을 이용해 약 $15M 손실이 발생했습니다. Aztec은 이스케이프 해치 ZK 회로의 제약 누락으로 공격자가 가짜 머클 트리로 온체인 검증을 통과했습니다.

Web3 컴패니언: 오픈소스 보안 에이전틱 지갑

Web3 컴패니언: 오픈소스 보안 에이전틱 지갑

BlockSec가 Web3 Companion을 오픈소스로 공개했습니다. 이 보안 중심의 에이전트 지갑은 자체 AI 에이전트를 신뢰하지 않는 방식으로 설계되었으며, 키 격리, 강력한 정책, Passkey를 활용해 온체인 자산을 보호합니다.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit