돈 놓고 돈 먹기: Flash Loan Attack

김인근
CURG
Published in
10 min readJun 19, 2021

김인근 | CURG | ingeun92@naver.com

최근 DeFi가 주목을 받고 그에 따른 TVL(Total Value Locked, 해당 DeFi 서비스에 묶여있는 총 금액)도 전체적으로 증가하고 있다. 이렇게 곳간에 곡물이 계속 늘어나면 이를 노리고 들어오는 좀도둑들이 활개를 치는 법이다. DeFi 시장도 마찬가지이다. 최근 이러한 DeFi 서비스들의 허점을 노리고 공격자들이 거의 없다시피한 리스크를 가진 Flash Loan Attack을 통해 DeFi 서비스들을 공격하여 이 서비스들을 이용하는 고객들의 피해를 발생시키고 있다.

그렇다면 여기서 공격자들이 사용하는 Flash Loan Attack이란 무엇이고 발생한 사례는 어떤 것이 있는지 살펴보도록 하자.

Flash Loan Attack?

https://hackingdistributed.com/2020/03/11/flash-loans/

Flash Loan Attack이란, Flash Loan의 특징을 이용하여 시장에 혼란을 일으켜 여기서 나오는 차익 혹은 부가적인 이익을 얻는 공격 방법을 일컫는다.

Flash Loan의 특징을 이용하여 공격하는 것이기 때문에 우선 Flash Loan을 먼저 알아야 Flash Loan Attack에 대해 이해할 수 있을 것이다. Flash Loan은 DeFi 프로토콜에서 새롭게 나온 비담보 대출 서비스이다. 여기서 가장 주목해야 할 점은 비담보 대출이라는 것이다.

기존의 모든 대출 서비스는 대출을 제공하는 쪽에서 리스크를 줄이기 위해 어느정도의 담보를 놓고 대출을 제공했다. 그러나 Flash Loan에서는 대출 제공자에게 담보를 제공하지 않아도 된다. 그 이유는 블록체인의 특성상 돈을 빌리고 돈을 갚는 일련의 과정이 한 트랜잭션 내에 존재할 수 있기 때문이다. 한마디로 돈을 빌려주는 것과 돈을 갚는 것이 한 번에 이루어진다는 것이다. 내 오른쪽 주머니에서 만원을 친구에게 빌려줬는데 이미 내 왼쪽 주머니에 만원이 다시 들어와 있는 꼴인 것이다. 상황이 이러한데 굳이 담보를 놓을 필요가 없는 것이다.

Flash Loan의 사용자는 이러한 특성을 사용하여 담보가 없이 대출을 하고 이 대출을 통해 이익을 취하면 현재 사용자가 가지고 있는 것이 없더라도 무에서 유를 창조하는 듯한 이익을 얻을 수 있는 것이다.

그러나 세상에는 선의의 사용자만 있는 것이 아니다. 공격자들은 Flash Loan의 이러한 특징을 이용하여 담보 없이 매우 많은 양의 재화를 대출하고 이것으로 시장 상황(가격 등)을 쉽게 조작하여 다른 사용자들에 비해 부당한 이익을 취하는 것이다. 사실상 매우 큰 돈을 이용해서 주식시장에서 주가조작을 하고 이를 통해 이익을 얻는 것과 다를 바가 없다. 아 물론 현실에서는 이런 큰 돈을 마련하려면 엄청난 리스크를 짊어져야 하지만 Flash Loan에는 리스크가 없다는 것이 다르다.

Flash Loan Attack이 어떠한 것인지 간단하게 살펴보았지만 사실 아직 감이 잘 오지 않을 것이다. 아래의 사례들을 살펴보면서 Flash Loan Attack에 대해 좀 더 자세히 살펴보고 이런 공격을 기획한 공격자에 대한 무시무시함과 천재스러움에서 나오는 경외감을 동시에 느껴보도록 하자.

