Cointime

Download App
iOS & Android

分散型融資プラットフォーム HopeLend に対する融資攻撃の分析

Validated Project

北京時間の2023年10月18日19時48分59秒、Hope.moneyの融資プールはフラッシュローンの実施に基づいて攻撃されました。

Hope.money は、HopeLend 融資プラットフォーム、HopeSwap 分散型取引所、安定通貨 $HOPE、ガバナンス トークン $LT を構築し、ユーザーにフルスタックの分散型金融サービスを提供しています。

この攻撃に関与したプロトコルは、ユーザーがプロトコルに流動性を提供したり、過剰担保ローンから収入を得たりできる分散型融資プラットフォームである HopeLend です。

一部始終

HopeLend のコード実装には、融資プールに悪用可能な脆弱性が存在し、預金証明書を破棄する際に、整数の除算が正しく行われない問題が発生し、小数点部分が切り捨てられ、結果として破棄される証明書の数が以前よりも少なくなってしまいました。取得および期待される一貫した値のトークン。

攻撃者はこの欠陥を悪用して、Hope.money に資金が存在していたさまざまな融資プールを枯渇させました。

その中で、hEthWbtc 融資プールは 73 日前に展開されましたが、そこに資金がなかったため、ハッカーは融資プールに大量の資金を注入して割引率を大幅に引き上げ、それによって融資プール内の他のすべての融資をすぐに空にしました。ブロックトランザクション、プール資金。

さらに驚くべきことは、この脆弱性を悪用したハッカーは、その脆弱性を悪用するための資金を取得していなかったということです。彼の攻撃取引は、最有力候補によって発見されました。最有力候補は、彼の攻撃行動を模倣し、攻撃収益をすべて盗むことに成功しました (527最終的に、攻撃収益の 50 % (263 ETH) は、ブロック (ペイロード) をパッケージ化したマイナーに賄賂を渡すために、有力者によって使用されました。

脆弱性を発見した最初のハッカーは、ブロック 18377039 で攻撃コントラクトを作成し、ブロック 18377042 で攻撃コントラクトを呼び出しました。このとき、フロントランナーはメモリ プール内のトランザクションを監視し、フロントランナーとして攻撃コントラクトをシミュレートしました。実行中のコントラクトへの入力は同じブロック 18377042 で悪用され、ブロック 18377042 の最初のハッカーのトランザクションは、フロントランナーの後ろに順序付けされていたために実行に失敗しました。

資金の行き先

最有力候補が利益を受け取ってから 1 時間後、資金を 0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A に移動しました。

資金の行き先

最有力候補が利益を受け取ってから 1 時間後、資金を 0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A に移動しました。

10月20日13時30分23秒、公式チームと思われる人物がそのアドレスに連絡し、優勝者に報酬として26ETH(利益の10%)を残すことを許可し、優勝者から返信を受け取りました。

1 時間の通信の後、最終的な資金は GnosisSafe のマルチ署名保管庫に転送されました。

以下に、実際の脆弱性と、ハッカーがそれを悪用した方法の詳細を示します。

事前情報

*HopeLend の融資プロトコル実装は Aave からフォークされているため、脆弱性に関連するコア ビジネス ロジックは Aave のホワイト ペーパーに記載されています。

0x00 預金とローン

Aave は純粋な DeFi であり、融資ビジネスは流動性プールを通じて実行され、ユーザーが Aave に流動性を預けると、融資による収益を受け取ることが期待されます。

融資収益は全額が利用者に分配されるわけではなく、利息収入の一部がリスク準備金に含まれますが、その割合は小さく、融資収益の大部分は流動性を提供する利用者に分配されます。

Aave で預金を貸付する場合、Aave は割引を使用して、さまざまな時点での預金数を流動性プールの初期時点での預金数に換算するため、それぞれの原資産に対応する元利金の合計が株式数は直接計算できます。金額(株式数)*指数(割引率)を使用して計算されます。これにより、計算と理解が大幅に容易になります。

ファンドの購入と同様のプロセスとして理解できます。ファンドの初期の純価値は 1 です。ユーザーは 100 元を投資して 100 株を取得します。一定期間後に純価値は 1.03 になったとします。このとき、ユーザーは 100 元を投資します。 、ユーザーは再度 100 元を投資し、100 株を取得します。は 97、ユーザーの合計シェアは 197 です。

これは実際には、インデックス (正味価値) に従って資産を割り引いています。これが行われる理由は、残高を使用して、ユーザーの実際の元本と利息の合計に現在のインデックスが乗算されるためです。 2回目入金時のユーザーの正しい元利合計は100 * 1.03 + 100 = 203となります。割引処理が行われない場合、2回目の入金後の元利合計は(100)となります。 +100) * 1.03 = 206 ですが、これは間違いです。割引を行うと、元利金の合計は (100 + 100 / 1.03) * 1.03 = 103 + 100 = 203 になります。203 の結果は正しいです。

