3.1.2 Android セキュリティツールボックス
人間と機械による分析システムは、新規で高度な、ドメイン固有のマルウェアをどのように検出できるか。
この問いに取り組む我々の研究から、いくつかの興味深い革新が生まれた。我々はプログラム分析プラットフォーム Atlas を用いて、これらの革新を、Android アプリのマルウェアを検出するための Android セキュリティツールボックスと呼ぶドメイン固有のツールボックスに組み込んだ。セキュリティツールボックスは、次の目標のもとで設計されている。
- (a) 自動的に検出されたマルウェアを相互検証するため、(b) 自動化されたマルウェア検出の視野に入っていない、アプリケーション固有のマルウェアについて仮説を立て、洗練し、想定する what-if 実験を行うための、人間の労力を最小化する。
- API のパーミッション、Activity、Service、Content Provider、Broadcast Receiver といったコンポーネント、XML リソースファイルに関する、豊かで複雑な Android の意味論を取り入れる。
- 進化に適し、使いやすいマルウェア検出ツールのための、分離されたアーキテクチャを提供する。マルウェア検出の能力は分離されており、プログラム分析プラットフォーム(Atlas)の上に構築される。根底にある設計思想は、汎用の仕組みの上にドメイン固有のツールボックスを構築する、Matlab や Mathematica のようなプラットフォームと似ている。
我々は ICSE 2015 の論文で、Android セキュリティツールボックスの設計と使い方を述べている。
動画:http://youtu.be/WhcoAX3HiNU
3.1.2.1 パーミッションのマッピング
テキストメッセージの送受信、位置情報へのアクセス、ユーザーの連絡先へのアクセスといった Android の機密性の高い機能は、アプリケーションがそれらの機能を呼び出すパーミッションを付与されているかどうかを強制する実行時のチェックによって保護されている。セキュリティツールボックスは、Toronto の PScout 研究グループが作成したパーミッションのマッピングを活用する。Android の各 API バージョンについて、我々は PScout のマッピングを、パーミッションで保護されたメソッドを正確に表す XML ファイルに変換する。ツールボックスには、アプリケーションのマニフェストを解析するコードが含まれており、その XML ファイルを用いて、正しい API のマッピングを Atlas のプログラムグラフに自動的に注釈として付ける。解析器の開発を助けるため、我々は、パーミッション、パーミッショングループ、保護レベルに関する Google の開発者向けドキュメントを自動的にスクレイピングし、Java オブジェクトに符号化した。さらに、Android のソースからそれらの関係をマイニングすることで、Android のパーミッションから保護レベルへのマッピングと、パーミッションからパーミッショングループへのマッピングを復元した。
3.1.2.2 解析器
解析器は、セキュリティツールボックスが定義する仕様に従う。具体的には、解析器は、名前、説明、解析の仮定の集合、実行する解析プログラムをカプセル化する。Java で書かれたプログラムは、Atlas の API を呼び出してグラフデータベース内の情報にアクセスし、その目的は通常、1 つ以上のセキュリティ特性を確認することである。「エンベロープ」と呼ばれる解析器の結果は、その特性に関連するプログラムの意味論を捉えた Atlas のグラフである。このグラフは、特性が検出されなければ空であり、セキュリティ特性が検出されれば空ではない。このグラフは、人間の分析者が対話できるように表示することも、別の解析の入力として使うこともできる。たとえば、機密性の解析器は、まず、自動的に検出されたソースとシンクの組(例:SIM カード番号からインターネットへのフロー)の間で、低コストで区別のないテイントの漏洩(到達可能性のテスト)を調べるかもしれない。得られたグラフが空ではないが非常に大きい場合、そのグラフを、よりコストの高い、(呼び出し、オブジェクト、型、フローなどを)区別するテイントの漏洩解析に渡して、グラフから偽陽性を刈り込むことができる。ツールボックスは、このような推奨される解析器の連鎖を「continuations」と呼ぶ。
解析器は、プロパティ、スメル、機密性、完全性、可用性の 5 つのカテゴリーに細分されている。プロパティは、ネイティブコードの使用のように、分析者が把握しておくべきだが、必ずしも悪意を示すわけではない事柄である。スメルは、プロパティに似たヒューリスティックで、より強い疑いを示し、正当化を要するものである。たとえば、Java リフレクションを用いて非公開の Application Programming Interface(API)メソッドを呼び出すことがそれにあたる。セキュリティツールボックスは、スメルを、高い確信度でのみ報告する、より厳しいヒューリスティックに寄せるという保守的な方針を取る。機密性、完全性、可用性(CIA)の解析器は、それぞれ、ソースとシンクのテイント解析、機密性の高い変更可能な対象への変更操作、高コストなリソースのループの検出を用いて、CIA 特性の違反を検出する。ソース、シンク、変更可能な対象、リソースは、CIA 解析器への入力である。
セキュリティツールボックスの解析器は汎用の解析器である。我々が追加できるのは、事前に書ける解析器と入力モデル(例:ソースとシンク)だけである。ある機密性の高い計算の結果を機密性の漏洩の情報源として扱うべきであるといった、ドメイン固有の知識は、依然として実行時に人間の分析者が判断する必要がある。しかし、いったん新しい機密性のソースが発見されれば、その新しい情報を用いてさまざまなテイントの漏洩検出の解析器を実行するのは簡単な作業である。
3.1.2.3 インデクサー
Android は、ユーザーインターフェース、マニフェスト、その他のリソースに拡張可能マークアップ言語(XML)を広く用いているため、Atlas が生成する Java のプログラムグラフには、多くの重要なプログラムの成果物が欠けている。セキュリティツールボックスは、これらのリソースから欠けているプログラムの要素に注釈を付け、Atlas のプログラムグラフに追加するインデクサーを提供する。
カスタムのインデクサーの別のユースケースとして、Atlas は動的ディスパッチを解決するために保守的な開世界の近似を提供するが、型を区別する答えを計算するのに必要な生の情報は残しておく。この仕組みは、セキュリティツールボックスが状況に合った速度と正確さのトレードオフを明示的に選べるため、理想的である。保守的な動的ディスパッチについては、セキュリティツールボックスは型推論のインデクサーを実装しており、実行時の振る舞いである可能性が高いと示せるエッジにタグを付けることで、保守的なエッジの集合を絞り込む。オブジェクトを区別できるようにするため、Atlas は一意のオブジェクトインスタンス ID を提供しており、これを使ってコールサイトの履歴を保持し、区別のあるデータフローの走査を行える。
3.1.2.4 ダッシュボード
ダッシュボード(図 2)は、ツールボックスの自動化された解析器の実行を自動化し、その結果を管理するためのインターフェースである。ダッシュボードは、解析器間の依存関係を考慮し、多数の解析器を実行しながら並列計算の量を最大にする。結果は計算されるにつれて、ダッシュボードの右側にある作業項目のキューで分析者に提示される。結果はカテゴリーで絞り込むことができ、レビュー済みとして印を付けられる。必要に応じて、分析者は作業項目に追加のメモを残せる。作業項目はプログラムグラフの部分グラフに対応するため、別々のプログラムのサブシステムを識別しやすくするために、名前を付けたり色を付けたりすることもできる。プログラムの成果物に付けた色に基づいて、プログラムの成果物を作業項目に手作業で追加したり、作業項目から削除したりできる。
型推論やリソースのインデックス化のように、一部の解析はほかの解析の結果に依存し、ほかの解析には前提となる解析がないため、一部の結果は並列に計算できる。ダッシュボードは先行関係のグラフを構築し、並列化の量を最大にする解析を優先する。
結果は利用可能になるとすぐに調べることができ、分析者は結果を種類、内容、状態で並べ替えたり絞り込んだりできる。状態は、レビュー済みか未レビューか、そして色付きか色なしかのいずれかである。解析結果には、必要に応じて色を割り当てられる。色は単に、作業項目内のすべてのグラフ要素に付けられる Atlas のタグである。元の結果集合の外にある要素に同じ色を付けることで、それらの要素を作業項目に手作業で追加できる。
解析の各作業項目には、分析者がタイムスタンプ付きのメモを記録できるメモ欄がある。セキュリティツールボックスのために開発した AuditMon というユーティリティを用いて、ダッシュボードは選択イベントを Atlas のプログラムグラフに直接記録できる。この情報は、後で監査を振り返るのに使える。

解析には、正確さと時間のトレードオフの選択といった設定オプションがあるため、ダッシュボードは、個々の解析プログラムを有効または無効にしたり、解析の戦略を選択したりするための設定ウィザード(図 3)を提供する。

