[CODE BLUE 2019] ハードウェアウォレットセキュリティ[レポート] #codeblue_jp

CODE BLUE 2019「ハードウェアウォレットセキュリティ」についての参加レポートです。
2019.10.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、芳賀です。

『世界トップクラスのセキュリティ専門家による日本発の情報セキュリティ国際会議』でありますCODE BLUE 2019に参加していますのでレポートします。

このブログは下記セッションについてのレポートです。

ハードウェアウォレットセキュリティ Presented by セルゲイ・ヴォロキチン

セルゲイ・ヴォロチキン氏はオランダ・Riscure社のセキュリティアナリストであり、組み込みシステムのセキュリティ評価、スマートカードのプラットフォームに対するセキュリティテスト、TEE ベースのソリューションを専門にしている。Java Cardへの プラットフォーム攻撃に関する著書を多数出版しており、ハードウェアセキュリティに関する学会発表も行っている。

レポート

ハードウエアウオレットとは?

  • PCやスマホへ接続するハードウェア
  • シークレットキーが格納されている
  • MFA認証する際にデバイスのスクリーンを見る/見せる必要がない
  • ボタンを操作する必要があるため、リモートでの利用ができない
  • ファームウェアレベルでプロテクション
  • ハードウェアウォレットは様々なデバイスが販売されている

ハードウェアウォレットへのattack surface

  • 接続されたコンピューターからマルウエア
  • 対象デバイスを物理的に触る事ができる、他のユーザー
  • そのデバイスの前のオーナーが改ざんする

どんなセキュリティフューチャーがあるのか

  • 最も守るべきことはプライベートキーである
  • もちろん、キーがコピーされることはない
  • APIへ攻撃を考えた場合にもAPIはシンプルでであるため攻撃しにくい
  • ファームウェアの信頼性は検証されており、ブートもアップデートも検証され実行される

ここで検証したハードウェアウォレット Ledger Waller Bitcoin

  • ハードウエアとして安価な作りではあるが、シンプルかすることで高いセキュリティを維持している
  • MPUがあるので、メモリへのアクセスを制限されている
  • syscallsがTEEで権限があるかをチェックしている

脆弱性を考えると

  • システムコール
  • サプライチェーン攻撃も可能
  • 今回はメモリデバックから攻撃する
  • デバックアプリを読み込むことで、デバックアプリのメモリ領域+αで他のメモリを読むことができる
  • そのため、他のアプリを終了することでデバックアプリが読める領域を変更することができる
  • 最終的にはOS領域を読むことができる
    • ただ、OS領域は、ピンコードが無いとアクセスできない
    • ピンコードは3回間違いすることで、強制的にイニシャライズすることで、ピンコードを書き換えてキーを奪取することができる
    • まずはデバイスキーを盗み、物理的なアクセスできる状態になることが必要

ここまでのまとめ

  • デバックアプリを使うことで、メモリを書き換えられるため、ソフトウエアは信頼できない
  • また、バグがある

もしバグがなかったら攻撃できないのか?

  • 別なハードウェアウォレットで話を進めます
  • このハードウエアウォレットではSTM32のワンチップで実装されている
  • このデバイスを選択した理由としてOSSが利用されている

ここでの攻撃は物理的な事象(サイドチャネル攻撃)でおこなう

  • ハードウェアは、安定した電圧や安定した環境で稼働する事が望まれている
  • そのため、不安定なクロック(電圧)、電磁波で利用して、メモリの一部へ影響を及ぼす
  • サイドチャネル攻撃として電磁波をつかう
    • デバイスの電磁波を監視して、GLITCHをどこへ攻撃するか?を検証する
    • コマンドを送ると反応がパルスがでる
    • 戻ってくるレスポンスもパルスがでる
    • そのため、コマンドを送った直後にGLITCHをおこなう

対象デバイスへのサイドチャネル攻撃デモ

  • ハードウェアウォレットへコマンドを送りつつ
  • 電圧を上げ下げして、スパイクをモニタリングする
    • これによってスクリーンにメモリが読み出しができずエラーが出る。
    • また、クロックチェック処理が走ってクロックエラーが出る
  • このデバイスではOpen Sourceであるため、発生したエラーからどこまで実行されているかを把握する事ができる
  • 把握した内容からイニシャライズを走らせるようにエラーを発生させて、pinコードを再設定させることができるようになる。

サイドチャネル攻撃をおこなうために必要なこと

  • まずはデバイスを盗む
  • GLITCHを起こして、RAM PINを変更する
    • GLITCHを起こす成功率は、1.2%
    • 1回の攻撃は、0.3att/sec
  • そのため、5分ぐらいでPINを書き換えられる

まとめ

  • ソフトウエアは信用できない
    • バグを見つけたら早急に直す、もちろんバグバウンティを活用
  • ハードウェアはセキュリティの高いものでも信用できない
    • 攻撃者の資金が多くあれば、セキュリティ機能を回避できてしまう
    • ただし、より防御力の高いハードウェアを作る事はできる

感想

スマホやPCへのサイドチャネル攻撃でセキュリティ機能を迂回することは知っていたが、ハードウエアウォレットでも可能であることは驚きつつもデバイスである以上、納得できる内容だった。ただ、デバイスを盗まれた後の対応がユーザーとして出来る事が少ないので、今後注意していきたい。