Android में बेहतर सुरक्षा देने वाला Linux

Android सुरक्षा मॉडल के तहत, Android सभी प्रोसेस पर ज़रूरी ऐक्सेस कंट्रोल (एमएसी) लागू करने के लिए, बेहतर सुरक्षा वाले Linux (SELinux) का इस्तेमाल करता है. यहां तक कि रूट/सुपरयूज़र की अनुमतियों (Linux की सुविधाओं) के साथ चलने वाली प्रोसेस पर भी ऐसा किया जाता है. कई कंपनियों और संगठनों ने Android में SELinux को लागू करने में योगदान दिया है. SELinux की मदद से, Android सिस्टम सेवाओं को बेहतर तरीके से सुरक्षित रख सकता है और उन पर पाबंदी लगा सकता है. साथ ही, ऐप्लिकेशन डेटा और सिस्टम लॉग के ऐक्सेस को कंट्रोल कर सकता है. साथ ही, मैलवेयर वाले सॉफ़्टवेयर के असर को कम कर सकता है. इसके अलावा, यह मोबाइल डिवाइसों पर कोड में होने वाली संभावित गड़बड़ियों से उपयोगकर्ताओं को सुरक्षित रख सकता है.

SELinux, डिफ़ॉल्ट रूप से अनुमति न देने के सिद्धांत पर काम करता है: जिस चीज़ को साफ़ तौर पर अनुमति नहीं दी गई है उसे अनुमति नहीं दी जाती. SELinux दो ग्लोबल मोड में काम कर सकता है:

  • अनुमति देने वाला मोड, जिसमें अनुमति न मिलने की जानकारी को रिकॉर्ड किया जाता है, लेकिन उसे लागू नहीं किया जाता.
  • लागू करना मोड, जिसमें अनुमतियों के अस्वीकार होने की जानकारी को रिकॉर्ड किया जाता है और उसे लागू किया जाता है.

Android में, लागू करने के मोड में SELinux और उससे जुड़ी सुरक्षा नीति शामिल होती है. यह नीति, AOSP में डिफ़ॉल्ट रूप से काम करती है. लागू करने के मोड में, पाबंदी वाली कार्रवाइयों को रोका जाता है. साथ ही, dmesg और logcat में, कर्नेल की ओर से उल्लंघन की सभी कोशिशों को लॉग किया जाता है. डेवलपमेंट के दौरान, आपको इन गड़बड़ियों का इस्तेमाल करके अपने सॉफ़्टवेयर और SELinux की नीतियों को बेहतर बनाना चाहिए. इसके बाद ही, उन्हें लागू करें. ज़्यादा जानकारी के लिए, SELinux को लागू करना लेख पढ़ें.

SELinux, हर डोमेन के लिए अनुमति मोड के साथ भी काम करता है. इस मोड में, बाकी सिस्टम को ग्लोबल लागू करने वाले मोड में रखते हुए, कुछ डोमेन (प्रोसेस) के लिए अनुमति दी जा सकती है. डोमेन, सुरक्षा नीति में किसी प्रोसेस या प्रोसेस के सेट की पहचान करने वाला एक लेबल होता है. सुरक्षा नीति में, एक ही डोमेन से लेबल की गई सभी प्रोसेस को एक जैसा माना जाता है. हर डोमेन के लिए अनुमति देने वाला मोड, सिस्टम के बढ़ते हिस्से में SELinux को धीरे-धीरे लागू करने की सुविधा देता है. साथ ही, नई सेवाओं के लिए नीति बनाने में भी मदद करता है. हालांकि, सिस्टम के बाकी हिस्से पर नीति लागू होती रहती है.

बैकग्राउंड

Android का सुरक्षा मॉडल, ऐप्लिकेशन सैंडबॉक्स के कॉन्सेप्ट पर आधारित है. हर ऐप्लिकेशन, अपने सैंडबॉक्स में चलता है. Android 4.3 से पहले, इन सैंडबॉक्स को तय करने के लिए, इंस्टॉलेशन के समय हर ऐप्लिकेशन के लिए एक यूनीक Linux UID बनाया जाता था. Android 4.3 और उसके बाद के वर्शन में, Android ऐप्लिकेशन सैंडबॉक्स की सीमाओं को और बेहतर बनाने के लिए, SELinux का इस्तेमाल किया जाता है.

