DeFi

8 min read

디파이 프로토콜은 소스 코드로 작성한 규약에 따라 동작하므로 이에 대한 보안 취약점이 존재할 경우, 해킹의 위험이 있다. bZx, harvest, Ousd 등 여러 프로토콜들에서 디파이 해킹 사건들이 플래시론을 이용하여 진행이 되었는데, 플래시론이 무엇인지 알아보자. 플래시론은 디파이가 블록체인을 이용하기 때문에 발생하는 기존의 금융 서비스와 다른 대표적인 부분이다.

플래시론이란

디파이의 랜딩 프로토콜에서 대출이 일어나는 과정은 스마트 컨트랙트 코드를 통해 블록체인에 기록된다. 블록체인의 상태값을 변경 시키는 것을 트랜잭션이라고 하며, 트랜잭션은 순차적으로 블록에 쌓여 담기게 된다.

플래시론은

  1. 담보를 설정하고 대출을 받고 (borrow)
  2. 차익거래, 청산 등 다양한 작업을 진행 (action)
  3. 대출을 상환 (repay)

하는 3가지 과정을 모두 하나의 트랜잭션으로 처리하는 방법이다.

이더리움 기반의 랜딩 프로토콜인 Aave에서 처음 제공한 플래시론 기능은 dydx, uniswap 등의 프로토콜에서도 지원된다. 플래시론 트랜잭션을 이용하기 위해서는 일반 트랜잭션보다 조금 더 많은 수수료만을 지불하면 되므로 이를 무담보 대출이라 부르기도 한다. 만약에 플래시론 사용자가 마지막 단계인 상환을 제대로 하지 않는다면 트랜잭션 자체를 무효로 처리하므로 디파이 프로토콜 입장에서는 손해를 보지 않는다.

디파이의 Price Feed와 Oracle 문제

디파이는 스마트 컨트랙트 코드를 기반으로 블록체인 위에서 동작하므로 거래소의 코인 가격과 같은 블록체인 밖의 데이터에 대해서는 접근할 수 있는 방법이 없다. 랜딩 프로토콜에서는 담보물로 잡은 코인의 가치를 평가하기 위해서 가격 정보는 필수적인데 이를 위해 코인 가격 데이터를 블록체인에 직접 기록하기도 하고, 다른 Dex의 교환비를 참조하거나 체인링크와 같은 솔루션을 사용하기도 한다. 디파이 프로토콜에서 가격 정보를 알려주는 기능을 price feed라 하며, 블록체인 외부의 데이터를 안으로 들여오고 반대로 내보내는 것을 oracle 이라고 한다.

실제로 2020년 초에 이더리움 가격이 급락했을때, 트랜잭션을 발생시킬때 드는 수수료인 가스비는 높아서 이더리움을 담보로 잡고 스테이블 코인 DAI를 빌려주는 랜딩 프로토콜인 MakerDAO의 price feed에 가격 기록이 제대로 되지 않은 문제가 있었고, 이 때문에 담보물의 가치를 낮게 평가해 연쇄 청산이 일어난 사건이 있었다.

Dex의 교환비는 어떻게 정해지는가?

플래시론 공격은 여러 디파이 프로토콜의 특성을 조합하여 일어난 공격이기 때문에 이를 이해하기 위해서는 탈중앙화 거래소인 Dex에 대해서도 알아 볼 필요가 있다. 그렇다면 OOOSwap으로 불리는 Dex에서 내가 넣은 코인을 다른 코인으로 바꿔줄 때 두 코인 간의 교환비율은 어떻게 정해지는 걸까?

앞선 글에서 디파이 프로토콜들은 AMM이라 불리는 자동화된 시장 조성자가 존재한다고 하였는데 Dex의 경우  프로토콜별로 조금씩 다르기는 하지만 대부분이 CPMM(Constant Product Market Makers)을 기반으로 동작한다. CPMM은 우리가 잘 알고 있는 x*y=k 함수를 의미하며, 여기서 x와 y는 유동성풀의 교환대상이 되는 코인 X와 코인 Y의 수량을 의미한다. 즉 교환하고자 하는 코인 2개의 수량의 곱이 일정한 상수 K를 유지하게 되어있으므로 코인의 가격은 코인 수량에 반비례하게 된다. (교환하고자 하는 코인의 수량이 많을수록 더 적은 수량의 코인을 교환 받는다.)

