HashKey 조이신: DeFi 경제 공격의 일반적인 패턴 심층 분석

HashKeyResearch
2021-03-11 11:00:09
수집
DeFi 경제 공격의 위험은 완전히 제거할 수 없으며, 제약 조건을 추가하여 차익 거래 공간을 공격자의 기대값보다 훨씬 작게 만드는 것은 탐구할 가치가 있는 방법이다.

본 문서는 HashKey Research에 발표되었으며, 원문 제목: 《DeFi 경제 공격의 일반 패턴 분석》, 저자: 조일신

2020년 이후, 이더리움 DeFi 생태계에서 플래시 론을 이용한 대규모 공격 사건이 여러 차례 언론에 보도되었으며(표 1 참조), 이러한 사건들은 명백한 패턴화와 반복성 특성을 보이고 있다. 기술적 결함으로 인한 공격 사건(번호 6, 8, 11)과는 달리, 다른 몇 가지 사건은 DeFi 생태계 경제 시스템의 결함을 공격하는 방식으로 나타났다. 표면적으로 볼 때, 이들의 공통점은 주 공격 프로토콜이 특정 AMM 프로토콜과 연관되어 있으며, 공격자는 AMM 자산 풀 내 자산 가격이나 자산 수량을 조작하여 연관 프로토콜에 손실을 입히는 방식이다. 우리는 이를 "경제 공격"이라고 부를 수 있다. 지금까지 발생한 경제 공격은 "가격 조작 차익 거래"와 "오라클 조작" 두 가지 방식으로 나뉘며, 본 문서는 경제 공격을 수행하기 위한 필요 비충분 조건 및 일반 공격 패턴을 정리하여 공격자가 DeFi 시스템의 "약점"을 추론하고, 이러한 안전 위험에 대한 경고를 제시한다.

HashKey 조일신: DeFi 경제 공격의 일반 패턴 심층 분석표 1. 플래시 론 공격 사건

"가격 조작 차익 거래" 공격

"가격 조작 차익 거래" 공격의 원리는 CeFi에서 흔히 발생하는 Pump-and-Dump 시장 조작 행위나 체인 상 거래에서 쉽게 발생하는 "프론트 러닝" 공격과 본질적으로 다르지 않다. 모두 다른 사람의 자본을 이용해 자산 가격을 높인 후, 높은 가격에 판매하여 이익을 얻는 방식이다. DeFi 생태계에서 이러한 경제 공격 사건이 성공할 수 있었던 이유는 적어도 두 가지 핵심 모듈—공격 목표와 AMM—와 관련이 있으며, 이 두 모듈은 조건 1을 통해 상호 연결되어 있다.

조건 1: 공격 목표와 AMM 간에 자산 이동 관계가 존재하며, 사용자가 자율적으로 관련 스마트 계약을 트리거하여 자산 이동을 실행할 수 있다.

여기서 공격 목표는 총알 풀, 대출 플랫폼, 레버리지 거래 플랫폼 등 DeFi 모듈이 될 수 있다. 총알 풀은 특정 투자 전략을 실행하는 스마트 계약으로, 이를 펀드에 비유할 수 있으며, 사용자에게 대리 자산 관리 서비스를 제공한다. 사용자는 자신의 자산을 총알 풀에 예치하여 수익을 얻기를 기대한다. 예를 들어 Yearn, Harvest; 대출 플랫폼은 대출자와 차입자에게 서비스를 제공하고 이자 차익을 얻으며, 차입자는 일반적으로 먼저 초과 담보를 제공해야 한다. 예를 들어 Compound, Aave; 레버리지 거래 플랫폼은 투자자가 일정 자산을 담보로 레버리지 거래를 할 수 있도록 허용한다. 예를 들어 bZx. AMM은 가격 함수에 따라 자동으로 시장 거래를 수행하며, 사용자는 자산을 교환하거나 유동성 제공자(LP)로 유동성 채굴에 참여할 수 있다. 여기서는 더 이상 설명하지 않겠다.

