
AndroidアプリとJavaミドルウェアのためのオープンソースのインストルメンテーションフレームワークで、ARTコンパイラを介したデバイス上でのコンパイル中にコードを変更します。アプリの署名を保持し、モジュールベースのセキュリティ分析を可能にします。
ARTist は、Android アプリおよび Java ミドルウェア向けの柔軟なオープンソースインストゥルメンテーションフレームワークです。Android Runtime(ART)のコンパイラに基づいており、デバイス上でのコンパイル中にコードを変更します。既存のインストゥルメンテーションフレームワークとは異なり、アプリケーションの元の署名を保持し、命令レベルで動作します。
このリポジトリは、ARTist エコシステムの中核、すなわちインストゥルメンテーションフレームワークの実際の実装を表します。これは AOSP の Android Runtime (ART) プロジェクトに統合され、デバイス上の dex2oat コンパイラの特殊バージョンを作成し、開発者にモジュール API を提供します。これにより、コンパイラの中間表現で提供される、ターゲットの完全な Java ソースコードを完全に制御できます。ARTist は、エンドユーザーが既存のモジュールを利用できるようにし、開発者がアプリや Android システム向けの独自のインストゥルメンテーションを作成できるようにし、研究者がアプリやシステムの動作を分析および拡張できるようにします。
ARTist は、2 つの異なる方法で展開できます。第一に、root 化されたデバイス上で非侵襲的なアプリインストゥルメンテーションを可能にする ArtistGui プロジェクトを使用した通常のアプリケーションとして、第二に、カスタム ROM 用のシステムコンパイラとして、システムサーバー(Package Manager Service、Activity Manager Service など)や Android フレームワーククラス(boot.oat)も追加でインストゥルメントできます。Android Marshmallow 6.0 以降(6.0 を含む)のバージョンをサポートしています。
詳細なチュートリアルや ARTist エコシステムに関するより深い情報については、公式ドキュメント をご覧いただき、Gitter チャット にご参加ください。
コード内には、特定の Android バージョンをチェックするガードがある場合があります。これは、内部で使用する API の一部がバージョンごとに変更されている可能性があるためです。ART プロジェクトは絶えず変化しているため、バージョン依存のコードはすべて、ART フォーク に隔離するか、より便利でバージョンに依存しない API の背後に隠すようにしています。全体的な目標は、モジュール開発者からバージョン依存性を隠蔽し、結果として得られるモジュールが ARTist がサポートするすべての Android リリースと互換性を持つようにすることです。
現在のプレベータ版では、モジュールは modules フォルダの下に作成され、ARTist とともにコンパイルされます。ただし、まもなくリリースされるベータ版(下記参照)では、専用の SDK が提供され、ARTist のソースコードから独立してモジュールを開発できるようになります。そのため、AOSP は不要になり、モジュールをハードコードする必要はなく、特定のターゲットに対して使用するモジュールを動的に選択できるようになります。
独自のインストゥルメンテーションを作成したいだけの場合は、ARTist のビルドについて気にする必要はありません。上記の説明に従ってください。ただし、インストゥルメンテーションフレームワーク自体に取り組みたい場合は、以下の情報が役立ちます。
ARTist は ART コンパイラ dex2oat の拡張であり、そのためカスタマイズされた ART フォーク にサブモジュールとして埋め込まれています。ARTist をビルドするには、ART フォークを AOSP の一部としてビルドする必要があります。我々が ARTist バージョンの dex2oat と呼んでいるものは、実際には dex2oat バイナリといくつかのライブラリ(例:libart-compiler)から構成され、これらが一緒になってインストゥルメンテーションコンパイラを形成しています。ArtistGui プロジェクトには、ART と ARTist をビルドし、結果のバイナリとライブラリを ArtistGui の正しいフォルダにコピーしてテスト用のデバイスに出荷するための既製のスクリプトがあります。
まもなくベータフェーズに突入し、ARTist エコシステム全体に多くの変更がもたらされます。これには、モジュール開発を簡略化するための専用の ARTist SDK、セマンティックバージョニングに着想を得たリリースおよびバージョニングスキーム、改良・更新されたオンラインドキュメント、優れた新しいモジュール、その他多くの改善が含まれます。ただし、特に移行期間中は、リポジトリの README.md ファイルや https://artist.cispa.saarland のドキュメントなどの情報が若干最新でない可能性があります。ご不便をおかけして申し訳ございませんが、Gitter でフィードバックをお待ちしております。現在の進捗を把握するには、Project: ARTist リポジトリのベータマイルストーンに注目し、https://artist.cispa.saarland で新しいブログ記事をチェックしてください。
私たちは、Project ARTist の周りに開発者、研究者、ユーザーからなる活発なコミュニティを築きたいと考えており、あらゆる種類の貢献やフィードバックを歓迎します。プロジェクトに参加して支援する方法はたくさんあります。例えば、モジュールのテストや作成、重要な機能や不足している機能についてのフィードバックの提供、バグやその他の問題の報告、あるいは一般的な体験談の共有などです。チームは Gitter とリポジトリを積極的に監視しており、連絡や議論を喜んで受け付けています。まだ完全なコントリビューションガイドはありませんが、近々公開される予定です(上記のベータ告知を参照)。
ARTist は、第 2 回 IEEE European Symposium on Security and Privacy(EuroS&P'17)で発表された ARTist - The Android Runtime Instrumentation and Security Toolkit という論文に基づいています。全文はこちらから入手できます。研究で ARTist を引用する場合は、以下の参考文献エントリを使用してください:
@inproceedings{artist,
title={ARTist: The Android runtime instrumentation and security toolkit},
author={Backes, Michael and Bugiel, Sven and Schranz, Oliver and von Styp-Rekowsky, Philipp and Weisgerber, Sebastian},
booktitle={2017 IEEE European Symposium on Security and Privacy (EuroS\&P)},
pages={481--495},
year={2017},
organization={IEEE}
}
フォローアップ論文では、ARTist を利用してサードパーティアプリケーションから広告ライブラリを切り出し、そのライブラリを専用アプリ(独自のセキュリティプリンシパル)に移動し、カスタム Binder IPC プロトコルを使用して両者を再接続しました。その際、リモート広告を広告除去済みアプリの上にフローティングビューとして表示することで、視覚的な忠実性を維持しています。全文 The ART of App Compartmentalization: Compiler-based Library Privilege Separation on Stock Android(2017 年 ACM SIGSAC Conference on Computer and Communications Security(CCS'17)で発表)はこちらから入手できます。