
नियतात्मक कर्नेल एक्सप्लॉइट CVE-2023-32434 पर आधारित।
Trigon, CVE-2023-32434 पर आधारित एक नियतात्मक (deterministic) कर्नेल एक्सप्लॉइट और PPL बायपास है। यह iOS 13 - 16.5.1 चलाने वाले A9 - A16 डिवाइसों का समर्थन करता है। नियतात्मक होने का अर्थ है कि यह एक्सप्लॉइट शोषण के दौरान या बाद में कभी भी पैनिक नहीं करेगा और पूरी तरह से विश्वसनीय है।
Trigon, XNU की VM परत में एक इंटीजर ओवरफ़्लो का शोषण करता है। यह भेद्यता हमें एक मनमाना भौतिक पता मैपिंग प्रिमिटिव बनाने की अनुमति देती है। यह हमें लगभग किसी भी भौतिक पते तक पढ़ने/लिखने के प्रिमिटिव देता है, लेकिन इसके बाद की शोषण रणनीति विभिन्न डिवाइसों और संस्करणों के बीच भिन्न होती है।
यदि आप iOS-संबंधित तकनीकी राइटअप में रुचि रखते हैं, तो मैं आपको Trigon श्रृंखला पढ़ने की सलाह दूंगा! मैंने इसे यथासंभव समझने योग्य बनाने का प्रयास किया है ताकि जो लोग iOS शोधकर्ता नहीं हैं वे भी इसे समझ सकें।
नोट: arm64 डिवाइस वर्तमान में iOS 16 पर समर्थित नहीं हैं, केवल arm64e डिवाइस (A12+) ही समर्थित हैं।
arm64e समर्थन के लिए कई हार्डकोडेड मानों की आवश्यकता होती है, जिन्हें unique_offsets.h में डाला जाना चाहिए। अधिकांश को बहुत आसानी से पाया जा सकता है, कुछ संरचना ऑफ़सेट Dopamine स्रोत कोड में पाए जा सकते हैं, और अन्य XPF चलाकर पाए जा सकते हैं। हालाँकि, तीन ऑफ़सेट ऐसे हैं जिन्हें हम शोषण से पहले नहीं खोज सकते, और मैं अब बताऊंगा कि उन्हें कैसे खोजा जाए।
UniqueValues.addresses.base Trigon के लिए दुर्भावनापूर्ण मेमोरी मैपिंग का भौतिक बेस पता है। इसे खोजने का एक आसान तरीका यह है कि मौजूदा मान को अनुमानित बेस पते के रूप में उपयोग करें और फिर 0x41410000 जैसे पहचानने योग्य भौतिक पते को पढ़ें। फिर आप पैनिक लॉग में भौतिक पते से ऑफ़सेट घटाकर मैपिंग का सही बेस पता निर्धारित कर सकते हैं।
pv_head_table और pp_attr_tableUniqueValues.offsets.pv_head_table और UniqueValues.offsets.pp_attr_table कर्नेल भौतिक बेस से दो कर्नेल डेटा संरचनाओं के सापेक्ष ऑफ़सेट हैं। चूंकि वे कर्नेल इनिशियलाइज़ेशन के दौरान बहुत जल्दी आवंटित होते हैं, वे भौतिक मेमोरी में कर्नेल बेस से हमेशा ठीक उसी ऑफ़सेट पर होते हैं। इन्हें खोजने के लिए, आप किसी मौजूदा कर्नेल एक्सप्लॉइट (जैसे kfd) का उपयोग करके इन संरचनाओं को खोज सकते हैं और सही भौतिक पते में अनुवादित कर सकते हैं, और फिर उस तरह से ऑफ़सेट की गणना कर सकते हैं।
Dopamine के माध्यम से जेलब्रेकेबल डिवाइसों के लिए, मैंने एक आसान-से-उपयोग वाला कमांड लाइन टूल शामिल किया है जो arm64e पर Trigon के लिए सभी आवश्यक ऑफ़सेट खोज लेगा यहाँ। आप इसका उपयोग एक्सप्लॉइट को अपने डिवाइस और संस्करण संयोजन पर काम करने के लिए सेटअप करने के लिए कर सकते हैं।