THE DAOに対する攻撃手法を技術的な観点から分析する

THE DAOに対する攻撃手法を技術的な観点から分析する

この記事の内容はオリジナルではなく、以下の 2 つのブログ投稿の翻訳と解釈に基づいています。

ブログ 1: http://vessenes.com/more-ethereum-attacks-race-to-empty-is-the-real-deal/
ブログ 2: http://vessenes.com/deconstructing-thedao-attack-a-brief-code-tour/

1. 攻撃手法の解読

攻撃者は childDAO を作成し、そこに継続的に Ether を転送しているため、これが現在 Ether を抽出する唯一の実行可能なメカニズムであり、焦点は splitDAO 関数から始まります。

splitDAO は、childDAO (存在しない場合) を作成し、スプリッターが所有する Ether を childDAO に転送し、生成された報酬 (現在は 0 である必要があります) を支払ってから戻ります。

ホワイトペーパーの設計によれば、splitDAO は、投票において不利な立場にある少数派を保護し、投票を通じて多数派から合法的に搾取されることを防ぐことを目的としています。より小規模な DAO を分割することで、分割前に行われた外部資金からの潜在的な利益を確実に獲得しながら、自らの足で投票するメカニズムが与えられます。

しかし、地獄への道は花で舗装されている。

BLOG 2 によると、DAO.sol の splitDAO 関数には次の行があります。

コントラクトでは、msg.sender に記録された DAO 通貨の残高がゼロにリセットされ、DAO 通貨の合計金額 totalSupply が差し引かれるなど、これらはすべて msg.sender に送り返された後に発生します。これは、ブログ 1 のブロガーが指摘した典型的な「アンチパターン」です。

次に、withdrawRewardFor 関数を見てみましょう。現在 GitHub で確認できる最新のコードは、Ethereum ライブネットにデプロイされたコードではありません。ブロガーによると、問題のあるコードは以下のとおりです。

paidOut[_account] += reward は元のコードでは payOut 関数呼び出しの後に配置されていましたが、最新の github コードでは payOut の前に移動されました。
payOut 関数の呼び出しをもう一度見てみましょう。 rewardAccount のタイプは ManagedAccount であり、ManagedAccount.sol で確認できます。

深さでマークされた行に注意してください。_recipient に _amount Wei を転送するための呼び出しが行われます。デフォルトでは、呼び出しにより残りのガスがすべて使用されます。呼び出しによって実行されるコード ステップの数は大きくなる可能性があり、基本的には攻撃者が送信したメッセージの利用可能なガスによってのみ制限されます。
これらをまとめると、ハッカーの攻撃方法が浮かび上がります。
1) 準備

ハッカーは、匿名のフォールバック機能を備えた独自のハッカー契約 HC を作成します。 Solidity 仕様によれば、HC が Ether (データなし) を受信すると、フォールバック機能が自動的に実行されます。このフォールバック関数は、再帰を通じて THE DAO の splitDAO 関数への複数の呼び出しをトリガーします (ただし、ガス不足を避けるためにあまり多くは行いません)。プロセスは、スタックの使用を制御するために、現在の呼び出しの深さも記録する必要があります。

2) 攻撃を開始<br/>ハッカーは THE DAO に分割提案を複数回提出し、各提案の受信者アドレスを HC アドレスに設定し、適切な gasLimit を設定しました。呼び出しスタックは次のようになります。


分割提案を提出する
—> splitDAO関数(その1)
—> withdrawRewardFor 関数 (その 1、この時点ではハッカーの DAO 残高と DAO 合計額は変更されていません!)
—> papOut関数(その1、初めてHCにイーサを送信)
—> HCフォールバック機能(その1)
—->再帰が設定された深さに達しない場合: 分割DAO関数を呼び出す(その2)
—> withdrawRewardFor 関数 (その 2、ハッカー DAO の残高は変わりません!)
—> payOut関数(その2、2回目にHCにイーサを送信する)
—> HCフォールバック機能(その2)
—> (再帰を続ける)

3) 送金して退出する<br/>childDAOに送金されたお金は、当初の契約に従って一定期間後に引き出すことができます。ハッカーが利益を得る時期が来た。

2. 予防と思考

コードから判断すると、この攻撃が成功した要因は 2 つあります。1 つは、DAO 残高の減額と Ether 転送の 2 つの手順の順序が間違っていること、もう 1 つは、未知のコードが制限なく実行されたことです。

アプリケーションコードシーケンスの観点から、DAO 残高チェックは Ether 転送の前提条件であり、DAO 残高ステータスは最新のステータスをタイムリーに反映できる必要があるため、Ether 転送前に DAO 残高を差し引く必要があります。問題のあるコード実装では、最も深い再帰が戻ってハッカーの DAO 残高を正常に差し引くものの、その上の再帰呼び出しでの残高チェックがすべて正常に終了しており、最新の残高を判別する機会がないため、この時点ではハッカーの DAO 残高の差し引きは無意味です。

