출처: 선전 제로타임 테크놀로지
배경
듀얼풀에 대한 온체인 공격 이벤트 모니터링:
https://bscscan.com/tx/ 0x90f374ca33fbd5aaa0d01f5fcf5dee4c7af49a98dc56b47459d8b7ad52ef1e93
DualPools (https://dualpools.com)&... (https://venus.io/)를 기반으로 하며, 스왑, 대여, 대출 및 기타 서비스를 제공하는 탈중앙 금융 프로젝트입니다.
다음과 같이 운영됩니다:
듀얼풀은 탈중앙화 대출 플랫폼으로, 사용자가 디포스티를 통해 기초자산을 입금하면 그에 상응하는 디토큰을 받고, 반대로 리딤을 통해 기초자산을 인출하면 그에 상응하는 디토큰을 소각하는 탈중앙화 대출 플랫폼입니다.
이 경우, 기초자산과 d토큰 간의 교환 비율은 단순히 d토큰의 가치인 exchangeRate(유동성 지수)에 의해 제어됩니다.
교환 비율 = (총현금 + 총차입금 - 총예치금) / 총공급
공격 분석
단순히 말하면, 공격은 두 부분으로 나뉩니다.
1. 해커는 새로운 듀얼풀 거래 풀의 비유동성(유동성 0)을 통해 dLINK의 가격을 대폭 상승시키고 차입을 통해 다른 풀의 기초 자산(WBNB, BTCB, ETH, ADA, BUS)을 비워냈습니다. ETH, ADA, BUSD).
2. 정밀 절단 문제를 이용하여 이전 기간에 투자한 모든 LINK를 회수합니다.
1단계 상세 분석
공격자는 DODO 프라이빗 풀을 사용하고 있습니다. 팬케이크스왑V3를 사용하여 초기 공격 자금으로 BNB와 BUSD를 차입하고 획득했습니다.
그 후, VenusProtocol을 통해 BNB와 BUSD를 담보로 11,500 LINK를 빌려 공격을 수행했습니다. 듀얼풀 공격을 수행했습니다.
먼저, 공격자는 dLINK-LINK 민트 풀을 재거래하여 가장 작은 2개의 dLINK 단위를 획득하고, 이후 11499999999999999999998 단위의 LINK를 풀로 전송합니다.
거래소 풀은 초기화되지 않았으므로 유동성이 존재하지 않습니다. 교환환율은 다음과 같이 계산됩니다.
교환환율 = (총 현금 + 총 차입금 - 총 준비금) / 총 공급
이 시점에서 totalCash는 트랜잭션 풀의 LINK 잔액으로 114999999999999999999999999999998 + 2 = 1150000000000000000000000000000000000000000 이며, totalBorrows와 totalReserves는 모두 0입니다. 총공급량은 2입니다(해커가 민트를 통해 가장 작은 단위의 dLINK 2개를 얻었기 때문입니다). 따라서 이 시점의 교환 비율은 57500000000000000000000000 (dLINK의 값을 575배로 끌어올림)입니다. 공격자가 소유한 dLINK가 2개이고 그 가치가 충분히 높았기 때문에 해커는 차용을 통해 다른 풀에서 50 BNB, 0.17 BTCB, 3.99 ETH, 6378 ADA, 911 BUSD를 차용했습니다.
2단계 상세 분석
공격자는 redeemUnderlying을 전달합니다. 11499999999999999999999999898 / 5750000000000000000000 = 1.9999999999999999999 즉, 1.999999의 가장 작은 dLINK 단위가 필요하지만, 데이터 정밀도가 잘려서 가장 작은 단위인 dLINK.
이 시점에서 공격자는 이전에 투자한 1149999999999999999999999999898 단위의 LINK를 제거하고, 이후 VenusProtocol, 팬케이크스왑V3, DODO 프라이빗 풀에서 빌린 돈을 반환하여 공격을 완료합니다.
요약
공격자는 듀얼풀의 새로운 거래 풀의 낮은 유동성을 이용하여 기초 자산의 교환 비율을 조작하여 기초 자산의 해당 d토큰 가격을 왜곡시켰고, 그 결과 매우 적은 양의 d토큰을 담보로 다른 기초 자산을 대량으로 대출할 수 있었습니다. 그 후 스마트 컨트랙트 분할의 절단 문제를 사용하여 이전 공격에 투자된 자산을 회수합니다. 이로써 디파이 프로젝트 듀얼풀에 대한 공격이 완료됩니다.