ニュース暗号資産Electrum 4.8.3がBitcoinの手数料引き上げを悪用する悪意あるサーバー攻撃に対応するパッチをリリース

Electrum 4.8.3がBitcoinの手数料引き上げを悪用する悪意あるサーバー攻撃に対応するパッチをリリース

著者: Coindoo·

重要ポイント

  • •10月23日にタグ付けされ、10月24日に公開アドバイザリーとともにリリースされたElectrumバージョン4.8.3は、悪意あるサーバーが無効な署名を持つ偽の送金トランザクションをユーザーのウォレット履歴に表示できる脆弱性を修正しました。
  • •この攻撃はReplace-by-Feeを悪用したもので、ユーザーが仕込まれた手数料ゼロのトランザクションの手数料を引き上げると、新しい署名が攻撃者が管理するアドレスへの改ざんされた支払いを承認していました。
  • •2人のユーザーが被害を報告し、そのうちの1人は10月18日に偽トランザクションの手数料を引き上げた後、公表されていない金額の資金を失いました。
  • •この修正はウォレット自身のアドレスのコインを支出する未確認トランザクションの署名を検証するもので、Electrumには完全なコンセンサスエンジンがないため、受信の未確認トランザクションは引き続き検証されません。
  • •4.8.3より前のバージョンのユーザーは、手数料の引き上げを含むあらゆるトランザクションを承認する前に、アップデートするか、署名画面で出力アドレスと金額を手動で確認すべきです。
Electrum 4.8.3がBitcoinの手数料引き上げを悪用する悪意あるサーバー攻撃に対応するパッチをリリース

Electrum Bitcoinウォレットの重大な脆弱性がバージョン4.8.3で修正されました。攻撃者はBitcoinのReplace-by-Feeメカニズムを、署名済みトランザクションを盗むための経路に変える手段を発見していました。Electrumの開発者SomberNightは10月24日のセキュリティアドバイザリーでこの問題を開示し、一部のサーバーが実際にこの攻撃を実行していたと述べました。2人のユーザーが被害を報告し、1人は資金を失いました。

攻撃には所有者の署名が必要

悪意あるサーバーは、単独では誰のBitcoinも支出できません。仕込まれた偽トランザクションは無効な署名を含んでいるため、ネットワークに拒否されます。攻撃者が必要とするのはウォレット所有者の有効な署名であり、この罠は手数料の引き上げを通じて署名を得るように設計されています。

Replace-by-Fee(RBF)は、保留中のBitcoin支払いをより高い手数料を支払う新しいバージョンに置き換えることで処理を速める仕組みです。ユーザーにとっては設定を調整するような感覚ですが、ネットワークにとってはまったく新しいトランザクションであり、これに署名することはその中のすべての宛先と金額を承認することを意味します。「引き上げ」対象のトランザクションがすでに改ざんされていた場合、新しい署名は改ざん版を承認することになります。

餌となるのは、止まって見える支払いです。ユーザーが資金を失った事例では、サーバーは手数料ゼロの偽トランザクションを作成していました。開発者は、これが手数料の引き上げを促す意図だったと考えています。手数料ゼロのトランザクションは未確認のまま留まり、手数料を引き上げるのが標準的な対応だからです。

悪意あるサーバーが罠を仕掛けた仕組み

Electrumはライトウォレットであり、ブロックチェーン全体をダウンロードして検証するわけではありません。公式ドキュメントによると、このウォレットは通常約10のサーバーに接続しますが、トランザクション履歴とブロードキャストは1つのメインサーバーに依存しています。その他のサーバーは主にブロックヘッダーと手数料見積もりを提供します。アドバイザリーは、未確認トランザクションに関してメインサーバーを信頼することがElectrumの設計思想に含まれると述べています。今回新しくなったのは、その信頼を盗みに変える実用的な手法が登場した点です。このトレードオフが攻撃の背景にあります。検証を外部に委ねることがライトウォレットを軽量にしている一方で、ユーザーが目にする履歴はそれを供給するメインサーバーと同じ程度しか信頼できないことを意味し、4.8.3以前は無効な署名を持つ送金エントリーが本物のようにその履歴に表示され得ました。

