SharkTeamは、後続のプロジェクトがこれを警告として受け止め、ブロックチェーン業界のセキュリティ防御を構築できることを願って、このインシデントの技術的分析を行い、セキュリティ上の注意点をまとめました。
攻撃されたターゲット契約:0x1cc79f3f47bfc060b6f761fcd1afc6d399a968b6攻撃は16のトランザクションで構成されています。p>
0x00c503b595946bccaea3d58025b5f9b3726177bbdc9674e634244135282116c7
攻撃の流れは次のとおりです。
1.ターゲット契約内のアドレス0x56a201b872b50bbdee0021ed4d1bb36359d291ed(略称0x56a2)のすべての担保と債務を読み取る。
以下を返します:
アドレス0x56a2は、対象契約において合計1,745wstETHの担保を持ち、負債総額は合計1,442,100mkUSDである。
2.align: left;">2.攻撃者0x7e39は、攻撃契約0xd996を経由して、mkUSDの負債契約でflashLoan関数を呼び出します。
パラメータreceiverはMigrateTroveZapに設定され、金額は上記で照会された負債全額です。
そして、受信側(この場合はMigrateTroveZap)のonFlashLoan関数がflashLoan関数内で呼び出されます。
onFlashLoan関数を通じて、フラッシュローンは、最初のすべての元の債務を返済し、受信者に担保を抽出し、受信者は、担保の再抵当権の一定数となり、債務の一定額を借ります。これは主に2つの関数を呼び出します:
(1)closeTrove関数は、債務を返済し、すべての担保(1745.08 SWTETH)troverManagerから受信者に抽出(ここではMigrateTroveZapです。契約です);
(2)openTrove関数で、463.18wstETHがレシーバーによってtroverManagerにrehypothecatedされ、1,443,598mkUSDの負債がある。
上記のデータからわかるように、フラッシュローン関数実行が完了した後、troverManagerから抽出されたアドレス0x56a2に属する担保はまだ受信機に保持されており、約1745.08 - 463.18 = 1281.90wstETH.
3.攻撃者0x7e39は、攻撃契約0xd996を介してライトニングローンでバランサーから1wstETHを借りました。
その後、1wstETHを抵当に入れ、2000mkUSDの借金をし、手数料と合わせて合計2200mkUSDの借金をしました。align:center">
4.と同様。ステップ2と同様に、mkUSD債務契約でflashLoan関数を呼び出します。パラメータreceiverは依然としてMigrateTroveZapに設定されており、金額は1wstETHの最後の質権設定後の債務全体、すなわち2000mkUSDです。FflashLoan関数では、onFlashLoan関数がreceiverで呼び出されます。onFlashLoan関数を呼び出した後、closeTrove関数とopenTrove関数を呼び出します。
ただ、ここでは、closeTrove関数とopenTrove関数のパラメータアカウントは、もはや上記のアドレス0x56a2ではなく、1wstETHが担保された攻撃契約0xd996です。(1)closeTrove関数は、負債を返済し、troverManagerからすべての担保(1 swtETH)をレシーバーに取り出します(ここではまだMigrateTroveZap契約です)。この時点で、レシーバーには合計1281.90 +1=1282.90 wstETHがあります。
(2)openTrove関数を使用し、レシーバーが1,282.80wstETH(ほぼ全額)をtroverManagerに再担保し、負債を負う。2001.8 mkUSD.
実際、ここで担保になっている1281.80wstETHは、攻撃しているコントラクト0xd996ではなく、上記のアドレス0x56a2に属しています。
5.最後に、攻撃者0x7e39は、コントラクト0xd996を攻撃することによって、コントラクト0xd996を攻撃しています。コントラクト0xd996は別にcloseTrove関数を呼び出し、攻撃コントラクト0xd996に担保された1282.80wstETHを抽出します。
フラッシュクレジットを返済した後も、攻撃者は1281.80wsteth、約230万米ドルの利益を得ています。
II.脆弱性の分析
このインシデントの根本的な原因は、プロジェクト契約における論理的チェックと特権チェックの存在であり、攻撃者はこの脆弱性を悪用することで、誓約を得ることができます。この脆弱性を悪用して、他のアカウントアドレスから誓約された資産を取得することができます。
攻撃者が最終的に取得したwstETHは、troverManagerコントラクト内の元のアドレス0x56a2の担保であり、mkUSDコントラクトのflashLoan関数を通じてMigrateTroveZapコントラクト内でカスタマイズされました。mkUSDコントラクトのflashLoan関数を通してMigrateTroveZapコントラクトでカスタマイズされました。
攻撃者は、mkUSDコントラクトのflashLoan関数とMigrateTroveZapコントラクトのonFlashLoan関数を通して、他のアカウントアドレスの担保化と抽出を操作します。
(1) flashLoan関数は、パラメータ受信者のアドレスのチェックサムを欠いています。onFlashLoan関数の受信者は、アカウントのすべての担保を受け取るので、受信者のために信頼できるチェックサムが必要です。
(
(2) onFlashLoan関数は、closeTrove関数もopenTrove関数も口座の資産を操作するため、口座アドレスの検証を欠いており、権限の観点から口座の検証を追加する必要がある;
これらの検証に加え
2つのアドレスパラメータの確認に加えて、flashLoan関数と実装ロジックのquantityパラメータも確認する必要があるかもしれません。
セキュリティに関する3つの推奨事項
この攻撃に対応するため、開発プロセスにおいて以下の注意事項を守る必要があります:
(1)。)設計と開発の過程で、プロジェクトは、ロジックの整合性と厳密性を維持するために、特にプロセス内の資産の転送になると、それは呼び出し元、呼び出し関数、関数パラメータ、転送ロジックなどが安全で信頼できることを確認するために、権限の検証を調査する機能を強化することがより重要です。
(2)プロジェクトが稼動する前に、専門の第三者監査チームを見つけ、契約監査を実施する必要がある。
当社について
SharkTeamのビジョンは、Web3の世界を安全にすることです。チームは、ブロックチェーンとスマートコントラクトの基礎理論に精通した、世界中の経験豊富なセキュリティ専門家とシニア研究者で構成されています。リスク識別とブロッキング、スマートコントラクト監査、KYT/AML、オンチェーン分析などのサービスを提供し、オンチェーンでのインテリジェントなリスク識別とブロッキングプラットフォームであるChainAegisを構築し、Web3の世界における高度な持続的脅威(APT)と効果的に戦うことができる。ChainAegisは、Polkadot、Moonbeam、polygon、Sui、OKX、imToken、CollabといったWeb3エコシステムの主要プレーヤーと長期的な関係を築いています。
公式ウェブサイト:https://www.sharkteam.org
ツイッター:https://twitter.com/sharkteamorg。
Telegram: https://t.me/sharkteamorg
Discord: https://discord.gg/jGH9xXCjDZ