※ 본 게시물은 'PLAINBIT' 재직 당시 작성한 블로그 글을 공유하는 것입니다.
원문 참고 : https://blog.plainbit.co.kr/euler-finance-flash-loan-attack/
※ 본 게시글의 암호화폐 주소 추적은 BIG의 암호화폐 추적 솔루션인 "QLUE"를 사용했습니다.
1. 필요한 배경 지식
- Flash Loan : 승인, 실행 및 모두 한 번의 거래로 상환되는 무담보 대출
- Euler Finance : 사용자가 다양한 암호화 자산을 대출하고 빌릴 수 있도록 설계된 이더리움 DeFi 렌딩(담보대출) 프로토콜
- eToken(담보 토큰), dToken(부채 토큰) : dToken 양이 eToken 양을 초과하면 청산이 시작
2. 사건 개요
2023년 03월 13일
- Euler Finance에 대한 flash loan 공격으로 DAI, USDC, wBTC, staked Ether(stETH)의 거래에서 약 2억 달러의 손실 발생
wstETH, stETH, wETH, wBTC란?
- wstETH(Wrapped stETH) : stETH를 wrapper에 예치하고 받은 토큰. Uniswap 및 MakerDAO를 포함한 DeFi 프로토콜과 쉽게 통합 가능
- stETH(Staked Ether) : 이더리움(ETH)을 리도(Lido)서비스에 맡기고 지급 받는 토큰. 이더리움 2.0 스테이킹의 단점을 개선하기 위해 출시
- wETH(Wrapped ETH) : DeFi 플랫폼에서 ETH를 자유롭게 다른 토큰들과 교환할 수 있도록 ERC-20 토큰화 시킨 이더리움(ETH)
- wBTC(Wrapped BTC) : 비트코인을 이더리움 환경에서 쓰기 위해 비트코인을 담보로 하는 스테이블 토큰의 일종.
2-1) 공격 관련
- 2023년 03월 13일 08:50:59 (UTC) DeFi 대출 프로토콜인 Euler Finance을 겨냥한 Flash Loan Attack 시작
- Euler Finance의 스마트 컨트랙트 중 donateToReserves() 함수의 취약점을 이용
- DAI($8.8 M), USDC($34.1 M), wBTC($18.9 M), stETH($137.1 M)의 거래에서 약 2억 달러 이상의 손실 발생
- 공격자는 탈취한 자금을 ETH와 DAI로 변환
- 자금은 Tornado Cash, Lazarus Group, 피해자 등의 주소로 나뉘어 전송
2-2) 원인
※ donateToReserves() 함수의 취약점
EToken.sol 파일의 donateToReserves() 함수에서 사용자의 부채가 담보보다 적은(eToken > dToken) 것을 확인하는 ‘checkLiquidity()’ 함수가 빠진 것을 볼 수 있다.
따라서 기부를 수행하는 계정에 대한 포지션 확인을 하지 않기 때문에, 사용자는 레버리지 예금의 일부를 자발적으로 포기해서 자신의 포지션을 불균형하게 만든 뒤, Euler 청산 프로토콜을 통해 자신의 포지션을 청산함으로써 이익을 획득할 수 있다.
Euler 청산 프로토콜
Euler 프로토콜에서 스스로 청산하면 비율 기반 청산 인센티브에 대한 규정으로 인해 부채를 할인
정상적인 함수의 경우 [그림 3]과 같이 함수가 동작하고 나서 checkLiquidity()를 호출해서 사용자의 포지션을 체크한다.
checkLiquidity() 함수는 RiskManager를 호출하고 callInternalModule() 함수에서 사용자의 eToken이 dToken 보다 많다는 것을 확인하고 보장한다.
2-3) 입장
- 2023년 03월 13일 공격 사실을 인지하고 트위터 공식 계정에서 언급
https://x.com/eulerfinance/status/1635218198042918918
https://x.com/eulerfinance/status/1635352413287636992
2-4) Euler 재단 측 대응
- 예금 및 취약한 기부 기능을 차단하는 eToken 모듈을 비활성화
- TRM Labs, Chainalysis 및 ETH 보안 커뮤니티와 협력 조사 및 자금 복구 작업을 위해 노력
- 미국 및 영국 법 집행 기관에 정보 공유
- 공격자를 식별하는 데 도움되는 정보 제공 시, 100만 달러의 보상금 발표
2-5) 공격자와 합의
- 공격자에게 탈취 자금을 환원한다면, 10%를 가져도 된다는 제안을 온 체인 메시지로 전송
- 공격자가 3월 18일 탈취금의 일부를 반환, 3월 20일부터 본격적인 합의 시작
- 회수 가능한 자금을 모두 회수
- 공격자에게 걸었던 100만 달러 현상금을 취소
3. Flash Loan Attack 과정 분석
- 탈취 자금 입금 주소
- 0xb66cd966670d962c227b3eaba30a872dbfb995db
- 0xb2698c2d99ad2c302a95a8db26b08d17a77cedd4
- 공격에 사용된 스마트 컨트랙트 주소
- 0xeBC29199C817Dc47BA12E3F86102564D640CBf99
- 0x036cec1a199234fc02f72d29e596a09440825f1c
본 게시글에서는 공격 과정에 대해 간략하게 작성했다. 스마트 컨트랙트 흐름에 대한 자세한 분석은 'Euler Finance Flash Loan 스마트 컨트랙트 상세 분석'에 작성했다.
‘첫 번째 스마트 컨트랙트(0xebc29199c817dc47ba12e3f86102564d640cbf99)’에서 한 번의 DAI 거래가 이루어졌고, ‘두 번째 스마트 컨트랙트(0x036cec1a199234fc02f72d29e596a09440825f1c)’에서 USDC, wBTC, stETH, wETH 거래와 두 번의 wstETH 거래가 이루어졌다. 공격자는 총 7회의 Flash Loan Attack으로 자금을 탈취했다.
2023년 3월 13일 오전 8시 50분 59초, 첫 번째 Flash Loan Attack (DAI)
- 1 : Aave의 Flash Loan으로 30,000,000 DAI를 대출한 후 공격을 위해 2개의 스마트 컨트랙트 0x583c21631c48d442b5c0e605d624f54a0b366c72(Violator), 0xa0b3ee897f233f385e5d61086c32685257d4f12b(Liquidator)를 이용
- 2,3,4 : Euler 프로토콜 계약에 2천만 DAI를 갚기로 하고, 1,956만 eDAI를 발급
- 5 : Euler 프로토콜은 예치금의 최대 10배까지 빌릴 수 있음, 1억 9,560만 eDAI를 발급
- 6 : 빌린 금액(eDAI)에 상응하는 2억 dDAI를 발급
- 7,8 : 1천만 DAI를 상환해서, 1천만 dDAI를 소멸
- 9,10 : 다시 예치금의 최대 10배인 1억 9,560만 eDAI와 2억 dDAI를 발급
- 11 : donateToReserves() 함수를 호출해서 부채 상환에 필요한 금액의 10배인 1억 eDAI를 기부
- 12,13 : Euler Protocol 내부 알고리즘에 의해 부채가 할인된 값, 청산 금액(dDAI)
- 14 : 13의 청산 수수료 2%에 해당하는 값
- 15 : 현재 남아있는 eDAI의 합
- 16 : 청산을 통해 사용자가 얻을 수익금 (DAI)
- 17 : DAI를 돌려받기 위해 지출한 담보 (eDAI)
- 18 : 청산 프로세스가 완료된 후 사용자의 수익금 전달 (38,904,507.35 DAI)
- 19 : Flash Loan 대출금의 이자 전송
- 20 : Flash Loan 대출금 및 수수료 상환 (30,027,000 DAI)
- 21 : Flash Loan 공격을 통해 획득한 차익 전송 (8,877,507.3484 DAI)
공격자가 사용한 Flash Loan Attack 과정은 모두 비슷한 프로세스로 진행되기 때문에, 첫 번째 Flash Loan Attack 과정을 이해했다면 다음 Flash Loan Attack 과정은 금방 이해할 수 있을 것이다.
이어지는 내용은 회사 블로그를 참고해주세요^^
'Blog > 외부 Blog' 카테고리의 다른 글
북한이 유포한 랜섬웨어에 사용된 것으로 확인된 비트코인 주소 추적 (0) | 2024.05.30 |
---|---|
Apollo X 거래소 해킹 공격자 주소 추적 (0) | 2024.05.30 |
Colonial Pipeline 랜섬웨어 공격자 주소 추적 (1) | 2024.05.30 |
암호화폐 추적 솔루션 'QLUE' 그래프 이해 (0) | 2024.05.30 |
비트코인 주소 추적을 위한 클러스터링과 휴리스틱 알고리즘 (0) | 2024.05.30 |