
Android 및 Java 애플리케이션을 위한 보안 중심의 정적 분석 도구입니다.

Mariana Trench는 Android를 대상으로 하는 보안 중심 정적 분석 플랫폼입니다.
이 가이드는 여러분의 시스템에 Mariana Trench를 설정하고, 작은 샘플 앱에서 첫 번째 원격 코드 실행 취약점을 찾는 과정을 안내합니다. 이 지침은 웹사이트에서도 확인할 수 있습니다.
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 설치는 Apple Silicon 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 68937개의 모델을 7.47초 만에 분석했습니다. 9개의 이슈 발견!
# ...
분석 결과 샘플 앱에서 9개의 이슈가 발견되었습니다. 분석 결과는 애플리케이션의 각 메서드에 대한 명세(specifications) 집합입니다.
명세 자체는 사람이 읽기 위한 것이 아닙니다. 결과를 더 보기 좋게 만들기 위해서는 추가 처리 단계가 필요합니다. 이를 위해 우리를 위해 설치된 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의 생성자로 세 단계를 거쳐 흐른다는 것을 알려줍니다. 이슈의 오른쪽 상단에 있는 "Traces"를 클릭하면 예제 추적을 볼 수 있습니다.
Mariana Trench가 표면화한 추적은 세 부분으로 구성됩니다.
소스 추적은 데이터가 어디에서 오는지 나타냅니다. 예제에서는 추적이 매우 짧습니다: Activity.getIntent가 MainActivity.onCreate에서 직접 호출됩니다.

추적 루트는 소스 추적과 싱크 추적이 만나는 지점을 나타냅니다. 예제에서는 액티비티의 onCreate 메서드입니다.

추적의 마지막 부분은 싱크 추적입니다: 여기서 소스의 데이터가 싱크로 흘러 들어갑니다. 예제에서는 onCreate에서 onClick, execute를 거쳐 최종적으로 ProcessBuilder의 생성자로 흐릅니다.

"도구가 무엇이 사용자 제어 데이터이고 무엇이 싱크인지 어떻게 알까?"라고 궁금해할 수 있습니다. 이 가이드는 작은 앱에서 빠르게 시작할 수 있도록 돕기 위한 것입니다. Mariana Trench를 구성하는 방법은 다루지 않았습니다. 이에 대한 자세한 내용은 웹사이트의 구성에서 확인할 수 있습니다.
소스에서 빌드하고 Mariana Trench를 개발하는 방법에 대한 심층 가이드는 웹사이트의 개발자 가이드를 참조하세요.
Mariana Trench는 MIT 라이선스로 배포됩니다.