アップグレード可能なスマートコントラクトの進化
アップグレード可能なスマートコントラクトの概要とそのセキュリティ課題。
― 1 分で読む
目次
ブロックチェーン技術の発展により、スマートコントラクトが登場した。これは、条件がコードの中に直接書かれた自己実行型の契約だ。この契約は、特に分散型金融(DeFi)や非代替性トークン(NFT)などの分散型アプリケーション(DApps)にとって重要だ。イーサリアムの立ち上げ以来、6100万以上のスマートコントラクトがこのプラットフォームにデプロイされたが、一度立ち上げられると一般的に変更不可で、アップグレードもできない。この変更不可能性は信頼と透明性を維持するために必要だけど、バグを修正したり新機能を追加する必要があるときには厄介だ。
この問題を解決するために、開発者たちはアップグレード可能なスマートコントラクト(USC)を作り出した。これにより、デプロイ後にコントラクトに変更を加えることができるようになる。しかし、このUSCは悪意のあるユーザーによって悪用される可能性のある新しいセキュリティリスクも引き起こす。この記事では、USCのさまざまなパターンを検証し、それらのセキュリティの影響について話す。
スマートコントラクトとその制限
スマートコントラクトは、イーサリアム上の多くのDAppsの基盤となっていて、特定の条件が満たされると自動的に事前定義されたアクションを実行するように設計されている。これらはSolidityというプログラミング言語を使って書かれ、イーサリアム仮想マシン(EVM)で走るバイトコードにコンパイルされる。
スマートコントラクトは透明性や自動化などの多くの利点を提供するが、固有の制限もある。一度デプロイされたスマートコントラクトは、そのコードを変更するのが難しくなる。これは、セキュリティの脆弱性が発見されたり、新機能を追加する必要があるときに課題となる。開発者は、脆弱なコントラクトをそのままにするか、新しいコントラクトを作るかの選択を迫られることがあり、これが古いコントラクトとやりとりをするユーザーにとって混乱を引き起こすことがある。
アップグレード可能なスマートコントラクト(USC)の導入
変わらないという制限を克服するために、開発者たちは2016年からUSCのためのさまざまなパターンを導入してきた。USCを使うと、コントラクトをアップグレードできる一方、その状態(残高やユーザーのやりとりなど)を維持することができる。USCを実装する方法はいくつかあり、それぞれに利点と課題がある。
USCの一般的なパターン
コントラクトの移行: この方法は、更新されたコードで新しいコントラクトをデプロイし、古いコントラクトから新しいコントラクトに状態を移行することを含む。ユーザーは新しいコントラクトに切り替える必要があり、適切に伝えられなければ混乱を招くことがある。
データの分離: このアプローチでは、コントラクトは2つの部分に分かれる。1つはロジック(計算を実行する部分)、もう1つは状態(データ)を保持する部分だ。アップグレードが必要なときには、新しいロジックコントラクトをデプロイし、データコントラクト内のアドレスを更新する。この方法はアップグレードを簡単にするが、アドレスの管理を慎重に行う必要がある。
ストラテジーパターン: データの分離に似ていて、このパターンでは主要なコントラクトが別のロジックコントラクトとやりとりすることができる。アップグレードが必要なときには、開発者はロジックコントラクトのアドレスを変更でき、状態に影響を与えずに済む。
プロキシパターン: この広く使われている方法は、ロジックと状態を別々のコントラクトに保ちながら、ユーザーがプロキシコントラクトとやりとりできるようにする。プロキシは関数呼び出しを処理し、それをロジックコントラクトに委任するため、必要に応じてロジックコントラクトのアドレスを更新できる。
ミックスパターン: これはストラテジーとプロキシパターンの組み合わせで、開発者はロジックコントラクトへの呼び出しを直接行ったり、プロキシを通じて委任したりできる。
メタモーフィックコントラクト: イーサリアムのハードフォークで導入されたこのパターンは、開発者が同じアドレスに新しいコードをデプロイできるようにする。しかし、古いコントラクトをまず破壊する必要があり、そのためすべての状態情報が失われる。
USCのセキュリティ問題
USCは柔軟性を提供するが、大きなセキュリティリスクも伴う。これらのコントラクトの脆弱性は、金銭的損失や不正アクセス、攻撃者による悪用につながる可能性がある。USCに関連する一般的なセキュリティ問題を以下に示す。
制限チェックの欠如
USCには、許可されたユーザーのみがアップグレードを実行できることを確認するチェックを含める必要がある。これらのチェックが欠けていると、誰でもコントラクトをアップグレードできてしまい、悪意のある者によってハイジャックされる可能性がある。
不十分な制限実装
場合によっては、コントラクトがユーザーにロジックコントラクトと直接やりとりを許可することがある。悪意のあるユーザーがロジックコントラクトを獲得すると、それを破壊し、正当なユーザーに対してサービス拒否を引き起こす可能性がある。
ロジックアドレスに対するチェックの欠如
コントラクトをアップグレードする際には、指し示すアドレスを変更することが多い。このアドレスにチェックがなければ、有害または存在しないコントラクトに設定される可能性があり、システム全体が使えなくなる。
コントラクトのバージョン問題
古いコントラクトから新しいものに移行する際には、古いバージョンを廃止することが重要だ。しかし、ユーザーが古いコントラクトとやりとりを続けると、混乱や潜在的なセキュリティリスクが生じることがある。
分散型取引所でのトークンコントラクト
古いトークンコントラクトが取引プラットフォームから削除されない場合、ユーザーは知らずに時代遅れまたは脆弱なトークンを交換してしまい、金銭的損失につながる可能性がある。
USCのセキュリティ測定
USCのセキュリティ状況をよりよく理解するために、研究者たちはUSCDetectorのようなツールを開発して、既存のコントラクトを分析し、脆弱性を特定できるようにしている。このツールは、コントラクトのソースコードではなくバイトコードを検査するため、確認済みや未確認のコントラクトを両方とも調べることができる。
USCDetectorは、取引履歴やコントラクトのやりとりなどの情報を収集することで機能する。このデータは、アップグレード機能の存在や、セキュリティリスクにつながる可能性のある誤設定を特定するのに役立つ。
ツールの評価
USCDetectorは、確認済みコントラクトのデータベースを使ってテストしたところ、多くのUSCを正確に特定できた。ツールは96%以上の精度率を報告していて、USCの脆弱性を検出するのに効果的だ。この高い精度は、同様のツールが進化する状況の中でスマートコントラクトのセキュリティ管理に役立つことを示唆している。
結論
USCの導入は、スマートコントラクトの不変性がもたらす課題に対する貴重な解決策を提供する。しかし、この柔軟性に伴うセキュリティの問題を認識することが重要だ。開発者は、これらの脆弱性を理解し、自分たちのコントラクトやユーザーを効果的に保護する必要がある。
引き続き行われる研究や、USCDetectorのような分析ツールの開発は、USCのセキュリティを強化し、分散型アプリケーションの整合性を確保するために重要だ。ブロックチェーン技術の環境が進化する中で、潜在的な脅威に対して警戒を怠らず、機能性とセキュリティの両方に対処する解決策を開発することが必要だ。
タイトル: Characterizing Ethereum Upgradable Smart Contracts and Their Security Implications
概要: Upgradeable smart contracts (USCs) have been widely adopted to enable modifying deployed smart contracts. While USCs bring great flexibility to developers, improper usage might introduce new security issues, potentially allowing attackers to hijack USCs and their users. In this paper, we conduct a large-scale measurement study to characterize USCs and their security implications in the wild. We summarize six commonly used USC patterns and develop a tool, USCDetector, to identify USCs without needing source code. Particularly, USCDetector collects various information such as bytecode and transaction information to construct upgrade chains for USCs and disclose potentially vulnerable ones. We evaluate USCDetector using verified smart contracts (i.e., with source code) as ground truth and show that USCDetector can achieve high accuracy with a precision of 96.26%. We then use USCDetector to conduct a large-scale study on Ethereum, covering a total of 60,251,064 smart contracts. USCDetecor constructs 10,218 upgrade chains and discloses multiple real-world USCs with potential security issues.
著者: Xiaofan Li, Jin Yang, Jiaqi Chen, Yuzhe Tang, Xing Gao
最終更新: 2024-03-02 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2403.01290
ソースPDF: https://arxiv.org/pdf/2403.01290
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。