攻撃プロセス

0x25126....403907(hETHWBTCプール)

攻撃プロセス

0x25126....403907(hETHWBTCプール)

0x5a63e....844e74 (攻撃契約の現金化)

アタッカー:

1. 初回フラッシュローン資金を融資し、担保に入れます

攻撃者はまず Aave Flash Loan から 2300WBTC を借り、HopeLend に 2000 WBTC を誓約し、資金は HopeLend の hEthWbtc コントラクト (0x251...907) に転送され、対応する 2000 hETHWBTC が取得されます。

2. 空のローンプールを使用して初期割引率 (liquidityIndex) を操作します。

HopeLend からフラッシュ ローンを通じて 2,000 WBTC を借ります。

現在の値は 1 hETHWBTC = 1 WBTC です。

WBTCと交換するためにETHWBTCを入出金する通常の操作によれば、交換比率は影響を受けません(交換比率は利息が得られる場合にのみ影響を受け、1 hETHWBTCはより多くのWBTCを取得します)。

この時点で、ハッカーは一連の複雑な操作を通じて割引率を操作し始めます。

• ハッカーは取得した 2,000 WBTC を直接送金により HopeLend の hEthWbtc コントラクト (0x251…907) に送金しましたが、このステップはローンの返済ではありません。

• その後、ハッカーはステップ 1 で約束した WBTC (1999.999…) のほとんどを引き出したため、前のステップではプール内の資産を補充するために WBTC を返送する必要がありました。

• 最終的にハッカーは hEthWbtc の最小単位 (1e-8) だけを保持しますが、少し残す必要があるためここでは完全には言及できませんが、割引率 (liquidityIndex) を計算する際には、既存のものと新しいものを加えたものです。クリアすると、割引率 (liquidityIndex) が 0 になり、プール内の割合がアンバランスになることはありません。

• 前のステップで hEthWbtc の大部分を破棄するために交換された wBTC と、前のフラッシュ ローンからの残りの wBTC を使用し、貸与されたフラッシュ ローンを HopeLend プールに返し、合計 2001.8 WBTC (1.8 wBTC の利息を含む) を支払います。

• 上記のプロセスにより、hEthWbtc の大部分が破壊され、ハッカーアカウントに hEthWbtc の最小単位 (1e-8) が 1 つだけ残るため、hETHWBTC の総量は減少しますが、融資プールには 2001.8 wBTC が存在します。レート (流動性インデックス) は驚くべき 1 億 2,600 万に達します。

これには、預金利用者の利益は基本的にプール内の流動性の増加によってもたらされるという知識が含まれており、貸出プールは預金金利と利用率に基づいて借入金利と預金金利を動的に調整します。

ここで、プールがフラッシュ ローンの金利 (1.8WBTC) から追加の流動性を受け取ると、70 パーセント (126,000,000) が流動性インデックス (liquidityIndex) に含まれます。これは、預金単位あたりの割引価値 (hEthWbt) を計算するために使用されます。

