The Coffee Times

シゴト・英語・テクノロジー・人生の楽しみ方を発信してます

Parityライブラリ自己破壊、何が起きたか、どう防げたか

f:id:CoffeeTimes:20171116005613p:plain

Parityのバグについて昨日、凍結された資金を持つPolkadotの見解を書きました。

そして今日、Parity側の見解がでました。

以下になります。

 

ーーー

116 02:33:47 UTC)にParityマルチシグウォレットの「ライブラリ」スマートコントラクトコードに脆弱性が匿名ユーザによって発見されました。

 

このユーザは脆弱性を利用し、自らをライブラリコントラクトのオーナーとなったのちち、このコンポーネントを破棄しました。Parityのマルチシグウォレットはこのコンポーネントに依存しているため、合計513,774.16 Ether(およそ190億円)および他のトークンを保持する587個のウォレットがブロックされました。ライブラリコンポーネントを破棄した後、ユーザ名「devops199」と名乗るアカウントはgithubにこの内容をあげました。https://github.com/paritytech/parity/issues/6995

 

パリティウォレット(UI)の他のすべての機能には、同様の脆弱性はありません。(

スタンダードのアカウント、非マルチシグアカウントにもありません)

 

影響を受けたユーザには連絡しており、まだ届いていない場合はcommunity@parity.ioまでご連絡ください。この問題が、プロジェクト・資金の将来に対して不安を抱かせてることを認識していて、実行可能な策を模索する努力をしています。

悪用が行われて以来、チーム全体で多くの議論や分析を行ってきました。この記事では、問題に関連する要因を明らかにし、質問や苦情への対応を書いていきます。

 

 

ウォレットのライブラリは監査されていなかったのか?

オリジナルの "Foundation" マルチシグウォレットコードは、Ethereum Foundationの開発チーム(パリティ・テクノロジーズ)とコミュニティのメンバーによって創られ、監査されました。そして多くレビューを受けました。

 

このコードには今回対象となったセキュリティ問題はありません。そして、パリティチームによって、ウォレットが作成されるたびにネットワークに展開される軽量のstubスマートコントラクトに再編されました。ちなみにこれには、一度だけ展開されたライブラリスマートコントラクトなどウォレットのロジックの大部分を含みます。

 

正式な監査はありませんでしたが、7月19日のバグと資金の回収もあり、このコントラクトは社内外に多くのレビューを受けていました。

 

 

事件の前に何が起きたか?

監査された元のスマートコントラクトの状態に近づけるため、できるだけ変更を加えないようにしていました。しかしこれは、ライブラリコントラクトが通常のウォレットと同じ機能を持ち初期化が必要であることを意味し、よってウォレットを消去するために設計された元のself-destruct機能(自己破壊機能)もまだ含まれたままでした。

 

2017年7月19日の攻撃の後、2017年7月20日にライブラリコントラクトを修正し、再度デプロイしました。

 

8月に、Github上のcontributorである、アカウント名 "3esmit”は、デプロイのときにinitWalletが呼び出されるべきようにコード変更をすべきと勧めました。

したがって、私たちはこの提案された拡張をライブラリコントラクトに実施し、

構築時にinitWalletを呼び出すことによって自動的に初期化するようにしました。

この推奨を拡張だと解釈し、変更されたコードは定期的なアップデートのときに展開されることになりました。

 

11月6日03:25:21 PM + UTCに、 'devops199'は7月に導入されたコントラクト内にあった未初期化オーナーを見つけ、それを初期化し、自分をオーナーとして設定しました。その後、devops199はライブラリコントラクトを消し去りました。

 

どのようにすれば防げたのか?

この悪用を避けることができた2つの方法があります。

たとえ誰かが所有権を持っていたとしても、もしコントラクトコードに自らを消す機能(suicideやkill)が含まれていなければ、何もすることができなかったでしょう。 kill機能は、元の監査済みコントラクトの残りの部分でした。もう1つの方法は、3esmitによって提案されたことを、コード変更と再デプロイによって自動的に、または7月に導入されたコントラクトに手動で、すぐに実施されていたら、防げていたでしょう。

 

