The DAO 事件(スマートコントラクトの脆弱性)

Ethereum ネットワークは、 Ethereum のブロックチェーンを実行するコンピュータのネットワークです。 Ethereum はまた、Ethereum バーチャルマシン( EVM )で実行される汎用コードであるスマートコントラクトを記述し、ネットワーク上に置くことができます。
DAO とは、分散型自律組織( Decentralized Autonomous Organization )のことで、その目的は、組織のルールと意思決定を分散制御する構造を作ることです。

DAOの仕組み

  • 分散型組織を運営するスマートコントラクト(プログラム)を作成します。
  • 立ち上げ時の資金調達期間があり、人々は投票権を表すトークンを購入することで DAO に投資します。これはクラウドセール、または Initial Coin Offering ( ICO )と呼ばれ、 DAO に必要なリソースを提供するために行われます。
  • 資金調達期間が終了すると、 DAO の運用が開始されます。
  • メンバーは DAO にお金の使い道について提案することができ、その提案を承認するために投票することもできます。

トークンは債務と株式を交換するような株式化( Debt Equity Swap )ではありません。トークンは投票権を与えますが所有権を与えない出資に近いものです。DAOは所有されることは無く、組織から自立しコードによって実行されます。

この DAO の原型はビットコインそのものであり、コミュニティとデベロッパー及びマイニング ネットワークのコンセンサスによって運営されていました。その後 Ethereum のプラットフォーム上で数多くの DAO が運営されています。

The DAOとは


The DAO は、ドイツのスタートアップ企業 Slock.it によって考案された DAO の名前です。Ethereum ベースのスマートコントラクトで分散型のシェアリングエコノミーを実現しようとしました。

Slock.it — Decentralizing the Emerging Sharing Economy


The DAO は2016年4月30日から28日間のクラウドセール期間で予想を遥かに超える1万1000人以上の会員から1億5000万ドル以上が集まり、当時の史上最大のクラウドファンディングとなりました。

The DAO の 元Community Manager Griff Green DAO の裏話と DAO のハッキングがどのように展開されたかを説明します

しかし、クラウドセール期間中にソースコードの脆弱性について指摘を受けます。クラウドセールが終わると脆弱性に対処することを議論しました。
そこで、The DAOの生みの親の一人である Stephan Tual 氏は、2016年6月12日に reentrancy の不具合が見つかりましたが「 DAO の資金はリスクにさらされない」と発表しました。
なお Ethereum ネットワークのバグではなく、脆弱性は Maker DAOと呼ばれる別のシステムで発見されたもので、すぐに対処しています。

第三の解決策は、「多層防御」である。この方法では、(i)契約が不適切で、同時に(ii)所有者が不明または不正である場合にのみ損失が発生する。信頼できる「所有者」のマルチシグであれば、(ii)を軽減できる場合があります。また盗難は待ち時間を増やすことで軽減されます。DAOの問題は、Child DAOが28日間ロックダウンされていたため大幅に被害が軽減された。MakerDAOで提案されているこの機能は、ガバナンスの変更が有効になる前に猶予期間を設け、変更に同意しないトークン保有者がトークンを売却する時間を確保するものであり、これは良いアプローチと言えます。

Thinking About Smart Contract Security | Ethereum foundation blog

これらのことから、スマートコントラクトのテストと検証が、Ethereum のエコシステムを安全に保つために必要です。

DAOのハッキング

攻撃者がreentrancy攻撃を用いて、The DAO から Etherを流出させ始めて 2016年6月18日(土)までに、攻撃者は360万 ETH 以上を The DAO と同じ構造を持つ「Child DAO」に流出させました。この影響により20ドル以上あった Ethereum の価格は13ドル未満に下落しました。
スマートコントラクトは、独立した契約でありコード自体が、それが表す「取引」の決定者であることを意図しています。しかし、 The DAO は、法律と規制のグレーゾーンあったため、複数の弁護士が The DAO はクラウドファンディングの適用から外れており、数カ国の証券取引法に抵触しているとの懸念を示しています。また、発生しうるあらゆる問題に対して責任を負う可能性があるとして指摘し、 The DAO のトークン保有者にも責任が生じる懸念を表明しました。

ソフトフォークの提案

