【重要】【緊急】Ledger 受信用アドレスを利用した攻撃について

下記のLedger社(@LedgerHQ)のツイートについて詳細を掲載させていただきます。   経緯はLedgerアプリに関する脆弱性についてLedger社が外部から指摘を受けたものをLedger社がTwitter上で公開したものになります。  

概要

 

暗号通貨のウォレットは、資金の送付に必要な秘密鍵、ならびに資金の受取りに必要な公開鍵によって構成されています。

 

最近リリースされるウォレットでは通常、トランザクションが行われるたびに新たな受信用アドレスが生成されます。

 

 (Ledger Nano Sも受信用アドレスが複数生成されます。)  

 

これは、複数のアドレスに対して資金を分散することにより、ユーザーのプライバシーを保護することを目的としています。

 

通常、受信用アドレスは自動的に生成され、ウォレット所有者はこれを確認できるようになっています。

 

攻撃に関して

 

Ledger ウォレット Chrome アプリケーションにおいて表示される受信用アドレスは、ホストマシン上(Chromeアプリが起動されるPC)で実行される JavaScript を用いて生成されます。

 

  すなわち、PCに侵入したマルウェアが受信用アドレスを生成するコードを改ざんし、ハッカーの元へ資金を送付することが可能であるということを意味します。

 

  受信用アドレスは、ウォレットを普段使用する中で常に変化しているため、受信用アドレスが改ざんされたとしても、

 

ユーザーがこれを確認する(自らの正しいアドレスを認識する)ことは非常に困難です。  

 

したがってユーザーとしては、表示された受信用アドレスは、当然自分のアドレスだと疑うこともなく信じてしまいます。

 

さらなる懸念要素

 

Ledger ウォレットのソフトウェアは全て  AppData (Windows) / Application Support (Mac) フォルダ内に存在するため、アクセス権限を持っていないマルウェアであっても、これを改ざんすることが可能(管理者権限を入手する必要がない)となります。

 

  –    Ledger ウォレットにおいては、ソースファイルの完全性のチェック・改ざん対策が行われておらず、誰であってもソースファイルに変更を加えることが可能となります。   –  マルウェアとしては、Ledger ソフトウェアにおいて1行のコードを書換えるだけで十分であり、これは10行にも満たない python コードを用いることで実現可能となります。

 

  –   例えば、新しくLedgerデバイスを用いようとするユーザーは多くの場合、デバイスの初期化が完了した段階で、全ての資金をウォレットに送付します。もし、Ledgerウォレットを使用する環境(前述のホストマシン)がマルウェアに犯されていた場合、全ての資金が失われる可能性さえあります  

 

- 仮に攻撃を受けてしまった場合は自動生成されたQRコードさえも、ハッカーが上書きしたアドレスに対応したものへと変更されてしまいます。文字列表示のアドレスとQRコード表示のアドレス両方が改ざんされてしまう可能性があります。

 

実証

 

ソースファイルを開きます:  

 

Windows: C:\Users\%USERNAME%\AppData\Local\Google\Chrome\User Data\Default\Extensions\%EXTENSION_ID%\%EXTENSION_VERSION%\src\wallet\wallet.js  

 

Mac: /Users/%USERNAME%/Library/Application Support/Google/Chrome/Default/Extensions/%EXTENSION_ID%/%EXTENSION_VERSION%/src/wallet 以下のコード: return (_ref = this.wallet.cache) != null ? _ref.get(this.getCurrentPublicAddressPath()) : void 0; を、以下のコードに置換えてください: return “不正アドレス”; もしこのような改ざんがされた場合、それ以降の送金全てが 不正アドレス に送付されることとなります。.

 

対策

 

以下に紹介する方法は、公式ドキュメント(“Receiving BTC to your Ledger”)に記載はありませんが、受信用アドレスの完全性を確認するのに役立ちます。

 

  Ledger ビットコイン Chrome アプリケーションの受信用スクリーンの右下部分に、小さなモニター型のアイコンボタンがあります。  

 

このボタンをクリックすると、Ledger デバイスのスクリーン上に正しい受信用アドレスが記載されます。

 

  ここに表示された正しいアドレスと、Ledger Chrome ビットコイン(Bitcoin)アプリケーションの受信用スクリーンに表示されたアドレス(改ざんされる可能性があるのはこちらのアドレスです)を見比べる完全に合致していることを確認することによって、受信用アドレスの完全性を確かめることができます。

 

  なお、この確認作業は必須ではありません。

 

この作業を行わなかったからといって受信ができないことはありません。

 

  送金の際にデバイスでの承認が必須となっているように、本来であれば全てのユーザーに対して、受信時における受信用アドレスの確認を必須にするよう、ウォレットを設計すべきであると思われます。

 

  加えて、ここで紹介した方法に関しては、ビットコイン(Bitcoin)Chrome アプリケーションのみしか対応していません。   したがって、イーサリアム(Ethereum)Chrome アプリケーション(および、他種類のアプリケーションもおそらく含む)においては、ユーザーが受信用アドレスの改ざんを確認する方法が存在しない、ということになります。

 

Ledger 製品の既存ユーザーへのアドバイス

 

ビットコイン(Bitcoin)アプリケーションを使用する場合、受信にあたってはモニターボタンを用いることで受信用アドレスの完全性を確認してください。 

 

  イーサリアム(Ethereum)アプリケーションを使用する場合、ソフトウェアウォレットと同じように Ledger ハードウェアウォレットを取り扱うようにしてください。

 

  少なくとも、これに対する何かしらの対策が発表されるまでは、マルウェアに犯されていないことが確実である環境で使用するようにしてください。

 

経緯の説明

 

残念なことに、Ledger においては脆弱性に関する情報収集、公開が体系立てて行われていません。

 

  それでも、我々はこの問題に関して、公には非公開という形で開示・解決を行うために、Ledger の CEO と CTO に直接連絡を行いました。

 

  その結果、問題の詳細説明を求める旨の返信が 1 つ返ってきたのみでした。それ以来、我々が送信したメールは 3 週間もの間無視され、ようやく返信が返ってきたと思えば、 結局、問題に関する解決策・変更点は検討しないとの内容でした。  

 

以下に、これまでの経緯を示します  

 

2018 年 1 月 4 日:脆弱性の概要に関し、初めて連絡をとる  

 

2018 年 1 月 4 日:Ledger の CTO より、脆弱性に関する詳細説明を求められる  

 

2018 年 1 月 4 日:詳細説明に関し、連絡する  

 

2018 年 1 月 10 日:その後の経過を尋ねるも、返信無し  

 

2018 年 1 月 13 日:再び経過を尋ねるも、返信無し  

 

2018 年 1 月 27 日:Ledger の CTO より返信あり。修繕・変更は行われないとのこと(受信時におけるアドレス確認機能を取入れるべきとする我々の案は却下)。 その代わり、適切な情報提供を通じてユーザーの意識を高めることによって、そうした攻撃にユーザー自ら対処できるようにしていくとのこと

弊社の対応

ここに書かれている通り、Ledger社としては早急なアプリのアップデートは実施しないということですが、日本代理店としても納得のいく対応、回答ではないと考えております。Ledger本社に日本のユーザを代表して対応を強く求めていきます。

Share this post