Back to Blog

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

Code Auditing
2024년 2월 9일
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만 달러)이 "의도치 않게" 미국 재무부의 제재를 받은 북한 국가 지원 범죄 조직으로 알려진 라자루스 그룹에 전송되었습니다. 자세하고 흥미로운 이야기는 link2 및 link2 링크를 참조하시기 바랍니다.

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

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

Sign up for the latest updates
약 557만 USD 손실: X100 Freezer·NEM 공격 | BlockSec 주간 보고서
Security Insights

약 557만 USD 손실: X100 Freezer·NEM 공격 | BlockSec 주간 보고서

이 주간 보고서는 2026년 10월 19일–2026년 10월 25일에 Ethereum과 BNB Chain에서 발생한 보안 사고 두 건을 다룹니다. 플래시론으로 자금을 조달해 X100 Freezer의 거버넌스를 장악한 사건과 BNB Chain의 NEM 토큰 유동성 풀에 영향을 미친 세금 정산 결함을 살펴봅니다. 보고서 범위에 포함된 추정 손실액은 X100의 대표 거래에서 발생한 약 475만 USD와 NEM 풀 사고에서 발생한 약 82.0만 USD를 합쳐 총 약 557만 USD입니다. 이 총액에는 별도로 보고된 후속 X100 자금 유출액은 포함되지 않습니다.

Autheo Network·UNCX 해킹으로 약 387만 USD 손실 | BlockSec 주간 소식
Security Insights

Autheo Network·UNCX 해킹으로 약 387만 USD 손실 | BlockSec 주간 소식

이 주간 보고서는 2026년 10월 12일–2026년 10월 18일 기간에 발생한 보안 사고 3건을 다루며, 총 추정 손실액은 약 387만 USD입니다. Autheo Network에서는 개인 키 침해로 약 176만 USD의 손실이 발생했고, Qubic Wallet에서는 취약한 시드 생성으로 약 130만 USD의 손실이 발생했습니다. UNCX Network의 Smart Token Vesting V2 계약에서는 Ethereum, BNB Chain, Base, Robinhood Chain에 걸쳐 약 80.7만 USD의 손실을 초래한 회계 오류가 발생했습니다. 중점적으로 다룬 UNCX 분석에서는 잘못된 지분 합산 계산이 서로 다른 토큰 대 지분 비율로 생성된 베스팅 트랜치를 혼합해 공유 풀에서 초과 인출을 가능하게 한 과정을 설명합니다.

약 54만 2천 달러 손실: MakerDaoBot 공격 | BlockSec 주간 소식
Security Insights

약 54만 2천 달러 손실: MakerDaoBot 공격 | BlockSec 주간 소식

2026/10/05~10/11 이더리움 보안 사고 1건의 추정 손실은 약 54.2만 달러입니다. 공격 컨트랙트가 악성 어댑터를 접근 제어가 없는 MakerDaoBot 함수에 전달하자 봇이 내부 MakerDAO 잔액 권한을 부여했습니다. 어댑터는 기존 ETH-A 경매 4건을 정산하고 담보 200 ETH-A를 WETH로 전환했습니다. 공격 컨트랙트는 이를 언래핑해 공격자에게 200 ETH를 보냈습니다.

Best Security Auditor for Web3

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

BlockSec Audit