2016年6月17日、Ethereum 財団の Vitalik Buterin 氏は、DAO が攻撃を受けており、解決策としてソフトフォークを発表しました。

code hash 0x7278d050619a624f84f51987149ddb439cdaadfba5966f7cfaea7ad44340a4ba( DAO と、その Child DAO )のアカウントの残高を減らすすべての取引( calls/callcodes/delegatecalls )を無効にするソフトフォークが提案されており、( No ROLLBACK 、取引またはブロックを「取り消す」ことはありません)。(DAOと、その Child DAO)は、ブロック1760000(正確なブロック番号はコードがリリースされる時点まで変更される可能性があります)から始まるトランザクションが無効になり、27日間の猶予を超えて攻撃者によって引き出される Ether を防止する。これは、トークン所有者が自分の ETH を取り戻すことを可能とすることも含めて、さらなる手段について議論するための時間を提供します。

CRITICAL UPDATE Re: DAO Vulnerability | Ethereum foundation blog

DAOには全 Ether のおよそ15%が含まれているため、 DAO の障害は Ethereum ネットワークとその暗号通貨に悪影響を及ぼします。
数多くのスタートアップが DAO に取り組んでいることや、スマートコントラクトに同様の脆弱性があること、スマートコントラクトを用いた複雑なソフトウェアの構築はまだ初期段階にありました。
これらのことからDAOがこれからも発展し続ける為に解決が望まれており、The DAOと Ethereum 財団の動向が注目されました。

さて、基本的なブロックチェーンの仕組みとして、ネットワーク上のノードが取引を一つのブロックにまとめ、ブロックを一つのチェーンにして、「取引」を記録します。2つの競合する取引がほぼ同時に起こった場合、ネットワークは一方を選択し、もう一方を拒否することでこの競合を解決し、すべてのノードが同じ分散台帳のコピーを持っています。
「記録を書き換える」ためには、全ノードの51%以上が同意しなければならず、これはBitcoin や Ethereum の歴史上一度も起こったことがありません。
つまり分散型ネットワークの目標は、誰もそのようなことができないことを保証する仕組みです。

そこで、スマートコントラクトは、独立した契約でありコード自体が、それが表す「取引」の決定者であることを意図していることから、 攻撃者はDAOと Ethereum コミュニティに向けて、自分の「報酬」は合法だと主張し、これを無効化しようとする者に対して法的措置を取ると脅しました。
この主張はスマートコントラクトの前提を根拠としており、コードの外には取引の「ルールを変更」はできないというものです。

ハードフォークの提案

もし皆さんがハードフォークを許可すれば(このフォークを実装し提供されるコードをマイナーが採用することになります)、DAOトークン・ホルダーが投入した資金はすべて正当な所有者に戻り、新たに始まる Ethereumプロジェクトに向けて投入できる準備ができるのです。

A Fork in the Road | Stephan Tual

選択肢の一つとして、マイナーに対して取引の「記録を書き換える」ことへの同意を要求し、スマートコントラクトのコードを書き換え、すべての Ether をThe DAOに戻し、トークン所有者が自動的に換金できるようにし、それによってThe DAOを終了させることを求めるものです。
これは、本来ありえないはずのブロックチェーンの実行ルールを書き換えてしまうという行為です。 Ethereum プロジェクトを軌道に乗せるために、今回だけはそのルールを見逃すべきか悩ましい問題です。

フォークが実施されるかどうかは、当初は不明でした。マイナー、取引所、ノードオペレータもソフトウェアを更新することに同意しなければなりませんでした。公開フォーラムでさらに熱い議論が交わされた後、2016年7月20日、ブロック192,000で、Ethereum のハードフォークが実行されました。

しかし、フォークは実施されましたが、全員が賛成したわけではありません。その結果、競合する Ethereum ブロックチェーンを生み出すことになりました。ブロックチェーンの「記録を書き換える」ハードフォークを拒否した人々は、フォーク前のバージョンである Ethereum Classic(ETC)を支持しました。

投稿者: 二本松 哲也

SPbD:Security&Privacy by Design Founder ー OWASP Member ー ITは人々の生活をあらゆる面でより良い方向に変化させること ー 競争原理から共創原理へ