
أداة تحليل ثابتة تركز على الأمان لتطبيقات Android و Java.

Mariana Trench هي منصة تحليل ثابت موجهة للأمان تستهدف نظام أندرويد.
سيرشدك هذا الدليل خلال إعداد Mariana Trench على جهازك ومساعدتك في العثور على أول ثغرة تنفيذ تعليمات برمجية عن بُعد في تطبيق عينة صغير. هذه التعليمات متاحة أيضًا على موقعنا.
تتطلب Mariana Trench إصدارًا حديثًا من Python. على MacOS يمكنك الحصول على إصدار حالي عبر homebrew:
$ brew install python3
على نظام Linux بنكهة Debian (أوبونتو، 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 بدأ خادم ويب محلي يتيح لنا عرض النتائج. افتح الرابط وسترى المشكلات الأربع التي وجدها التحليل.
دعنا نركز على مشكلة تنفيذ التعليمات البرمجية عن بُعد الموجودة في تطبيق العينة. يمكنك تحديدها بواسطة رمز المشكلة 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.