34,200のEthereumのスマートコントラクトにバグが存在

f:id:nanashi0x:20180305131233p:plain

www.bleepingcomputer.com

Ethereumのスマートコントラクトを対象に実施したスキャンで、34,200ものスマートコントラクトに脆弱性が存在している事が明らかになった。

それらのスマートコントラクトには、Etherを盗み出す事が出来る。

スマートコントラクトとは

スマートコントラクトとは、第三者コントラクトに対して何かしらのインプットを行なった際に、予め自動的にプログラムされた命令文を実行するコードである。

現在Ethereumは、ビットコインに次いで時価総額2位になっており、その人気を支えているのが「スマートコントラクト」である。

スマートコントラクトという機能を利用して、これまで膨大な数のプロジェクトが誕生しており、毎日の様にICOが行われている。

スマートコントラクトにもバグが存在する

スマートコントラクトは、他のプログラムされたコードと特に変わらない。

Solidityという独自の言語で書かれているプログラムと思えばいい。

つまり、他のプログラムに存在する様なバグが存在する事を意味する。

2016年夏に、何者かがDAOというプロジェクトから5千万ドル分のEtherを盗んだ事件が発生した。

DAOが盗まれた際にエクスプロイトされたバグは、シンガポール国立大学のセキュリティ研究者によって発見されたバグだったのだ。

2016年に、Ethereumのスマートコントラクトに存在するバグを発見するOyenteというツールを作成した。

当初、研究者チームはOyenteを使って19,366ものスマートコントラクトをスキャンしたが、その時は8,833ものコントラクトが脆弱である事がわかった。

その時の研究成果はメディアの注目を得ることがなかった為、研究者たちが鳴らした成果は多くの人の目に留まることはなかった。

Parityのインシデントから新しいスキャンツールが誕生

さらに2017年秋に、スマートコントラクトのバグを悪用してEtherを盗み出すインシデントが発生した。

ハッキングはDevops199というGitHubユーザーによって行われた。

ParityというWalletの中身に存在していたバグを発見し、2億850万ドル相当のEtherを盗み出したようだ。

このインシデントが、前述したシンガポール国立大学のセキュリティ研究者チームが、スマートコントラクトのバグをスキャンするツールを改良した。

その名もMaianという。

同チームがMaianを使って970,898ものスマートコントラクトを対象にスキャンを実施したところ、以下の画像のような結果になった。

f:id:nanashi0x:20180305163855p:plain

彼らはスキャン結果から、スマートコントラクトを3つに分類した。

  • Prodigal
    • 攻撃を受けると97%の確率でEtherを任意のEthereumアドレスに送信するコントラクト。
  • Suicidal
    • 攻撃を受けると第三者によってKillされてしまうスマートコントラクト。
  • Greedy
    • 攻撃を受けるとEtherを受け取る事が出来るが送付する事が出来ないコントラクト。あるいは、Etherを受け取る事すら出来なくなるコントラクト。

Maianのソースコードは非公開

Oyenteのソースコードが2016年に公開された結果DAOのハッキングインシデントが発生してしまった。

そうした背景から、セキュリティ研究者チームは更なるハッキング被害を防ぐためにMaianのソースコードは公開していない。

Mythrilというツールが既に公開されているので、スマートコントラクトの脆弱性に関してリサーチしたい読者は調べてるといいかもしれない。