सुरक्षित iPhone ऐप iPhone सर्वर संचार


14

मेरे iOS ऐप और इसके सर्वर घटक के बीच निजी संचार प्राप्त करने के लिए सबसे अच्छा तरीका क्या होगा? एक एकल अपरिवर्तनीय "गुप्त कुंजी" ऐप स्रोत में पर्याप्त रूप से बेक किया गया है, या क्या मुझे इस तरह की "हैंडशेक" कुंजी की पीढ़ियों को गतिशील रूप से स्थापित करने की आवश्यकता है?

सर्वर अपने आप में किसी भी संवेदनशील डेटा तक पहुंच नहीं रखता है, इसलिए भले ही उपयोगकर्ता कुछ निजी एंडपॉइंट्स मारता है, यह उन्हें कहीं भी नहीं मिलेगा, लेकिन मैं बस जनता से छिपाना चाहता हूं। मूल रूप से, मैं विशेष मार्गों को मारने के सभी अनुरोधों को अनदेखा करना चाहता हूं, जब तक कि वे मेरे आईओएस ऐप से नहीं आ रहे हैं।

सर्वर घटक RoR पर चलता है, यदि यह महत्वपूर्ण है।

जवाबों:


8

जब तक आप प्रत्येक ग्राहक को एक निजी कुंजी के साथ आपूर्ति नहीं करते हैं, जिसे आप व्यक्तिगत रूप से रद्द कर सकते हैं, तब तक आप प्रभावी रूप से अस्वीकार नहीं कर सकते। लेकिन यह शायद ओवरकिल है। अगर ज्यादातर लोग बुलेट फायर करने की जहमत नहीं उठाएंगे तो आपको बुलेटप्रूफ सॉल्यूशन की जरूरत नहीं है।

यह एक सुरक्षा प्रश्न है, इसलिए चलो एक खतरे के मॉडल और शमन रणनीतियों का वर्णन करते हैं।

मान लें कि आपके पास एक यूआरएल हिटिंग है जो आपके लिए ध्यान देने योग्य लागत (जैसे प्रोसेसिंग कॉस्ट) खर्च कर सकती है, और आप इसे एक सरल DoS अटैक और कॉपीकैट एप्स दोनों से बचाना चाहते हैं।

आसानी से विश्लेषण किए जाने से कनेक्शन को छिपाने के लिए एसएसएल का उपयोग करें। अनुरोध के महंगे हिस्से को करने से पहले कनेक्शन को जटिल करने के लिए नॉन-ओबियवोस पोर्ट नंबर, रीडायरेक्ट सीक्वेंस, कुकी एक्सचेंज का उपयोग करें। सर्वर को कनेक्शन स्वीकार करने के लिए यह बताने के लिए अपने ऐप में बेक किए गए कुछ गुप्त कोड का उपयोग करें।

अब कोई महँगे-से-हिट URL को केवल एक पैकेट स्निफ़र चलाकर या अपने कोड में URL-जैसे तार को देखकर नहीं सीख सकता। एक संभावित हमलावर को आपके ऐप को अपघटित करना होगा।

आप वास्तव में अपने कोड को विघटित होने और / या डिबगर के नीचे चलाने से नहीं बचा सकते। हमलावर अंततः गुप्त कुंजी और कनेक्शन अनुक्रम सीखता है।

आप ध्यान दें कि आपको अपने महंगे URL पर रूज के अनुरोध मिलने शुरू हो गए हैं: या तो एक हमले के रूप में, या एक कॉपीकैट ऐप के रूप में, जिसे चलाने के लिए आपकी सेवा तक पहुँच प्राप्त करनी होगी, या हो सकता है कि कोई शोषण कोड सार्वजनिक रूप से पोस्ट किया गया हो। आप एक वैध अनुरोध से एक दुष्ट अनुरोध नहीं बता सकते, हालांकि।

एक अलग गुप्त कुंजी के साथ, अपने ऐप में एक मुफ्त मामूली अपडेट बनाएं। यह एक अलग महंगा URL को हिट करना चाहिए जो कि समझौता किए गए महँगे URL के समान ही डेटा प्रदान करता है। कुछ समय के लिए, दोनों URL को सुलभ बनाएं।

अद्यतन संस्करण में अपना उपयोगकर्ता आधार स्विच देखें। समझौता किए गए महंगे URL को कुचलना और अंततः इसे 404। आपने एक सुरक्षा उल्लंघन को कम कर दिया है, उम्मीद है कि बहुत अधिक खोए बिना। एक वर्ग को वापस।

