Tiroは、Androidアプリケーション向けのハイブリッド反復脱芽式フレームワークです。その名前は、 Target 、 Instrument 、 Run 、およびObserveという4つのステップを表しています。 Tiroのアプローチは、ターゲットを絞った実行のアイデア(以前のツール、Intellidroidを参照)を使用して、考えられる難読化の場所を静的に識別し、これらのコードの場所をトリガーする入力を決定します。これらの場所を計装し、ターゲティング情報を使用して実行することにより、ランタイムデオブスケーション情報を収集して静的分析に渡すことができ、アプリケーションを除去し、より完全な分析結果を達成できます。
詳細については、Usenix Security 2018に掲載された論文をご覧ください。
現在、このリポジトリのコードには、 Targetステップのベースコードが含まれており、主にSootフレームワークに対するIntellidroidの静的コンポーネントのポートです。将来、他のTIROステップのコードをリリースする予定です。
Tiroの静的分析は、 TargetとInstrument手順で構成されています。 Targetステップでは、難読化の場所が特定され、それらの場所への呼び出しパスが抽出されます。各パスについて、Tiroはパスを動的にトリガーするために注入する必要がある入力を決定する制約を収集します。現在、Z3 Constraint Solverを使用し、制約をZ3-PYおよびZ3-Java形式に変換しています。
静的解析コンポーネントには、Java 8(JDK 1.8)が必要です。
このリポジトリには、アプリケーションで使用されるAndroidフレームワークライブラリが含まれるandroid-platformsリポジトリへの依存関係が含まれています。この依存関係は、プロジェクト内のサブモジュールです。サブモジュールでTIROをクローンするには、実行します。
git clone --recursive [email protected]:miwong/tiro.git
あるいは、サブモジュールなしでティロをすでにクローンしている場合は、次を実行しています。
git submodule update --init --recursive
Androidフレームワークライブラリが大きいため、これには数分かかります。
このプロジェクトでは、Gradleビルドシステムを使用しています。出力ファイルはbuild/ディレクトリにあります。 Gradlewスクリプトは、Gradleが既にインストールされていないマシンのラッパーです。開発マシンに既にGradleが含まれている場合は、以下のコマンドで./gradlewをgradleに置き換えることで、独自のインストールを使用できます。 Gradleが依存関係を自動的にダウンロードできるように、コードを初めてコンパイルするときにネットワーク接続が必要です。
構築するには:
./gradlew build
構築して実行するには:
./TIROStaticAnalysis <APK>
デフォルトでは、TIROは静的分析結果をtiroOutputディレクトリに書き込みます。 -oオプションを使用すると、これを変更できます。他のコマンドラインオプションを表示するには、実行してください。
./TIROStaticAnalysis --help
現在、TIROの静的分析出力(つまり、 appInfo.json )はIntellidroidと互換性がありません。 TIROの動的コンポーネントをリリースする際には、Tiroの制約抽出を動的分析に統合できるように、Intellidroidで使用される動的クライアントも更新します。
Tiroは、SOOT静的解析フレームワークの上に構築されています。 Sootのコールグラフ生成にいくつかの変更が加えられ、Android固有の実行フロー(意図など)を表すエッジを備えたコールグラフを強化しました。変更は、ここで別々のリポジトリに公開されています。
Androidアプリケーションはイベント駆動型であるため、完全な分析を実現するには、アプリケーションへのエントリポイントを計算する必要があります。 Tiroは、FlowDroidに実装されたエントリポイントディスカバリーを使用します。 Tiroの分析で必要な情報を抽出するために、このエントリポイントコードにマイナーな変更が行われました。これらの変更はstatic/src/soot/およびstatic/src/tiro/target/entrypoint/に保存されます。
以下は、Tiroにコードを貢献しています。
ティロは、トロント大学のミシェル・ウォンによって博士号プロジェクトとして開発されました。お問い合わせについては、[email protected]のMichelleにお問い合わせください。
Tiroは、GNU Lesser General Public Licenseのバージョン2.1の下でリリースされます。