セキュリティガイド |ビットコインの恣意的盗難脆弱性の簡単な分析

セキュリティガイド |ビットコインの恣意的盗難脆弱性の簡単な分析

この問題の脆弱性トピックは、Bitcoin の脆弱性 CVE-2010-5141 です。この脆弱性により、攻撃者が誰かのビットコインを盗む可能性があり、非常に有害です。幸いなことに、この脆弱性は悪用されておらず、すぐに修正されました。この脆弱性はビットコインのスクリプト エンジンに関連しており、パブリック チェーン開発者にとって重要な参考情報となります。現在市場に出回っているパブリックチェーンから判断すると、そのほとんどにはDAppエコシステムを構築するための仮想マシンやスクリプトエンジンが組み込まれており、これもブロックチェーンの大きなトレンドの1つです。

1. ビットコインの UTXO モデルとは何ですか?

ヒント: 脆弱性コード スニペットには UTXO 関連の知識と概念がいくつか含まれているため、脆弱性の理論的な分析を行う前にこれらの知識ポイントを理解する必要があります。すでに理解している場合は、直接スキップできます。

Ⅰ.アカウントモデルとUTXOモデル

UTXO モデルを見る前に、まず共通アカウント モデルについて説明しましょう。アカウントモデルとは何ですか?アカウント モデルのデータ構造は、単純に「アカウント => 残高」として理解でき、各アカウントは残高に対応します。たとえば、アカウント A がアカウント B に 200 を送金する場合、アカウント モデルでは、送金操作には A-200 と B+200 のみが必要です。現在、銀行システムや Ethereum などのほとんどのソフトウェアはアカウント モデルを使用しています。

しかし、ビットコインは独自に開発されたUTXOモデルを使用しています。 UTXOには「account=>balance」のようなデータ構造がないので、どうやって送金するのでしょうか?

Ⅱ.ビットコインの送金方法

A から B への転送を例にとると、UTXO でこの転送を完了するには次の操作が必要です。

1. Aの口座の残高200の出所を見つける。つまり、Aが200を受け取った取引を見つける。

2. トランザクションxを入力とし、トランザクションyを出力としてBに200を送金する場合、xとyは対応しており、xとyの送金金額は等しくなければならない。

3. トランザクションxは使用済みとしてマークされ、トランザクションyは未使用としてマークされます

2 つの取引の送金金額は等しくなければなりません。簡単に言えば、受け取った金額と同じ額だけ送金できるということです。実際その通りです。

しかし、その一部だけを他の人に譲渡する必要がある場合はどうでしょうか?答えは、その一部だけを他の人に譲渡し、残りを自分の別のアカウントに譲渡することです。

III.インターネットから 2 つの画像とテキストを引用します。

アカウントモデル

UTXOモデル

この記事では、ビットコインがなぜ UTXO モデルを採用したのかについては焦点を当てていません。 UTXO の原理を理解する必要があります。

2. ビットコインのスクリプトエンジン

Bitcoin スクリプトはチューリング完全ではありません。ビットコインは、トランザクションやその他の操作を実行するために独自に定義されたスクリプトを使用するため、ビットコインの柔軟性は限られています。マルチ署名や資金凍結などの単純な機能は実装していますが、それ以上の機能は実装していません。

ビットコインがこれを実行する理由は、セキュリティを確保するためにある程度の完全性を犠牲にするためです。 Bitcoin スクリプトの原理は、最初に一連のオペコードを定義し、次にスクリプト エンジンがスタックに基づいて各オペコードを 1 つずつ実行することです。

スタックは理解しやすいです。キューは先入れ後出しですが、スタックはその逆で先入れ先出しです。要素がスタックにプッシュされた後、最初にポップアウトされます。

Bitcoin の初期バージョンでは、標準転送 (pay-to-pubkey) トランザクションを送信するには、スクリプト署名 (scriptSig) と公開鍵検証スクリプト (scriptPubKey) が必要でした。具体的な処理フローは以下のとおりです。

まず実行するスクリプトを入力し、署名 (sig) と公開鍵 (pubKey) がスタックにプッシュされ、次にオペコード OP_CHECKSIG が署名などを検証します。検証に合格すると、スタックに true がプッシュされ、合格しないと false がスタックにプッシュされます。

3. CVE-2010-5141 脆弱性分析

