
AndroidおよびJavaアプリケーション向けのセキュリティに特化した静的解析ツール。

Mariana Trenchは、Androidを対象としたセキュリティに特化した静的解析プラットフォームです。
このガイドでは、お使いのマシンにMariana Trenchをセットアップし、小さなサンプルアプリで最初のリモートコード実行の脆弱性を見つける手順を説明します。これらの手順は、Webサイトでもご覧いただけます。
Mariana Trenchは、最新のPythonが必要です。MacOSでは、homebrewを使って最新バージョンを入手できます:
$ brew install python3
Debian系のLinux(Ubuntu、Mint、Debian)では、apt-getを使用できます:
$ sudo apt-get install python3 python3-pip python3-venv
このガイドでは、Android SDKがインストールされており、環境変数$ANDROID_SDKがSDKの場所を指していることを前提としています。
残りのガイドでは、仮想環境内で作業していることを前提とします。次のように設定できます:
$ python3 -m venv ~/.venvs/mariana-trench
$ source ~/.venvs/mariana-trench/bin/activate
(mariana-trench)$
シェルプロンプトの前にある仮想環境の名前は、仮想環境がアクティブであることを示しています。
仮想環境内でMariana Trenchをインストールするには、次のコマンドを実行するだけです:
(mariana-trench)$ pip install mariana-trench
注:pip installは現在Appleシリコン搭載Macではサポートされていません。開発者ガイドの手順に従ってソースからビルドできます。
ドキュメントの一部である小さなアプリを使用します。次のコマンドで入手できます:
(mariana-trench)$ git clone https://github.com/facebook/mariana-trench
(mariana-trench)$ cd mariana-trench/
これで分析を実行する準備が整いました:
(mariana-trench)$ mariana-trench \
--system-jar-configuration-path=configuration/default_system_jar_paths.json \
--model-generator-configuration-paths=configuration/default_generator_config.json \
--lifecycles-paths=configuration/lifecycles.json \
--rules-paths=configuration/rules.json \
--apk-path=documentation/sample-app/app/build/outputs/apk/debug/app-debug.apk \
--source-root-directory=documentation/sample-app/app/src/main/java \
--model-generator-search-paths=configuration/model-generators/
# ...
INFO Analyzed 68937 models in 7.47s. Found 9 issues!
# ...
分析により、サンプルアプリで9件の問題が見つかりました。分析の出力は、アプリケーションの各メソッドに対する仕様のセットです。
仕様自体は人間が読むことを意図していません。結果を見やすくするために、追加の処理手順が必要です。これは、SAPP(PyPiでインストール済み)を使用して行います:
(mariana-trench)$ sapp --tool=mariana-trench analyze .
(mariana-trench)$ sapp --database-name=sapp.db server --source-directory=documentation/sample-app/app/src/main/java
# ...
2021-05-12 12:27:22,867 [INFO] * Running on http://localhost:13337/ (Press CTRL+C to quit)
出力の最終行は、SAPPが結果を確認できるローカルWebサーバーを起動したことを示しています。リンクを開くと、分析で見つかった4つの問題が表示されます。
サンプルアプリで見つかったリモートコード実行の問題に注目してみましょう。問題コード1(すべてのリモートコード実行)と呼び出し可能なvoid MainActivity.onCreate(Bundle)で識別できます。4つしか問題がないので手動で識別するのは簡単ですが、より多くのルールが実行されると、ページ右上のフィルター機能が役立ちます。

この問題は、Mariana TrenchがMainActivity.onCreateでリモートコード実行を発見したことを示しています。データはActivity.getIntentから1コール先の場所から来て、ProcessBuilderのコンストラクタに3コール先まで流れ込みます。問題の右上にある「Traces」をクリックすると、トレースの例が表示されます。
Mariana Trenchによって明らかにされたトレースは、3つの部分で構成されています。
ソーストレースはデータの出所を表します。この例では、トレースは非常に短く、Activity.getIntentがMainActivity.onCreateで直接呼び出されています。

トレースルートは、ソーストレースとシンクトレースが交わる場所を表します。この例では、アクティビティのonCreateメソッドです。

トレースの最後の部分はシンクトレースです。これはソースからのデータがシンクに流れ込む場所です。この例では、onCreateからonClick、executeを経て、最終的にProcessBuilderのコンストラクタに至ります。

「このツールは、ユーザーが制御するデータとシンクをどのようにして知るのだろう?」と疑問に思われるかもしれません。このガイドは、小さなアプリですぐに始められるようにするためのものです。Mariana Trenchの設定方法については説明していません。詳細は、Webサイトの設定をご覧ください。
ソースからのビルドやMariana Trenchの開発に関する詳細なガイドは、Webサイトの開発者ガイドをご覧ください。
Mariana TrenchはMITライセンスの下で提供されています。