未知のコードの無制限実行に関しては、現在ハッカーはSolidityが提供する匿名フォールバック機能を使用していますが、コントラクト間のメッセージの受け渡しはオブジェクト指向プログラム開発におけるメソッド呼び出しと完全に類似しており、コールバックを待機するためのインターフェースを提供することはデザインパターンにおける一般的な手法であるため、未知の通常の関数を実行することは完全に可能であるため、この未知のコード実行は原理的にはより多くのシナリオで発生する可能性があります。

同様のハッキング事件はイーサリアムに限らず、将来的にはRootstockなどのプラットフォームでも再び発生する可能性があります。これは、脆弱性がアプリケーション レベルにあり、Ethereum 自体の問題ではないためであり、この攻撃はチューリング完全でないプラットフォームでも機能するため、「チューリング完全性」に起因するものでもないためです。一般的に、アプリケーションが複雑になるほど、アプリケーション内でセキュリティの問題が発生する可能性が高くなります。

このハッキング事件は、私たちに多くのことを考えさせます。TRUST MACHINE 上の未知のコードを信頼すべきでしょうか?分散型システムには、「一時停止」に備えて設計の初期段階で緊急介入コードを含める必要がありますか?問題が発生した場合に世論の統制や情報開示を行うための緊急時対応計画は用意しておくべきでしょうか?プロジェクトは、公開前にコミュニティによるより長いレビューとテストを受ける必要がありますか?

このハッキング事件は、イーサリアム、分散化、ブロックチェーンの終焉を意味するものではありません。この教訓は深いものですが、もし学ぶことができれば、THE DAO と Ethereum だけでなく、ブロックチェーン コミュニティ全体にも利益をもたらすでしょう。


<<:  北京航空航天大学卒業生:ビットコインで5億円稼ぎ、上場企業の株主に

>>:  プルーフ・オブ・ステーク(PoS)で何が問題になったのでしょうか?

推薦する

スイスの銀行とドイツのエネルギー会社が提携し、自動車向けブロックチェーンウォレットを立ち上げる

Huobiブロックチェーン研究センターによると、スイスの大手銀行UBS銀行はドイツのエネルギー企業I...

ブロックチェーン企業R3は1億5000万ドルの資金調達を完了する可能性、30以上の銀行が参加予定

事情に詳しい関係者によると、ブロックチェーンコンソーシアムの新興企業R3は、30以上の加盟銀行が参加...

3M詐欺が再燃、ビットコインが決済手段としての選択肢に

ナイジェリアの3Mは、マルチマーケットのポンジースキームとしてよく知られているが、最近復活し、ビット...

実際のビジネスを結びつけるユニバースエネルギーチェーン(UENC)は、ブロックチェーンを真に生活の中に取り入れます

現在、中国のブロックチェーン市場には、アプリケーションシナリオなし、技術チームなし、ビジネスロジック...

ブラックロックはBTC先物を購入したい、グレイスケールの創設者はそれを奨励

先ほど、グレイスケールの創業者で元CEOのバリー・シルバート氏が「Hey Blackrock」とツイ...

イーサリアム最大のファンドであるForsageが中国に進出、参加アドレスは合計110万以上

Ethereum DAppユーザーリストとガス消費量リストでは、Forsage(中国名:Fosage...

Apple Pay+デジタル通貨、紙幣は私たちに別れを告げるのでしょうか?

Apple Payは2月18日に開始され、ソーシャルメディアへの投稿の波を引き起こしただけでなく、...

インド政府はインターネットに助けを求めた。ビットコインを合理的に規制するにはどうすればよいのか?オンラインで待機中、非常に緊急です!

インド政府は現在、ビットコインなどの仮想通貨の規制と立法化について一般からの意見や提案を求めている。...

ロシアの財務副大臣、ビットコインと法定通貨の交換は禁止されると確認

ロシアの阿列克谢·莫伊谢耶夫財務副大臣は、ビットコインをルーブルなどの法定通貨と交換することに対して...

前進するたびに新たな偉業が生まれます |ファイルコインの開発履歴の概要

2020年は激動の年であり、チャンスと課題に満ちた年です。王毅国務委員兼外交部長は「2020年の国際...

bukzコイン-Moneroシリーズマイニングマシンマイニングチュートリアルを公開しました!

BUKZ は、進化する分散型基本通貨に再生可能エネルギー源を提供します。私たちは、世界中のグリーン...

欧州初のブロックチェーンベースの仮想投資ゲームを開始

クレイジーレビュー:BOLERO CROWDFUNDINGがブロックチェーンをベースにした仮想投資ゲ...

百度とグーグルの検索トレンドはビットコイン購入への関心の高まりを示している

最近の報告によると、中国の検索エンジン「百度」での「ビットコイン」の検索数が大幅に増加したという。デ...

LTHNコイン - MoneroシリーズV8アルゴリズムの新しい仮想通貨マイニングチュートリアル、CPUとグラフィックカードでマイニング可能!

LTHNコイン - MoneroシリーズV8アルゴリズムの新しい仮想通貨マイニングチュートリアル、...