スマートコントラクトにおける再入攻撃について説明

スマートコントラクトの潜在的な脆弱性

スマートコントラクトの革新的な世界を研究している研究者として、私はその革新的な可能性をどれだけ強調してもしすぎることはありません。ただし、これらの自動実行契約は、悪意のある行為者による操作に対して無敵ではないことを認識することが重要です。

無効な入力検証は一般的な問題であり、攻撃者が予期しない入力を通じて契約の実行に影響を与える可能性があります。さらに、ビジネス ロジックを誤って適用すると、予期しない結果や契約の論理的な抜け穴が生じて脆弱性が生じる可能性があります。最後に、外部データ ソースやその他のコントラクトにリンクされているものなど、外部呼び出しの処理を誤ると、潜在的なリスクが生じる可能性があります。

リエントランシー攻撃は、コントラクトが自身の状態遷移を完了する前に別のコントラクトを外部呼び出しするスマート コントラクトの脆弱性を表します。これにより、呼び出されたコントラクトが最初の呼び出し元に干渉し、一部の操作を複数回実行する可能性が生じます。その結果、意図しないアクションが発生したり、攻撃者が契約の状態を操作できるようになり、資金の枯渇やその他の悪影響が引き起こされる可能性があります。

開発者は、潜在的なリスクがあるため、外部契約やデータ ソースを扱うときは注意する必要があります。望ましくないアクションやセキュリティの抜け穴を防ぐために、外部呼び出しを慎重に管理する必要があります。新たな脅威から契約を守るには、徹底したテストなどのスマート コントラクトのセキュリティ対策に細心の注意を払うことが不可欠です。

スマートコントラクトにおけるリエントランシー攻撃とは何ですか? 「リエントリー攻撃は、コントラクトが自身の状態変更を完了する前に、他のコントラクトまたは機能への外部呼び出しを行うときに、スマート コントラクトで発生します。」契約 A から契約 B への呼び出しにより、契約 B は契約 A との対話を再開できるようになり、特定の機能が繰り返され、予期せぬ有害な結果が生じる可能性があります。例としては、契約 A が資金を送金するために契約 B とのトランザクションを開始したが、その後、相互作用中に自身の状態が変更された場合が考えられます。コントラクト B のコード内のコールバック関数により、攻撃者は転送関数が完全に完了する前に転送関数を繰り返しトリガーすることで、コントラクト A の状態遷移を妨害できる可能性があります。この悪意のあるアクションにより、攻撃者は 1 回の取引中に契約 A から複数回資金を吸い上げることに成功する可能性があります。2016 年に、イーサリアム ブロックチェーン上の分散型自律組織 (DAO) に関わる悪名高い事件が発生しました。ハッカーはリエントラント攻撃と呼ばれるスマート コントラクト コードの脆弱性を悪用し、DAO から繰り返し資金を流出させることができました。その結果、数百万ドル相当のイーサ(ETH)が失われました。さらに、Uniswap、Lendf.Me、BurgerSwap、SURGEBNB、Cream Finance、Siren Protocol などのさまざまな分散型金融 (DeFi) プラットフォームは、リエントラント攻撃により大幅な経済的打撃を受けました。これらの侵入による被害額は350万ドルから2,500万ドルに及び、DeFiセクターにおけるリエントランシーの脆弱性が継続するリスクを強調しています。

再入攻撃の仕組み

再入攻撃は、スマート コントラクト内の連続する関数呼び出しと外部トランザクション間の相互作用を悪用します。これらのシーケンスを操作することで、攻撃者は特定の機能が完了する前に繰り返しトリガーし、不当な資金移動などの望ましくないアクションを引き起こす可能性があります。

ターゲットとなったコントラクトが変更の処理を完了する前に、侵入したコントラクトがコントラクトをだまして自分自身へのコールバックを実行させます。このような行為は、繰り返しの撤退や不注意な行動につながる可能性があります。

スマートコントラクトにおける再入攻撃について説明

攻撃者は、ターゲットコントラクト内の「引き出し」機能をトリガーすることでトランザクションを開始し、残高を更新する前にイーサを送信します。同時に、攻撃者のコントラクトには、「引き出し」関数を再帰的に呼び出すフォールバック関数が含まれており、資金を送金する前に残高を更新する際の被害者コントラクトの監視を利用して、残高が更新される前に被害者コントラクトからより多くの資金を排出します。

単純な例を使用して、再入攻撃がどのように機能するかを詳しく見てみましょう。

「出金」機能を備えたスマートコントラクト

デジタルウォレットスマートコントラクトが存在し、ユーザー残高を管理し、資金の引き出しを処理するための引き出し機能を備えています。ユーザーはこの機能を利用して、トークンまたはイーサをスマートコントラクトから各自のウォレットに転送できます。

ユーザー対話と機能の実行