Flash Loan Attack 사례

1. Ethereum

가장 많은 DeFi 서비스들을 보유하고 있는 이더리움에서 Flash Loan Attack의 사례가 발생했다. 날짜로는 2020년 2월 15일 경 1차 Flash Loan Attack이 감행되었다.

(이 공격에 대해 정리를 잘 해놓으신 미디엄 글을 참고했습니다.)

1.1. First Attack

0xb5c8bd9430b6cc87a0e2fe110ece6bf527fa4f170a4bc8cd032f768fc5219838

[FIg 1] Flash Loan First Attack in Ethereum

1차 공격의 트랜잭션은 다음과 같은 순서로 이루어진다. 공격이 이루어지기 직전에는 wrapping된 ETH와 BTC 간의 교환비율은 약 38.5 ETH/wBTC 였다.

  1. 먼저 dYdX로부터 10,000 ETH를 빌린다.
  2. 5,500 ETH는 Compound에 보내 이것을 담보로 이용하여 112 wBTC를 빌린다. 현재 교환비율은 약 38.5 ETH/wBTC이므로 약 4,312 ETH만큼의 wBTC를 빌리게 된다.
  3. 남은 4,500 ETH에서 1,300 ETH는 bZx의 Fulcrum에서 5배의 레버리지를 통해 5,637 ETH만큼의 숏 포지션(5,637 ETH를 wBTC로 교환)을 잡는다. 이걸 통해 이더리움의 가치를 떨어뜨리고 그와 동시에 wBTC의 가치를 펌핑시킨다.
  4. 3번의 결과로 KyberSwap에서 5,637 ETH → 51 wBTC로 교환되며 5배 이더리움 숏 스왑이 이루어진다. 이 때의 교환비율은 110 ETH/wBTC로 이더리움의 덤핑 전 38.5 ETH/wBTC보다 이더리움의 가치를 덤핑시키고 wBTC의 가치를 펌핑시키는 결과를 발생시켰다.
  5. 2번의 Compound에서 빌린 112 wBTC를 6871 ETH로 교환한다. 이 단계에서 공격자가 4번에서 조작한 교환비율을 이용하여 이익을 취하게 되는데, 4번의 이더리움 덤핑을 통해 110 ETH/wBTC까지 떨어진 이더의 가치를 역으로 이용한다. 즉, 5,500 ETH → 112 wBTC → 6,871 ETH가 되는 것이다.
  6. 1번에서 빌린 10,000 ETH를 갚고 차익을 취한다.

이러한 일련의 과정은 [Fig 1]에서 보이는 것처럼 하나의 트랜잭션 안에 담겨서 수행되었다. 따라서 이 과정이 순차적으로 진행되지만 독립적인 트랜잭션이 아니기 때문에 만약 공격이 실패했다고 하더라도 공격자는 일정량의 가스 수수료만 지불할 뿐 다른 리스크가 없다는 것이다. 결국 위의 First Attack으로 공격자는 약 1,193 ETH(환차익 71 ETH + 담보금 5,500 ETH — 실제 wBTC 구매금 4,312 ETH)의 이익을 얻었다고 한다.

1.2. Second Attack

0x762881b07feb63c436dee38edd4ff1f7a74c33091e534af56c9f7d49b5ecac15

1차 공격 후 3일 뒤, 2월 18일에 2차 Flash Loan Attack이 발생한다.

[Fig 2] Flash Loan Second Attack in Ethereum