ハッカーの操作前にはプールが空だったので、返済後の流動性の合計は 1 のみで、金額は 126000000、初期の流動性インデックスは 1 で、結果は 126000001 になります。

3. 割引率の拡大を継続

ハッカーはフラッシュ ローンを通じて HopeLend から 2,000 WBTC を借り続け、毎回追加で 1.8 WBTC を返し、流動性インデックスが毎回 1 億 2,600 万 WBTC 蓄積することを可能にしました。

ハッカーはこのプロセスを 60 回繰り返し、最終的に流動性インデックスは 7,560,000,001 に達し、攻撃者が保有する hEthWBTC の最小単位の割引価値は 75.6WBTC (約 214 万ドル) に達する可能性があります。

これにより、ハッカーが hEthWBTC を制御し、その値を歪めることも可能になります。

4. 他の既存資金の融資プールを空にして収入を生み出す

その後、攻撃者は hEthWBTC の最小単位 1 を担保として使用し、HopeLend の他の 5 つのトークン プールから大量の資産を貸し出しました。

含む:

  • 175.4 - ウェス
  • 145,522.220985 - USDT
  • 123,406.134999 - USDC
  • 844,282.284002229528476039 - 希望
  • 220,617.821736563540747967 - stHOPE

これらのトークンは収益として Uniswap を通じて WBTC と WETH に変換され、さまざまな手数料を差し引いた後のハッカーの最終利益は約 263 WETH でした (賄賂ペイロードの 263.9 WETH を除く)。

ハッカーが他のプールから多額の資金を借りることができる理由:

お金を借りたり、預金を引き出したりするときは、融資契約によりユーザーの住宅ローンの資産状況がチェックされ、ローンが住宅ローンを超えていないことが保証されます。

割引率は以前にハッカーによって操作されており、割引率はnormalizedIncome乗数を使用して住宅ローン価値の計算に含まれるため、彼の手にあるhEthWBTCの1ユニットの住宅ローン価値は75.6WBTCにもなります。

ハッカーは他のプールからお金を借りるたびに、担保資産の検証を簡単に通過しました。

この時点で、攻撃者は、liquidityIndex を操作するために合計 2000+1.8*60 WBTC を HopeLend に投資し、hEtthWBTC の 1 ユニットのみを残しました。

5. 主要な脆弱性ポイント (整数の除算エラー) を悪用してキャッシュアウトする

以前に投資した wBTC を引き出すために、攻撃者は別の攻撃コントラクト 0x5a63e....844e74 を展開し、その中でdrawAllBtc() メソッドを呼び出しました。

脆弱性のプロセスは次のとおりです。

① 初回入金額 151.20000002 wBTC 現在の流動性インデックス (1 最小単位 hEthWBTC=75.6wBTC) に従って、攻撃者は最小 2 単位の hEthWBTC を取得します。

② 113.4 wBTC を出金し、対応する hEthWBTC シェアを逆算し、hEthWBTC に対して書き込み操作を実行します。

③ 113.4 wBTC では最小単位 1.9999999998 個の hEthWBTC を破壊する必要がありますが、div 関数の精度により hEthWBTC 最小単位 1 個しか破壊されず、悪用可能な脆弱性となり、ハッカーは最小単位 1 個の hEthWBTC を保持することができます。

重大な脆弱性

hEthWBTC の burn メソッドは高精度分割 rayDiv を呼び出します。

ここ:

a=11340000000 (WBTCは引き出し予定)

b=7560000001000000000000000009655610336 (割引率)

(a*1e27+b/2)/b = 1.9999999998 ですが、solidity 独自の div メソッドは切り捨てて 1 を返します。これは 11340000000 / 7560000001 に相当します。小数点以下の桁は除算後に切り捨てられます。

(a*1e27+b/2)/b = 1.9999999998 ですが、solidity 独自の div メソッドは切り捨てて 1 を返します。これは 11340000000 / 7560000001 に相当します。小数点以下の桁は除算後に切り捨てられます。

