仮想通貨のハードウェアウォレット:そのハッキング方法

2019年1月25日

ハードウェアウォレットは、仮想通貨ウォレットの中で最も安全性の高いタイプだと考えられています。しかし、100%安全などというものはありません。ほかのウォレットと同様、ハードウェアウォレットにもセキュリティ侵害の可能性があります。第35回Chaos Communication Congressでは、セキュリティリサーチャーのトーマス・ロス(Thomas Roth)氏、ディミトリ・ネドスパソフ(Dmitry Nedospasov)氏、ジョシュ・ダットコ(Josh Datko)氏が、ハッキング方法をいくつか実演しました。その詳細に触れる前に、ハードウェアウォレットとは何か、どのような仕組みなのかを簡単に説明します。

仮想通貨ウォレットとは?

はじめに、仮想通貨ウォレットとは何かについて少しお話ししましょう。ウォレットとは、ひとことで言うと仮想通貨のアカウントです。この「アカウント」は、公開鍵と秘密鍵という1組の暗号鍵で構成されます。2つの鍵はログインIDとパスワードのような関係で、公開鍵はウォレットのアドレスとして使われ、秘密鍵はコインへのアクセスのため、つまり発信トランザクションの署名に使われます。

複数のウォレットを持っている人の場合、仮想通貨システムではどのように複数の公開鍵/秘密鍵ペアが作られるのでしょうか。まったく別々に生成された鍵のペアをいくつも保存するのは不便です。そこで仮想通貨システムは、「シード」と呼ばれる大きな数字を1つ生成し、そこからそれぞれのウォレットのために、予測可能な形で複数の公開鍵/秘密鍵ペアを派生させます。

仮想通貨システムのユーザーが実際に保存しているのは、このシードだけなのです。

従来の金融システムとは異なり、仮想通貨を中央で管理する組織があるわけでもなければ、登録機構もありません。チャージバック保証のようなものも、アカウントを復旧する手立てもありません。シードを持っていて、そこから鍵を生成している人はみな、シードと紐づけられた仮想通貨ウォレットを持っています。このシードを盗まれたりなくしたりすると、ウォレットの中のコインも同じ目に遭います。

正式には、公開鍵と秘密鍵のペアがウォレットです。しかし、これらの鍵を保存する手段を「ウォレット」と呼ぶ場合がほとんどです。このように考えると、ハードウェアウォレットとは、仮想通貨ウォレットを保存するデバイスということになります。

仮想通貨のハードウェアウォレットが必要な理由

もちろん、このシードは非常に重要ですから、できるだけ安全な場所に置いておきたいものです。シードの保存方法はさまざまですが、どれも長所と短所があります。一番お手軽な方法は、シードをコンピューターかスマートフォンに保存することで、オンラインに保存すればさらに便利です。しかし、仮想通貨ウォレットを狙うマルウェアは珍しくありません。オンラインウォレットサービスに関しては、ハッキングされる可能性がありますし、サービスを提供する企業自体の破産と同時に大量のコインが消えることもあります。

ウォレットに関する問題は、ほかにもあります。たとえば、フィッシング詐欺、偽物の支払情報、ハードウェアの不具合によるウォレットの消失などなど……。というわけで、あるときから、仮想通貨のハードウェアウォレットという、シードを安全かつ確実に保存できるように設計された専用デバイスを作って、これらの問題を解決しようということになりました。

仮想通貨のハードウェアウォレットのしくみ

仮想通貨のハードウェアウォレットの主たる役割は、シードをウォレットから外に出さないで保存することにあります。暗号署名などは、接続先のコンピューターではなく、すべてウォレットの内部で行われます。そのため、万一コンピューターのセキュリティが侵害された場合でも、侵入者は鍵を盗み出せません。

さらに、PINコードでデバイスをロックするなど、何らかのアクセス保護方法があるといいでしょう。もちろん、デバイス上で実際のトランザクションを確認し、承認または却下できれば、非常に便利です。