署名の段階まで進むまで、何も失われていません。署名の対象として提示されたトランザクションが改ざんされていれば、有効なデジタル署名が誤った支払いを承認し得ます。まさに手数料の引き上げがその機会を提供するのです。

被害者2人が目にしたもの

最初の報告は10月11日、ユーザーdannydeezyからのものでした。支払いは2つのTrezorハードウェアデバイスで保護された2-of-3のマルチシグウォレットから送金され、31の入力が1つの出力にまとめられていました。ユーザーは両方のTrezorで宛先を確認した後にブロードキャストしました。その後、Electrumの履歴には全額が未確認のまま不明なアドレスへ向かうことが表示され、その後エントリーは「Local」に変わりました。実際には何もメンプールに到達していませんでした。

偽トランザクションは入念に作られていました。同じ入力を使用し、本物のトランザクションの署名データをバイト単位でコピーしていたため、62の署名すべてが本物の支払いと一致し、偽物とは一致しませんでした。ほぼ全額が「GyQ3」で終わるアドレス――本物の宛先と同じ最後の4文字――に送られ、少量がウォレット自身のアドレスの1つに戻され、通常のお釣り出力を装っていました。手数料はほぼゼロでした。ユーザーが再署名しなかったため、本物のトランザクションは有効かつ未ブロードキャストのまま残り、資金は失われませんでした。

開発者が手数料引き上げの経路を特定したのは、10月18日に2人目のユーザーRaju-K12が、偽トランザクションの手数料を引き上げた後に資金を失ったと報告してことでした。金額は公表されていません。

  • 10月11日:手数料引き上げの経路に触れない最初の非公開報告
  • 10月18日:手数料引き上げによる損失後の2件目の報告
  • 10月23日:修正を含むバージョン4.8.3がタグ付け
  • 10月24日:バイナリのリリースとアドバイザリーの公開

4.8.3が修正するもの、しないもの

この修正により、Electrumはウォレット自身のアドレスのコインを支出する未確認トランザクションについて、履歴に追加する前に署名を検証するようになりました。無効な署名を持つ偽の送金支払いは表示される代わりに拒否され、この攻撃経路は閉ざされます。

この検証は意図的に範囲を限定しています。受信の未確認トランザクションは依然として検証されません。アドバイザリーはその理由を次のように説明しています。Electrumには完全なコンセンサスエンジンがなく、他人の入力を検証するには、すでに採掘済みのトランザクションに到達するまで未確認の親トランザクションを遡って追跡する必要があるためです。確認済みトランザクションについては、ブロックヘッダーと照合する簡易支払い検証(SPV)によってすでに検証されていました。

自分のサーバーなど信頼できるサーバーにのみ接続しているユーザーは影響を受けませんでした。ただしこの例外は、ウォレットがたまたまメイン接続として選んだ公開サーバーには適用されません。

再び署名する前に

  1. 4.8.3にアップデートする。 Electrumの公式サイトからダウンロードし、そこにある手順に従ってファイルの署名を検証してください。
  2. アドレス全体を確認する。 ウォレット履歴(攻撃者が支配できる部分)ではなく、元の請求書や支払いリクエストと照合してください。
  3. デバイス画面で確認する。 新しい署名ごとに金額と手数料を確認してください。TrezorのRBFガイドと送金ガイドはいずれも、更新後の詳細をデバイス上で確認するようユーザーに促しています。
  4. 止まっている? 変わっている? 中断すること。 手数料を引き上げる前に、独立したブロックエクスプローラーで元のトランザクションIDを確認してください。最初の報告では、本物の支払いは一度もネットワークに到達していませんでした。

まだアップデートできないユーザー向けに、アドバイザリーには回避策が記載されています。トランザクションに署名する際は、手数料の引き上げの有無にかかわらず、出力アドレスと金額が期待どおりであることを必ず確認してください。4.8.3より前のバージョンは新しい署名検証を行わないため、旧リリースを使い続けるユーザーにとっては、この手動検証がこの攻撃経路に対する唯一の防衛手段です。このッチはこの特定の経路を閉ざしますが、Electrumは未確認データについて依然としてメインサーバーに依存しているため、支払いを承認する画面が最終的な確認ポイントであり続けます。

この記事は情報提供のみを目的としており、金融または投資に関する助言を構成するものではありません。

出典:Coindoo