अस्वीकरण: मैं एक सुरक्षा विशेषज्ञ नहीं हूं।


यदि उपयोगकर्ता के पास ऐप है, तो वे एसएसएल (क्लाइंट के सीरेट्स आदि पर पूर्ण नियंत्रण होने पर भी) महंगा URL खोज सकते हैं। यह बाकी तर्क को लूटता है कि यह उल्लेख नहीं है कि यह अस्पष्टता के माध्यम से सुरक्षा के खिलाफ क्लासिक उदाहरण है।
aleemb

@aleemb: निश्चित रूप से, आप महंगे URL को पूरी तरह से गुप्त नहीं रख सकते। एक निर्धारित हमलावर इसकी खोज करेगा। इस खोज को भी महंगा बनाने की बात है, ताकि एक "स्क्रिप्ट किडी" के पास कठिन (एर) समय हो और इस तरह इसे खोदने और दोहन करने के लिए कम प्रोत्साहन मिले, और शमन संभव हो सके। यदि आपके शमन की लागत यथोचित रूप से कम है, और हमलावर के लिए खोज की लागत अधिक है, तो हमलावर जो कुछ भी महंगा URL का उपयोग करने से निकाल सकता है, उसके मुकाबले हमला व्यर्थ हो जाता है। यह, फिर से, सख्त सुरक्षा नहीं है ।
9000

5

आपको एक क्लासिक समस्या है जो वास्तव में हल नहीं हो सकती है।

सरल गोपनीयता सुनिश्चित करने के लिए (यानी यह सुनिश्चित करते हुए कि आपका डेटा ट्रांस्फ़ॉर्म नहीं किया जा सकता या परिवर्तित नहीं किया जा सकता) आप SSL पर सब कुछ कर सकते हैं और अपने सर्वर को CA द्वारा सही तरीके से जारी किया गया प्रमाणपत्र दे सकते हैं जिसे iPhone पहचानता है।

प्राधिकरण के लिए, हालांकि, कोई अच्छा समाधान नहीं है जो 100% गारंटी देगा कि आपके ऐप के अलावा कोई भी एपीआई तक नहीं पहुंच सकता है। आपका प्रस्तावित समाधान काम करेगा , सिवाय:

  • जिस किसी ने भी आपका ऐप डाउनलोड किया है, उसके पास निजी कुंजी है
  • अगर वे किसी तरह आपके ऐप को अन-पैकेज करते हैं, और इसे डी-कंपाइल करते हैं, तो उनके पास सादे पाठ में निजी कुंजी होगी
  • एक बार जब उनके पास सादे-पाठ में निजी कुंजी होती है, तो वे अपने स्वयं के दुर्भावनापूर्ण अनुरोधों पर हस्ताक्षर करने के लिए इसका उपयोग कर सकते हैं।

इसके आसपास कोई रास्ता नहीं है। यह कहना है कि आप उस दृष्टिकोण को नहीं अपना सकते हैं, लेकिन यह समझें कि यह मूर्खतापूर्ण नहीं है। यह बहुत ही मुद्दा है जो DRM को पूरी तरह से अप्रभावी बनाता है ।


0

यह वही है जो टीएलएस और एसएसएल के लिए है। या तो कोई निश्चित गुप्त कुंजी की आवश्यकता के बिना एक सुरक्षित कनेक्शन बना सकता है। यह कैसे करते हैं यह जानने के लिए लिंक किए गए पृष्ठ पर विवरण अनुभाग पढ़ें।

टीएलएस / एसएसएल का लाभ प्राप्त करने का एक प्रभावी तरीका बहुत कुछ करने के बिना (कोई) काम करने के लिए अपने सर्वर को एक वेब सेवा को लागू करना है जो क्लाइंट HTTPS प्रोटोकॉल का उपयोग करके एक्सेस करता है। HTTPS एक सुरक्षित कनेक्शन पर सिर्फ HTTP है, और iOS में URL लोडिंग सिस्टम आपके लिए इसे लागू करता है।


हालांकि HTTPS ईव्सड्रॉपिंग से संचार को छिपाता है, लेकिन यह बेतरतीब क्लाइंट को एंडपॉइंट से कनेक्ट होने से नहीं रोकता है, जब तक कि सर्वर द्वारा क्लाइंट सर्टिफिकेट की आवश्यकता न हो। यह एप्लिकेशन में 'बेक किया जा सकता है' और निकालने के लिए कुछ ज्ञान की आवश्यकता होती है।
9000
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.