"가격 조작 차익 거래" 공격의 일반 단계

조건 1은 DeFi 시스템이 "가격 조작 차익 거래" 공격을 받을 수 있는 필요 비충분 조건이며, 실제 공격 과정에서는 자금 규모, 수수료, 스마트 계약이 거래 실행 전에 설정한 체크포인트 등의 요소를 고려해야 한다. 공격자는 최적화 모델을 구축하여 최적의 매개변수를 찾아 "가격 조작 차익 거래" 수익을 예측하여 행동 여부를 결정할 수 있다. 이러한 공격 방식의 일반적인 운영 단계는 다음과 같다(그림 1 참조):

HashKey 조일신: DeFi 경제 공격의 일반 패턴 심층 분석그림 1. 가격 조작 차익 거래 공격의 기본 모델(번호는 공격 단계, 실선은 필요 단계, 점선은 선택 단계; 공격 목표의 순자산 계산 단계와 AMM의 가격 함수는 해커에 의해 악용될 위험이 있다)

AMM 자산 풀의 유동성 자산을 X, Y, 유동성 토큰을 C라고 가정하자.

첫 번째 단계, 준비. 가격 조작될 초기 자산 Y와 공격 목표의 자동 실행 전략을 트리거하기 위한 초기 자산 A를 보유한다.

두 번째 단계, 가격 조작. 자산 A를 공격 목표의 관련 스마트 계약으로 전송하여 토큰 B(총알 풀, 대출 플랫폼, 레버리지 거래 플랫폼 등 공격 플랫폼 내 포지션을 나타내는 토큰, 이하 "포지션 토큰"이라 칭함)를 얻고, 스마트 계약을 트리거하여 AMM 자산 풀에 자산 X를 투입하여 자산 Y 또는 유동성 토큰 C를 얻고 AMM 자산 풀 내 자산 Y의 가격을 높인다.

세 번째 단계, 차익 거래. 공격자는 두 번째 단계에서 얻은 자산 Y를 AMM 자산 풀에 투입하여 높아진 가격으로 자산 X 또는 유동성 토큰 C를 얻는다. 여기서 두 번째, 세 번째 단계의 작업은 swap(X, Y 간의 교환) 또는 유동성 채굴(X 또는 Y와 C 간의 교환)에 해당한다. 세 개 이상의 코인으로 구성된 AMM의 경우, 여기서 X 또는 Y는 자산 조합으로 간주될 수 있다.

네 번째 단계, 마무리. 공격자는 토큰 B의 최신 순자산 및 후속 거래 계획에 따라 자산 D를 상환할지 결정한다.

유동성이 충분한 자산 풀의 경우, AMM에서 상당한 가격 슬리피지를 발생시키기 위해서는 일반적으로 많은 자금이 필요하므로, 공격자는 일반적으로 플래시 론을 통해 초기 자산을 빌린다. 만약 플래시 론으로 빌릴 수 있는 자산 종류가 요구 사항을 충족하지 않으면, 공격자는 특정 AMM이나 대출 플랫폼을 통해 swap, 유동성 채굴, 대출 등의 방법으로 자산을 얻거나, 공격 목표와 연관된 AMM에서 직접 자산을 얻을 수도 있다. 만약 공격자가 첫 번째 단계의 준비 과정에서 플래시 론을 사용했다면, 네 번째 단계에서는 동일한 공격 거래에서 플래시 론을 상환해야 한다.

HashKey 조일신: DeFi 경제 공격의 일반 패턴 심층 분석

HashKey 조일신: DeFi 경제 공격의 일반 패턴 심층 분석

공격자 수익 분석

HashKey 조일신: DeFi 경제 공격의 일반 패턴 심층 분석