上記の知識を理解した後、CVE-2010-5141 の脆弱性の分析を開始できます。作者は脆弱なバージョン 0.3.3 をダウンロードしました。ダウンロード アドレスは github のビットコイン リポジトリにあり、リリースを見つけます。

script.cpp コード スニペット VerifySignature 関数:

VerifySignature 関数は各トランザクションに対して呼び出され、スクリプトを実行して署名を検証し、トランザクションが使用されたかどうかをマークするために使用されます。

まず、txFrom パラメータは前のトランザクションであり、txTo は処理中のトランザクションです。上の章で説明したUTXOモデルを理解していれば、ここでの理解は難しくありません。 EvalScript 関数が呼び出される 1125 行目に注目してください。最初のパラメータは、txin.scriptSig (署名情報を含む) + セパレータ オペコード OP_CODESEPARATOR + txout.scriptPunKey (公開鍵情報、OP_CHECKSIG 命令を含む) です。これらは、EvalScript 関数によって実行されるスクリプトです。以下のパラメータは当面無視できます。 EvalScript 関数が true を返す限り、検証署名は渡されます。 EvalScript 関数はどのようにして true を返すことができますか?

まず、スタックは空にできず、スタックの最上部は bool に変換された後に true である必要があります。著者は、スタックトップが存在する必要があり、値が 0 になることはないと単純に解釈しています。

次にキーOP_CHECKSIGオペコードを見てください

(注: オペコードが多すぎるため、この記事では OP_CHECKSIG オペコードに焦点を当てます)

上記のコードは理解するのが難しくありません。 Checksig 関数は署名を検証するために呼び出され、その後 FSuccess 変数に返されます。真の場合、vchTrue (0 以外) がスタックにプッシュされ、それ以外の場合は vchFalse (0) がスタックにプッシュされます。オペコードが OP_CHECKSIG ではなく OP_CHECKSIGVERIFY の場合、vchTrue がスタックからポップされ、後続のオペコードが実行されます。

OP_CHECKSIG の通常のロジックによれば、署名検証が失敗した場合、スタックの先頭に vchFalse が残ります。スタックは空ではありませんが、スタックの一番上の値は 0 なので、false が返されます。

前のコードに戻ると、EvalScript 関数によって実行されるスクリプトは主に次の変数で構成されています。

1. txin.scriptSig

2. OP_コードセパレータ

3. txout.script公開キー

最初の署名情報は制御可能であり、2 番目の署名情報は単なる区切り文字であるため削除されます。3 番目の署名情報は、前のトランザクションからのものであるため制御できません。

最初の変数は制御可能であり、スクリプトとして実行されるため、この変数は署名情報だけでなく、オペコードにもなります。これは扱いやすいです。次に、魔法のオペコード OP_PUSHDATA4 を参照する必要があります。 Bitcoin 0.3.3 がこのオペコードをどのように処理するかを見てみましょう。

まずオペコードを取得します。オペコードの値が OP_PUSHDATA4 の値以下の場合は、すべての vchPushValues をスタックにプッシュしてから、GetOp 関数を実行します。

ソースコードを読むと、OP_PUSHDATA4 命令は 78 として定義されていることがわかります。そのため、関数が OP_PUSHDATA4 に遭遇すると、ポインターは 78+4=82 ビットに移動し、そのうち 78 ビットのデータがスタックにプッシュされます。したがって、OP_PUSHDATA4 オペコードが txin.scriptSig に挿入されている限り、後続の公開鍵情報と OP_CHECKSIG 命令は「取り込まれ」、パラメータとしてスタックにプッシュされます。ポインタが端に到達すると、最終判定が下されます。

1. スタックは空ですか?いいえ

2. スタックの一番上の要素は 0 ですか?いいえ

したがって、条件が満たされた場合、EvalScript 関数は true を返し、VerifySignature 関数も true を返します。署名の検証が回避されるため、他人のビットコインを自由に使うことができます。

4. CVE-2010-5141 脆弱性修復ソリューション

著者はビットコインバージョン0.3.8をダウンロードし、キーコードを直接確認した。

修正方法も非常に明確で、scriptSig と scriptPubkey を別々に実行します。 scriptSig に何が含まれていても、後続の scriptPubkey の実行には影響しません。

結論は:

Bitcoinの脆弱性分析はDVP創刊号から連載されているため、現在の資料は2010年のものです。現在の脆弱性分析には主に以下の難点があります。

