この記事はコミュニティからの寄稿です。著者は CertiK の監査人である Minzhi He 氏です。

この記事で表明されている見解は寄稿者/著者の見解であり、必ずしもバイナンス アカデミーの見解を反映しているわけではありません。

簡単に言うと

ブロックチェーン ブリッジは、ブロックチェーン分野で相互運用性を実現するための基盤です。したがって、橋を確保することは非常に重要です。一般的なブリッジ セキュリティの脆弱性には、弱いオンチェーンおよびオフチェーン認証、ネイティブ トークンの不適切な処理、構成ミスなどが含まれます。ブリッジをテストして、すべての攻撃ベクトルに耐えられることを確認し、適切な検証ロジックを確保する必要があります。

導入 

ブロックチェーン ブリッジは、2 つのブロックチェーンを接続して相互作用を可能にするプロトコルです。ビットコインを所有しているが、イーサリアム ネットワーク上の DeFi 活動に参加したい場合、ブロックチェーン ブリッジを使用すると、ビットコインを売却せずに参加できるようになります。 

ブロックチェーン ブリッジは、ブロックチェーン セクターで相互運用性を実現するための基礎です。これらは異なるオンチェーン認証とオフチェーン認証を使用して動作するため、異なるセキュリティ脆弱性があります。

橋のセキュリティはなぜ重要ですか? 

ブリッジは通常、ユーザーがあるチェーンから別のチェーンに転送したいトークンを保持します。多くの場合、スマート コントラクトとして導入されるブリッジは、クロスチェーン転送が蓄積されるにつれて大量のトークンを保持するため、ハッカーにとって有利なターゲットとなります。 

さらに、ブロックチェーン ブリッジには多くのコンポーネントが関与するため、攻撃対象領域が大きくなります。その性質を考慮すると、悪意のある攻撃者はクロスチェーン アプリケーションを標的にして多額の資金を引き出すという強い動機を持っています。 

CertiKの推計によると、ブリッジ攻撃は2022年に13億ドル以上の損失をもたらし、年間損失総額の36%を占める。 

一般的なブリッジングの脆弱性

ブリッジのセキュリティを向上させるには、ブリッジの一般的な脆弱性を理解し、ブリッジを起動する前にテストすることが重要です。これらの脆弱性は以下の 4 種類に分類できます。 

弱いオンチェーン認証

単純なブリッジ、特に特定の DApps 用に設計されたブリッジの場合、オンチェーン検証は最小限であることがよくあります。これらのブリッジは、集中化されたバックエンドに依存してトークンの作成、書き込み、転送などの基本操作を実行し、すべての検証はオフチェーンで行われます。

対照的に、他のタイプのブリッジはスマート コントラクトを使用してメッセージを検証し、オンチェーン検証を実行します。この場合、ユーザーがチェーンにお金を入金すると、スマート コントラクトは署名付きメッセージを生成し、トランザクションで署名を返します。この署名は入金の証拠として機能し、別のチェーンでのユーザーの出金リクエストを検証するために使用されます。このプロセスにより、リプレイ攻撃や偽の預金記録など、さまざまなセキュリティ攻撃を防ぐことができます。 

ただし、オンチェーン認証プロセスに脆弱性がある場合、攻撃者によって重大な損害が発生する可能性があります。たとえば、ブリッジがトランザクション レコードの認証にマークル ツリーを使用している場合、攻撃者は改ざんされた証拠を作成する可能性があります。これは、認証プロセスが脆弱な場合、証明認証をバイパスし、アカウントに新しいトークンを鋳造できることを意味します。

一部のブリッジは「ラップされたトークン」の概念を実装しています。たとえば、ユーザーが DAI をイーサリアムから BNB チェーンに転送すると、その DAI はイーサリアム コントラクトから取得され、同等の量のラップされた DAI が BNB チェーン上に解放されます。 

ただし、このトランザクションが適切に認証されない場合、攻撃者は機能を操作して、ラップされたトークンをブリッジから誤ったアドレスにルーティングする悪意のあるコントラクトを展開する可能性があります。 

また、攻撃者は、ブリッジ契約から資産を引き出すために、「transferFrom」関数を使用してトークンを転送するために、被害者にブリッジ契約を承認させる必要があります。 

