2019年6月8日から9日にかけて、アムステルダムでBreaking Bitcoinというカンファレンスが行われました。

本コラムは、公開された動画や書きおこしをもとにその発表内容を追いかけ、ビットコインのセキュリティに関する取り組みの最先端を知ろうという試みです。

発表内容を日本語で、かつ実際の事例などを交えて解説することで、少しでも皆様がビットコインの仕組みや最新の研究について詳しくなるための一助になれることを願います。今回は、ハードウェアウォレットからシードが取り出せるか、というお話について、前後半でお届けします。

はじめに

講演はCharles Guillemet氏によるもので、氏はLedgerのCSO(Chief Security Officer)です。1年以上前から、レッドチームLedger Donjonを率い、Ledgerの製品をセキュアにするために努めています。

ホワイトハッカーという名前は日本でも定着しつつありますが、レッドチームは社内で、より過激なテストを行うチームです。実際に自社製品に対し攻撃を検証するため、生半可な知識では務まりません。物理的な側面からソフトウェアの脆弱性まで、製品のセキュリティを担っていると言ってもいいでしょう。

しかしレッドチームを置いている会社は、筆者の知る限りでは、それほど多くないと思います。レッドチームを担当できるだけの幅広い知識、専属チームを置けるだけの規模、技術力、セキュリティ専門家を惹きつける魅力、そういった会社でないと置けない、というのが実情です。

話が逸れましたが、Ledgerではサイドチャネル攻撃、暗号化、ソフトウェアへの攻撃、摂動攻撃(perturbation attack)に重点をおいており、製品のハッキングに挑戦したり、外部からの報告を検証したり、サードパーティのセキュリティサービスを提供したり、といったことが日常のようです。

Ledger Donjonが提供するOSSも公開されているため、彼らの技術力、活動の範囲といったものをうかがい知ることができます。

Ellipalの外装に触れて判明したこと

Ellipalについて検証したときのことです。

Ellipalは無線やBluetoothを持たない機器で、デバイスとのやりとりはQRコードによって行います。画面に表示されたQRコードをスキャンするか、そのカメラでQRコードを撮影させるか、しかありません。また、アップグレードのためSDカードスロットが装備されています。

この端末のセキュリティの考え方は非常にシンプルです。

デバイスのロック解除はパターン入力となっており、トランザクションのためには秘密鍵を復号化するためのパスワードを入力します。

SDカードによるアップグレードプロセスを見てみると、それほど複雑なメカニズムではありませんでした。upgradeのためにbinファイルを読み込む仕組みになっていて、これは暗号化の上で署名されたバイナリファイルです。

ファイルを見つけるためにEllipalのURLに適当にアクセスしたところ、order.ellipal.comドメインで、/lib/v2.0.zipや/lib/v1.7.zipといったURLが見つかりました。

これらのファイルについては、暗号化が十分とはいえません。64ビット暗号化で、ECBモードのようですが、hashcatでDESキーをブルートフォースするとしても、1週間もあれば解読できてしまうでしょう。

Ellipalの内装を調査して判明したこと

次に実際の機器に触ってみました。まず、デバッグ目的の隠しモードなどがありました。これ自体は、それほど騒ぐほどの情報ではありません。デバイスを開くと金属製のシールドで保護されていたので、これを外して電子部品の調査に入りました。

充電はUSBですが、コンピュータにつないでもデータは連携されません。外部フラッシュメモリが含まれており、これは暗号化されていない限り中身を読み取ることができます。

それから、通常は携帯電話向けに搭載されるローエンドSoCのMT6850A Mediatek SoCがありました。Cortex A7、500MHzで動作する ARM MALI GPU、Bluetooth、無線LANなどの部品も含まれています。UARTインターフェイスがあったので、これをケーブルでプルーブさせたところ、デバイスの起動後にたくさんの情報が流れてきました。

また工場出荷モードにしたところ、Wifiを取得してネットワークに接続させることもできました。つまり、Wifiは内部的には使える状態で出荷されていたわけです。

さらに調べていきます。

USBは物理的に接続されていませんが、基盤に必要な部品がそろっているので、はんだづけをしました。USBポートをコンピュータに接続し、mediatek_flash-toolを使います。これにより、mediatekブートローダーを起動させられました。

フラッシュメモリにアクセスできるようになったので確認したところ、ファイルシステムは暗号化されていませんでした。一方、ADBを有効にしたところサードパーティのAPKがインストールできました。Androidシステムのルートが取れたということです。

ウォレットのバックドアを仕掛けたり、Wifiの再有効化したり、となんでもできてしまう状態です。

ウォレットアプリケーションについて、リバースエンジニアリングも試しました。結果、ファームウェア署名の公開鍵などからの、ファームウェアの暗号化キー(3DES)は取得できていません。

しかし、暗号化されたウォレットは確認することができました。暗号化メカニズムの実装は、正直に言えばひどいものです。入力したパスワードは単純なsha256でハッシュ処理されていて、ウォレットの鍵復号についても同様でした。これでは、GPUを使うことなくパスワードは簡単に推測できてしまいます。

8桁の完全にランダムな英数字文字列でさえ、GPUがあれば、ものの数分で計算できます。もし物理的にEllipalに触れる機会があるなら、分解してUSBポートをアクティブにすることで、このように簡単にデータにアクセスできるでしょう。

Ellipalはウェブサイトでは「TrustZone」、「AES 128 high-intensity」や「乱数生成時の高品質のエントロピー」といった機能をうたっていますが、分解・分析した結果からは正しい説明とは思えませんでした。

しかしEllipalチームへの報告後、彼らはデバイスを更新し、Ledgerへの感謝を示すプレスリリースも出しています。新しいバージョンは未テストですが、報奨金プログラムも開始されているようですので、より良い結果につながっていくでしょう。

おわりに

次回、後半としてPINの推測やシードの抽出、という攻撃に進んでいきます。

記事中の表現については講演資料を筆者なりに読み解きつつ、前後で独自の解説を加えておりますが、なにぶん新しい技術に関する内容ですので、もしも間違いなどございましたらお気軽にご指摘くださいませ。(特に技術的な指摘は大歓迎です)

前回の記事はこちら
ネット上の管理でセキュリティの最新設備を提供する企業が増えてきました。その多くはアクセスする権限のシステムでノウハウを発揮しています。前回のコラムでは、ビットコインの開発においてもそのような研究が進んでいることを紹介しました。本コラムと合わせて読んでいただけるとウォレット開発の注目ポイントがつかめますので、ぜひご覧ください。 ビットコインウォレットの未来
おすすめの記事