
Axion Network トークン AXN の価格は、11 月 2 日に公開されてからわずか数時間で 100% 急落しました。この価格暴落によりその脆弱性が明らかになりました。以下は CertiK セキュリティ監査チームによるこのインシデントの完全な分析です。
北京時間で2020年11月2日午後7時頃➀、ハッカーはアクシオンステーキングコントラクトのアンステーク機能を利用して約800億のAXNトークンを鋳造することに成功した。
次に、ハッカーは Uniswap 取引所で AXN トークンをイーサリアムと交換し、Uniswap の ETH-AXN 取引ペアのイーサリアムがなくなり、AXN トークンの価格が 0 になるまでこのプロセスを繰り返しました。
攻撃から数分以内に、CertiK セキュリティ監査チームは攻撃の通知を受け、直ちに調査を開始しました。
CertiK セキュリティ監査チームは、コードのデプロイ時にプロジェクトが依存する OpenZeppelin の依存関係に悪意のあるコードを挿入する内部操作によって攻撃が引き起こされた可能性が最も高いと考えています。
悪意を持って悪用されたスマート コントラクト機能は、CertiK 監査の範囲外です。
副題
計画的攻撃
ハッカーは、前日に tornado.cash➁ から取得した匿名資金➂ を使用して攻撃を開始しました。これは、これが計画的な攻撃であることを示しています。
攻撃が失敗した場合に備えて資金を節約するためかもしれませんが、ハッカーアカウントは資金を受け取った後、すぐに tornado.cash を通じて 2.1 イーサコインを送金しました。
副題
攻撃準備
北京時間午後 4 時 ➄ に、ハッカーはまず量 0、連続抵当期間 1 日をパラメータとしてステーク関数を呼び出し、Axion Network の抵当契約に「空」の抵当を作成します。
これにより、セッション ID 6、数量 0、株価 0 のハッカーのセッション エントリが作成されます。
攻撃が成功することを予期して、ハッカーは Uniswap 取引所に対して無制限の AXN を事前に承認しました。
その後、AXN トークンに変換される資金量に関する Axion の NativeSwap 契約を承認しました。
ハッカーは北京時間午後 5 時頃 5 に NativeSwap コントラクトの入金関数を呼び出しましたが、ハッカーは交換した AXN を取得するためにコントラクトの引き出し関数を呼び出しませんでした。これは、NativeSwap コントラクトの swapTokenBalanceOf 関数ではっきりと確認できます。 。
副題
攻撃の実行
上記のトランザクションは、ハッカーが実際のステーク解除攻撃をカバーするための発煙弾にすぎません。
sessionDataOf マッピングはハッカーによって行われたトランザクションによって変更されなかったため、これはマルチアドレス攻撃であると結論付けることができます。
sessionDataOf マッピングの影響について考えられる理由を見つけるために、CertiK セキュリティ監査チームは、プロジェクト パーティと CertiK が GitHub コード リポジトリで共有している契約ソース コードをレビューしました。
副題
攻撃ベクトル
デプロイされたステーキング コントラクトのソース コードを分析した後、CertiK セキュリティ監査チームは、ステーキング コントラクトのデプロイされたソース コード ➆ 665 ~ 671 行目に、変更された OpenZeppelin ライブラリ AccessControl スマート コントラクトで発生したコード インジェクションを発見しました。
リンク内の checkRole 関数は、プロジェクトの GitHub コード リポジトリに依存関係としてリストされている OpenZeppelin v3.0.1 の実装の一部ではありません。
checkRole 関数には、次のアセンブリ モジュールが存在します。
この関数を使用すると、渡されたパラメータに従って、基になる呼び出しを通じて特定のアドレスが任意にコントラクトに書き込むことができます。注釈付きのアセンブリ モジュールは次のようになります。
結論は
結論は
この攻撃に関与したコードは、コントラクトが展開される前に意図的に追加されました。
このインシデントは、CertiK が完了した監査とは何の関係もありません。この攻撃の責任者は、Axion Network 契約の導入に関与した関係者であるはずです。
ここでCertiKは、監査レポートの有効性を確保し、プロジェクトのセキュリティを保証するために、監査レポートには導入されたスマートコントラクトのアドレスを含める必要があることも特に強調しています。アドレスが指すコントラクトのコードは、監査されたソース コードと同じである必要があります。したがって、プロジェクトが「監査済み」であることがわかったからといって、バックグラウンドチェックを行わずにやみくもにフォローアップしないでください。
CertiKセキュリティオラクル、チェーン上でリアルタイムに対話できるセキュリティ検出ツールとして、デプロイされたスマート コントラクトが監査されたバージョンと一致することを効果的に確認および検証できます。
分散型セキュリティ オペレータ ネットワークから一連のセキュリティ スコアを取得し、ネットワーク評価用の安全で信頼できるソース コードを取得できます。また、オラクル マシンを使用して誰もが契約のセキュリティを検証できます。
参考リンク:
参考リンク:
➀https://etherscan.io/tx/0xc2a4a11312384fb34ebd70ea4ae991848049a2688a67bbb2ea1924073ed089b4
➂https://etherscan.io/tx/0x86f5bd9008f376c2ae1e6909a5c05e2db1609f595af42cbde09cd39025d9f563/advanced
➃https://etherscan.io/tx/0x6b34b75aa924a2f44d6fb2a23624bf5705074cbc748106c32c90fb32c0ab4d14
➄https://etherscan.io/tx/0x5e5e09cb5ccad29f1e661f82fa85ed172c3b66c4b4922385e1e2192dc770e878
➅https://etherscan.io/tx/0xf2f74137d3215b956e194825354c693450a82854118a77b9318d9fdefcfbf875
➆https://etherscan.io/address/0xcd5f8dcae34f889e3d9f93f0d281c2d920c46a3e
➇https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.0.1/contracts/access/AccessControl.so