https://bscscan.com/tx/0x90f374ca33fbd5aaa0d01f5fcf5dee4c7af49a98dc56b47459d8b7ad52ef1e93
DualPools (https://dualpools.com)&...nbsp;はVenusProtocol (https://venus.io/) をベースに修正したもので、Swap, Lend, Borrowなどのサービスを提供するDeFiプロジェクトです。
DualPoolsは分散型融資プラットフォームであり、ユーザーはデポスティ経由でunderlyingAssets(原資産)を預け、対応するdTokenを取得します。逆に、Redeem経由でunderlyingAssetsを取り出す際には、対応するdTokenを破棄します。その際、原資産とdTokenの交換比率は、単純にdTokenの値であるexchangeRate(流動性指数)によって制御されます。
為替レート = (totalCash + totalBorrows - totalReserves) / totalSupply
攻撃の分析
単純に以下のようになります。
簡単に言えば、攻撃は2つの部分に分けられます。
1.ハッカーは、新しいDualPools取引プールの非流動性(流動性0)を通じてdLINKの価格を大幅に上昇させ、ボローズを通じて他のプール(WBNB、BTCB、ETH、ADA、BUS)の原資産を空にしました。ETH、ADA、BUSD)。
2.精度の切り捨て問題を利用して、前の期間に投資したすべてのLINKを取り戻します。
ステップ1の詳細分析
攻撃者はDODOプライベートプールとPancakeSwapV3を使ってBNBとBUSDを借り入れ、最初の攻撃資金として得ています。
その後、BNBとBUSDはVenusProtocol経由で担保され、11,500 LINKが貸し出され、DualPools攻撃に対する攻撃を実行した。DualPools攻撃。
まず、攻撃者はプールdLINK-LINK mintを再取引することで、dLINKの最小2ユニットを取得し、その後、LINKの11499999999999998ユニットをプールに転送します。
為替プールは初期化されていないため、流動性はありません。また、為替レートは次のように計算されます:
exchangeRate = (totalCash + totalBorrows - totalReserves) / totalSupply
この時点で、totalCashは取引プールのLINKの残高で、114999999999999999999999998 + 2 = 1150000000000000000000000000000であり、totalBorrowsとtotalReservesはいずれも0です。totalSupplyは2である(ハッカーは造幣局を通じて最小単位のdLINKを2つ入手したため)。つまり、この時点での交換レートは575000000000000000(dLINKの価値を575倍に引き上げる)。攻撃者が所有する2つのdLINKがあり、価値が十分に高かったため、ハッカーは他のプールから50 BNB、0.17 BTCB、3.99 ETH、6378 ADA、911 BUSDをborrow経由で借りました。
攻撃者はredeemUnderlyingを渡します。1149999999999999999999999999898÷575000000000000000=1.999999999999999 つまり、dLINKの最小単位は1.999999ですが、データ精度の切り捨てにより、dLINKの最小単位は1しかありません。
攻撃者は、DualPoolsの新しい取引プールの流動性の低さを利用して、原資産のExchangeRateを操作し、その結果、原資産に対応するdTokenの価格が歪められ、非常に少量のdTokenを担保として他の原資産を大量に貸し付けることができました。その後、スマートコントラクトの分割の切り捨て問題を利用して、前の攻撃で投資した資産を取り出します。これでDeFiプロジェクトDualPoolsへの攻撃は完了です。