12章スマートコントラクトのセキュリティ
スマートコントラクトを記述できることは、ブロックチェーン開発の1つの側面にすぎない。イーサリアム開発では、セキュアなコードを記述することが不可欠である。セキュアなコードとは、テストと監査を徹底的に行ったコードのことである。コントラクトがハックされた場合、デプロイを停止して修正するのは容易なことではない。スマートコントラクトのセキュリティは深刻な課題であり、間違いが起きた場合は非常に高くつく可能性がある。
本章では、スマートコントラクトのセキュリティを取り上げ、コントラクトを保護するために利用できるさまざまな手法を紹介する。
12.1 セキュリティに配慮する必要があるのはなぜか
スマートコントラクトをセキュアに保つことが非常に重要である理由の1つは、ブロックチェーンに一度書き込んだが最後、コントラクトを編集できなくなることにある。ブロックチェーンにデプロイされたコントラクトは、他の種類のソフトウェア開発のように修正パッチをあてるというわけにはいかない。修正パッチをあてることができないので、イーサをブロックチェーン内で動かせなくなる可能性がある。
例を挙げると、2017年11月6日、ParityのMulti-Sigコントラクトがハックされた。ハッカーは、このコントラクトで見つけた小さなバグを悪用し、コントラクトを無効にしてしまった†1。総額にして3億ドルが永遠に失われてしまった。
2016年には、非中央集権型投資ファンドとして設立された非中央集権型自律組織(DAO)で大規模なハッキングが起きた。正体不明のハッカー集団が、コントラクトに悪用可能なセキュリティホールがあることを暴いたのである。そのコントラクトには、コントラクトを再帰的に呼び出す機能があった。この機能はそもそも削除されて然るべきものだったが、ユーザーがコントラクトを再帰的に呼び出せる状態になっていたために、ハッカーに360万イーサを奪われてしまった ...
Get SolidityとEthereumによる実践スマートコントラクト開発 ―Truffle Suiteを用いた開発の基礎からデプロイまで now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.