만약 공격자가 포지션 토큰 B를 상환하지 않는다면, 처음 투입한 자산 A는 비용 상한선이 되며, 차익 거래 수익이 이 비용보다 클 때만 이익을 얻을 수 있다. 이러한 상황은 현재 레버리지 자금을 제공하는 공격 목표에서만 성공적으로 발생했으며, 공격자는 적은 담보 비용 A로 공격 목표의 대량 자금 X를 이용해 AMM에서 자산 Y의 가격을 높였다. 그러나 거래 실행 전에 공격자는 공격 목표가 담보 순자산이 청산선 아래로 떨어지는지 여부를 확인하는 체크포인트를 피해야 하며, 표 1에서 번호 1의 공격 사건이 전형적인 사례이다.

HashKey 조일신: DeFi 경제 공격의 일반 패턴 심층 분석

HashKey 조일신: DeFi 경제 공격의 일반 패턴 심층 분석

여기서 두 가지 주목할 점이 있다:

HashKey 조일신: DeFi 경제 공격의 일반 패턴 심층 분석

여기서 핵심은 공격 목표가 발행한 지분 토큰 B가 공격자의 초기 자산에 대한 격리 보호 역할을 제공한다는 점이다. 공격자는 종종 AMM 내의 가격을 조작하여 자산 X를 대폭 평가절하시키고, 공격 목표의 펀드 자산을 희생하여 AMM 내의 가격 슬리피지를 유리한 방향으로 이동시킨다. 이로 인해 공격자는 자신의 자산이 대폭 평가절하되지 않으면서도 상당한 차익 거래를 실현할 수 있다. 표 1에서 번호 10의 공격 사건이 전형적인 사례이다.

손실 분석

소절 1.2에서는 "가격 조작 차익 거래" 공격 패턴에서 공격자가 이익을 얻는 원리를 분석하였으며, 본 절에서는 누가 손실의 "희생양"인지 추가로 분석한다.
공격 목표의 관점에서 보면, 전체 공격 과정에서 그 바탕 자산 순자산의 변화는 다음에서 기인한다:

  1. 공격자가 투입한 자산 A로 지분을 얻는다;
  2. AMM과 자산 교환의 차액, 즉 공식 (6)에서 나타나는 값;
  3. 공격자가 지분을 상환한다.

만약 공격자가 최종적으로 포지션 토큰 B로 지분을 상환한다면, 공격 목표 자산의 가치 변화는 다음과 같다:

HashKey 조일신: DeFi 경제 공격의 일반 패턴 심층 분석

만약 공격자가 초기 자산을 상환하지 않는다면, 이는 공격 목표의 순수익 자산 A와 같으며, 공식 (10)은 다음과 같이 변한다.

HashKey 조일신: DeFi 경제 공격의 일반 패턴 심층 분석

AMM의 경우, 그 일정한 곱의 가격 방정식은 교환 작업 전후에 자산 풀 내 자산 수량과 자산 가격의 총 가치를 일정하게 유지하도록 보장한다. 유동성을 주입하는 경우, 새로 발행된 유동성 토큰의 각 지분 가치는 기존 유동성 토큰의 각 지분 가치와 일치한다. 따라서 공격자나 총알 풀이 상호작용할 때마다 AMM 내부 가격에 따라 동등하게 교환된다. 비록 공격자가 막대한 자금을 이용해 AMM의 가격을 시장 가격에서 벗어나게 만들더라도, AMM의 유동성 제공자는 가격 편차로 인한 무상 손실을 일시적으로 겪을 뿐이며, 후속적으로 차익 거래자가 가격을 평준화할 것이다. 차익 거래자가 얻는 이익은 금융 비즈니스 모듈의 손실 일부에서 기인한다.

사례 예시

표 1에서 번호 1과 10의 사건은 모두 위의 "가격 조작 차익 거래" 공격의 일반 패턴에 부합하며, 재현하기 쉽다. Yearn 총알 풀 플래시 론 공격 사건에서 공격자는 앞서 1.1에서 요약한 네 가지 단계를 수행했다:

첫 번째 단계, Aave와 dYdX에서 플래시 론으로 ETH를 빌려 Compound에 담보로 제공하여 대량의 DAI와 USDC를 얻는다. 일부 DAI는 보유하고, 나머지 DAI와 USDC를 Curve의 3Pool에 담보로 제공하여 유동성 채굴을 통해 유동성 토큰 3CRV를 얻는다. 모든 3CRV를 사용하여 USDT를 상환하여 자산 Y(USDT)와 자산 A(DAI)를 준비한다.

두 번째 단계, DAI를 Yearn의 yDAI Vault에 담보로 제공하여 yDAI(즉, 포지션 토큰 B)를 얻는다. 이 계약은 자동으로 DAI(자산 X)를 Curve 3Pool의 유동성 채굴 투자 전략에 투입하여 3CRV(토큰 C)를 얻도록 트리거된다. 3CRV 내 DAI의 수량이 증가함에 따라, 가격 함수 업데이트 후 DAI는 평가절하되고 USDT는 평가절상된다.

세 번째 단계, 첫 번째 단계에서 준비한 USDT를 Curve 3Pool에 투입하여 높은 가격으로 유동성 토큰 3CRV(토큰 C)를 교환한다. 이때 공격자는 3CRV의 수량이 첫 번째 단계의 초기 수량보다 많아져 차익 거래에 성공한다.

네 번째 단계, 두 번째 단계에서 얻은 yDAI로 DAI(자산 D)를 상환한다. 비록 yDAI의 순자산이 감소했지만, 이 부분의 손실은 차익 거래 수익보다 적다. 공격자는 한 번의 플래시 론 거래에서 위 단계를 10회 반복하여 플래시 론을 상환하고, 최종적으로 대량의 3CRV와 USDT를 얻는다. 번호 1의 bZx 공격 사건에서 공격자는 플래시 론으로 ETH(자산 A)를 빌려 일부를 Compound에 담보로 제공하여 WBTC(자산 Y)를 차입하고, 나머지 ETH를 bZx에 담보로 제공하여 5배 레버리지로 ETH 거래를 공매도하여 레버리지 포지션을 나타내는 sETHwBTC5x(포지션 토큰 B)를 얻는다. bZx 계약은 그에게 레버리지 자금을 제공하여 Uniswap에서 대량의 ETH(자산 X)를 판매하여 WBTC(자산 Y)를 얻고, WBTC 가격을 3배로 상승시킨다. 공격자는 WBTC(자산 Y)를 판매하여 ETH(자산 X)를 얻고, 일부는 플래시 론을 상환하고, 나머지는 Compound의 담보를 상환하는 데 사용하며, 레버리지 포지션 sETHwBTC5x는 상환하지 않는다. 왜냐하면 이때 이미 청산선이 발동되었고, 공격자는 계약의 결함을 발견하여 체크포인트를 피했기 때문이다.

번호 3의 공격 사건은 Balancer가 지원하는 자산의 수수료를 대신하여 자산을 소각하는 방식으로 "디플레이션형" 토큰 STA를 이용하여 발생하였다. 공격자는 STA를 반복적으로 거래하여 그 수량을 지속적으로 줄이고, 가격을 지속적으로 상승시키는 방식으로 특정 조건에서 발생한 사례로, 재현하기 어렵다.

"오라클 조작" 공격

"오라클 조작" 공격은 "가격 조작 차익 거래" 공격의 대칭적 조작으로 볼 수 있으며, 그 필요 조건은 다음과 같다:

조건 2: 공격 목표가 AMM이 제공하는 정보를 기반으로 내부 자산의 가격을 책정한다.

HashKey 조일신: DeFi 경제 공격의 일반 패턴 심층 분석

그림 2. 오라클 조작 공격의 기본 모델(번호는 공격 단계, 실선은 필요 단계, 점선은 선택 단계; 공격 목표의 순자산 계산 단계와 AMM의 가격 함수는 해커에 의해 악용될 위험이 있다)

