ऐप सुरक्षा सर्वोत्तम प्रथाएँ

इस अनुभाग में Android उपकरणों पर ऐप्स की सुरक्षा सुनिश्चित करने के लिए अनुशंसाएँ शामिल हैं।

स्रोत कोड समीक्षा

स्रोत कोड समीक्षा इस दस्तावेज़ में पहचाने गए मुद्दों सहित सुरक्षा मुद्दों की एक विस्तृत श्रृंखला का पता लगा सकती है। एंड्रॉइड मैन्युअल और स्वचालित स्रोत कोड समीक्षा दोनों को दृढ़ता से प्रोत्साहित करता है।

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

स्वचालित परीक्षण

स्वचालित परीक्षण सुरक्षा समस्याओं की एक विस्तृत श्रृंखला का पता लगाने में मदद कर सकता है और इसे नियमित रूप से किया जाना चाहिए।

  • समस्याओं का जल्द पता लगाने और सुधार में लगने वाले समय को कम करने के लिए विकास प्रक्रिया के दौरान सीटीएस का नवीनतम संस्करण नियमित रूप से चलाएं। एंड्रॉइड हमारी स्वचालित निर्माण प्रक्रिया में निरंतर एकीकरण के हिस्से के रूप में सीटीएस का उपयोग करता है, जो प्रति दिन कई बार बनाता है।
  • इंटरफ़ेस का स्वचालित सुरक्षा परीक्षण, जिसमें विकृत इनपुट (फ़ज़ परीक्षण) के साथ परीक्षण भी शामिल है। एंड्रॉइड का बिल्ड सिस्टम फ़ज़ परीक्षण लिखने के लिए libFuzzer का समर्थन करता है।

भेद्यता स्कैनिंग

भेद्यता स्कैनिंग यह सुनिश्चित करने में मदद कर सकती है कि पहले से इंस्टॉल किए गए ऐप्स ज्ञात सुरक्षा कमजोरियों से मुक्त हैं। उन्नत पहचान इन कमजोरियों को दूर करने और उपयोगकर्ताओं और उपकरणों के लिए जोखिम को रोकने के लिए आवश्यक समय और लागत को कम कर सकती है।

  • उद्योग-मान्यता प्राप्त ऐप भेद्यता स्कैनिंग टूल का उपयोग करके सभी पहले से इंस्टॉल किए गए ऐप्स को स्कैन करें और पता लगाई गई कमजोरियों का पता लगाएं।

संभावित रूप से हानिकारक अनुप्रयोग

यह सुनिश्चित करना महत्वपूर्ण है कि आपके डिवाइस पर पहले से इंस्टॉल किए गए ऐप्स संभावित रूप से हानिकारक एप्लिकेशन (पीएचए) नहीं हैं। आपके डिवाइस में शामिल सभी ऐप्स के व्यवहार के लिए आप जिम्मेदार हैं। डिवाइस लॉन्च से पहले, कमजोरियों के लिए सभी प्री-लोडेड ऐप्स को स्कैन करें।

पीएचए के बारे में अधिक जानकारी के लिए और Google प्ले स्टोर में उनका मुकाबला कैसे कर रहा है, इसके लिए Google Play प्रोटेक्ट डेवलपर दस्तावेज़ देखें।

ऐप इंस्टॉलेशन और अनुमतियाँ

पहले से इंस्टॉल किए गए ऐप्स के लिए अत्यधिक अनुमतियाँ सुरक्षा जोखिम पैदा कर सकती हैं। पहले से इंस्टॉल किए गए ऐप्स को न्यूनतम आवश्यक अनुमतियों तक सीमित रखें और सुनिश्चित करें कि उनके पास अनावश्यक अनुमतियों या विशेषाधिकारों तक पहुंच न हो। ऐप अनुमतियाँ AndroidManifest.xml में वर्णित हैं।

  • पहले से इंस्टॉल किए गए ऐप्स को अनावश्यक अनुमतियाँ या विशेषाधिकार न दें। सिस्टम विशेषाधिकारों वाले ऐप्स की सावधानीपूर्वक समीक्षा करें क्योंकि उनके पास बहुत संवेदनशील अनुमतियाँ हो सकती हैं।
  • सुनिश्चित करें कि अनुरोधित सभी अनुमतियाँ उस विशिष्ट ऐप की कार्यक्षमता के लिए प्रासंगिक और आवश्यक हैं।
  • सुनिश्चित करें कि INSTALL_PACKAGES अनुमति का उपयोग करने वाले सभी पूर्व-इंस्टॉल ऐप्स के लिए उपयोगकर्ता प्रकटीकरण है।
  • सुनिश्चित करें कि डेवलपर यूआईडी 0 के रूप में किसी भी ऐप को इंस्टॉल न करने के लिए अनुबंधित रूप से बाध्य है।
  • डेवलपर के नेटवर्क के माध्यम से इंस्टॉल किए जाने वाले सभी ऐप्स के मेनिफ़ेस्ट में घोषित अनुमतियों का मूल्यांकन करें।
  • सुनिश्चित करें कि डेवलपर डिवाइस पर ऐप्स पेश करने से पहले Google सुरक्षित ब्राउज़िंग एपीआई के साथ ऑटो-अपडेटर और इंस्टॉलर ऐप्स के सभी डाउनलोड यूआरएल को स्कैन करने के लिए अनुबंधित रूप से बाध्य है।