2차 공격은 다음과 같은 순서로 진행되었다.

  1. bZx로부터 7,500 ETH를 대출한다.
  2. 1번에서 빌린 이더 중 3,518 ETH를 sUSD로 교환한다. 여기서 sUSD는 1달러 스테이블 코인으로 $1 = 1sUSD이다.
  3. Kyber에 900 ETH를 가지고 sUSD를 주문한다. 이 때, sUSD의 보통 가격인 1달러보다 2.5배나 높은 2.5달러 정도의 가치로 sUSD를 사들인다.
  4. Synthetix에서 6,000 ETH를 이용해서 sUSD를 사들인다. 여기까지 공격자는 약 1,099,841 sUSD를 확보하게 된다.
  5. bZx에서 1,099,841 sUSD를 담보로 ETH를 대출한다. bZx는 sUSD와 ETH의 교환 비율을 Kyber에 의존하고 있는 Oracle 구조를 가지고 있었는데, 3번의 결과로 sUSD의 가치가 높아져 있었기 때문에 원래 가치대로 였다면 4,080 ETH를 대출해야 맞는 거지만 6,796 ETH를 대출 받을 수 있을 정도로 Kyber의 교환비율이 망가져있었고 그에 따라 공격자는 bZx에서 2,716 ETH만큼의 이익을 볼 수 있었다.
  6. 1번에서 빌린 7,500 ETH를 갚고 나머지 차익인 2,716 ETH를 이익으로 취한다.

두 번째 공격 또한 [Fig 2]에서 보이는 것처럼 하나의 트랜잭션 안에 담겨서 수행되었다. 그렇기 때문에 이 공격도 일정량의 가스 수수료 빼고는 리스크가 전혀 없는 공격이었다.

2. Binance Smart Chain

이더리움에 이어 두 번째로 많은 서비스와 어그리게이터를 가진 BSC에서도 Flash Loan Attack이 간간히 발생하고 있다.

Pancake Bunny Twitter

최근에 핫했던 공격으로는 Pancake Bunny에서 일어난 Flash Loan Attack이 있다.

0x897c2de73dd55d7701e1b69ffb3a17b0f4801ced88b0c75fe1551c5fcce6a979

[Fig 3] Pancake Bunny Flash Loan Attack in Binance Smart Chain

공격은 아래의 순서로 진행되었다.

  1. 공격자는 PancakeSwap을 통해 엄청난 양의 BNB를 빌려서 확보한다.
  2. 이 BNB를 가지고 USDT/BNB 및 BUNNY/BNB의 스왑 교환비율을 조작하여 조작된 교환비율을 통해 막대한 양의 BUNNY를 얻어낸다.
  3. 이렇게 얻은 BUNNY를 바로 시장에 덤핑시켜 BUNNY의 가격은 95%의 하락되고 약 $50 million의 돈이 공격자에게 흘러들어갔다.

그러나 Pancake Bunny에 감행된 Flash Loan Attack은 공격자가 벌어간 금액보다 BUNNY 시장에 큰 혼란을 야기하여 $110 million의 BUNNY 시가총액이 날아가는 결과를 초래했다.

결론

기존 금융권의 CeFi에서는 상상할 수 없던 여러 기발한 서비스들과 금융 상품들이 DeFi 생태계에서 나오고 있다. 특히, 나오고 있는 금융 상품들이 블록체인이라는 플랫폼을 통해 프로그래밍된 것이다보니 위에서 설명했던 Flash Loan Attack 같은 공격 방식이 악명을 떨치고 있다. 현재로서는 이 같은 공격을 막기 위해서는 프로그래밍 단에서 미리 방지하고 막는 수 밖에 없다. 그러나 언젠가는 이러한 공격을 모두 방어하는 때가 올 것이고 그렇게 되면 무담보 대출이라는 획기적인 금융 상품을 통해 정말 다양한 활용이 가능할 것이다.

오른쪽 손에서 동전을 던졌는데 왼쪽 손에 이미 던진 동전이 들어와 있는 마술 같은 일이 현재 우리 눈 앞에서 펼쳐지고 있다. 필자도 이렇게 마술처럼 빠르게 변화하는 블록체인 생태계에 발맞추어 끊임없이 공부를 해야겠다는 생각을 하면서 이만 글을 마쳐보도록 하겠다.

--

--