これらの要件を踏まえて仮想通貨のハードウェアウォレットを設計すると、PIN入力とトランザクション確認用のディスプレイとボタンを備えた、比較的小型のUSBドングルに行き着きます。

しかし、このようなデバイスの内部で何を行うかはさまざまです。ハードウェアウォレットの主要メーカーはTrezorとLedgerの2社ですが、ハードウェアの設計アプローチは違います。

Ledgerのアプローチ:シードをセキュアエレメントチップに保存

Ledgerのデバイス、Ledger Nano SとLedger Blueはメインチップを2個搭載しています。1つはセキュアエレメントと呼ばれる、極めて機密性の高い暗号データを保存する用途で設計されたマイクロコントローラーです。このチップは、SIMカードやチップ&ピン方式のクレジットカード、Samsung PayやApple Payに対応したスマートフォンで使用されています。

2つめのチップは汎用マイクロコントローラーで、USB接続の維持、ディスプレイやボタンの制御などの周辺タスクを担当します。このマイクロコントローラーは事実上、セキュアエレメントとそれ以外全部(利用者も含む)の間に立つ仲介役です。たとえば、利用者がトランザクションを確認しなければならないとき、実際にはセキュアエレメントチップではなく、この汎用マイクロコントローラーを通じて行っています。

しかし、保護されたチップにシードを保存したとしても、Ledgerデバイスへの侵入が絶対に不可能というわけではありません。たとえば、セキュアエレメントに直接侵入してシードを窃取するのは非常に困難ですが、汎用マイクロコントローラーを不正利用してハードウェアウォレットを欺き、部外者のトランザクションを確認させることは比較的簡単にできます。

リサーチャーたちは、Ledger Nano Sのファームウェアを調査し、あるメモリアドレスに特定の値を書き込むと、セキュリティ侵害されたバージョンで再フラッシュできることを発見しました。このメモリアドレスはブラックリストに掲載され、書き込みできないようになっています。しかし、このデバイスで使用されているマイクロコントローラーはメモリの再マッピングに対応しているため、このアドレスをアクセス可能に変更することができます。リサーチャーたちはこの機能を悪用して、改竄したファームウェアをNano Sにアップロードしました。デモでは、改竄後のファームウェアにスネークゲームが入っていましたが、その気になれば、発信トランザクションすべてのウォレットアドレスを変更する悪意あるモジュールを保管することもできるのです。

ハードウェアウォレットを不正利用するもう1つのアプローチは、ハードウェアインプラントを使用する方法です。ジョシュ・ダットコ氏は、Ledger Nano Sに、RFを介してトリガーされるインプラントの挿入に成功しました。このインプラントは、悪意ある無線コマンドを受信すると、確認ボタンを押します。どのハードウェアウォレットでも、これと同じ方法が使えると考えられます。ダットコ氏は、サイズがいちばん小さく、このような物理的攻撃がもっとも難しいという理由からLedger Nano Sを選んだとしています。

同社が製造しているもう1つのデバイス、Ledger Blueは、サイドチャネル攻撃に弱いことが判明しました。Ledger Blueは大型ディスプレイと大容量バッテリーを備えたハードウェアウォレットですが、回路基板の設計に不具合があり、ユーザーがPINコードを入力すると、非常にわかりやすいRF信号を漏らします。リサーチャーたちがこの信号を記録し、ある機械学習アルゴリズムに学習させたところ、90%の精度でPINを認識できるようになりました。

Trezorのアプローチ:シードを汎用マイクロコントローラーのフラッシュメモリに保存

Trezorのデバイスは少し異なる動きをします。このデバイスはセキュアエレメントを使用しておらず、デバイス全体が1つのチップ、ARMアーキテクチャをベースにした汎用マイクロコントローラーで制御されます。このチップは、暗号データの保管と処理、そしてUSB接続、ディスプレイ、ボタンの操作を両方とも担当します。