残念なことに、多くのブリッジは DApp ユーザーからの無制限のトークン承認を必要とするため、状況はさらに悪化します。これはガス料金を削減する一般的な方法ですが、スマート コントラクトがユーザーのウォレットから無制限の数のトークンにアクセスできるため、追加のリスクが生じます。攻撃者は、認証の欠如と過剰な承認を悪用して、他のユーザーからトークンを転送する可能性があります。

弱いオフチェーン認証

一部のブリッジ システムでは、オフチェーン バックエンド サーバーが、ブロックチェーンから送信されたメッセージの正当性を検証する上で重要な役割を果たします。この場合、預金トランザクションの検証に焦点を当てます。 

オフチェーン認証を備えたブロックチェーン ブリッジは次のように動作します。 

  1. ユーザーは DApp と対話して、ソース チェーン上のスマート コントラクトにトークンをデポジットします。

  2. この DApp は、API 経由でデポジット トランザクション ハッシュ文字列をバックエンド サーバーに送信します。

  3. トランザクション ハッシュ文字列はサーバー検証の対象となります。正当であるとみなされた場合、署名者はメッセージに署名し、その署名を API 経由でユーザー インターフェイスに送り返します。

  4. 署名を受け取ると、DApp はそれを検証し、ユーザーがターゲット チェーンからトークンを引き出すことができるようにします。

バックエンドサーバーは、処理する入金トランザクションが実際に行われ、改ざんされていないことを確認する必要があります。このバックエンド サーバーは、ユーザーがターゲット チェーン上でトークンを引き出すことができるかどうかを決定するため、攻撃者にとって価値の高いターゲットとなります。

バックエンド サーバーは、トランザクションが発行したイベントの構造と、イベントを発行したコントラクト アドレスを検証する必要があります。後者が無視された場合、攻撃者は悪意のあるコントラクトを展開して、正規の入金イベントと同じ構造を持つ入金イベントを偽造する可能性があります。 

バックエンド サーバーは、どのアドレスがイベントを発行したかを検証しない場合、これを有効なトランザクションとみなし、メッセージに署名します。その後、攻撃者はトランザクション ハッシュをバックエンドに送信し、検証をバイパスしてターゲット チェーンからトークンを引き出すことができます。

ネイティブトークンの不適切な処理

ブリッジには、ネイティブ トークンとユーティリティ トークンを処理するためのさまざまなアプローチがあります。たとえば、イーサリアム ネットワークでは、ネイティブ トークンは ETH であり、ほとんどのユーティリティ トークンは ERC-20 標準に準拠しています。 

ユーザーが自分の ETH を別のチェーンに転送する場合は、まずそれをブリッジ コントラクトに入金する必要があります。これを実現するには、ユーザーはトランザクションに ETH を添付するだけでよく、ETH の量はトランザクションの「msg.value」フィールドを読み取ることで取得できます。

ERC-20 トークンの送信は、ETH の送信とは大きく異なります。 ERC-20 トークンをデポジットするには、ユーザーはまずブリッジ コントラクトにトークンの使用を許可する必要があります。これを承認し、ブリッジ コントラクトにトークンをデポジットすると、コントラクトは「burnFrom()」関数を使用してユーザーのトークンを書き込むか、「transferFrom((」関数)」を使用してユーザーのトークンをコントラクトに転送します。) 。 

これを区別する 1 つのアプローチは、同じ関数内で if-else ステートメントを使用することです。もう 1 つのアプローチは、それぞれの状況に対処する 2 つの別々の関数を作成することです。 ERC-20 入金機能を使用して ETH を入金しようとすると、これらの資金が失われる可能性があります。

ERC-20 デポジット要求を処理するとき、ユーザーは通常、デポジット関数への入力としてトークン アドレスを提供します。トランザクション中に信頼できない外部呼び出しが発生する可能性があるため、これは重大なリスクを引き起こします。ブリッジでサポートされるトークンのみを含むホワイトリストを実装することは、リスクを軽減する一般的な方法です。ホワイトリストに登録されたアドレスのみが引数として渡すことができます。プロジェクト チームがトークン アドレスをフィルタリングしているため、これにより外部呼び出しが防止されます。

