
एक सुरक्षा-केंद्रित स्थैतिक विश्लेषण उपकरण 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 install वर्तमान में Apple silicon Macs के लिए समर्थित नहीं है, आप डेवलपर गाइड में दिए गए निर्देशों का उपयोग करके स्रोत से निर्माण कर सकते हैं।
हम एक छोटा ऐप उपयोग करेंगे जो हमारे दस्तावेज़ीकरण का हिस्सा है। आप इसे चलाकर प्राप्त कर सकते हैं:
(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 से आ रहा है, और 3 कॉल दूर ProcessBuilder के कंस्ट्रक्टर में प्रवाहित होता है। उदाहरण ट्रेस देखने के लिए समस्या के ऊपरी दाएं कोने में "Traces" पर क्लिक करें।
Mariana Trench द्वारा सामने लाया गया ट्रेस तीन भागों से मिलकर बना है।
स्रोत ट्रेस उस स्थान का प्रतिनिधित्व करता है जहां से डेटा आ रहा है। हमारे उदाहरण में, ट्रेस बहुत छोटा है: Activity.getIntent को सीधे MainActivity.onCreate में कॉल किया जाता है।

ट्रेस रूट उस स्थान का प्रतिनिधित्व करता है जहां स्रोत ट्रेस सिंक ट्रेस से मिलता है। हमारे उदाहरण में यह गतिविधि की onCreate विधि है।

ट्रेस का अंतिम भाग सिंक ट्रेस है: यह वह जगह है जहां स्रोत से डेटा सिंक में प्रवाहित होता है। हमारे उदाहरण में onCreate से, onClick तक, execute तक, और अंत में ProcessBuilder के कंस्ट्रक्टर में।

आप खुद से पूछ रहे होंगे, "टूल कैसे जानता है कि उपयोगकर्ता नियंत्रित डेटा क्या है, और सिंक क्या है?" यह मार्गदर्शिका आपको एक छोटे ऐप पर जल्दी से शुरू करने के लिए है। हमने Mariana Trench को कॉन्फ़िगर करने का तरीका नहीं बताया। आप इसके बारे में हमारी वेबसाइट पर कॉन्फ़िगरेशन के अंतर्गत अधिक पढ़ सकते हैं।
Mariana Trench पर स्रोत से निर्माण और विकास पर गहन मार्गदर्शिका के लिए, हमारी वेबसाइट पर डेवलपर गाइड देखें।
Mariana Trench MIT लाइसेंस के तहत लाइसेंस प्राप्त है।