केवल उसी तरह से जो modprobe
कर्नेल में नए कोड को लोड करके सुरक्षा को "हरा देता है"।
विभिन्न कारणों से, कभी-कभी यह कर्नेल थ्रेड के बजाय उपयोगकर्ता-स्पेस में चलने वाले सेमी-विशेषाधिकार प्राप्त कोड (जैसे एक्स ड्राइवरों के अंदर ग्राफिक्स ड्राइवर) के लिए अधिक समझ में आता है।
kill
यह अधिक आसानी से सक्षम होने के नाते , जब तक कि यह एचडब्ल्यू को लॉक नहीं करता है।
- यह फाइल-सिस्टम में फाइलों से उसका कोड / डेटा मांगता है। (कर्नेल मेमोरी पेजेबल नहीं है)
- यह अपना खुद का वर्चुअल एड्रेस स्पेस देता है जहां एक्स सर्वर में बग्स कर्नेल को नीचे किए बिना सिर्फ एक्स सर्वर को क्रैश कर सकता है ।
यह सुरक्षा के लिए बहुत कुछ नहीं करता है, लेकिन बड़ी विश्वसनीयता और सॉफ्टवेयर आर्किटेक्चर के फायदे हैं।
कर्नेल में बेकिंग ग्राफिक्स ड्राइवर एक्स क्लाइंट और एक्स सर्वर के बीच संदर्भ स्विच को कम कर सकते हैं, जैसे कि केवल एक उपयोगकर्ता-> कर्नेल-> उपयोगकर्ता किसी अन्य उपयोग-स्थान प्रक्रिया में डेटा प्राप्त करने के बजाय, लेकिन एक्स सर्वर ऐतिहासिक रूप से बहुत बड़े और बहुत छोटे हैं उन्हें पूरी तरह से कर्नेल में चाहते हैं।
हां, इन निजी लोगों के साथ दुर्भावनापूर्ण कोड कर्नेल कोड को संशोधित करने के लिए उपयोग करने पर, कर्नेल के ऊपर ले जा सकता है/dev/mem
।
या उदाहरण के लिए x86 पर, अपने IO विशेषाधिकार स्तर को रिंग 0 पर सेट करने के लिए सिस्टम कॉल करने के cli
बाद उस कोर पर इंटरप्ट को अक्षम करने के लिए एक निर्देश चलाएँ iopl
।
लेकिन यहां तक कि x86 iopl
"केवल" कुछ निर्देशों तक पहुंच देता है : in / out (और स्ट्रिंग संस्करण ins / outs), और cli / sti। यह आप का उपयोग नहीं करता है rdmsr
या wrmsr
(जैसे पढ़ने या लिखने "मॉडल विशिष्ट रजिस्टर" के लिए IA32_LSTAR
जो x86-64 के लिए कर्नेल प्रवेश बिंदु का पता सेट syscall
अनुदेश), या उपयोग lidt
बाधा-वर्णनकर्ता तालिका (जो आप पूरी तरह से लेते हैं हैं बदलने के लिए मौजूदा कर्नेल से मशीन पर, कम से कम उस कोर पर।)
आप नियंत्रण रजिस्टर भी नहीं पढ़ सकते हैं (जैसे CR3 जो शीर्ष-स्तरीय पृष्ठ-निर्देशिका का भौतिक पता रखता है, जो एक हमलावर प्रक्रिया /dev/mem
को अपने स्वयं के पृष्ठ तालिकाओं को संशोधित करने के लिए एक विकल्प के रूप में संशोधित करने के लिए उपयोगी हो सकता mmap
है /dev/mem
। )
invd
(सभी कैश को राइट-बैक के बिना अमान्य करें !! ( उपयोग केस = रैम से पहले BIOS कॉन्फ़िगर किया गया है) का उपयोग करें) एक और मजेदार है जिसे हमेशा पूर्ण सीपीएल 0 (वर्तमान विशेषाधिकार स्तर) की आवश्यकता होती है, न कि केवल IOPL। यहां तक कि wbinvd
विशेषाधिकार प्राप्त है, क्योंकि यह इतनी धीमी गति से (और व्यवधान कारक नहीं) है, और फ्लश करने के लिए है सब सब कोर भर में कैश। (देखें वहाँ एक कार्यक्रम से संबंधित पूरे सीपीयू कैश? फ्लश करने के लिए एक रास्ता है और WBINVD अनुदेश उपयोग )
कीड़े जिसके परिणामस्वरूप कोड के रूप में एक खराब पता चल रहे डेटा के लिए कूद जाता है और उपयोगकर्ता-स्पेस एक्स सर्वर में गलती से इनमें से किसी भी निर्देश को निष्पादित नहीं कर सकता है।
वर्तमान विशेषाधिकार स्तर (संरक्षित और लंबी मोड में) (कोड खंड चयनकर्ता) के निम्न 2 बिट्स हैंcs
। mov eax, cs
/ and eax, 3
विशेषाधिकार स्तर को पढ़ने के लिए किसी भी मोड में काम करता है।
विशेषाधिकार स्तर लिखने के लिए, आप एक jmp far
या call far
सेट करने के लिए करते हैं CS:RIP
(लेकिन लक्ष्य खंड के लिए GDT / LDT प्रविष्टि पुराने विशेषाधिकार स्तर के आधार पर इसे प्रतिबंधित कर सकती है, यही कारण है कि उपयोगकर्ता-स्थान स्वयं को ऊपर उठाने के लिए ऐसा नहीं कर सकते हैं)। या आप कर्नेल प्रविष्टि बिंदु पर रिंग 0 पर स्विच करने के लिए उपयोग करते हैं int
या syscall
करते हैं।
iopl
अनुमति नहीं देता है, इसलिए यह अभी भी सुनिश्चित करने के लिए उपयोगी है कि एक छोटी गाड़ी उपयोगकर्ता-अंतरिक्ष कार्यक्रम गलती से एक भ्रष्ट फ़ंक्शन पॉइंटर के माध्यम से कूदकर नहीं चलता है जो बाइट्स से शुरू होने वाली निष्पादन योग्य मेमोरी पर इंगित करता है । मैंने कुछ गैर-सुरक्षा कारणों के साथ एक उत्तर जोड़ा कि उपयोगकर्ता-अंतरिक्ष प्रक्रियाओं को अपने विशेषाधिकार को बढ़ाने के लिए उपयोगी क्यों है।invd
0F 08