パリティ・テクノロジーズは、当社が作成するスマートコントラクトについて正式な監査を、外部に定期的に依頼しています。たとえば、当社のKYCサービス「PICOPS」および当社が支援するICOの販売契約には、厳しい監査要件があります。

 

しかし、より多くの監査を行うだけでなく、セキュリティを実現するためには、デプロイ、監視、およびテストのための、より後半で正式な手順とツールが必要であると考えています。エコシステム全体としては、特にコントラクトの数や複雑さが増した場合に、同様の問題が再発するのを防ぐために、上のような手続きやツールがすぐにでも必要であると考えます。

 

パリティ・テクノロジーズは、凍結された資金を開放するために何をしているか?

深刻に状況を後悔しており、既存のEIP、また新しいEIPの提案に懸命に取り組んでいます。これらの改善提案は今後、ブロックされた資金の救済措置として一般的なケースに対応できるでしょう。

 

そのような改善案がいつ実行されるかについてのタイムラインはありません。私たちはコミュニティの意向に従い、他のプロトコル改善のような定期的なEIPプロセスを進めます。パリティ・テクノロジーズは、提案に関する開発を多く実施し、Ethereum Foundationチームおよび更なるプロトコル層開発のためのコミュニティと建設的に協力します。

 

 

他に実施する予定の事項は?

・最初のステップとして、適切なセキュリティと操作手順が確立されていると感じるまで、マルチシグマウォレットを展開する機能を削除して、これが再び起こらないようにします。

パリティウォレットUIは、安全であるとみなされるグノーシス、WHG、またはその他の複数のシグネチャウォレットを引き続きサポートします。

Parity Walletを使用して、事前に展開されたマルチシグウォレットを見たり、使用したりすることができます。

他のコントラクトと同様に、マルチシグコントラクトを手動で導入することも可能ですが、マルチシグ固有の統合された方法はありません。

 

・ウォレットではなく、ウォレットがおいてあるクロームの中間インフラストラクチャーに、注力していきます。この意味で、ウォレットはパリティを拡張できる「ユーザーレベル」のソフトウェアになります。

・我々は、秘密管理、鍵生成とパスワード管理、署名と自動更新を含む、既存のすべての機密コードの、フルスタック外部セキュリティ監査を委託しています。

・私たちは内部的にプロセスと手順を見直すことに多大な努力とリソースを投入し、具体的には業務セキュリティに専念するチームを作っていきます。

このチームは必要に応じて拡張され、リソースを自由に使います。チームは、パリティ・テクノロジーズの提供する重要な部分のレビューとメンテナンスを担当します。

 

必要なコントラクトのデプロイが、このリポジトリ内のコード変更とレビュープロセスに適切にリンクされていることを確認し、そのためのツールを作成するための取り組みをサポートします。

例えば:

・航空宇宙や医療などのように、各コントラクトごとに、デプロイのチェックリストをつくる

・デプロイされたコントラクトについては、リポジトリ内の最新のレビュー済みバージョンと比較して正しいか常に監視する

などです。

 

・私たちは、社内で努力するだけでなく、次のような外部のヘルプやリソースを探していきます。

・正式な検証や証明支援など、他のスマートコントラクト言語やツールの研究開発サポート

・ツール、言語研究、およびテストに焦点を当てたリサーチチームとの開発関係。

次世代の資産管理のセットを創るチームの作成。

セキュアなストレージとリカバリのためのツールを提供するマルチシグネチャ、タイムロック、デッドマンスイッチ用のボールトセーフなコントラクト。

・バグバウンティプログラムを拡張。(すべてのソフトウェアをオープンソースのソフトウェアとして提供しています)

 

パリティ・テクノロジーズは、エテリアムの技術開発の先駆者であり続けるよう努力し、コミュニティにとって安全で便利な技術を開発するために尽力します。

 

ーーー

 

まだあまりタイムラインなども不明確なようですね。

ただこれらの改善が、今後のEthereumおよびクリプト界隈の新たな技術を生み出してくれると良いです。

 

原文:

A Postmortem on the Parity Multi-Sig Library Self-Destruct – Parity Technologies