ただし、ネイティブ トークンにはアドレスがないため、ブリッジがネイティブ トークンのクロスチェーン転送を処理する場合にも問題が発生する可能性があります。アドレス番号 0 (0x000...0) は元のトークンを表します。関数にアドレス 0 を渡すと、実装が正しくなかった場合でもホワイトリストの検証がバイパスされる可能性があるため、これは問題となる可能性があります。 

ブリッジ コントラクトが「transferFrom」を呼び出してユーザーの資産をコントラクトに転送すると、アドレス 0 に「transferFrom」関数が実装されていないため、アドレス 0 への外部呼び出しは false を返します。ただし、コントラクトが戻り値を適切に処理しない場合でも、トランザクションは発生する可能性があります。これにより、攻撃者がトークンをコントラクトに転送せずにトランザクションを行う機会が生まれます。

間違った構成

ほとんどのブロックチェーン ブリッジでは、特権ロールがトークンとアドレスのホワイトリストまたはブラックリストへの登録、署名者の割り当てまたは変更、およびその他の重要な構成を担当します。一見小さなエラーでも重大な損失につながる可能性があるため、すべての構成が正しいことを確認することが非常に重要です。

実際、攻撃者が設定ミスにより転送記録の検証を回避してしまうという問題がありました。プロジェクト チームはハッキングの数日前に、変数の変更を伴うプロトコルのアップグレードを実行しました。信頼できるメッセージのデフォルト値を表すために使用される変数。この変更により、すべてのメッセージが自動的に証明されたものとみなされ、攻撃者が任意のメッセージを送信して検証プロセスをバイパスできるようになります。

橋の安全性を向上させる方法

上記で説明した 4 つの一般的なブリッジング脆弱性は、相互接続されたブロックチェーン エコシステムでセキュリティを確保する際の課題を示しています。これらの脆弱性のそれぞれに対処するには重要な考慮事項があり、それらすべてに適用できる単一のプレイブックはありません。 

たとえば、各ブリッジには独自の検証要件があるため、エラーのない検証プロセスを保証するための一般的なガイドラインを提供することは困難です。検証バイパスを防ぐ最も効果的なアプローチは、考えられるすべての攻撃ベクトルに対してブリッジを徹底的にテストし、適切な検証ロジックを確保することです。 

要約すると、潜在的な攻撃に対して厳密なテストを実行し、ブリッジの最も一般的なセキュリティ脆弱性に特別な注意を払うことが不可欠です。  

まとめ 

クロスチェーン ブリッジはその価値が高いため、長い間攻撃者の標的となってきました。開発者は、導入前に徹底的なテストを実施し、サードパーティを監査に参加させることで、ブリッジのセキュリティを強化し、過去数年間ブリッジを悩ませてきた壊滅的な攻撃のリスクを軽減できます。ブリッジはマルチチェーンの世界では非常に重要なコンポーネントですが、効果的な Web3 インフラストラクチャを設計および構築するにはセキュリティが最優先事項でなければなりません。

続きを読む:

ブロックチェーンブリッジとは何ですか?

クロスチェーンの相互運用性とは何ですか?

3 つの人気のある暗号通貨ブリッジとその仕組み

ラップされたトークンとは何ですか?

免責事項とリスク警告: このコンテンツは、一般情報および教育目的のみを目的として「現状のまま」提供されており、いかなる種類の表明や保証もありません。これは、財務上、法律上、またはその他の専門的なアドバイスとして解釈されるべきではなく、特定の製品やサービスの購入を推奨するものでもありません。適切な専門アドバイザーから独自のアドバイスを求める必要があります。記事が第三者寄稿者によって寄稿されている場合、表明された見解は第三者寄稿者に帰属し、必ずしもバイナンス アカデミーの見解を反映しているわけではないことに注意してください。詳細については、こちらの免責事項全文をお読みください。デジタル資産の価格は変動する可能性があります。投資価値は上がるこ​​ともあれば下がることもあり、投資額が戻ってこない可能性があります。投資決定についてはお客様が単独で責任を負い、Binance Academy はお客様が被る可能性のある損失については責任を負いません。この資料は、財務上、法律上、またはその他の専門的なアドバイスとして解釈されるべきではありません。詳細については、利用規約とリスク警告をご覧ください。