1. 脆弱性に関する情報はほとんどありません。ほとんどの脆弱性には、CVE 番号と簡単な概要のみが記載されています。大量の情報を調べなければ、それらを見つけるのは困難です。

2. コンパイル、プライベートチェーンの構築(初期のビットコインにはプライベートチェーンの概念すらありませんでした)など、環境の設定が困難です。初期のビットコインのソースコードのコンパイルに必要な依存関係の多くは、メンテナンスされなくなり、オフラインになっています。

これらの理由から、著者は理論的な研究のみを行い、実践的な検証は行いませんでした。誤りがあれば修正してください。

5. 参考リンク

https://bitcoin.stackexchange.com/questions/37403/which-release-fixed-cve-2010-5141-attacker-can-spend-any-coin

https://en.bitcoin.it/wiki/スクリプト

<<:  黒い邪悪な勢力が鉱業分野に参入、青海日経は一連の鉱業詐欺を慎重に明らかにする

>>:  カナンクリエイティブのシャオ・ジアンリャン氏:カナンクリエイティブの売上高は2018年に40億人民元を突破

推薦する

イーサリアム開発者:イーサリアム EIP-1559 は 7 月に「ロンドン」フォークでリリースされる可能性があります

BlockBeatsによると、2月22日、イーサリアム開発者のライアン・バークマンズ氏は、イーサリア...

仮想通貨ねずみ講リスト公開:「百川コイン」

昨日の夕方、新疆ウイグル自治区新源県公安局経済調査大隊は、公式Weiboアカウントを通じて「百川コイ...

ETHは過去最高値を記録したが、PoSチェーンを攻撃する方法は3つあると一部の人が発見した

Ethereum ネットワークの Altair アップグレード (Altair は Ethereum...

XRPがやって来る、CoinColaは利益を2倍にして還元する

12月7日、香港のデジタル資産取引プラットフォームCoinCola( https://www.coi...

コインゾーントレンド: 今週のビッグデータに基づくビットコインの価格動向 (2017-07-11)

サポートレベルの5回のテストは、今日の弱気派のパフォーマンスを示しています1. 市場動向<br...

ウクライナの暗号戦争の歴史

TechFlowインターンによる執筆ワシントンポスト紙はロシアとウクライナの戦争を「世界初の暗号化さ...

Sukhavatiはデータアクセスを集約し、Web3ネットワークのメリットを実現します

ソーシャル ネットワーク、モバイル インターネット、モノのインターネットの台頭により、インターネット...

ロシア中央銀行はパンデミックによりCBDCに対する規制当局の注目が加速したと述べている

流行病によって引き起こされた危機は、中央銀行デジタル通貨の開発を含め、世界経済のあらゆる側面に新たな...

バイデン氏は「富裕税」を課す計画、米国の主要3株価指数は一斉に下落、仮想通貨は富裕層の安全資産になる可能性も?

バイデン政権は高所得者への税金を大幅に引き上げる計画だとブルームバーグが木曜日に報じた。事情に詳しい...

Bitpay が新しいビットコインウォレット Copay を発表、Intel セキュリティ技術を統合して超安全なストレージを提供

ビットコイン商人決済プロセッサのBitpayは、Intelのセキュリティ技術を活用して極めて安全なス...

世界初のビットコイン原油市場が出現、米ドルの権威に挑戦

周知のとおり、どの国が原油を購入する場合でも、米ドルを使用する必要があります。しかし、ビットコインを...

暗号通貨界におけるネガティブなニュースは増え続けており、厳しい監視の下で仮想通貨の処分が加速している。

7月20日、記事執筆時点で、Bitcoin Homeウェブサイトのデータによると、ビットコインの価...

スポット ETF のプラスの影響: ビットコインの価格は 38,000 ドルに達して 2 年前の最高値に戻ることができるでしょうか?

11月10日の早朝、暗号通貨市場は再び大騒ぎとなり、BTCは一時38,000ドルに迫り、約8%上昇...

従来の銀行はビットコインに興味を持っていますか?米国第2位の銀行バンク・オブ・アメリカが暗号通貨取引所の特許を取得

米国第2位の銀行バンク・オブ・アメリカ(BOA)が、暗号通貨取引所の特許を正式に取得した。 BOA ...