hacktricks/mobile-pentesting/ios-pentesting/ios-app-extensions.md
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00

22 KiB

iOS ऐप एक्सटेंशन्स

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

यहां से सामग्री कॉपी की गई है https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#app-extensions

ऐप एक्सटेंशन्स ऐप्स को यह सुविधा और सामग्री प्रदान करने की अनुमति देते हैं जब वे अन्य ऐप्स या सिस्टम के साथ इंटरैक्ट कर रहे होते हैं। कुछ महत्वपूर्ण एक्सटेंशन्स निम्नलिखित हैं:

  • कस्टम कीबोर्ड: iOS सिस्टम कीबोर्ड को सभी ऐप्स में उपयोग के लिए एक कस्टम कीबोर्ड से बदलता है।
  • शेयर: शेयरिंग वेबसाइट पर पोस्ट करें या दूसरों के साथ सामग्री साझा करें।
  • टुडे: इसे विजेट्स भी कहा जाता है, यह नोटिफिकेशन सेंटर के टुडे व्यू में सामग्री प्रदान करते हैं या त्वरित कार्य करते हैं।

उदाहरण के लिए, उपयोगकर्ता होस्ट ऐप में पाठ का चयन करता है, "शेयर" बटन पर क्लिक करता है और सूची से "ऐप" या कार्रवाई का चयन करता है। इससे ऐप एक्सटेंशन को संबंधित ऐप का एक्सटेंशन ट्रिगर होता है। ऐप एक्सटेंशन होस्ट ऐप के संदर्भ में अपना दृश्य प्रदर्शित करता है और इसका उपयोग करके किसी विशेष कार्य (उदाहरण के लिए, इसे सोशल नेटवर्क पर पोस्ट करें) करने के लिए होस्ट ऐप द्वारा प्रदान की गई आइटम, इस मामले में चयनित पाठ, का उपयोग करता है। इसका अच्छी तरह से सारांशित करने वाली Apple App Extension Programming Guide से यह चित्र देखें:

सुरक्षा संबंधी विचारणाएं

सुरक्षा के दृष्टिकोण से महत्वपूर्ण है कि:

  • एक ऐप एक्सटेंशन कभी भी अपने संबंधित ऐप के साथ सीधे संवाद नहीं करता है (सामान्यतः, यह चल रहा नहीं होता है जब एक्सटेंशन चल रहा होता है)।
  • एक ऐप एक्सटेंशन और होस्ट ऐप इंटर-प्रोसेस संवाद के माध्यम से संवाद करते हैं।
  • एक ऐप एक्सटेंशन के संबंधित ऐप और होस्ट ऐप कभी भी संवाद नहीं करते हैं।
  • टुडे विजेट (और कोई अन्य ऐप एक्सटेंशन प्रकार नहीं) सिस्टम से अपने संबंधित ऐप को खोलने के लिए NSExtensionContext कक्षा के openURL:completionHandler: विधि को कॉल करके प्रणाली से पूछ सकता है।
  • किसी भी ऐप एक्सटेंशन और उसके संबंधित ऐप को एक निजी निर्धारित साझा कंटेनर में साझा डेटा तक पहुंच मिल सकती है।
  • ऐप एक्सटेंशन कुछ एपीआई तक पहुंच नहीं पा सकते, उदाहरण के लिए, HealthKit।
  • वे **AirDrop का
$ grep -nr NSExtensionPointIdentifier Payload/Telegram\ X.app/
Binary file Payload/Telegram X.app//PlugIns/SiriIntents.appex/Info.plist matches
Binary file Payload/Telegram X.app//PlugIns/Share.appex/Info.plist matches
Binary file Payload/Telegram X.app//PlugIns/NotificationContent.appex/Info.plist matches
Binary file Payload/Telegram X.app//PlugIns/Widget.appex/Info.plist matches
Binary file Payload/Telegram X.app//Watch/Watch.app/PlugIns/Watch Extension.appex/Info.plist matches

आप SSH के माध्यम से भी पहुंच सकते हैं, ऐप बंडल को खोजें और सभी अंदर के प्लगइन की सूची बनाएं (ये डिफ़ॉल्ट रूप से वहां रखे जाते हैं) या इसे objection के साथ करें:

ph.telegra.Telegraph on (iPhone: 11.1.2) [usb] # cd PlugIns
/var/containers/Bundle/Application/15E6A58F-1CA7-44A4-A9E0-6CA85B65FA35/
Telegram X.app/PlugIns

