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
~$135만 달러 손실: BarnBridge, DeFiTuna | BlockSec 주간 보고
Security Insights

~$135만 달러 손실: BarnBridge, DeFiTuna | BlockSec 주간 보고

이 주간 보고서는 2026년 7월 13일부터 19일까지 발생한 2건의 보안 사고를 다루며, 이더리움과 솔라나에서 총 약 135만 달러의 손실이 발생했습니다. 솔라나 대출 프로토콜 DeFiTuna은 포지션 가치가 0일 때 부채와 무관하게 건전한 것으로 처리되는 결함으로 약 57만 달러를 잃었습니다. BarnBridge는 더 이상 사용되지 않지만 활성 상태인 이더리움 거버넌스 시스템을 악용한 공격자가 악의적인 제안을 통과시켜 약 77만 6천 달러의 USDC를 탈취당했습니다.

~$800K 손실: Hinkal 이중 지불 사건 | BlockSec 위클리
Security Insights

~$800K 손실: Hinkal 이중 지불 사건 | BlockSec 위클리

이 주간 보안 보고서는 2026년 6월 29일~7월 5일 이더리움에서 발생한 약 80만 달러 손실의 주요 사고 1건을 다룹니다. Hinkal 실드 풀 프로토콜이 이중 지출 공격으로 탈취되었으며, 레거시 노트 형식의 결함을 악용해 단일 예치금에서 다수의 널리파이어를 도출한 것으로 추정됩니다. 회로 수준 취약점, 공격 흐름, 널리파이어 기반 프라이버시 프로토콜의 시사점을 분석합니다.

뉴스레터 - 2026년 6월
Security Insights

뉴스레터 - 2026년 6월

이 월간 보고서는 2026년 6월의 3대 보안 사고를 다루며, 총 확인 손실액은 약 2,200만 달러입니다. 정교한 허니팟 공격으로 미확인 토큰 허용량을 악용해 JaredFromSubway의 MEV 봇에서 약 1,500만 달러가 유출됐습니다. 두 레거시 Aztec 롤업 배포에서 증명 정산 경계 취약점으로 약 435만 달러가 손실됐습니다. SecondFi의 Ed25519 구현 결함으로 지갑 개인키가 노출되어 374개 지갑에서 약 240만 달러가 유출됐습니다. 세 사고 모두 표면상 온전해 보였지만 실제로는 적용되지 않은 보안 보장이라는 공통 패턴을 공유합니다.

Best Security Auditor for Web3

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

BlockSec Audit