Extracting Seeds from Hardware Wallets
2019年6月8日から9日にかけて、アムステルダムで Breaking Bitcoin というカンファレンスが行われました。 本コラムは、公開された動画や書きおこしをもとに、その発表内容を追いかけ、Bitcoin のセキュリティに関する取り組みの最先端を知ろうという試みです。 発表内容を日本語で、かつ実際の事例などを交えて解説することで、少しでも皆様が Bitcoin の仕組みや最新の研究について詳しくなるための一助になれることを願います。 今回は、ハードウェアウォレットからシードが取り出せるか、というお話について、前後半でお届けします。
はじめに
講演は Charles Guillemet氏によるもので、氏は Ledger の CSO(Chief Security Officer)です。1年以上前から、レッドチーム Ledger Donjon を率い、Ledger の製品をセキュアにするために努めています。 ホワイトハッカーという名前は日本でも定着しつつありますが、レッドチームは社内で、より過激なテストを行うチームです。実際に自社製品に対し攻撃を検証するため、生半可な知識では務まりません。物理的な側面からソフトウェアの脆弱性まで、製品のセキュリティを担っていると言ってもいいでしょう。 しかしレッドチームを置いている会社は、筆者の知る限りでは、それほど多くないと思います。レッドチームを担当できるだけの幅広い知識、専属チームを置けるだけの規模、技術力、セキュリティ専門家を惹きつける魅力、そういった会社でないと置けない、というのが実情です。 話が逸れましたが、Ledger ではサイドチャネル攻撃、暗号化、ソフトウェアへの攻撃、摂動攻撃(perturbation attack)に重点を置いており、製品のハッキングに挑戦したり、外部からの報告を検証したり、サードパーティのセキュリティサービスを提供したり、といった日常のようです。 Ledger Donjon が提供する OSS も公開されているため、彼らの技術力、活動の範囲といったものをうかがい知ることができます。
OSS: https://github.com/Ledger-Donjon サイドチャネル攻撃:
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週間もあれば解読できてしまうことでしょう。
次に実際の機器を触ってみました。まず、デバッグ目的の隠しモードなどがありました。これ自体は、それほど騒ぐほどの情報ではありません。 デバイスを開くと金属製のシールドで保護されていたので、これを外して電子部品の調査に入りました。充電はUSBですが、コンピュータにつないでもデータは連携されません。 外部フラッシュメモリが含まれており、これは暗号化されていない限り中身を読み取ることができます。それから、通常は携帯電話向けに搭載されるローエンドSoCの MT6850A Mediatek SoC がありました。Cortex A7、500MHz で動作する ARM MALI GPU、Bluetooth、無線LANなどの部品もありました。 UARTインターフェイスがあったので、これをケーブルでプルーブさせたところ、デバイスの起動後にたくさんの情報が流れてきました。また、工場出荷モードにしたところ、Wifiを取得してネットワークに接続させることもできました。つまり、Wifi は内部的には使える状態で出荷されていたわけです。
MT6850: https://www.mediatek.com/products/smartphones/mt6580 UART: https://ja.wikipedia.org/wiki/UART
Ellipal のさらなる調査
さらに調べていきます。 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 への感謝を示すプレスリリースも出しました。新しいバージョンは未テストですが、報奨金プログラムも開始されているようですので、より良い結果につながっていくでしょう。
プレスリリース: https://www.ellipal.com/blogs/news/ellipal-version-2-0-an-upgrade-on-security 報奨金プログラム: https://www.ellipal.com/pages/ellipal-bounty-programme
おわりに
次回、後半として PIN の推測やシードの抽出、という攻撃に進んでいきます。
記事中の表現については講演資料を筆者なりに読み解きつつ、前後で独自の解説を加えておりますが、なにぶん新しい技術に関する内容ですので、もしも間違いなどございましたらお気軽にご指摘くださいませ。(特に技術的な指摘は大歓迎です)
【寄稿者情報】
- 前回の記事はこちら
- 本記事は、ハードウェアウォレットについて、安全や改善点の最新研究をお伝えしていきます。