ph.telegra.Telegraph on (iPhone: 11.1.2) [usb] # ls
NSFileType      Perms  NSFileProtection    Read    Write     Name
------------  -------  ------------------  ------  -------   -------------------------
Directory         493  None                True    False     NotificationContent.appex
Directory         493  None                True    False     Widget.appex
Directory         493  None                True    False     Share.appex
Directory         493  None                True    False     SiriIntents.appex

अब हम वही चार ऐप एक्सटेंशन देख सकते हैं जो हमने पहले Xcode में देखे थे।

समर्थित डेटा प्रकार निर्धारित करना

यह महत्वपूर्ण है जब डेटा को होस्ट ऐप्स के साथ साझा किया जाता है (उदाहरण के लिए, शेयर या एक्शन एक्सटेंशन के माध्यम से)। जब उपयोगकर्ता होस्ट ऐप में किसी डेटा प्रकार का चयन करता है और यह यहां परिभाषित डेटा प्रकारों के साथ मेल खाता है, तो होस्ट ऐप एक्सटेंशन प्रदान करेगा। इसे यहां परिभाषित दस्तावेज़ प्रकारों के साथ UIActivity के माध्यम से डेटा साझा करने से अलग करने के बारे में ध्यान देने योग्य है, जहां हमें दस्तावेज़ प्रकारों को परिभाषित करना था, UTI का उपयोग करके। उसके लिए ऐप को एक्सटेंशन की आवश्यकता नहीं होती है। केवल UIActivity का उपयोग करके डेटा साझा करना संभव है।

ऐप एक्सटेंशन के Info.plist फ़ाइल की जांच करें और NSExtensionActivationRule के लिए खोजें। यह कुंजी समर्थित डेटा को स्पष्ट करती है साथ ही उच्चतम संख्या में समर्थित आइटमों को भी। उदाहरण के लिए:

<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<dict>
<key>NSExtensionActivationSupportsImageWithMaxCount</key>
<integer>10</integer>
<key>NSExtensionActivationSupportsMovieWithMaxCount</key>
<integer>1</integer>
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>
</dict>
</dict>

केवल यहां मौजूद डेटा प्रकारों को समर्थित किया जाएगा और MaxCount के रूप में 0 नहीं होगा। हालांकि, एक ऐसे प्रेडिकेट स्ट्रिंग का उपयोग करके अधिक जटिल फ़िल्टरिंग संभव है जो UTI को मूल्यांकन करेगा। इसके बारे में अधिक विस्तृत जानकारी के लिए कृपया Apple App Extension Programming Guide का संदर्भ लें।

संग्रहीत ऐप के साथ डेटा साझा करने की जांच

ध्यान दें कि ऐप एक्सटेंशन और उनके संग्रहीत ऐप के पास सीधा पहुंच नहीं होती है। हालांकि, डेटा साझा की जा सकती है। इसे "ऐप समूह" और NSUserDefaults एपीआई के माध्यम से किया जा सकता है। Apple App Extension Programming Guide से इस चित्र का संदर्भ देखें:

जैसा कि गाइड में भी उल्लेख किया गया है, ऐप को साझा कंटेनर सेटअप करना होगा यदि ऐप एक्सटेंशन NSURLSession कक्षा का उपयोग करके बैकग्राउंड अपलोड या डाउनलोड करने के लिए करता है, ताकि एक्सटेंशन और उसके संग्रहीत ऐप दोनों संचालित डेटा तक पहुंच सकें।

ऐप एक्सटेंशन के उपयोग की प्रतिबंधित करने की जांच

निम्नलिखित विधि का उपयोग करके एक विशेष प्रकार के ऐप एक्सटेंशन को अस्वीकार किया जा सकता है:

हालांकि, वर्तमान में यह केवल "कस्टम कीबोर्ड" ऐप एक्सटेंशन के लिए ही संभव है (और इसे जांचना चाहिए जब ऐप्स को टेस्ट कर रहे हों जो कीबोर्ड के माध्यम से संवेदनशील डेटा का हैंडल करते हैं, जैसे बैंकिंग ऐप्स आदि)।

गतिशील विश्लेषण

गतिशील विश्लेषण के लिए हम निम्नलिखित कर सकते हैं ताकि हम स्रोत कोड के बिना ज्ञान प्राप्त कर सकें:

  • साझा की जा रही आइटम की जांच करना
  • संबंधित ऐप एक्सटेंशन की पहचान करना

