サイバーセキュリティ対策を行う、シノプシスのCyRC
近年、多くの領域でソフトウェアの導入やIT化が進んでいる。それに伴い、サイバーインシデントのリスクも増加している。サイバーインシデントとは、システムの情報流出や不正侵入、マルウエア感染、Webサイト改ざん、DoS(DDoS)攻撃などにより、ユーザーや組織に対して被害が発生することを指す。保険・金融サービスを提供しているAllianz Global Corporate & Specialty(AGCS)の発表によれば、サイバーインシデントによるリスクの大きさは自然災害をも上回っているというから驚きである。
サイバーインシデントを引き起こす原因の1つがシステムの脆弱性だ。これはソフトウェアの欠陥によって、本来はできないはずの操作ができたり、閲覧できるべきではない情報が第三者に見えてしまったりする不具合のこと。脆弱性が混入する場所はさまざまだ。私たちが利用するアプリケーションだけではなく、OSやデバイスドライバー、CPU、オープンソースソフトウェアなど、どのようなコンポーネントのなかにも脆弱性は潜んでいる。
「シノプシスのCyRC(Cyber Security Research Center)は、ソフトウェア脆弱性の調査・研究を行い、サイバーセキュリティへの対策をする組織です。シノプシスの保有する技術である静的解析や動的解析、ソフトウェア構成解析、ファジング、オープンソースソフトウェア開発などの知見・ノウハウを利用して、各種の調査を行っています。また、ボストンやベルファスト、カルガリー、オウルなど複数の拠点で活動しているのです」
松岡氏は、CyRCが2020年3月にレポートしたAndroid OS搭載スマートフォンの指紋認証システムの脆弱性「CVE-2020-7958: biometric data extraction in Android devices」について解説する。脆弱性が発生していたデバイスはOnePlus 7 Pro。REE(Rich Extention Envinronment)によって保護されているはずの指紋ビットマップデータを、rootユーザーが取得できてしまうというものだ。
脆弱性の原因は、出荷されたプロダクトにデバッグ・コードが残っていたことである。なぜ、この事象が発生してしまったのだろうか。松岡氏はまず、スマートフォンに搭載されているARM社のCPU機構について解説していく。
「ARM社のCPUには、Trust Zoneという仕組みが搭載されています。これはMMU(Memory Management Unit)によって、マルチコア環境でのメモリ管理・保護を行うものです。Trust Zoneは保護されたセキュアな実行環境であるSecure Worldと、保護されない実行環境であるNormal Worldとを分けて管理しています。Secure Worldへのアクセスを厳密に制御することで堅牢性を向上させているのです。また、コンテクストスイッチをしたときにパイプラインのキャッシュもすべて消去する構造になっています」
OnePlus 7 Proは、Trust Zone+QSEE(Qualcomm Secure Execution Environment)による先端的かつセキュアなアーキテクチャが用いられている。このプラットフォームでは、指紋センサーなど生体認証の処理はTEE(Trusted Execution Environment)で行う。Secure modeで動作するCPUのみ、指紋センサーへのアクセスが可能だ。root化された端末であっても、Android OS(REE)からTEEへのアクセスは不可能。つまり構造上、指紋センサーのデータを取得できないはずだったのだ。
セキュアで高品質なソフトウェア開発のためのオンラインセミナー・シリーズ
シノプシスは、セキュアで高品質なソフトウェア開発のためのさまざまなテーマを扱うオンラインセミナーを随時開催しております。すべてのコンテンツはご参加無料、Live開催後は、録画版と講演資料の公開もしているのでいつでも繰り返しご覧いただけます。
今後Live開催予定の主なテーマ (Live後は同URLで録画版として公開)
- ソースコードの品質とセキュリティを効率的に向上させる静的解析
- オンデマンドのリモート・テスト・サービスを活用したクラウド・モバイルアプリの戦略的なセキュリティ・テスト
- ソフトウェアに含まれるOSSのライセンスと脆弱性の管理
- IAST: 次世代のWebアプリケーション・セキュリティ・テスト手法
他にもさまざまな業種・内容のコンテンツを掲載しています。
シノプシスのオンライン・セミナー・ポータルはこちら。
脆弱性の特定には、深い専門知識と根気強い調査・検証が必要
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で録画版として公開)
- ソースコードの品質とセキュリティを効率的に向上させる静的解析
- オンデマンドのリモート・テスト・サービスを活用したクラウド・モバイルアプリの戦略的なセキュリティ・テスト
- ソフトウェアに含まれるOSSのライセンスと脆弱性の管理
- IAST: 次世代のWebアプリケーション・セキュリティ・テスト手法
他にもさまざまな業種・内容のコンテンツを掲載しています。
シノプシスのオンライン・セミナー・ポータルはこちら。