Simple Science

最先端の科学をわかりやすく解説

# コンピューターサイエンス# 暗号とセキュリティ# ソフトウェア工学

Solidityコンパイラーのアップデートがスマートコントラクトのセキュリティに与える影響

SolidityのアップデートがEthereumのスマートコントラクトの脆弱性にどんな影響を与えるかを調べる。

― 1 分で読む


SolidityコンパイラSolidityコンパイラのセキュリティ分析の影響を調査中。コンパイラのアップデートと契約の脆弱性へ
目次

イーサリアムのスマートコントラクトは、分散型アプリケーションを運営するために人気が出てきたけど、これらの契約には深刻なセキュリティ問題があって、金銭的損失につながることがあるんだ。それに対処するために、これらの契約を書くために使われるSolidityコンパイラーはいくつかの更新があって、脆弱性を修正することを目指してる。それでも、これらの更新がセキュリティリスクを減らすのにどれくらい効果的だったかは不明なんだ。この記事では、Solidityコンパイラーの更新がイーサリアムのスマートコントラクトの脆弱性にどう影響を与えるかを調べるよ。

スマートコントラクトって何?

スマートコントラクトは、合意の条件がそのままコードに書かれた自己実行型の契約なんだ。イーサリアムのブロックチェーン上で動いていて、これは分散型で透明なシステムだよ。コードはブロックチェーンに保存されるから、誰でも見ることができて、セキュリティの脆弱性をチェックしたりテストしたりできるんだ。

スマートコントラクトがデプロイされた後は、変更できないんだ。この不変性は裏と表があって、契約が意図通りに動くことを保証する一方で、コードに欠陥や脆弱性があれば、それは特定の対策を取らない限り永遠に残っちゃう。

Solidityコンパイラーの役割

Solidityコンパイラーは、イーサリアムのスマートコントラクト開発で重要な役割を果たしてる。高水準のSolidityプログラミング言語で書かれたコードを、イーサリアムバーチャルマシン(EVM)で実行可能なバイトコードに変換するんだ。コードをコンパイルするだけじゃなくて、知られている脆弱性に対処するために定期的に更新されているよ。

それでも、Solidity言語は比較的新しくて、徹底的に標準化されていないから、潜在的な問題が生じる余地があるんだ。だから、コンパイラーの更新がスマートコントラクトのセキュリティにどう影響するかを理解することはすごく重要だよ。

脆弱性の対処の重要性

スマートコントラクトのセキュリティ問題は、大きな金銭的損失を引き起こす可能性があるんだ。有名な事件、たとえばパリティウォレットのハッキングなんかは、脆弱性が利用されて何百万もの暗号通貨が盗まれることがあるってことを示してる。開発者は、そんな災害を避けるために契約のセキュリティに気を配らなきゃいけない。

これらの懸念に対処するために、研究者や開発者はスマートコントラクト内の脆弱性を分析するためのツールを作っているんだ。これらのツールは、契約がデプロイされる前に潜在的なセキュリティリスクを特定することを目指してるよ。でも、Solidityコンパイラーの更新がこれらの脆弱性にどう影響するかに特化した研究はあまりなかったんだ。

研究概要

このトピックを明らかにするために、異なるバージョンのSolidityコンパイラーで書かれたスマートコントラクトの脆弱性を調査する実証研究を行ったよ。2022年8月31日までにデプロイされた50万以上の契約を分析して、特に3つの高重度の脆弱性に焦点を当てたんだ:ロックされたお金、tx.originの使用、チェックなしコール。

これらの契約を分析することで、さまざまなコンパイラーの更新でこれらの脆弱性の出現率がどう変わったかを見極めようとしたんだ。

方法論

データ収集

イーサリアムのブロックエクスプローラーであるEtherscanを使って、デプロイされたスマートコントラクトのデータを集めたよ。APIを利用して特定の日付までに作成された契約の情報を集め、そのソースコードを脆弱性のために分析したんだ。

脆弱性分析ツール

分析には、Solidity契約の脆弱性を特定するために設計されたSmartCheckというツールを使用したよ。コードをスキャンして既知の脆弱性パターンを検出するんだ。SmartCheckは効果的だけど、誤検出も出ることがあるから、実際には無害な契約も脆弱だとフラグ付けされるかもしれない。

分析された脆弱性

研究では、次の脆弱性に注目したよ:

  1. ロックされたお金:あるスマートコントラクトにイーサが送られ、そのイーサを引き出したり戻したりする機能がない場合に発生する。これにより資金が閉じ込められちゃって、金銭的損失を引き起こすんだ。

  2. tx.originの使用:この脆弱性は、認証のためにグローバル変数tx.originを使うことから生まれる。開発者がこの変数をmsg.senderの代わりに使った場合、無許可の第三者が資金にアクセスできるリスクがあるんだ。

  3. チェックなしコール:ある契約が別の契約を呼び出すときに、呼び出された契約が成功裏に実行されたかどうかをチェックしないときに発生する。これにより、トランザクションが失敗した場合にイーサを失う可能性があるんだ。

研究の結果

脆弱性の出現率

契約を分析した結果、いくつかの重要なトレンドに気づいたよ:

  1. ロックされたお金:Solidityコンパイラーのバージョン0.6のリリース後、ロックされたお金の脆弱性の出現率が大幅に減少したんだ。

  2. tx.originの使用:この脆弱性の出現率は、バージョンごとに一貫して低いままで、開発者がその使用を避けていることを示しているよ。

  3. チェックなしコール:バージョン0.8以降に減少は見られたものの、誤検出やコードクローンなどの要因により出現率は比較的高かったんだ。

コンパイラー更新の影響

私たちの調査結果は、Solidityコンパイラーの主要な更新が特定の脆弱性を減少させるために良い影響を与えていることを示しているよ:

  • バージョン0.5から0.6への更新は、ロックされたお金の脆弱性の顕著な減少をもたらした。
  • tx.originの低い出現率は、開発者がそれに伴うリスクを認識し、その使用を制限していることを示唆している。
  • チェックなしコールの脆弱性は、バージョン0.8の導入後に出現率が減少したものの、既存のコードクローンの影響で高いままだった。

コードクローンの調査

研究中に、多くの契約が既存のものの単なるコピーであることに気づいたんだ。これを「コードクローン」と呼んでいるけど、これらのクローンはしばしば元の契約と同じ脆弱性を持っている。コードクローンを調べることで、これらのコピーを対処することで脆弱性の出現率をさらに下げられることが分かったよ。

私たちは予備分析を行い、検出された脆弱性のかなりの部分がこれらのクローン契約から来ていることを確認したんだ。これらのクローンを分析から除外すると、脆弱性の出現率が大幅に減少したんだ。

古いコンパイラーのバージョンの考慮

研究で興味深い点は、デプロイされた契約の中に古いコンパイラーのバージョンがたくさん使われていることだったんだ。多くの開発者が未修正の脆弱性を含む古いバージョンを使い続けているんだ。これが最新のコンパイラー版に更新する重要性を強調してる。

古いバージョンで作られた契約を分析したところ、オリジナル契約の出現率がクローン契約よりも高いことが分かった。古いバージョンは互換性の問題を生じさせて、開発者が新しい更新の改善されたセキュリティ機能を活かすのを妨げるんだ。

結論

まとめると、私たちの研究はコンパイラーの更新がイーサリアムのスマートコントラクトの脆弱性を減らすのに非常に重要な役割を果たしていることを確認している。ロックされたお金、tx.originの使用、チェックなしコールの脆弱性は、異なるバージョンのコンパイラーで顕著な変化を示したんだ。

コードクローンの存在も脆弱性の状況に寄与していて、これらの問題に対処することが全体的なセキュリティを向上させるために重要だよ。その結果、開発者は自分のコンパイラーのバージョンを更新することを優先し、脆弱性に対する適切なチェックなしにコードを再利用することに気をつけるべきなんだ。

この研究は、スマートコントラクトのセキュリティや脆弱性分析ツールの効果についてのさらなる研究の必要性を示しているよ。ブロックチェーン技術の急速な発展を考えると、イーサリアムのスマートコントラクトをすべてのユーザーにとってより安全にする方法を調査し続けることが重要なんだ。

オリジナルソース

タイトル: An Empirical Study of Impact of Solidity Compiler Updates on Vulnerabilities in Ethereum Smart Contracts

概要: Vulnerabilities of Ethereum smart contracts often cause serious financial damage. Whereas the Solidity compiler has been updated to prevent vulnerabilities, its effectiveness has not been revealed so far, to the best of our knowledge. In this paper, we shed light on the impact of compiler versions of vulnerabilities of Ethereum smart contracts. To this end, we collected 503,572 contracts with Solidity source codes in the Ethereum blockchain and then analyzed their vulnerabilities. For three vulnerabilities with high severity, i.e., Locked Money, Using tx.origin, and Unchecked Call, we show that their appearance rates are decreased by virtue of major updates of the Solidity compiler. We then found the following four key insights. First, after the release of version 0.6, the appearance rate for Locked Money has decreased. Second, regardless of compiler updates, the appearance rate for Using tx.origin is significantly low. Third, although the appearance rate for Unchecked Call has decreased in version 0.8, it still remains high due to various factors, including code clones. Fourth, through analysis of code clones, our promising results show that the appearance rate for Unchecked Call can be further decreased by removing the code clones.

著者: Chihiro Kado, Naoto Yanai, Jason Paul Cruz, Kyosuke Yamashita, Shingo Okamura

最終更新: 2023-06-07 00:00:00

言語: English

ソースURL: https://arxiv.org/abs/2306.04250

ソースPDF: https://arxiv.org/pdf/2306.04250

ライセンス: https://creativecommons.org/licenses/by/4.0/

変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。

オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。

著者たちからもっと読む

類似の記事

プログラミング言語グローバルタイプを使ったメッセージパッシングシステムの監視

ネットワークアプリケーションのブラックボックスコンポーネントを監視するためのフレームワーク。

― 1 分で読む