하베스트 파이낸스(Harvest Finance) 플래시론(Flash Loan)공격

AMM의 가격 피드를 공략한 공격자

Myeonguk Han
Hexlant
6 min readOct 27, 2020

--

하베스트 파이낸스(Harvest Finance)는 올 하반기 디파(DeFi)이 붐과 함께 탄생한 디파이 이자농사(Yield Farming) 서비스입니다. 이자농사를 하기 위해 여러 단계를 걸쳐야 하는 어려움을 제거하고 ‘손쉬운 이자농사’의 키워드로 몸집을 키워갔습니다. 지난 22일 하베스트 파이낸스에 예치된 자산이 1조원을 돌파하면서 예치금액 순위 4위를 달성하였고, 성장세에 힘입어 거버넌스 토큰 FARM 가격도 상승했습니다.

하지만 이러한 영광은 오래 지속되지 못했습니다. 지난 24일(현지 시각) 암호화폐 전문 미디어 코인텔레그래프(Cointelegraph)는 하베스트 파이낸스의 익명 개발팀이 갖는 권한이 절대적이며, 그들은 ‘관리자 키’를 사용해 원하는 만큼 토큰을 발행, 이용자의 자금 탈취가 가능하다는 보도를 게재했습니다. 보도 게재 이후 하베스트 파이낸스의 중앙집중화 구조에 대해 우려를 표하기 시작했습니다.

위 사항에 대한 토론이 주말 내내 이어지는 도중, 26(현지 시각)일 하베스트 파이낸스는 트위터를 통해 해킹 당한 사실을 밝혔습니다. 해킹은 플래시론(Flash Loan)을 통해 고객 예치 자산 중 약 3.2%에 해당하는 3,380만 달러를 탈취당했습니다.

source : Harvest_finance Twitter
  • 플래시론(Flash Loan) / 플래시론 공격(Flash Loan Attack)

플래시론이란 1개의 이더리움 블록 생성 기간을 만기로 하여 무담보 대출을 실행해주는 서비스입니다. 대출받은 트랜잭션을 생성하고 블록에 기록되기 전 상환하는 방식이며, 상환하지 못한다면 컨트랙트가 자동으로 해당 트랜잭션을 롤백시킵니다.

플래시론 공격은 이러한 플래시론을 이용해서 이루어집니다. 담보없이 큰 자산을 대출받은 후 유동성이 부족한 디파이 서비스를 공략하여 가격 조작을 일으키고, 조작된 가격으로 상환하여 차익을 얻는 방식입니다. 플래시론 공격은 과거 bZx에서도 발생했으며, 와이언 파이낸스 창업자인 안드레크로녜(Andre Cronje)가 최근 출시한 게임 프로젝트 Eminence(ENM)에서도 발생했습니다.

  • 하베스트 파이낸스 플래시론(Flash Loan) 공격 과정

지금까지 발생한 플래시론 공격은 디파이 서비스의 특징들을 이용했습니다. 이번 하베스트의 플래시론 공격도 마찬가지입니다. 1) 예치된 자산 가치를 실시간으로 계산하여 이에 맞는 fAsset을 발행하고 상환한다는 점 2) 하베스트의 일부 볼트 자산이 Curve의 Y Pool에 저장되어 ‘Curve 가격 피드를 사용한다는 점’을 이용했습니다.

공격자는 Curve의 yUSDC와 yUSDT에 대규모 유동성을 공급하여 영구 손실을 통한 가격 조작을 일으켰습니다. 가격 조작 이후 하베스트 Vault에 자산을 예치하여 fAsset을 얻고, 조작한 가격을 정상 가격으로 되돌리면서 fAsset을 상환하는 형식의 차익 거래를 반복했습니다. 플래시론의 전 과정은 이더스캔을 통해 살펴볼 수 있습니다. 자세한 공격방식은 아래와 같습니다.

1) 공격자는 Uniswap v2 플래시론을 통해 18,308,555 USDT와 50,000,000 USDC를 공급받습니다.

2) 공격자는 공급받은 USDT 중 17,222,012 USDT를Curve의 Y pool을 통해 17,216,703 USDC로 교환합니다. Curve yUSDC 보유량 감소하면서 USDC의 가치가 상승합니다.

3) 공격자는 높아진 USDC 가격를 기반으로 하베스트 USDC Vault에 49,977,468 USDC를 예치하고 51,456,280 fUSDC를 획득합니다. 2)번 과정이 발생하기 전 Curve yUSDC의 가격피드에 따른 교환비율은 1 fUSDC : 0.980007 USDC 였지만, 가격 조작 후 USDC 가치가 상승하면서 1 fUSDC : 0.971260 USDC 의 비율로 5,100만 fUSDC를 획득합니다.

4) 공격자는 다시 Curve의 Y Pool을 통해 17,239,234 USDC를 17,230,747 USDT로 교환합니다. Curve yUSDC 보유량이 다시 공급되면서 정상 가격을 회복합니다.

5) 공격자는 3)번에서 획득한 51,546,280 fUSDC를 다시 상환합니다. 이때 4번 과정에서 USDC 가격이 회복되어 1 fUSD : 0.983298 USDC 비율로 50,596,877 USDC를 획득합니다. 따라서 공격자는 최초 플래시론 공격을 통해 619,408 USDC의 차익을 획득하게 됩니다.

  • 플래시론 공격 결과와 하베스트 파이낸스 현황

공격자는 2020년 10월 26일 오전 10시 53분(UTC+8)부터 USDC를 통한 플래시론 공격을 4분동안 17번 시도하였으며, 이후 USDT를 통한 플래시론 공격을 3분동안 13번 시도하였습니다. 이에 공격자는 10분 만에 총 1,300만 USDC와 1,100만 USDT를 탈취했고, 그 중 10% 규모의 자산을 하베스트 파이낸스 배포자에게 다시 전송했습니다. (최근 하베스트 파이낸스 사후 발표에서 총 피해액을 3,380만 달러로 정정했습니다.)

탈취된 자금은 renBTC로 출금된 후 비트코인으로 전환되었습니다. 이와 관련된 주소는 하베스트 파이낸스 트위터에 업로드되어 있습니다. 하베스트 파이낸스는 10억 달러 달하던 예치 자산이 해킹 사건 이후 6억 7,300만 달러 까지 하락했으며, 거버넌스 토큰인 FARM은 한 때 100달러 이하까지 하락했습니다.

Source : DeFiPulse
Source : Coinmarketcap.com

현재 하베스트 파이낸스은 스테이블 코인과 비트코인 예치를 비활성화 한 상태이며, 해커 검거와 관련된 바운티를 내 건 상태입니다.

--

--