この記事はコミュニティからの投稿です。著者は CertiK の監査人である Minzhi He 氏です。
この記事で表明されている見解は寄稿者/著者の見解であり、必ずしもバイナンス アカデミーの見解を反映しているわけではありません。
まとめ
ブロックチェーンブリッジは、ブロックチェーン分野での相互運用性を実現する上で重要です。したがって、橋の安全は非常に重要です。ブリッジの一般的なセキュリティ脆弱性には、弱いオンチェーンおよびオフチェーン検証、ネイティブ トークンの不適切な処理、構成ミスなどが含まれます。合理的な検証ロジックを確保するために、考えられるすべての攻撃ベクトルに対してブリッジをテストすることをお勧めします。
導入
ブリッジ ブロックチェーンは、2 つのブロックチェーンを接続して相互作用を可能にするプロトコルです。ビットコインを持っているが、イーサリアムネットワーク上の DeFi アクティビティに参加したい場合は、ブロックチェーンブリッジを使用すると、ビットコインを販売せずに参加することができます。
ブロックチェーンブリッジは、ブロックチェーン分野での相互運用性を実現するために不可欠です。このブリッジは、さまざまなオンチェーンおよびオフチェーン検証を使用して機能するため、さまざまなセキュリティ脆弱性があります。
ブリッジのセキュリティが重要なのはなぜですか?
ブリッジは通常、ユーザーがあるチェーンから別のチェーンに転送したいトークンを保存します。ブリッジはスマート コントラクトとして実装されることが多く、クロスチェーン転送が蓄積されると大量のトークンが保存されるため、ハッカーにとって魅力的なターゲットとなります。
さらに、ブロックチェーン ブリッジには多くのコンポーネントが関与するため、攻撃ギャップが大きくなります。したがって、犯罪者は多額の資金を流出させるためにクロスチェーン アプリケーションを標的にするという強い動機を持っています。
CertiK の推定によると、ブリッジ攻撃により 2022 年に 13 億ドル以上の損失が発生しており、これは同年の損失総額の 36% に相当します。
ブリッジの一般的なセキュリティ脆弱性
ブリッジのセキュリティを向上させるには、ブリッジの一般的なセキュリティ脆弱性を理解し、開始前にブリッジをテストすることが重要です。これらの脆弱性は 4 つの領域に分類できます。
弱いオンチェーン検証
単純なブリッジ、特に特定の DApps 用に設計されたブリッジの場合、オンチェーン検証は最小限です。このブリッジは、集中化されたバックエンドに依存して、ミント、書き込み、トークン転送などの基本操作を実行し、すべての検証はオフチェーンで行われます。
対照的に、他のタイプのブリッジはスマート コントラクトを使用してメッセージを検証し、オンチェーン検証を実行します。この状況では、ユーザーがチェーンに資金を入金すると、スマート コントラクトは署名付きメッセージを生成し、トランザクションで署名を返します。この署名はデポジットの証拠として機能し、他のチェーンでのユーザーのリクエストを検証するために使用されます。このプロセスにより、リプレイ攻撃や偽の入金記録など、さまざまなセキュリティ攻撃を防ぐことができます。
ただし、オンチェーン検証プロセス中に脆弱性が存在すると、攻撃者によって重大な損害が発生する可能性があります。たとえば、ブリッジがマークル ツリーを使用してトランザクション レコードを検証する場合、攻撃者は誤った証拠を生成する可能性があります。これは、検証プロセスに脆弱性がある場合、証明の検証をバイパスし、アカウントに新しいトークンを鋳造できることを意味します。
一部のブリッジは「ラップされたトークン」の概念を実装しています。たとえば、ユーザーが DAI をイーサリアムから BNB チェーンに転送すると、その DAI はイーサリアム コントラクトから取得され、同量のラップされた DAI が BNB チェーンに発行されます。
ただし、これらのトランザクションが適切に検証されていない場合、攻撃者はその機能を操作して、ラップされたトークンをブリッジから間違ったアドレスにルーティングする悪意のあるコントラクトを実装する可能性があります。
また、攻撃者は、「transferFrom」関数を使用してトークンを転送し、ブリッジ コントラクトから資産を排出するために、被害者にブリッジ コントラクトへの同意を要求します。
残念ながら、ほとんどのブリッジは DApp ユーザーからの無制限のトークン承認を必要とするため、この問題はさらに悪化します。これはガス料金を下げる一般的な方法ですが、スマート コントラクトが無制限の数のユーザー ウォレットからトークンにアクセスできるようになるため、追加のリスクが生じます。攻撃者は、検証の欠如と過剰な承認を悪用して、他のユーザーから自分自身にトークンを転送する可能性があります。
弱いオフチェーン検証
一部のブリッジ システムでは、オフチェーン バックエンド サーバーが、ブロックチェーンから送信されたメッセージの有効性を検証する際に重要な役割を果たします。この場合、預金トランザクションの検証に焦点を当てます。
ブロックチェーン ブリッジがオフチェーン検証で動作する方法は次のとおりです。
ユーザーは DApp と対話して、ソース チェーン上のスマート コントラクトにトークンをデポジットします。
次に、DApp は API 経由で入金トランザクションのハッシュをバックエンド サーバーに送信します。
トランザクション ハッシュには、サーバーによる検証が必要です。有効であると判断された場合、署名者はメッセージに署名し、API 経由で署名をユーザー インターフェイスに送り返します。
署名を受信した後、DApp はそれを検証し、ユーザーがターゲット チェーンからトークンを引き出すことを許可します。
バックエンドサーバーは、処理された入金トランザクションが実際に発生し、偽造されたものではないことを確認する必要があります。このバックエンド サーバーは、ユーザーがターゲット チェーン上でトークンを引き出すことができるかどうかを決定するため、攻撃者にとって価値の高いターゲットとなります。
バックエンド サーバーは、トランザクションの結果として生じるイベント構造と、イベントを生成したコントラクトのアドレスを検証する必要があります。コントラクトアドレスが無視されると、攻撃者は悪意のあるコントラクトを実装して、正規の入金イベントと同じ構造を使用して入金イベントを偽装する可能性があります。
イベントを生成したアドレスを検証しない場合、バックエンド サーバーはこのコントラクトが有効であると想定し、メッセージに署名できます。次に、攻撃者はトランザクション ハッシュをバックエンドに送信することで検証を回避し、ターゲット チェーンからトークンを引き出すことができます。
ネイティブトークンの不適切な処理
Bridge は、ネイティブ トークンとユーティリティ トークンを処理するためにさまざまなアプローチを採用しています。たとえば、イーサリアム ネットワークでは、ネイティブ トークンは ETH であり、ほとんどのユーティリティ トークンは ERC-20 標準に従っています。
ユーザーが自分の ETH を別のチェーンに転送する場合は、最初にそれをブリッジ コントラクトに入金する必要があります。これを実現するには、ユーザーは ETH をトランザクションに添付するだけで、トランザクションの「msg.value」フィールドを読み取ることで ETH の量を取得できます。
ERC-20 トークンの入金は、ETH の入金とは大きく異なります。 ERC-20 トークンをデポジットするには、ユーザーはまずブリッジ コントラクトにトークンの使用を許可する必要があります。ユーザーが同意してブリッジ コントラクトにトークンを預けると、コントラクトは「burnFrom()」関数を使用してユーザーのトークンを書き込むか、「transferFrom()」関数を使用してユーザーのトークンをコントラクトに転送します。
それらを区別する 1 つのアプローチは、同じ関数内で if-else ステートメントを使用することです。もう 1 つのアプローチは、各シナリオを処理する 2 つの個別の関数を作成することです。 ERC-20 入金機能を使用して ETH を入金しようとすると、資金が失われる可能性があります。
ERC-20 デポジットリクエストを処理する場合、ユーザーは通常、デポジット関数への入力としてトークンアドレスを提供します。トランザクション中に信頼できない外部呼び出しが発生する可能性があるため、このアクションは重大なリスクをもたらします。リスクを最小限に抑えるには、ブリッジバック トークンのみを含むホワイトリストを実装するのが一般的です。ホワイトリストに登録されたアドレスのみが引数として渡すことができます。プロジェクト チームはすでにトークン アドレスをフィルタリングしているため、これにより外部呼び出しが防止されます。
ただし、ネイティブ トークンにはアドレスがないため、ブリッジがネイティブ トークンのクロスチェーン転送を処理するときにも問題が発生します。アドレス 0 (0x000...0) は元のトークンを表します。関数に null アドレスを渡すと、実装が間違っていたとしてもホワイトリストの検証がバイパスされる可能性があるため、これは問題となる可能性があります。
ブリッジ コントラクトが「transferFrom」を呼び出してユーザー アセットをコントラクトに転送すると、アドレス 0 には「transferFrom」関数が実装されていないため、アドレス 0 への外部呼び出しは false を返します。ただし、コントラクトが結果の値を正しく処理できない場合でも、トランザクションは発生する可能性があります。これにより、攻撃者がトークンをコントラクトに転送せずにトランザクションを実行する機会が生まれます。
構成エラー
ほとんどのブロックチェーン ブリッジでは、特権的な立場が、トークンとアドレスのホワイトリストまたはブラックリストへの登録、署名者の割り当てまたは変更、その他の重要な構成を担当します。一見些細なエラーでも大きな損失を引き起こす可能性があるため、すべての構成が正確であることを確認することが重要です。
実際、あるインシデントでは、攻撃者が設定エラーにより転送記録の検証を回避することに成功しました。プロジェクト チームは、ハッキングの数日前に、変数の変更を含むプロトコルのアップグレードを実施しました。この変数は、信頼できるメッセージのデフォルト値を表すために使用されます。この変更により、すべてのメッセージが自動的に証明されたものとみなされ、攻撃者が自由にメッセージを送信し、検証プロセスを回避できるようになります。
ブリッジのセキュリティを向上させる方法
上記で説明したブリッジの 4 つの一般的な脆弱性は、相互接続されたブロックチェーン エコシステムでセキュリティを確保する際の課題を示しています。これらの各脆弱性に対処するには、重要な考慮事項があります。すべてに適用できる単一のガイドラインはありません。
たとえば、各ブリッジには固有の検証要件があるため、エラーのない検証プロセスを保証するための一般的なガイドラインを提供することは困難です。検証バイパスを防ぐための最も効果的なアプローチは、考えられるすべての攻撃ベクトルに対してブリッジを徹底的にテストし、検証ロジックが合理的であることを確認することです。
要約すると、潜在的な攻撃に対して厳密なテストを実施し、ブリッジの一般的なセキュリティ脆弱性に特別な注意を払うことが重要です。
カバー
クロスチェーン ブリッジはその価値が高いため、長い間攻撃者の標的となってきました。建設業者は、実装前に徹底的なテストを実施し、第三者による監査を実施することで橋のセキュリティを強化し、過去数年間橋を悩ませてきた高額なハッキングのリスクを軽減できます。ブリッジはマルチチェーンの世界では不可欠ですが、効果的な Web3 インフラストラクチャを設計および構築する際には、セキュリティを最大の関心事にする必要があります。
さらに読む
ブリッジブロックチェーンとは何ですか?
クロスチェーンの相互運用性とは何ですか?
3 つの人気のある暗号化ブリッジとその仕組み
ラップされたトークンとは何ですか?
免責事項とリスク警告: このコンテンツは、一般情報および教育目的のみを目的として「現状のまま」提供されており、いかなる種類の表明や保証もありません。このコンテンツは、財務上、法律上、またはその他の専門的なアドバイスとして解釈されるべきではなく、特定の製品やサービスの購入を推奨するものでもありません。適切な専門アドバイザーにアドバイスを求める必要があります。記事が第三者寄稿者からの寄稿である場合、表明された見解は第三者寄稿者の見解であり、必ずしもバイナンス アカデミーの見解を反映しているわけではないことに注意してください。詳細については、こちらの免責事項全文をお読みください。デジタル資産の価格は変動する可能性があります。投資価値は下落または上昇する可能性があります。投資金額が戻ってこない場合があります。投資決定についてはお客様ご自身が全責任を負います。 Binance Academy は、お客様が経験する可能性のある損失に対して責任を負いません。この資料は、財務上、法律上、またはその他の専門的なアドバイスとみなされるべきではありません。詳細については、利用規約とリスク警告をご覧ください。

