
Инструмент статического анализа безопасности для приложений Android и Java.

Mariana Trench — это статический анализатор безопасности, ориентированный на Android.
Это руководство поможет вам установить Mariana Trench на свою машину и найти первую уязвимость удалённого выполнения кода в небольшом тестовом приложении. Инструкции также доступны на нашем веб-сайте.
Mariana Trench требует свежую версию Python. На MacOS можно получить актуальную версию через homebrew:
$ brew install python3
На Linux, основанном на Debian (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 в настоящее время не поддерживается на Mac с процессором Apple Silicon; вы можете собрать из исходников, следуя инструкциям в Руководстве разработчика.
Мы будем использовать небольшое приложение, которое является частью нашей документации. Вы можете получить его, выполнив:
(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 запустил локальный веб-сервер, позволяющий просматривать результаты. Откройте ссылку, и вы увидите 4 проблемы, найденные анализом.
Давайте сосредоточимся на проблеме удалённого выполнения кода, найденной в тестовом приложении. Вы можете определить её по коду проблемы 1 (для всех удалённых выполнений кода) и вызываемому методу void MainActivity.onCreate(Bundle). Имея всего 4 проблемы, легко найти её вручную, но когда запускается больше правил, фильтр в правом верхнем углу страницы становится очень полезным.

Проблема сообщает вам, что Mariana Trench обнаружил удалённое выполнение кода в MainActivity.onCreate, где данные поступают из Activity.getIntent на расстоянии одного вызова и перетекают в конструктор ProcessBuilder через 3 вызова. Нажмите «Traces» в правом верхнем углу проблемы, чтобы увидеть пример трассы.
Трасса, выявленная Mariana Trench, состоит из трёх частей.
Трасса источника представляет, откуда поступают данные. В нашем примере трасса очень короткая: Activity.getIntent вызывается непосредственно в MainActivity.onCreate.

Корень трассы представляет место, где встречаются трасса источника и трасса стока. В нашем примере это метод onCreate активности.

Последняя часть трассы — трасса стока: это то, где данные из источника стекают в сток. В нашем примере от onCreate к onClick, к execute и, наконец, в конструктор ProcessBuilder.

Вы, возможно, спрашиваете себя: «Как инструмент узнает, какие данные контролируются пользователем, а что является стоком?» Это руководство предназначено для быстрого начала работы с небольшим приложением. Мы не рассматривали, как настраивать Mariana Trench. Подробнее об этом можно прочитать на нашем веб-сайте в разделе Конфигурация.
Подробное руководство по сборке из исходников и разработке Mariana Trench можно найти в Руководстве разработчика на нашем веб-сайте.
Mariana Trench распространяется под лицензией MIT.