이 경우 공격자는 공격 목표 내부의 자산을 이용해 AMM 내 특정 자산의 가격을 조작할 수는 없지만, AMM 모듈이 오라클로서 조작될 수 있는지를 검토하여 공격 목표 내부 자산을 조작할 수 있다.

공격 목표가 AMM이 제공하는 정보를 의존하는 주요 목적은 두 가지가 있다:

  1. 담보물의 평가;
  2. 포지션 토큰의 가격 책정.

우리는 이를 "순자산 계산"으로 볼 수 있으며, 공격자는 순자산 계산에서 실제 상황과 차이가 있는 계약을 조작하기 위해 전문적으로 찾는다.

표 1에서 번호 5와 9의 사건에서 공격자는 동일한 오라클 결함을 이용하였다. Cheese Bank와 Warp Finance 이 두 총알 풀은 사용자가 Uniswap의 유동성 토큰 UNI-V2를 초과 담보로 제공하여 스테이블 코인을 차입할 수 있도록 허용하며, 담보물 UNI-V2의 가치는 자작한 오라클 계약을 통해 계산된다. 해당 계약은 관련 Uniswap 유동성 풀의 자산 수량, 자산 가격 및 UNI-V2의 발행량을 기반으로 계산하지만, 자산 수량과 자산 가격은 두 개의 비연관된 경로에서 얻어진다—자산 수량은 Uniswap 유동성 풀 잔액에서 직접 가져오고, 자산 가격은 Uniswap 공식에서 제공하는 시간 가중 평균 오라클에서 가져온다. 이는 공격자가 Uniswap 유동성의 자산 수량을 변경하여 자산 가격이 변하지 않는 상태에서 담보물 UNI-V2의 명목 가치를 높여 더 많은 스테이블 코인을 차입할 수 있도록 한다. 이러한 유형의 공격은 주로 오라클 계약 설계가 충분히 엄격하지 않아 발생하지만, 여전히 두 번 반복 발생하여 DeFi 프로젝트에 경각심을 불러일으킬 수 있다.

표 1에서 번호 2의 사건에서 공격자는 bZx의 담보물 sUSD 평가를 위한 오라클(Uniswap과 Kyber)을 조작하여 sUSD의 가격을 높여 더 많은 ETH를 차입하였다.

표 1에서 번호 3, 7의 사건은 오라클 가격을 조작하여 총알 풀 내 지분 토큰의 순자산을 높여 더 많은 자산을 교환하여 반복적으로 수익을 누적하였다.

"오라클 조작" 공격의 일반 단계는 다음과 같다:

첫 번째 단계, 준비. AMM 오라클을 조작하는 데 사용할 자산 Y와 공격 목표에 예치할 자산 A를 준비한다.

두 번째 단계, 담보. 자산 A를 공격 목표에 담보로 제공하여 담보물의 포지션 토큰 B를 얻는다. 일부 경우에는 포지션 토큰 B를 발급하지 않고 스마트 계약 내부에서만 기록한다.

세 번째 단계, 조작. 자산 Y를 AMM에 투입하여 자산 X로 교환하고, AMM 유동성 풀 내 자산 비율을 변경하여 가격을 변경하고, 공격 목표 계약 내 자산 A 또는 포지션 토큰 B의 가격을 업데이트한다;
네 번째 단계, 마무리. 만약 대출 사업이라면, 높아진 담보물 평가를 통해 더 많은 자산을 차입하고 더 이상 상환하지 않는다; 만약 총알 풀 사업이라면, 높아진 가격의 포지션 토큰 B로 자산을 상환하여 가치 상승 수익을 얻는다.

논의 및 시사점

