34,200のEthereumのスマートコントラクトにバグが存在
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ものスマートコントラクトを対象にスキャンを実施したところ、以下の画像のような結果になった。
彼らはスキャン結果から、スマートコントラクトを3つに分類した。
- Prodigal
- 攻撃を受けると97%の確率でEtherを任意のEthereumアドレスに送信するコントラクト。
- Suicidal
- Greedy
Maianのソースコードは非公開
Oyenteのソースコードが2016年に公開された結果DAOのハッキングインシデントが発生してしまった。
そうした背景から、セキュリティ研究者チームは更なるハッキング被害を防ぐためにMaianのソースコードは公開していない。
Mythrilというツールが既に公開されているので、スマートコントラクトの脆弱性に関してリサーチしたい読者は調べてるといいかもしれない。