理論上、このような設計では、デバイスのファームウェアをハッキングし、最終的にはマイクロコントローラーのフラッシュメモリに保存されたシードへ簡単にアクセスできるはずです。しかし、Trezor社は極めて巧みにファームウェアを強化していたため、リサーチャーたちはハードウェアをハッキングしなくてはなりませんでした。

リサーチャーたちは、電圧グリッチ(マイクロコントローラーに低い電圧をかけて、チップにおかしな影響を与える)というハッキング技術を使用して、Trezor Oneのチップの状態を「アクセスなし」から「部分アクセス」に変更し、チップのRAMを読み込めるようにしましたが、フラッシュストレージは読めません。その後、ファームウェアのアップグレード処理が始まると、フラッシュが上書きされている間、チップが暗号シードをRAMに一時的に退避させていることが分かりました。このようにして、メモリの内容をすべて取得することに成功した彼らは、そのダンプからシードを簡単に見つけられることを発見しました。シードは暗号化されない状態、つまりニーモニックフレーズ(英語)(ランダムな数値ではなく人間が読んで簡単に理解できる単語)でRAMに保存されていたのです(リンク先は英語記事)。

メモリダンプには、暗号化シードがニーモニックフレーズとPIN(この例では1234)の形のままプレーンテキストで保存されている

結論

ロス氏、ネドスパソフ氏、ダットコ氏が説明したハッキングの大半は、極めてレベルの高いもので、なおかつ、デバイス自体を直接手にする必要がありました。ですから、お使いのLedgerやTrezorを破棄しようと考えるのは早計です。あなた以外にデバイスに触れる人がいなければ、ビットコインは無事なはずです(何らかの理由で価値が下がることはありますが)。

とはいえ、サプライチェーン攻撃の存在は頭の片隅に置いておくべきでしょう。ハードウェアウォレットの改竄は比較的簡単で、購入前からセキュリティが侵害されている可能性もあります。もちろん、同じことは普通のノートPCやスマートフォンにも言えますが、ある特定のノートパソコンが仮想通貨の保存に使われるかどうか、攻撃者には分かりません。この意味では、ハードウェアウォレットは確実に狙われます。

ハードウェアウォレットメーカーは、デバイスのパッケージをセキュリティシールで封印する、利用者がオンラインでウォレットのセキュリティをチェックできるようなWebページを開設するなどして、この問題に対処しようと努めています。しかし、このような対策では十分ではないかもしれず、かえって混乱を招く可能性もあります。

何にせよ、その他のハードウェアウォレット(英語記事)とは異なり、LedgerとTrezorのデバイスはセキュリティに配慮して設計されています。ただ、ハッキングが100%不可能だとは思わないでください。さらに次のような対策をして、あなたの資産を守りましょう。

  • 仮想通貨のハードウェアウォレットは、信頼できるメーカーのものを使う。
  • 購入するときには、改竄の痕跡がないか、しっかり調べる。
  • 念のため、デバイスを開いて、回路に余計なものがついていないことを確認する。
  • 暗号ウォレットは安全な場所に保存し、自分が信頼していない人が触れないようにする。
  • 仮想通貨用のコンピューターを信頼できるセキュリティソフトウェアで保護する。ここまでに説明したハッキングの大部分では、ハードウェアウォレットの接続先コンピューターにマルウェアがインストールされています。

Trezorの場合、次の点も考慮してください。

  • Trezorのソフトウェア、ハードウェアともにオープンソースのプラットフォームなので、電子工学のスキルが十分にあれば、市販の部品を使って自前のハードウェアウォレットを作ることができます。こうすれば、ウォレットのハードウェア部分に自分以外の誰も手を出していないことが確実です。
  • Trezorのデバイスは、シード抽出ハッキングから保護するために、パスフレーズを使った保護モードを備えています。保存されたシードは、パスフレーズなしには使いものにならない(英語サイト)、というのがこのモードのコンセプトです。保護モードの使用を検討してください。

この講演の録画(英語)をこちらに掲載します。ハードウェアウォレットをお使いの方は、ぜひご覧ください。