ऐप साइनिंग

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

  • सुनिश्चित करें कि ऐप्स किसी ऐसी कुंजी से हस्ताक्षरित न हों जो सार्वजनिक रूप से ज्ञात हो, जैसे AOSP डेवलपर कुंजी।
  • सुनिश्चित करें कि ऐप्स पर हस्ताक्षर करने के लिए उपयोग की जाने वाली कुंजियाँ संवेदनशील कुंजियों को संभालने के लिए उद्योग-मानक प्रथाओं के अनुरूप प्रबंधित की जाती हैं, जिसमें एक हार्डवेयर सुरक्षा मॉड्यूल (एचएसएम) भी शामिल है जो सीमित, श्रव्य पहुंच प्रदान करता है।
  • सुनिश्चित करें कि ऐप्स प्लेटफ़ॉर्म कुंजी से हस्ताक्षरित नहीं हैं। ऐसा करने से ऐप को प्लेटफ़ॉर्म हस्ताक्षर अनुमतियों तक पहुंच मिल जाती है, जो बहुत शक्तिशाली हैं और केवल ऑपरेटिंग सिस्टम के घटकों द्वारा उपयोग किए जाने के लिए अभिप्रेत हैं। सिस्टम ऐप्स को विशेषाधिकार प्राप्त अनुमतियों का उपयोग करना चाहिए.
  • सुनिश्चित करें कि समान पैकेज नाम वाले ऐप्स अलग-अलग कुंजियों से हस्ताक्षरित न हों। यह अक्सर विभिन्न डिवाइसों के लिए ऐप बनाते समय होता है, खासकर प्लेटफ़ॉर्म कुंजी का उपयोग करते समय। यदि ऐप डिवाइस-स्वतंत्र है, तो सभी डिवाइस पर एक ही कुंजी का उपयोग करें। यदि ऐप डिवाइस-विशिष्ट है, तो प्रत्येक डिवाइस और कुंजी के लिए अद्वितीय पैकेज नाम बनाएं।

ऐप्स और प्रक्रियाओं को अलग करना

एंड्रॉइड सैंडबॉक्सिंग मॉडल सही ढंग से उपयोग किए जाने पर ऐप्स और प्रक्रियाओं के आसपास अतिरिक्त सुरक्षा प्रदान करता है।

जड़ प्रक्रियाओं को अलग करना

रूट प्रक्रियाएं विशेषाधिकार वृद्धि हमलों का सबसे लगातार लक्ष्य हैं; रूट प्रक्रियाओं की संख्या कम करने से विशेषाधिकार बढ़ने का जोखिम कम हो जाता है।

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

सिस्टम ऐप्स को अलग करना

सामान्य तौर पर, पहले से इंस्टॉल किए गए ऐप्स को साझा सिस्टम विशिष्ट पहचानकर्ता (यूआईडी) के साथ नहीं चलना चाहिए। यदि किसी ऐप के लिए सिस्टम या किसी अन्य विशेषाधिकार प्राप्त सेवा (उदाहरण के लिए, फोन) की साझा यूआईडी का उपयोग करना आवश्यक है, तो ऐप को किसी भी सेवा, प्रसारण रिसीवर, या सामग्री प्रदाताओं को निर्यात नहीं करना चाहिए जिन्हें उपयोगकर्ताओं द्वारा इंस्टॉल किए गए तृतीय-पक्ष ऐप्स द्वारा एक्सेस किया जा सकता है। .

  • सुनिश्चित करें कि डिवाइस सिस्टम के रूप में न्यूनतम आवश्यक कोड चलाएं। जहां संभव हो, सिस्टम यूआईडी का पुन: उपयोग करने के बजाय अपने स्वयं के यूआईडी के साथ एंड्रॉइड प्रक्रिया का उपयोग करें।
  • जहां संभव हो, सिस्टम कोड को अविश्वसनीय डेटा से अलग किया जाना चाहिए और आईपीसी को केवल अन्य विश्वसनीय प्रक्रियाओं के लिए उजागर किया जाना चाहिए।
  • सिस्टम प्रक्रियाओं को नेटवर्क सॉकेट पर नहीं सुनना चाहिए। यह सीटीएस आवश्यकता है.

पृथक्करण प्रक्रियाएं

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

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