
PeckShield: ハードコア テクノロジーの分析、ハッカーによって攻撃された bZx プロトコルの全容PeckShield: ハードコア テクノロジーの分析、ハッカーによって攻撃された bZx プロトコルの全容「分析によると、bZxは2月15日にハッカーによるポートフォリオ資産への流動性攻撃を受け、これはbZx契約による担保ステータスの不完全な判断が原因であった。
2月18日、bZxは再び同様の攻撃に遭遇しましたが、今回の攻撃の技術原理は前回とは異なり、ハッカーはOracleの価格を操作してbZxの契約を「騙し」ました。
攻撃プロセスの観点から見ると、今回は前回とはまったく逆ですが、全体的な裁定取引手法は同じであり、根本的な原因は主にプラットフォーム間の共有流動性の少なさと価格メカニズムの設計上の欠陥によるものです。 。
Figure: Five Exploitation Steps With Oracle Manipulation
この記事の本来の目的は、誰もがこの攻撃をより直観的に理解できるように、この脆弱性に関する攻撃の詳細を分析し、より深い議論につながることを期待することです。私たちは、これらの議論はDeFiコミュニティの改善と発展に非常に有益であり、特にプロジェクト当事者が次世代のDeFi製品を開発している場合、より安全で信頼性の高い流動性共有モデルを設計するのに役立つと信じています。
脆弱性に対する攻撃の詳細は以下のとおりです。
最初のレベルのタイトル
ステップ 1: 利用可能な資産を取得するためのフラッシュ ローン
bZx コントラクトには flashBorrowToken() インターフェイスがあり、呼び出し元は bZx プラットフォームから資産を借りて「ゼロコスト」で DeFi アクティビティに参加し、トランザクションが完了したときに資産のこの部分を返済することができます。また、呼び出し元は、資産を貸与する際に、資産の受信者アドレスを指定できます。
Figure1: Flashloan Borrowing From bZx
今回、攻撃者は bZx プラットフォームに 7,500 ETH を貸し出し、以前に展開した攻撃者のコントラクトを資産受取人のアドレスとして指定しましたが、この部分は基本的な貸し出し機能であるため、ここではこれ以上の説明は省略します。
最初のレベルのタイトル
ステップ 2: sUSD を調達する
まずは今日の攻撃者の最高の脇役であるsUSDをご紹介します、sUSDはSynthetixプロジェクト当事者が発行する安定通貨で、通貨価格は通常1米ドルに相当し、総発行枚数は5,563,037枚です(2月統計) 2020年18月)。
最初のフラッシュローンを通じてETHを取得した後、攻撃者はKyberNetwork DEXを通じて合計900 ETHを2回に分けてsUSDに分割しました。このうち、初めて 540 ETH が交換され (KyberNetwork の内部クエリで取得された KyberUniswap の価格が最高)、攻撃者は 92,419 sUSD を取得し、2 回目のバッチは 18 回に分けられ、それぞれ 20 ETH と交換されました (Kyber- KyberNetwork のクエリ後に sUSD が確認されたため、攻撃者は 63,584 sUSD を取得し、合計 156,003 sUSD を取得しました。
Figure2: Pumping With Kyber (and Uniswap)
これら 2 つのステップも通常の DEX 交換プロセスであり、この 2 つのバッチ操作の後、sUSD から ETH への価格は市場価格の 2.5 倍である 0.00899 まで急騰しました。
最初のレベルのタイトル
3 番目のステップ: より多くのチップを吸収する
攻撃者は、Synthetix のexchangeEtherForSynths() インターフェイスを通じて、手持ちの 6,000 ETH をすべて sUSD に交換したいと考えています。そして、Synthetix はこの取引を促進するのに十分な sUSD を持っておらず、3,518 ETH のみを交換し、残りの 2,482 ETH を攻撃者に返却し、攻撃者は 943,837 sUSD を取得しました。
Figure3:Hoarding From Synthetix
これまでのところ、攻撃者は合計 1,099,841 sUSD を保有しており、総流通量の 19.7% を占めています。
最初のレベルのタイトル
ステップ 4: 住宅ローンの借入
攻撃者は、bZx の BringTokenFromDeposit() インターフェイスを通じて、手持ちの 1,099,841 sUSD をすべて bZx 契約に抵当に入れました。sUSD/ETH の通常価格によれば、bZx は攻撃者に 3,928 ETH を貸与する必要がありますが、bZx はそれを Oracle Kyber から取得しました。の割合が高すぎるため、6,796 ETH が貸し出され、さらに 2,868 ETH が借りられました。
Figure4: Collateralized Borrowing From bZx
最初のレベルのタイトル
ステップ5: フラッシュローン返済
攻撃者は、bZx から借りた 6,796 ETH と手持ちの残りの資産を使用して、以前に bZx から借りた 7,500 ETH を返し、フラッシュ ローン操作を完了するために立ち去りました。
Figure5: Repay The Flashloan To bZx
フラッシュローンプロセス全体が完了した後の現在の資産状況は次のとおりです。
1) bZx プラットフォームは攻撃者に 6,796 ETH を貸し出しました。
2) bZx プラットフォームは 1,099,841 sUSD を保持します。
3) 攻撃者はまだ 2,378 ETH を保有しています。
最終的に、攻撃者が保有していた 2,378 ETH は、合計 665,840 ドルの利益をもたらしました。要約する
要約する
この攻撃では、DeFi 製品の設計プロセスにいくつかの明らかな問題があることがわかります。
1) サードパーティトークンを導入する場合、サードパーティトークンの安全性、市場によって一方的に操作されて価格変動を引き起こす可能性がないかどうかを検討する必要があります。
2) DeFi プラットフォーム自体は、価格の許容範囲と検査メカニズムを備えている必要があり、価格を取得するためにサードパーティの Oracle を使用する場合は、他のパーティのデータを可能な限り検証する必要があります。
3) 価格を考えてプラットフォーム自体にも止水弁機構を設けるべきである。
最初のbZx攻撃による1,271ETHの損失と今回の2,378ETHの損失、そして2回の攻撃の差はわずか3日であることは、DeFi特別プロジェクトのセキュリティ問題が非常に深刻であることを示しています。
各プロジェクトは異なるチームによって開発されており、各チームはそれぞれの製品の設計と実装についての理解が限られているため、統合された製品はサードパーティのプラットフォームと対話する過程でセキュリティ上の問題が発生し、敵の攻撃を受ける可能性があります。 PeckShieldはここで、DeFiプロジェクトがオンラインになる前に、潜在的なセキュリティリスクを回避するために完全なセキュリティ監査を行うために、DeFiの各リンクの製品設計を詳細に調査したチームを見つけるために最善を尽くすべきであると提案しています。