साझा की जा रही आइटम की जांच करना

इसके लिए हमें डेटा मूल ऐप में NSExtensionContext - inputItems को हुक करना चाहिए।

Telegram के पिछले उदाहरण का अनुसरण करते हुए हम अब टेक्स्ट फ़ाइल पर "शेयर" बटन का उपयोग करेंगे (जो चैट से प्राप्त किया गया था) और इसके साथ नोट्स ऐप में एक नोट बनाएंगे:

यदि हम एक ट्रेस चलाएं, तो हमें निम्नलिखित आउटपुट दिखाई देगा:

(0x1c06bb420) NSExtensionContext - inputItems
0x18284355c Foundation!-[NSExtension _itemProviderForPayload:extensionContext:]
0x1828447a4 Foundation!-[NSExtension _loadItemForPayload:contextIdentifier:completionHandler:]
0x182973224 Foundation!__NSXPCCONNECTION_IS_CALLING_OUT_TO_EXPORTED_OBJECT_S3__
0x182971968 Foundation!-[NSXPCConnection _decodeAndInvokeMessageWithEvent:flags:]
0x182748830 Foundation!message_handler
0x181ac27d0 libxpc.dylib!_xpc_connection_call_event_handler
0x181ac0168 libxpc.dylib!_xpc_connection_mach_event
...
RET: (
"<NSExtensionItem: 0x1c420a540> - userInfo:
{
NSExtensionItemAttachmentsKey =     (
"<NSItemProvider: 0x1c46b30e0> {types = (\n \"public.plain-text\",\n \"public.file-url\"\n)}"
);
}"
)

यहां हम देख सकते हैं कि:

  • यह XPC के माध्यम से अंदर से हुआ, विशेष रूप से इसे libxpc.dylib फ्रेमवर्क का उपयोग करके NSXPCConnection द्वारा कार्यान्वित किया गया है।
  • NSItemProvider में शामिल यूटीआईआईएस public.plain-text और public.file-url हैं, जिनमें से दूसरा टेलीग्राम के "शेयर एक्सटेंशन" के Info.plist से NSExtensionActivationRule में शामिल है।

शामिल ऐप एक्सटेंशन की पहचान करना

आप NSExtension - _plugIn को हुक करके यह भी जान सकते हैं कि कौन सा ऐप एक्सटेंशन आपकी अनुरोध और प्रतिक्रिया का ध्यान रख रहा है:

हम उदाहरण को फिर से चलाते हैं:

(0x1c0370200) NSExtension - _plugIn
RET: <PKPlugin: 0x1163637f0 ph.telegra.Telegraph.Share(5.3) 5B6DE177-F09B-47DA-90CD-34D73121C785
1(2) /private/var/containers/Bundle/Application/15E6A58F-1CA7-44A4-A9E0-6CA85B65FA35
/Telegram X.app/PlugIns/Share.appex>

(0x1c0372300)  -[NSExtension _plugIn]
RET: <PKPlugin: 0x10bff7910 com.apple.mobilenotes.SharingExtension(1.5) 73E4F137-5184-4459-A70A-83
F90A1414DC 1(2) /private/var/containers/Bundle/Application/5E267B56-F104-41D0-835B-F1DAB9AE076D
/MobileNotes.app/PlugIns/com.apple.mobilenotes.SharingExtension.appex>

जैसा कि आप देख सकते हैं, यहां दो ऐप एक्सटेंशन शामिल हैं:

  • Share.appex टेक्स्ट फ़ाइल (public.plain-text और public.file-url) भेज रहा है।
  • com.apple.mobilenotes.SharingExtension.appex जो टेक्स्ट फ़ाइल को प्राप्त करेगा और प्रोसेस करेगा।

यदि आप XPC के तहत क्या हो रहा है के बारे में और अधिक जानना चाहते हैं, तो हम "libxpc.dylib" से आंतरिक कॉल्स पर नज़र डालने की सलाह देते हैं। उदाहरण के लिए, आप frida-trace का उपयोग कर सकते हैं और फिर स्वचालित रूप से उत्पन्न स्टब्स को विस्तारित करके आपको अधिक रुचिकर लगने वाले विधियों में खुद को खोजने के लिए गहराई में जा सकते हैं।

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