ユーザーは自分のデジタルウォレットから独立して出金を開始します。引き出し機能を利用して、引き出したい金額を入力します。

金融取引の機能を研究している研究者として、「引き出し」機能が開始されると、ユーザーが提案された引き出しに十分な資金を所有しているかどうかがチェックされると説明できます。この条件が満たされた場合、必要な金額がユーザーの指定されたアドレスに送金されます。

外線通話

この段階では、契約の脆弱性が明らかになります。別の契約またはアカウントへの外部呼び出しは、引き出しがユーザーの残高から差し引かれる前に行われます。

再帰呼び出し

外部コントラクトのコードに、再定義された「withdraw」関数など、最初のコントラクトをもう一度呼び出すことができる関数が含まれている場合、この設定により再帰ループが発生します。したがって、「withdraw」メソッドは完了する前に繰り返しトリガーされる可能性があります。

リエントランシーの悪用

スマート コントラクトを研究している研究者として、私は一部のウォレット実装に潜在的な脆弱性を発見しました。攻撃者は、悪意のあるコントラクトを作成し、ウォレットの機能のループを利用することで、これを悪用する可能性があります。それがどのように展開するかは次のとおりです。

フォールバック機能

特定のシナリオでは、攻撃者はスマート コントラクトのフォールバック機能 (データやイーサリアムなしでコントラクトが呼び出されたときにトリガーされる独特の機能) を悪意のある目的で悪用する可能性があります。資金処理中にこの機能を継続的に起動することで、リエントランシー攻撃が実行される可能性があります。

国家操作と度重なる撤退

標的のウォレットコントラクトは外部呼び出しを処理するまでアカウント残高を更新しないため、攻撃者は単一のトランザクションで「引き出し」機能を複数回繰り返し使用する可能性があります。その結果、この脆弱性により不正な資金引き出しが可能となり、攻撃者が余剰資金を盗み、ウォレット契約のユーザーに重大な経済的損失を与えることが可能になります。

リエントランシー攻撃の結果 スマート コントラクトのユーザーは、多額の金銭的損失が発生する可能性があるため、再入攻撃による重大なリスクに直面しています。再入攻撃は、脆弱なスマートコントラクトにおいて、不当な現金の引き出しや資金の操作など、不正なトランザクション結果を引き起こす可能性があります。悪意のある攻撃者は、契約のリソースに繰り返しアクセスして枯渇させることでこの弱点を悪用し、侵害された契約内で資産を預けたり保持したりしたユーザーに多大な経済的損害をもたらします。スマートコントラクトとブロックチェーンテクノロジーの安全性と信頼性への信頼は、再入攻撃によって損なわれる可能性があります。 2016 年のイーサリアム ネットワークに対する DAO 侵害のような顕著な事件で示されているように、これらの弱点は重大な損害につながる可能性があり、コミュニティに多大な経済的損失と評判の低下をもたらしました。ブロックチェーン プラットフォームやプロジェクトに対するリエントランシー攻撃の影響を研究している研究者として、私はこれらの攻撃が短期的な経済的影響を超えて広範な影響を与える可能性があることを発見しました。たとえば、規制や法的な監視が続き、投資家の信頼が損なわれ、影響を受けるブロックチェーンエコシステムの評判が損なわれる可能性があります。この脆弱性の認識により、ユーザーはスマート コントラクトに参加したり、分散型アプリケーション (DApps) に投資したりする際に注意を払うようになり、最終的にはブロックチェーン テクノロジー全体の導入と拡大が遅れる可能性があります。

再入攻撃を軽減する方法

契約アナリストとして、私はリエントリー攻撃に関連するリスクを最小限に抑えるために、スマート コントラクトを作成および検査する際に最適な手順に従うことを強くお勧めします。

1 つのアプローチは、セキュリティに関して高い評価を誇る、確立されたコーディング ライブラリを利用することです。その理由は、これらのライブラリは開発者コミュニティによる厳格なテストと精査を受けており、コードに弱点や脆弱性が導入されるリスクを最小限に抑えているためです。

開発者はさらに、「チェック – 効果 – インタラクション」設計のようなセキュリティ対策を採用する必要があります。これにより、状態の調整が単一の分割不可能な単位として発生することを保証することで、再入攻撃のリスクが軽減されます。このようなタイプの弱点に対する追加の予防策として、開発者は、再入可能で安全なスマート コントラクト開発フレームワークが存在する場合、それを利用できます。

簡単に言うと、セキュリティ フレームワークを使用すると、フレームワーク固有のセキュリティ機能により、開発者が再入攻撃に対する保護措置を手動で実装する必要性が減ります。それにもかかわらず、開発者にとって、進化するブロックチェーンの脅威と脆弱性について常に最新の情報を入手することが重要です。

2024-05-16 15:45