
बूटस्टॉम्प: एक बूटलोडर भेद्यता खोजक
BootStomp एक बूट-लोडर बग खोजक है। यह दो अलग-अलग प्रकार की बगों की तलाश करता है: मेमोरी भ्रष्टाचार और स्थिति संग्रहण भेद्यताएँ। अधिक जानकारी के लिए कृपया BootStomp पेपर देखें: https://seclab.cs.ucsb.edu/academic/publishing/#bootstomp-security-bootloaders-mobile-devices-2017
BootStomp के विश्लेषण चलाने के लिए, कृपया निम्नलिखित निर्देश पढ़ें। ध्यान दें कि BootStomp ARM आर्किटेक्चर (32 और 64 दोनों बिट) के लिए संकलित बूट-लोडर के साथ काम करता है और परिणाम angr और Z3 के संस्करणों के आधार पर थोड़े भिन्न हो सकते हैं। ऐसा angr द्वारा बेसिक ब्लॉक का विश्लेषण करने में लगने वाले समय और Z3 के एक्सप्रेशन कॉन्क्रिटाइज़ेशन परिणामों के कारण होता है।
$ pip install angr
BootStomp का उपयोग करने का सबसे आसान तरीका इसे Docker कंटेनर में चलाना है।
फ़ोल्डर docker में एक उपयुक्त Dockerfile शामिल है।
इसका उपयोग करने के लिए ये आदेश हैं।
cd docker
# डॉकर इमेज बनाएँ
docker build -t bootstomp .
# डॉकर इमेज चलाएँ (यदि आवश्यक हो, तो स्थायी परिवर्तन या साझा फ़ाइलों के लिए उपयुक्त विकल्पों का उपयोग करें)
docker run -it bootstomp
# अब आप डॉकर कंटेनर के अंदर हैं
cd BootStomp
# उदाहरणों में से एक पर BootStomp का टेन्ट विश्लेषण चलाएँ
# इसमें लगभग 30 मिनट लगेंगे
python taint_analysis/bootloadertaint.py config/config.huawei
# आउटपुट की अंतिम पंक्ति कुछ इस प्रकार होगी:
# INFO | 2017-10-14 01:54:10,617 | _CoreTaint | Results in /tmp/BootloaderTaint_fastboot.img_.out
# फिर आप परिणामों को "pretty print" कर सकते हैं:
python taint_analysis/result_pretty_print.py /tmp/BootloaderTaint_fastboot.img_.out
आउटपुट कुछ इस प्रकार होना चाहिए:
...
17)
===================== Start Info path =====================
Dereference address at: 0x5319cL
Reason: at location 0x5319cL a tainted variable is dereferenced and used as address.
...
Tainted Path
----------------
0x52f3cL -> 0x52f78L -> 0x52f8cL -> 0x52fb8L -> 0x52fc8L -> 0x52fecL -> 0x53000L -> 0x53014L -> 0x5301cL -> 0x53030L -> 0x53044L -> 0x53050L -> 0x5305cL -> 0x53068L
===================== End Info path =====================
# Total sinks related alerts: 5
# Total loop related alerts: 8
# Total dereference related alerts: 4
find_taint.py चलाएँ।taint_source_sink.txt फ़ाइल में दिखाई देगा जहाँ बूट-लोडर स्थित है।बूट-लोडर बाइनरी के लिए एक JSON कॉन्फ़िगरेशन फ़ाइल बनाएँ (उदाहरण config/ में देखें), जहाँ:
चलाएँ
python bootloadertaint.py config-file-path
परिणाम /tmp/BootloaderTaint_[boot-loader].out में संग्रहीत होंगे, जहाँ [boot-loader] विश्लेषित बूट-लोडर का नाम है। ध्यान दें कि लूप वाले पथ एक से अधिक बार दिखाई दे सकते हैं।
चलाएँ
python unlock_checker.py config-file-path
परिणाम /tmp/UnlockChecker_[boot-loader].out में संग्रहीत होंगे, जहाँ [boot-loader] विश्लेषित बूट-लोडर का नाम है। ध्यान दें कि लूप वाले पथ एक से अधिक बार दिखाई दे सकते हैं।
BootStomp परिणामों की जाँच करने के लिए, स्क्रिप्ट result_pretty_print.py का उपयोग करें:
python result_pretty_print.py results_file