CPMM을 이용함으로써 발생하는 장점은 무한대의 유동성을 가진다는 점이다. 오더북 기반의 중앙화된 거래소에서는 매도 호가가 없다면 내가 구매를 하고 싶어도 코인을 살 수 없는 경우가 발생하지만, Dex의 경우 유동성 풀이 존재하기만 한다면 항상 구매가 가능하다. 하지만 이에 반대 효과로 교환하고자 하는 코인의 수량이 많을수록 더 많은 슬리지피가 발생하게 되는 단점이 있다.

플래시론을 이용해서 오라클을 어떻게 공격했나?

디파이에서 오라클의 중요성과 CPMM의 특성을 이해한채로 다시 플래시론 얘기로 돌아와보자. 플래시론 공격은 레버리지를 극대화하여 많은 금액을 프로토콜에 입금을 하고, 프로토콜에 연결된 프라이스 피드 데이터가 순간적으로 크게 변동하도록 악의적으로 조작하여 많은 돈을 탈취하는 수법이다. Harvest의 해킹 사례를 예로 들자면, 해커들은 Harvest가 Curve라는 스테이블코인들의 Dex에서 가격정보를 가져온다는 점을 이용하여 순간적으로 Curve의 교환비를 조작했다. Harvest에 대한 플래시론 공격은 Uniswap의 플래시론 기능을 이용하여 다음과 같은 순서로 진행되었다.

1) borrow

  • Dex 프로토콜인 Uniswap에서 많은 양의 스테이블코인(USDT)을 빌림

2) action

  • 스테이블코인 Dex인 Curve 프로토콜의 USDT-USDC 유동성풀에서 USDT를 USDC로 교환
  • CPMM에 따라 반대쪽 페어인 USDC의 가치가 상승
  • 이자농사를 위한 자산운용 프로토콜 Harvest에 USDC를 예치하고 예치 증표인 fUSDC를 받음
  • price feed인 Curve의 USDC의 가격이 높아졌기 때문에 실제 USDC 가치보다 많은 양의 fUSDC를 받음
  • 지갑에 존재하던 여분의 USDC를 Curve에서 다시 USDT로 교환
  • Curve의 USDT-USDC 유동성풀의 교환비는 다시 정상화됨
  • Harvest에서 fUSDC를 상환하고 USDC 인출
  • 이 과정에서 정상화된 USDC 교환비(낮아진 USDC가격)로 다시 USDC 수령

3) repay

  • Uniswap에 USDT 상환 및 플래시론 수수료 지급

해결책

플래시론 공격을 방지하기 위해서 디파이 프로토콜들은 트랜잭션 하나에 대해서는 가격 정보가 변하지 않게끔 보안 체계를 갖춰야 할 필요가 있다. 그래서 Uniswap의 경우 TWAP(Time-Weighted Average Price)을 이용해서 price feed를 업데이트 방법을 사용하고 있으며, 체인링크에서는 특정 데이터 소스만을 참조하는게 아니라 CoinGecko, Amberdata, BraveNewCoin 등 다양한 데이터 제공자들을 참고하여 price feed를 제공한다.

많은 사람들이 디파이에서 일어난 해킹 사건이 플래시론 때문이라고 하는데, 플래시론이 유일하게 역할을 하는 부분이 있다면 무담보 대출이 가능하게 함으로써 누구든 자금이 넉넉한 사람으로 만들어 준다는 것뿐이다. 디파이 프로토콜의 가격 조작을 통한 해킹 사건은 대부분은 자금이 넉넉한 사람이라면 누구라도 저지를 수 있다.

Brant Chae

Brant Chae

Read more posts by this author.