Android 5.0 और इसके बाद के वर्शन में, SELinux पूरी तरह से लागू होता है. यह Android 4.3 के परमिसिव रिलीज़ और Android 4.4 के कुछ हिस्से को लागू करने पर आधारित है. इस बदलाव के बाद, Android ने ज़रूरी डोमेन (installd, netd, vold, और zygote) के सीमित सेट पर नीति लागू करने की जगह, सभी डोमेन (60 से ज़्यादा डोमेन) पर नीति लागू करने की सुविधा शुरू की. खास तौर से:

  • Android 5.x और उसके बाद के वर्शन में, सभी चीज़ें लागू करने के मोड में होती हैं.
  • init डोमेन में, init के अलावा कोई और प्रोसेस नहीं चलनी चाहिए.
  • block_device, socket_device, default_service के लिए, सामान्य तौर पर अनुमति न मिलने का मतलब है कि डिवाइस को किसी खास डोमेन की ज़रूरत है.

Android 6.0 ने सिस्टम को ज़्यादा सुरक्षित बनाया है. इसके लिए, हमने अपनी नीति में कुछ बदलाव किए हैं. जैसे, उपयोगकर्ताओं को अलग-अलग रखना, IOCTL फ़िल्टरिंग, ज़ाहिर की गई सेवाओं से जुड़ी खतरे को कम करना, SELinux डोमेन को ज़्यादा सख्त बनाना, और /proc का ऐक्सेस बहुत सीमित करना.

Android 7.0 में SELinux कॉन्फ़िगरेशन को अपडेट किया गया है, ताकि ऐप्लिकेशन सैंडबॉक्स को और ज़्यादा सुरक्षित किया जा सके और अटैक सरफ़ेस को कम किया जा सके. इस रिलीज़ में, मीडिया सर्वर के स्टैक को छोटी प्रोसेस में बांटा गया है, ताकि उनकी अनुमतियों का दायरा कम किया जा सके. ज़्यादा जानकारी के लिए, ज़्यादा Linux kernel डिफ़ेंस की मदद से Android को सुरक्षित करना और मीडिया स्टैक को बेहतर बनाना लेख पढ़ें.

Android 8.0 में SELinux को अपडेट किया गया है, ताकि यह Treble के साथ काम कर सके. इससे, Android सिस्टम फ़्रेमवर्क से, वेंडर के लोअर-लेवल कोड को अलग किया जा सकता है. इस रिलीज़ में, SELinux की नीति को अपडेट किया गया है. इससे डिवाइस बनाने वाली कंपनियों और एसओसी वेंडर को नीति के अपने हिस्सों को अपडेट करने, अपनी इमेज (vendor.img, boot.img वगैरह) बनाने, और फिर उन इमेज को प्लैटफ़ॉर्म के हिसाब से या प्लैटफ़ॉर्म के हिसाब से अपडेट करने की अनुमति मिलती है.

डिवाइस पर प्लैटफ़ॉर्म (फ़्रेमवर्क) का नया वर्शन चल सकता है, लेकिन इसके उलट नहीं हो सकता. वेंडर इमेज (vendor.img/odm.img) का वर्शन, प्लैटफ़ॉर्म (system.img) के वर्शन से नया नहीं हो सकता. इसलिए, प्लैटफ़ॉर्म के नए वर्शन की वजह से, SELinux के साथ काम करने से जुड़ी समस्याएं आ सकती हैं. ऐसा इसलिए, क्योंकि प्लैटफ़ॉर्म की SELinux नीति, नीति के वेंडर SELinux सेक्शन से नए वर्शन में होती है. Android 8.0 मॉडल में, डिवाइस के काम करने की सुविधा को बनाए रखने का एक तरीका दिया गया है. इससे, एक साथ कई ओटीए (ओवर-द-एयर) अपडेट होने से रोका जा सकता है.

अन्य संसाधन

काम की SELinux नीतियां बनाने में मदद पाने के लिए, यहां दिए गए रिसॉर्स देखें.