OWASP कैटगरी: MASVS-PLATFORM: Platform Interaction
खास जानकारी
कई मोबाइल ऐप्लिकेशन, सुविधाएं देने के लिए बाहरी एपीआई का इस्तेमाल करते हैं. आम तौर पर, सेवा से कनेक्ट होने वाले ऐप्लिकेशन की पुष्टि करने के लिए, स्टैटिक टोकन या कुंजी का इस्तेमाल किया जाता है.
हालांकि, क्लाइंट-सर्वर सेटिंग (या मोबाइल ऐप्लिकेशन और एपीआई) के संदर्भ में – स्टैटिक पासकोड का इस्तेमाल करना, संवेदनशील डेटा या सेवाओं को ऐक्सेस करने के लिए, पुष्टि करने का सुरक्षित तरीका नहीं माना जाता. इंटरनल इंफ़्रास्ट्रक्चर के उलट, अगर किसी व्यक्ति के पास इस कुंजी का ऐक्सेस है, तो वह बाहरी एपीआई को ऐक्सेस कर सकता है और सेवा का गलत इस्तेमाल कर सकता है.
उदाहरण के लिए, ऐसा हो सकता है कि किसी स्टैटिक की को ऐप्लिकेशन से रिवर्स इंजीनियर किया गया हो या जब कोई मोबाइल ऐप्लिकेशन बाहरी एपीआई से कम्यूनिकेट करता है, तब उसे इंटरसेप्ट किया गया हो. यह भी हो सकता है कि इस स्टैटिक पासकोड को ऐप्लिकेशन में हार्ड-कोड किया गया हो.
एपीआई डेटा और सेवाओं के लिए जोखिम तब होता है, जब सुरक्षित तरीके से पुष्टि करने और ऐक्सेस कंट्रोल का इस्तेमाल नहीं किया जाता.
स्टैटिक कुंजी का इस्तेमाल करने पर, एपीआई का गलत इस्तेमाल किया जा सकता है. ऐसा अनुरोधों को फिर से चलाने या इंटरसेप्ट की गई या रिवर्स इंजीनियरिंग की गई कुंजी का इस्तेमाल करके नए अनुरोध बनाने से होता है. ऐसा बिना किसी समयसीमा के किया जा सकता है.
असर
अगर कोई डेवलपर एआई या एमएल एपीआई सेवा के लिए पेमेंट कर रहा है, तो हमलावर के लिए इस कुंजी को चुराना और सेवा पर कर्ज़ बढ़ाना या इसका इस्तेमाल करके नकली कॉन्टेंट बनाना अपेक्षाकृत आसान होगा.
एपीआई पर सेव किया गया कोई भी उपयोगकर्ता डेटा, फ़ाइलें या व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई) बिना किसी शुल्क के उपलब्ध होगी. इससे डेटा लीक होने का खतरा बढ़ जाएगा.
हमलावर इस ऐक्सेस का इस्तेमाल धोखाधड़ी करने, सेवाओं को रीडायरेक्ट करने, और कुछ मामलों में सर्वर का पूरा कंट्रोल पाने के लिए भी कर सकता है.
जोखिम कम करने के तरीके
स्टेटफ़ुल एपीआई
अगर ऐप्लिकेशन में उपयोगकर्ता के लॉगिन करने की सुविधा है या उपयोगकर्ता के सेशन को ट्रैक करने की सुविधा है, तो हमारा सुझाव है कि डेवलपर, Google Cloud जैसी एपीआई सेवा का इस्तेमाल करें. इससे वे अपने ऐप्लिकेशन के साथ स्टेटफ़ुल इंटिग्रेशन कर पाएंगे.
इसके अलावा, एपीआई सेवा की ओर से उपलब्ध कराई गई सुरक्षित पुष्टि करने की सुविधा, क्लाइंट की पुष्टि करने की सुविधा, और सेशन कंट्रोल का इस्तेमाल करें. साथ ही, स्टैटिक कुंजी के विकल्प के तौर पर डाइनैमिक टोकन का इस्तेमाल करें. पक्का करें कि टोकन की समयसीमा कम हो. आम तौर पर, यह एक घंटे होती है.
इसके बाद, एपीआई को ऐक्सेस करने के लिए, पुष्टि करने के लिए डाइनैमिक टोकन का इस्तेमाल किया जाना चाहिए. इन दिशा-निर्देशों में बताया गया है कि OAuth 2.0 का इस्तेमाल करके, ऐसा कैसे किया जा सकता है. इन दिशा-निर्देशों के अलावा, OAuth 2.0 को और भी बेहतर बनाया जा सकता है. इससे आपके Android ऐप्लिकेशन में मौजूद कमियों को कम किया जा सकता है. इसके लिए, इन सुविधाओं को लागू करें.
गड़बड़ी ठीक करने और लॉग करने की सुविधा को सही तरीके से लागू करें:
- OAuth से जुड़ी गड़बड़ियों को आसानी से और साफ़ तौर पर ठीक करें. साथ ही, डीबग करने के लिए उन्हें लॉग करें.
- हमले की संभावना कम होने से, आपको किसी भी समस्या का पता लगाने और उसे ठीक करने में भी मदद मिलेगी.
- पक्का करें कि उपयोगकर्ता को दिखाए गए या लॉग किए गए सभी मैसेज साफ़ हों. हालांकि, उनमें ऐसी जानकारी शामिल न हो जो किसी विरोधी के लिए काम की हो.
ऐप्लिकेशन में OAuth को सुरक्षित तरीके से कॉन्फ़िगर करें:
redirect_uri
पैरामीटर को ऑथराइज़ेशन और टोकन, दोनों एंडपॉइंट पर भेजें.- अगर आपका ऐप्लिकेशन, तीसरे पक्ष की सेवा के साथ OAuth का इस्तेमाल करता है, तो क्रॉस-ऑरिजिन रिसॉर्स शेयरिंग (CORS) को कॉन्फ़िगर करें. इससे आपके ऐप्लिकेशन के संसाधनों का ऐक्सेस सीमित किया जा सकेगा.
- इससे, बिना अनुमति के क्रॉस-साइट स्क्रिप्टिंग (XSS) हमलों को रोकने में मदद मिलेगी.
- सीएसआरएफ़ हमलों को रोकने के लिए, state पैरामीटर का इस्तेमाल करें.
सुरक्षा लाइब्रेरी का इस्तेमाल करें:
- सुरक्षित OAuth फ़्लो को आसानी से लागू करने के लिए, AppAuth जैसी सुरक्षा लाइब्रेरी का इस्तेमाल करें.
- ये Android लाइब्रेरी, सुरक्षा के सबसे सही तरीकों को अपने-आप लागू करने में मदद कर सकती हैं. इनके बारे में पहले बताया जा चुका है.
पुष्टि करने के अन्य तरीकों के बारे में OpenAPI के दस्तावेज़ में बताया गया है. इनमें Firebase और Google ID टोकन शामिल हैं.
स्टेटलेस एपीआई
अगर एपीआई सेवा, पहले सुझाई गई सुरक्षा सुविधाओं में से कोई भी सुविधा नहीं देती है और उपयोगकर्ता के लॉगिन के बिना स्टेटलेस सेशन की ज़रूरत है, तो डेवलपर को अपने मिडलवेयर सलूशन देने पड़ सकते हैं.
इसमें ऐप्लिकेशन और एपीआई एंडपॉइंट के बीच अनुरोधों को 'प्रॉक्सी' करना शामिल होगा. इसके लिए, JSON Web Tokens (JWT) और JSON Web Signature (JWS) का इस्तेमाल किया जा सकता है. इसके अलावा, पहले बताए गए तरीके के मुताबिक, पूरी तरह से पुष्टि की गई सेवा दी जा सकती है. इससे, कमज़ोर स्टैटिक कुंजी को ऐप्लिकेशन (क्लाइंट) के बजाय सर्वर-साइड पर सेव किया जा सकता है.
मोबाइल ऐप्लिकेशन में, पूरी तरह से स्टेटलेस (जिसमें उपयोगकर्ता की जानकारी सेव नहीं होती) समाधान उपलब्ध कराने में समस्याएं आती हैं. सबसे अहम चुनौतियों में से कुछ ये हैं: क्लाइंट (ऐप्लिकेशन) की पुष्टि करना और डिवाइस पर निजी कुंजी या सीक्रेट को सुरक्षित तरीके से सेव करना.
Play Integrity API, ऐप्लिकेशन और अनुरोधों की इंटिग्रिटी की पुष्टि करता है. इससे उन स्थितियों को कम किया जा सकता है जिनमें इस ऐक्सेस का गलत इस्तेमाल किया जा सकता है. कुंजी के मैनेजमेंट के लिए, कई मामलों में कीस्टोर, निजी कुंजियों को सुरक्षित तरीके से सेव करने के लिए सबसे सही जगह होती है.
कुछ मोबाइल ऐप्लिकेशन, रजिस्ट्रेशन के दौरान ऐप्लिकेशन की इंटिग्रिटी की जांच करते हैं. साथ ही, सुरक्षित तरीके से कुंजी उपलब्ध कराते हैं. ये तरीके जटिल हैं और इस दस्तावेज़ के दायरे से बाहर हैं. हालांकि, क्लाउड की मैनेजमेंट सेवा एक संभावित समाधान है.