0x5a63 (攻撃コントラクト - キャッシュアウト) は 75.60000001WBTC の入金を継続し、hEthWBTC の最小単位を正確に 1 取得し、hEthWBTC の最小単位を 2 つ保持し続けました。

113.40000000wBTC を引き出し、75.60000001wBTC を入金するこのサイクルで、攻撃者は毎回 37.8 wBTC を何もないところから入手できます。

58 サイクル後、攻撃者は初期段階で投資したすべての wBTC を引き出し、Aave のフラッシュ ローンを無事に返済しました。

結論は

hEthWBTCの融資プールは初期化されていないため、攻撃者は簡単にliquidityIndexを操作して最大値まで増やすことができ、整数の除算の切り捨て誤差により引き出し率が除数として大幅に増幅された後、引き出しが容易になります。ワンブロックに先行投資です。

適切に機能している融資プールでは、融資プールにはすでに流動性があるため、融資利子のわずかな増加によって割引率が大幅に上昇することは容易ではありません。

コメント

全てのコメント

Recommended for you

  • AIが地域開発の意思決定支援を行うとする長江デルタ統合モデルを発表した。

    長江デルタ統合モデル発表・応用連携会議が上海で開催された。会議では、中国地域経済50フォーラムメンバーで、上海財経大学長江デルタ・長江経済ベルト発展研究所執行長の張学良教授チームが主導する長江デルタ統合モデル(YRD-P1)が正式に発表された。張学良教授は、YRD-P1モデルは長年の都市・地域科学研究の蓄積に基づいて構築された専門的な大規模モデルであると述べた。継続的に蓄積された政策文書、統計データ、学術成果、産業チェーン情報、地理空間データを基盤とし、長江デルタ地域向けに深くカスタマイズされ、知識システムの体系性、権威性、追跡可能性を重視し、協調的な地域発展のために、よりインテリジェントで正確、かつ持続可能な意思決定支援ツールを提供することに尽力している。

  • 天埔株:同社は情報開示規制に違反した疑いがあり、1月12日に株式の取引が再開される。

    天埔株式会社は、中国証券監督管理委員会(CSRC)から「立件通知書」を受領し、上海証券取引所から情報開示違反の疑いで規制警告を受けたと発表した。同社株式の取引は2026年1月12日に再開される。同社の生産・運営は現在正常だが、株価は短期的な変動が大きく、累積で大幅な上昇を見せており、同社のファンダメンタルズから大きく乖離し、大きな取引リスクをもたらしている。2025年第1四半期および第2四半期の営業収益は2億3000万元で、前年同期比4.98%減、上場会社株主に帰属する純利益は1785万8000元で、前年同期比2.91%減となった。

  • 日本の首相が衆議院解散を検討、USD/JPYが急上昇。

    日本の首相は衆議院の解散を検討している。ドルは円に対して急上昇し、0.66%上昇の157.95円となり、過去1年間で最高値を更新した。

  • 連銀の代弁者であるニック・ティミラオス氏は、民間部門の雇用主が2025年までに毎月平均6万1000人の雇用を増やすと予測しており、これは2003年のいわゆる「失業回復」以来、民間部門の雇用増加が最も弱い時期となる。

    連銀の代弁者であるニック・ティミラオス氏は、民間部門の雇用主が2025年までに毎月平均6万1000人の雇用を増やすと予測しているが、これは2003年のいわゆる「失業回復」以来、民間部門の雇用増加が最も弱い時期となる。

  • 失業率が予想外に低下したことで金利引き下げへの期待は大幅に弱まり、債券トレーダーらは年央の動きに目を向けるようになった。

    米国債は、トレーダーが今月下旬の連邦準備制度理事会(FRB)による利下げへの期待を事実上払拭したことで下落した。これは、12月の失業率が予想以上に低下し、雇用全体の伸び悩みを相殺したことを受けたものだ。金曜日の雇用統計発表後、米国債価格は下落し、全年限の利回りが最大3ベーシスポイント上昇した。債券トレーダーは、2026年中に2回の利下げが実施されるという予想を維持し、最初の利下げは年央に実施されると予想している。ナティクシス・ノース・アメリカの米国金利戦略責任者、ジョン・ブリッグス氏は、「我々にとって、FRBは全体的なデータに含まれるノイズよりも失業率を重視している。したがって、これは米国金利にとって若干弱気材料だ」と述べた。9月、10月、11月の雇用統計は、10月1日から11月12日までの6週間にわたる政府閉鎖のため発表が遅れた。今回の雇用統計は、マクロ経済の雇用動向を反映した初の「クリーン」な指標となる。 FRBが追加利下げに踏み切るかどうかは、今後数ヶ月の労働市場の動向次第とみられる。労働市場の弱さを受け、FRBは過去3回の会合で短期貸出金利の目標レンジを引き下げた。しかし、一部の当局者はインフレ率が目標を上回ることを依然として懸念しており、これが追加緩和のペースを抑制しているとみられている。

  • ゴールドマン・サックス:FRBは1月に金利を据え置く可能性が高いが、2026年の残りの期間にさらに2回金利を引き下げるだろう。

    1月9日、金石データは、ゴールドマン・サックス・アセット・マネジメントのマルチセクター債券投資責任者であるリンゼイ・ローゼナー氏が、米国の非農業部門雇用者数について「さようなら、1月!」と述べたと報じました。労働市場が安定化の兆しを見せていることから、FRB(連邦準備制度理事会)は当面現状維持の可能性が高いでしょう。失業率の改善は、11月の急上昇は「退職遅延」政策とデータの歪みによる個々の従業員の早期退職によるものであり、システム全体の弱体化の兆候ではないことを示唆しています。FRBは当面政策スタンスを維持すると予想されますが、2026年の残りの期間にさらに2回の利下げを実施すると予想しています。

  • 市場トレーダーは依然として、連邦準備制度理事会が2026年に金融政策を約50ベーシスポイント緩和すると予想している。

    市場トレーダーは依然として、連邦準備制度理事会が2026年に金融政策を約50ベーシスポイント緩和すると予想している。

  • スワップ市場では、FRBが1月に利下げを行う可能性はゼロだとみられている。

    1月9日の金石データによると、米国の失業率の低下により、連邦準備制度理事会の1月の金利引き下げ計画は頓挫し、金利スワップ契約では現在、金利引き下げの確率はゼロであると示されている。

  • 米国の12月の非農業部門雇用者数は予想を下回り、失業率はわずかに低下したものの、労働市場の悪化傾向を隠すことはできなかった。

    米国労働統計局が金曜日に発表したデータによると、12月の雇用者数は5万人増加し、エコノミスト予想の6万人を下回った。失業率は11月の4.6%から4.4%に低下した。11月と10月のデータは政府閉鎖の影響を大きく受けていたため、このデータは数ヶ月ぶりに米国の雇用市場の全体像を示している。11月の雇用者数増加数は、当初の推定値6万4000人から5万6000人に下方修正された。このデータは、連邦政府の人員削減と民間部門の雇用減速の影響を受けた労働市場の悪化の兆候をさらに裏付けている。連邦準備制度理事会(FRB)は過去3回の会合で米国の借入コストを引き下げ、政策金利の目標レンジを3年ぶりの低水準である3.5~3.75%に維持した。パウエルFRB議長は12月、現在の借入コストは「良好な水準にある」と述べ、追加利下げの閾値は高いことを示唆した。しかし、12月の弱いデータは、今月末に開催される次回会合で利下げサイクルを停止するというFRBの主張を複雑化させる可能性がある。FRBはまた、労働統計局(BLS)の最新データの正確性についても懸念を表明した。パウエル議長は、米国経済の月間雇用者数は雇用統計で示されているよりも6万人少ないと示唆した。

  • 市場トレーダーは、連邦準備制度理事会が1月に金利を引き下げる可能性は事実上ゼロだと予想している。

    市場トレーダーは、連邦準備制度理事会が1月に金利を引き下げる可能性は事実上ゼロだと予想している。