SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2020夏】セッションレポート(AD)

シノプシスのCyRCは、いかにして指紋認証システムの脆弱性を発見したのか?【デブサミ2020夏】

【B-6】Androidスマホの生体認証の脆弱性、調べてみたらよくある話だった。

  • X ポスト
  • このエントリーをはてなブックマークに追加

脆弱性の特定には、深い専門知識と根気強い調査・検証が必要

 CyRCのロンドンチームは、脆弱性の原因を特定するための調査を行った。最初に取り組んだのは、Android OSのUSBデバッグモードをONにして、デバッガーを使ってシステムのなかで何が起きているのかをトレースすることである。

 調査の結果、REE内のFingerprint LibraryがAndroid OSのAPI Frameworkをサポートしており、多くの機能を有していることがわかった。TEE内のQSEEは、libQSEEComAPIを用いて指紋データをやりとりするバッファを用意している。そして、libgf_ud_halライブラリはバッファに指紋データを格納し、Fingerprint Trustletがこれを解釈。このとき、バッファ内の最初の数バイトのコードを条件として、TEEのなかにあるTrustletで起動する機能が決定される。

 前提として、REE内で動作するアプリケーションが指紋認証を行うためには、TEE内のTrustletと通信しなければならない。そして、Trustletにはデバッグ・コールが用意されているのが一般的だ。そうでなければ、開発者はソフトウェアの正常動作を検証できない。

 製品版のTrustletでは、悪用を防ぐためAPIエンドポイントにアクセスできないようにしておく。例えば、条件コンパイル機能である#ifdefなどを用いて、デバッグコードと製品版のコードを切り替えるようなパターンが考えられる。

 「CyRCのロンドンチームは、REE内の指紋認証サブシステムに含まれるlibgf_ud_hal.soという共有オブジェクトに、何か意図せぬコードが残っている可能性があると推測して検証をしていきました。気が遠くなるような時間をかけてリバースエンジニアリングを行い、擬似コードの生成に成功したのです」

リバースエンジニアリングの結果、擬似コードの生成に成功
リバースエンジニアリングの結果、擬似コードの生成に成功

 擬似コードによって、以下の情報が得られた。とりわけ、Target IDとCommand IDの情報が判明したことは、検証を進めるうえで大きな成果だったという。

  • 指紋センサーから画像を受け取るバッファ(raw_data_out)を受け入れ
  • 出力イメージ(GF_SZ_TEST_RAWDATA構造のサイズ)に対応するため、少なくとも86024バイトのサイズである必要がある
  • 引数「ae_expo_start_time」も渡される
  • Target ID(target)は1003をセット
  • Command ID(cmd_id)は17をセット

 ※上記はOnePlus向けの指紋センサーSDKの仕様によるものであり、他のモデルやベンダーでは仕様が異なる可能性がある

 これらの情報をもとに、CyRCのロンドンチームは緻密な調査を続けていく。最終的には、Target IDが1003、Command IDが17という条件で指紋認証のTrustletにある関数を呼び出すことで、REE側で指紋の画像を取得可能であることを特定できた。脆弱性をつぶすことに成功したのだ。

 脆弱性の特定には、深い専門知識と根気強い調査・検証が必要である。この事例は、高難度のタスクを達成したCyRCの技術力が伺えると同時に、サイバーインシデントについて理解して対策を行うことの重要性を私たちに教えてくれた。

セキュアで高品質なソフトウェア開発のためのオンラインセミナー・シリーズ

 シノプシスは、セキュアで高品質なソフトウェア開発のためのさまざまなテーマを扱うオンラインセミナーを随時開催しております。すべてのコンテンツはご参加無料、Live開催後は、録画版と講演資料の公開もしているのでいつでも繰り返しご覧いただけます。

 今後Live開催予定の主なテーマ (Live後は同URLで録画版として公開)

 他にもさまざまな業種・内容のコンテンツを掲載しています。

 シノプシスのオンライン・セミナー・ポータルはこちら

関連リンク

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【デブサミ2020夏】セッションレポート連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/12717 2020/08/26 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング