TL; DR: अगर आपको पसंद है तो नीचे दिए गए निष्कर्ष पर सीधे कूदने के लिए स्वतंत्र महसूस करें :)
SELinux लक्ष्य एक अनिवार्य नीति को लागू करके विशेषाधिकार वृद्धि को रोकना है जो कि असंबद्ध और विशेषाधिकार प्राप्त उपयोगकर्ताओं दोनों से संभावित कार्यों को प्रतिबंधित करता है।
यहां "उपयोगकर्ता" शब्द में डिवाइस पर चलने वाली कोई भी प्रक्रिया शामिल है, भले ही यह भौतिक उपयोगकर्ता कार्यों (मानव, आप?) से सीधे संबंधित हो, क्योंकि प्रत्येक प्रक्रिया कुछ सिस्टम "उपयोगकर्ता" खाते का उपयोग करके चल रही है।
ऐतिहासिक रूप से, यूनिक्स-आधारित सिस्टम पर अनुमतियों को एक विवेकाधीन अभिगम नियंत्रण (DAC) प्रणाली कहा जाता है। इस मॉडल में:
- फाइलों जैसे संसाधनों के मालिक होते हैं जो उन संसाधनों पर पहुंच के अधिकारों को परिभाषित कर सकते हैं जो वे स्वयं करते हैं: यह उन्हें यह तय करने की अनुमति देता है कि क्या एक विशेष संसाधन निजी होना चाहिए (केवल मालिक ही इसे एक्सेस कर सकता है) या यदि इसे कुछ अन्य उपयोगकर्ताओं के साथ साझा किया जाना चाहिए।
- इसके शीर्ष पर आपके पास सुपर-उपयोगकर्ता है (जिसे
root
यूनिक्स-आधारित सिस्टम कहा जाता है) जो कि प्रशासनिक उपयोगकर्ता है और सिस्टम पर सब कुछ एक्सेस करता है। इस खाते को डिवाइस को बनाए रखने या मरम्मत करने के लिए एक मानव (आमतौर पर एक सिस्टम प्रशासक) द्वारा अंतःक्रियात्मक रूप से उपयोग किया जा सकता है, लेकिन आमतौर पर इस खाते का उपयोग ज्यादातर पृष्ठभूमि या निम्न स्तर की सेवाओं द्वारा किया जाएगा, जिन्हें इस तरह के विशेषाधिकार स्तर की आवश्यकता होती है: डिवाइस ड्राइवर, नेटवर्क कॉन्फ़िगरेशन सेवाएं, सेवाएं हर उपयोगकर्ताओं से फ़ाइलों तक पहुँचने या आंतरिक अंतर-उपयोगकर्ता संचार को संभालने की आवश्यकता है।
यह बहुत अच्छा है और पहले से ही एक अच्छी सुरक्षा प्रदान करता है। हालाँकि, इन परिस्थितियों के बारे में क्या:
- क्या होगा यदि सेवा में एक बग चल रहा है जैसा
root
कि पाया गया है जो एक हमलावर को कुछ मनमाने कोड चलाने में ऐसी सेवा को धोखा देने की अनुमति देगा? इस तरह के हमलावर डिवाइस तक पूरी तरह से पहुंच प्राप्त करेंगे। कुछ ठोस उदाहरण देने के लिए, इस तरह के बग को विशेष रूप से तैयार किए गए नेटवर्क कॉन्फ़िगरेशन जानकारी ( डीएचसीपी ) या फोन पर एक एमएमएस भेजकर ट्रिगर किया जा सकता है।
- यदि कुछ उपयोगकर्ता निजी संसाधनों की सही ढंग से सुरक्षा नहीं करते हैं, तो क्या होगा? तब इन संसाधनों को दुर्भावनापूर्ण रूप से एक्सेस किया जा सकता है (अन्य अप्रभावित उपयोगकर्ताओं द्वारा पढ़ा जा सकता है, शायद संशोधित या हटा दिया गया है)। यह आमतौर पर आपके पास होता है जब आपके फोन पर एक दुर्भावनापूर्ण एप्लिकेशन चल रहा होता है (भले ही आपको इसे स्थापित करने में कोई धोखा हुआ हो, या यदि यह किसी अन्य अनपेक्षित अनुप्रयोग में बग का उपयोग करके अपने आप आया हो, तो ब्राउज़र या मेल क्लाइंट के लिए उदाहरण), और यह दुर्भावनापूर्ण एप्लिकेशन सीधे अन्य एप्लिकेशन डेटा या संग्रहण स्थानों तक पहुंचने का प्रयास करता है (यह सामान्य रूप से पहुंच योग्य डेटा तक पहुंचने के लिए या अपने हटाने को कठिन बनाने के लिए कई स्थानों पर खुद को स्थापित करने के लिए ऐसा कर सकता है)।
यहाँ SELinux आता है।
SELinux एक अनिवार्य प्रवेश नियंत्रण (MAC) प्रणाली है। जबकि पहले वर्णित डीएसी प्रणाली में उपयोगकर्ता अपने स्वयं के संसाधनों पर उचित अधिकार स्थापित करने के लिए जिम्मेदार थे, मैक सिस्टम के साथ एक सिस्टम-वाइड पॉलिसी (ऑपरेटिंग सिस्टम के साथ प्रदान की गई) विशेषाधिकार प्राप्त और अप्रभावित उपयोगकर्ताओं दोनों के लिए लागू होती है।
यह ऊपर वर्णित दो मुद्दों को निम्नलिखित तरीकों से हल करता है:
- जैसा कि मैंने कहा, यह नीति विशेषाधिकार प्राप्त उपयोगकर्ताओं पर भी लागू होती है। इसका मतलब है कि, ठीक से डिज़ाइन की गई नीति के साथ, डिवाइस के नेटवर्क कॉन्फ़िगरेशन को संभालने के लिए डिज़ाइन की गई सेवा कुछ और करने में असमर्थ होगी: इसका उदाहरण के लिए एसएमएस तक कोई पहुंच नहीं होगी, और सेवा से निपटने वाले एसएमएस का नेटवर्क कॉन्फ़िगरेशन तक कोई पहुंच नहीं होगी। , और उनमें से किसी के पास उपयोगकर्ता के डेटा तक पहुंच नहीं होगी, इस तथ्य के बावजूद कि दोनों सुपर-उपयोगकर्ता खाते का उपयोग करके चल रहे हैं।
- एंड्रॉइड ने हाल ही में एक बहु-उपयोगकर्ता सुविधा शामिल की है जिसे SELinux द्वारा लागू किया गया है, जो किसी भी उपयोगकर्ता को अन्य उपयोगकर्ता के डेटा तक पहुंचने से रोकता है। लेकिन इसके अलावा, SELinux नीति अनुमत अनुप्रयोगों के व्यवहार का वर्णन करने से भी ज़िम्मेदार है, और सबसे अधिक संभावना है, भले ही कुछ संसाधन DAC सिस्टम का उपयोग करके ठीक से संरक्षित न हों, SELinux बचाव में आएगा और फिर भी दुर्भावनापूर्ण एप्लिकेशन को सीधे उन तक पहुँचने से रोक देगा।
DAC और MAC सिस्टम परस्पर अनन्य नहीं हैं, इसके विपरीत MAC सिस्टम (SELinux) DAC सिस्टम (पारंपरिक यूनिक्स जैसी अनुमतियों) के पीछे रक्षा की दूसरी परत के रूप में कार्य करता है। SELinux का काम उस नीति के विपरीत किसी भी गतिविधि को रोकना है, जिसे केवल DAC प्रणाली दी गई है, अन्यथा उसे स्वीकार कर लिया जाएगा।
मुश्किल बात यह है कि इस तरह की नीति लिखने के लिए बहुत जटिल हो सकती है: इसे वास्तव में हर स्थिति में हर संभव उपयोग के लिए प्रत्येक डिवाइस के घटकों को कवर करना होगा। वास्तव में, कोई बात नहीं अगर आपकी स्थिति में कुछ कार्रवाई वैध हो सकती है: यदि यह नीति में नहीं है, तो यह निषिद्ध है । इसलिए खराब डिज़ाइन की गई नीतियों के कारण यादृच्छिक परिणाम हो सकते हैं, जैसे अनुप्रयोग क्रैश, अनुपयोगी कार्यक्षमता और इसी तरह।
यही कारण है कि एंड्रॉइड शिपिंग SELinux के पहले संस्करणों ने इसे डिफ़ॉल्ट रूप से "अनुमति" मोड में शामिल किया था। इस मोड में, SELinux नीति उल्लंघनों को लॉग करेगा , लेकिन यह संबद्ध गतिविधि को अवरुद्ध करने का प्रयास नहीं करेगा। परिणामी लॉग फ़ाइलों का विश्लेषण करने से, केवल शेष नीति उल्लंघन वास्तव में दुर्भावनापूर्ण या अवांछित व्यवहार होने पर पॉलिसी को सही करना और उस बिंदु तक बढ़ाना संभव हो जाता है। इस बिंदु पर, SELinux को "Enforcing" मोड में बदल दिया जा सकता है: यह अब न केवल लॉग करेगा, बल्कि प्रत्येक अपमानजनक कार्रवाई को भी रोक देगा।
निष्कर्ष
SELinux एक शमन तकनीक है। यह हमलावरों को आपके फोन में प्रवेश करने से नहीं रोकता है, लेकिन यह सुनिश्चित करता है कि एक बार वे संभव के रूप में कुछ चीजें कर सकते हैं, आदर्श रूप से उपयोगी कुछ भी नहीं है इस प्रकार फोन पर हमला करने के किसी भी हित को हटा दिया जाता है।
रोम जितना पुराना होगा, सुरक्षा बगों की संख्या उतनी बड़ी होगी जो इस तरह की पहुंच को खोल देगी। SELinux इन ज्ञात कमजोरियों के बावजूद न्यूनतम सुरक्षा रखने का एक प्रभावी तरीका होगा, हालाँकि ठीक से कार्य करने के लिए SELinux एक जटिल नीति पर निर्भर करता है।
यदि आपका ROM डिफ़ॉल्ट रूप से "Permissive" मोड में SELinux के साथ दिया गया है, तो इसका अर्थ यह है कि इसमें मौजूद नीति "Enforcing" मोड में सुरक्षित रूप से स्विच करने के लिए पर्याप्त विश्वसनीय नहीं है।
यदि आप तकनीकी रूप से पर्याप्त हैं और फोन लॉग तक पहुँचते हैं ( dmesg
कम से कम, लेकिन आमतौर पर उन्हें भी कॉपी किया जाता है logcat
: बाद वाले को देखने की अनुमति देने वाले एप्लिकेशन हैं लेकिन आपके एंड्रॉइड संस्करण के आधार पर उन्हें रूट एक्सेस की आवश्यकता हो सकती है), आप यह देख सकते हैं कि क्या आपको "एवीसी" प्रविष्टियां मिलती हैं: ये संदेश आपको बता रहे हैं कि SELinux ने पॉलिसी के खिलाफ जाने वाली कार्रवाई का पता लगाया है।
इस तरह का एक उदाहरण CyanogenMod की वेबसाइट से लिया गया है :
type=AVC msg=audit(1363289005.532:184): avc: denied { read } for pid=29199 comm="Trace"
name="online" dev="sysfs" ino=30 scontext=staff_u:staff_r:googletalk_plugin_t
tcontext=system_u:object_r:sysfs_t tclass=file
यदि कोई नहीं है, तो उनमें से कुछ या किसी भी कारण से आपको लगता है कि वे आपको फोन का उपयोग करने से रोक नहीं सकते हैं, तो आप SELinux को "Enforcing" मोड में बदलने का प्रयास कर सकते हैं। पुराने CyanogenMod रोम में, यह GUI में एक छिपे हुए विकल्प का उपयोग करके आसान और संभव था (फोन को रूट करने या किसी विशिष्ट एप्लिकेशन को इंस्टॉल करने की आवश्यकता नहीं है), मुझे नहीं पता कि अन्य ROM ने समान सुविधा की पेशकश की है लेकिन चूंकि आपने CyanosMod का उपयोग किया है टैग मुझे लगता है कि आप भाग्यशाली हो सकते हैं;)।
setenforce 1
टर्मिनल एमुलेटर (रूट के रूप में) से जारी करने की कोशिश की ?