본 문서는 DeFi 시스템이 경제 공격을 받는 일반 패턴과 명칭을 정리하였으며, "가격 조작 차익 거래"와 "오라클 조작" 공격 패턴이 본질적으로 순자산 계산 단계를 이용하고 조작하는 행위임을 발견하였다. 따라서 DeFi 시스템을 설계할 때 이 단계를 적절히 처리하는 것이 매우 중요하다. 가장 근본적인 예방 조치는 사용자가 자동으로 거래 전략을 트리거하거나 순자산을 업데이트할 수 있는 권한을 제거하여 공격자가 일련의 일관된 조작 행동을 완료하는 것을 근본적으로 차단하는 것이다.

예를 들어 "가격 조작 차익 거래" 공격 전략에 대한 구체적인 방법은 스마트 로봇을 통해 사용자의 투자 행동을 식별하고, 고정된 시간 간격으로 순자산을 대량 계산하여 전략 풀에 자금을 배분하는 것이다. 그러나 이러한 방법은 기존의 원자 거래의 장점을 깨뜨리며, 사용자 경험 저하, 비용 증가, 로봇이 전송한 거래가 통제되는 등의 새로운 문제를 초래할 수 있다. 한편, 현재 나타나는 DeFi 조합 모델의 대부분은 여전히 단순한 A->B 모델에 머물러 있으며, 생태계 내에서는 C->A->B(예: Alchemix)와 같은 다층 중첩 관계가 나타나고 있다. 이러한 관계는 스마트 계약 간의 자동 트리거를 피할 수 없으며, 여전히 시스템적인 경제적 결함이 존재할 수 있다.

"오라클 조작"에서 설명한 공격 위험에 대해 현재 일부 총알 풀은 슬리피지 제한을 설정하여 가격 변동 범위를 제약하고 있다. 그러나 그럼에도 불구하고 공격자는 여전히 비용을 초과하는 차익 거래 공간을 찾아 여러 차례 실행하여 차익 거래 총액을 누적할 수 있다(예: 번호 4의 Harvest 공격 사건).

플래시 론은 전체 공격 단계에서 부가적인 역할을 하며, 공격자에게 대량의 초기 자금과 거래 가스 비용만으로 공격 기회를 제공한다. 그러나 최근 ETH 가격 상승으로 인해 이러한 복잡한 공격 전략을 위한 스마트 계약의 거래 가스 비용이 매우 비쌉니다. 최근 발생한 yearn 총알 풀의 단일 플래시 론 공격 거래는 공격자에게 1.933 ETH(당시 약 3088 달러)를 소모하게 했다.

종합적으로 볼 때, 이러한 경제 공격 사건들은 AMM의 설계 메커니즘이 공격자에 의해 연관 제품에 대한 공격에 쉽게 이용될 수 있으며, 특정 공격 패턴을 갖추고 있음을 나타낸다. 공격 패턴이 의존하는 필요 조건을 제거하는 것은 새로운 문제를 초래할 수 있으며, 이러한 위험을 완전히 제거할 수 있는 만능 전략은 없다. 공격자가 기대하는 차익 거래 공간보다 훨씬 작게 만들기 위해 일정한 제약 조건을 추가하는 것은 탐구할 가치가 있는 방법일 수 있으며, 이는 프로젝트 팀이 자신과 연관된 프로토콜의 경제 시스템에 대해 포괄적이고 심층적인 연구를 수행해야 함을 요구한다.

체인캐처(ChainCatcher)는 독자들에게 블록체인을 이성적으로 바라보고, 리스크 인식을 실제로 향상시키며, 다양한 가상 토큰 발행 및 조작에 경계해야 함을 상기시킵니다. 사이트 내 모든 콘텐츠는 시장 정보나 관련 당사자의 의견일 뿐이며 어떠한 형태의 투자 조언도 제공하지 않습니다. 만약 사이트 내에서 민감한 정보를 발견하면 “신고하기”를 클릭하여 신속하게 처리할 것입니다.
체인캐처 혁신가들과 함께하는 Web3 세상 구축