ブログ

FFRI BLOG

2013-01-31 FFRI-Tech-Meeting #4-1 「Android端末検査のコツ」

先端技術研究部の松木です。

私はこれまでに「Android端末セキュリティ分析サービス」をいくつか担当して、いろいろなAndroid端末に触れてきました。自分が検査した端末が無事に発売されたニュース記事などを見ると、よかったという気持ちになります。また、発売後に脆弱性が見つかっていないか気になったりします。今回の社内勉強会FFRI-Tech-Meeting #4では、「Android端末検査のコツ」と題して話をしました。その中で話したことを簡単に紹介します。

なお、FFRI-Tech-Meeting(FFRIの社内技術者向け勉強会)第4回は、本記事を含め、これから2~3回に渡って各セッションのスピーカーが内容をお伝えする予定です。



最初に基本的なことですが、情報収集はとても重要です。まず、端末で動作している様々なプログラムやライブラリのバージョンを細かく調べ、既知の脆弱性がきちんと修正されているかどうかを検証します。既知の脆弱性情報の確認にはCVEDetails.comというサイトが便利です。最新端末の脆弱性情報やexploitなどはTwitterや掲示板等を介して入手することが多いです。



既知の脆弱性の検証が終わったら次に未知の脆弱性を探します。ネットワークやメディアコンテンツを処理するプログラムに対して、異常なデータを入力する「ファジング」という手法を用いて検査を実施します。

ファジングのコツは、多数の異常データをどれだけ効率良くターゲットに入力するかです。これを手動で行った場合、検査の時間が限られているため、少数のデータしか入力できず、脆弱性を発見できる可能性が低くなります。

そこで、ネットワークのファジングには、弊社製品のFFR Raven を使います。メディアコンテンツ処理のファジングは、検査端末毎に脆弱性を発見できそうなファイルフォーマットを探し、異常データの生成とターゲットへの入力を自動化するツールを作成して効率化しています。異常データの入力によりクラッシュが発生した場合は、デバッガと逆アセンブラを使って、プログラムのどの部分が脆弱性の原因になっているかを分析していきます。これもひとつひとつのパターンを手動で分析すると非常に時間がかかるため、スクリプトなどを駆使して可能な限り自動化することで効率化しています。100,000 個の異常データの入力によって脆弱性を発見、分析した例を紹介しました。



続いてはroot化の検査についてです。多くのAndroid端末のメーカーは、ユーザーに端末のroot権限を取得されないように対策を行なっており、さらに、たとえroot 権限を取得されても機密情報が読み取られたり、改ざんされたりしないように対策を実施しています。具体的には、LSM(Linux Security Module)でのさまざまな制限やNANDロックによる重要パーティションの保護、ベンダー固有のプログラムによる機密情報の暗号化などの対策があります。これらの対策で十分なセキュリティが確保されているかどうかを検査します。

この検査のコツは、検査端末における対策の方法を理解した上でセキュリティの突破口となりそうなモジュールを静的解析することです。これには、Android、Linuxのシステムアーキテクチャに関する知識とARMアセンブリを解析する能力が必要です。カーネルイメージやデバイスドライバ等のカーネルモジュール、デーモンなど端末で動作するあらゆるプログラムの中から脆弱性のありそうな解析対象を選択するには経験やセンスも重要ですが、端末から得られるカーネルシンボルや残存しているデバッグ情報、GPLにより公開されているソースコードが大きな手がかりとなります。

root化対策の突破は、メーカーによる対策や機種毎の構成の違いによって一筋縄ではいかず、毎回いろいろと試行錯誤しています。

最後に試行錯誤の例として、LSMによるカーネルモジュールのロード制限の回避方法とvermagic, modversionsなどモジュールロード時のチェック機構ついての説明、静的解析で見つけたNANDを読み書きする関数を呼び出すモジュールを使ったNANDロック回避の試行について紹介しました。


nandrw