एड्रेस स्पेस लेआउट रैंडमाइजेशन: Difference between revisions

From Vigyanwiki
No edit summary
Line 1: Line 1:
{{Short description|Computer security technique}}
{{Short description|Computer security technique}}
{{Use dmy dates|date=May 2019|cs1-dates=y}}
 
{{More citations needed|date=January 2018}}


एड्रेस स्पेस लेआउट रैंडमाइजेशन (एएसएलआर) एक [[कंप्यूटर सुरक्षा]] तकनीक है जो [[स्मृति भ्रष्टाचार]] [[भेद्यता (कंप्यूटिंग)]] के [[शोषण (कंप्यूटर सुरक्षा)]] को रोकने में शामिल है।<ref>{{Cite journal |last1=Marco-Gisbert |first1=Hector |last2=Ripoll Ripoll |first2=Ismael |date=2019-07-22 |title=एड्रेस स्पेस लेआउट रेंडमाइजेशन नेक्स्ट जेनरेशन|journal=Applied Sciences |language=en |volume=9 |issue=14 |pages=2928 |doi=10.3390/app9142928 |issn=2076-3417|doi-access=free }}</ref> उदाहरण के लिए, स्मृति में एक विशेष शोषित कार्य करने के लिए एक हमलावर को मज़बूती से कूदने से रोकने के लिए, ASLR एक [[प्रक्रिया (कंप्यूटर विज्ञान)]] के प्रमुख डेटा क्षेत्रों के [[पता स्थान]] की स्थिति को बेतरतीब ढंग से व्यवस्थित करता है, जिसमें [[निष्पादन]] योग्य का आधार और स्थिति शामिल है। ढेर आधारित स्मृति आवंटन, [[गतिशील स्मृति आवंटन]] और [[पुस्तकालय (कंप्यूटर विज्ञान)]]।
एड्रेस स्पेस लेआउट रैंडमाइजेशन (एएसएलआर) एक [[कंप्यूटर सुरक्षा]] तकनीक है जो [[स्मृति भ्रष्टाचार]] [[भेद्यता (कंप्यूटिंग)]] के [[शोषण (कंप्यूटर सुरक्षा)]] को रोकने में शामिल है।<ref>{{Cite journal |last1=Marco-Gisbert |first1=Hector |last2=Ripoll Ripoll |first2=Ismael |date=2019-07-22 |title=एड्रेस स्पेस लेआउट रेंडमाइजेशन नेक्स्ट जेनरेशन|journal=Applied Sciences |language=en |volume=9 |issue=14 |pages=2928 |doi=10.3390/app9142928 |issn=2076-3417|doi-access=free }}</ref> उदाहरण के लिए, स्मृति में एक विशेष शोषित कार्य करने के लिए एक हमलावर को मज़बूती से कूदने से रोकने के लिए, ASLR एक [[प्रक्रिया (कंप्यूटर विज्ञान)]] के प्रमुख डेटा क्षेत्रों के [[पता स्थान]] की स्थिति को बेतरतीब ढंग से व्यवस्थित करता है, जिसमें [[निष्पादन]] योग्य का आधार और स्थिति शामिल है। ढेर आधारित स्मृति आवंटन, [[गतिशील स्मृति आवंटन]] और [[पुस्तकालय (कंप्यूटर विज्ञान)]]।
Line 10: Line 9:


== लाभ ==
== लाभ ==
एड्रेस स्पेस रेंडमाइजेशन कुछ प्रकार के सुरक्षा हमलों में बाधा डालता है, जिससे हमलावर के लिए लक्षित पतों की भविष्यवाणी करना अधिक कठिन हो जाता है। उदाहरण के लिए, रिटर्न-टू-लिबक हमलों को अंजाम देने की कोशिश करने वाले हमलावरों को निष्पादित किए जाने वाले कोड का पता लगाना चाहिए, जबकि स्टैक पर इंजेक्ट किए गए [[ app ]] को निष्पादित करने की कोशिश करने वाले अन्य हमलावरों को पहले स्टैक को ढूंढना होगा। दोनों ही मामलों में, सिस्टम हमलावरों से संबंधित मेमोरी-एड्रेस को अस्पष्ट कर देता है। इन मूल्यों का अनुमान लगाया जाना है, और एक गलत अनुमान आमतौर पर एप्लिकेशन क्रैश होने के कारण पुनर्प्राप्त करने योग्य नहीं होता है।
एड्रेस स्पेस रेंडमाइजेशन कुछ प्रकार के सुरक्षा हमलों में बाधा डालता है, जिससे हमलावर के लिए लक्षित पतों की भविष्यवाणी करना अधिक कठिन हो जाता है। उदाहरण के लिए, रिटर्न-टू-लिबक हमलों को अंजाम देने की कोशिश करने वाले हमलावरों को निष्पादित किए जाने वाले कोड का पता लगाना चाहिए, जबकि स्टैक पर इंजेक्ट किए गए [[ app |app]] को निष्पादित करने की कोशिश करने वाले अन्य हमलावरों को पहले स्टैक को ढूंढना होगा। दोनों ही मामलों में, सिस्टम हमलावरों से संबंधित मेमोरी-एड्रेस को अस्पष्ट कर देता है। इन मूल्यों का अनुमान लगाया जाना है, और एक गलत अनुमान आमतौर पर एप्लिकेशन क्रैश होने के कारण पुनर्प्राप्त करने योग्य नहीं होता है।


=== प्रभावशीलता ===
=== प्रभावशीलता ===
एड्रेस स्पेस लेआउट रेंडमाइजेशन एक हमलावर की कम संभावना पर आधारित है जो बेतरतीब ढंग से रखे गए क्षेत्रों के स्थानों का अनुमान लगाता है। सर्च स्पेस बढ़ाकर सुरक्षा बढ़ाई जाती है। इस प्रकार, रैंडम ऑफसेट में अधिक जानकारी एंट्रॉपी मौजूद होने पर पता स्थान यादृच्छिककरण अधिक प्रभावी होता है। एन्ट्रापी को या तो [[ आभासी मेमोरी ]] एरिया स्पेस की मात्रा बढ़ाकर बढ़ाया जाता है, जिस पर रैंडमाइजेशन होता है या उस अवधि को कम करता है जिस पर रैंडमाइजेशन होता है। अवधि को आम तौर पर जितना संभव हो उतना छोटा लागू किया जाता है, इसलिए अधिकांश प्रणालियों को वीएमए स्पेस रेंडमाइजेशन में वृद्धि करनी चाहिए।
एड्रेस स्पेस लेआउट रेंडमाइजेशन एक हमलावर की कम संभावना पर आधारित है जो बेतरतीब ढंग से रखे गए क्षेत्रों के स्थानों का अनुमान लगाता है। सर्च स्पेस बढ़ाकर सुरक्षा बढ़ाई जाती है। इस प्रकार, रैंडम ऑफसेट में अधिक जानकारी एंट्रॉपी मौजूद होने पर पता स्थान यादृच्छिककरण अधिक प्रभावी होता है। एन्ट्रापी को या तो [[ आभासी मेमोरी |आभासी मेमोरी]] एरिया स्पेस की मात्रा बढ़ाकर बढ़ाया जाता है, जिस पर रैंडमाइजेशन होता है या उस अवधि को कम करता है जिस पर रैंडमाइजेशन होता है। अवधि को आम तौर पर जितना संभव हो उतना छोटा लागू किया जाता है, इसलिए अधिकांश प्रणालियों को वीएमए स्पेस रेंडमाइजेशन में वृद्धि करनी चाहिए।


रैंडमाइजेशन को हराने के लिए, हमलावरों को उन सभी क्षेत्रों की स्थिति का सफलतापूर्वक अनुमान लगाना चाहिए जिन पर वे हमला करना चाहते हैं। स्टैक और हीप जैसे डेटा क्षेत्रों के लिए, जहां कस्टम कोड या उपयोगी डेटा लोड किया जा सकता है, कोड या डेटा की बार-बार कॉपी के लिए [[एनओपी स्लाइड]] का उपयोग करके एक से अधिक राज्यों पर हमला किया जा सकता है। यह एक हमले को सफल होने की अनुमति देता है यदि क्षेत्र को मुट्ठी भर मूल्यों में से एक में यादृच्छिक किया जाता है। इसके विपरीत, पुस्तकालय आधार और मुख्य निष्पादन योग्य जैसे कोड क्षेत्रों को सटीक रूप से खोजा जाना चाहिए। अक्सर इन क्षेत्रों को मिलाया जाता है, उदाहरण के लिए [[स्टैक फ्रेम]] को स्टैक पर इंजेक्ट किया जाता है और एक पुस्तकालय में लौटाया जाता है।
रैंडमाइजेशन को हराने के लिए, हमलावरों को उन सभी क्षेत्रों की स्थिति का सफलतापूर्वक अनुमान लगाना चाहिए जिन पर वे हमला करना चाहते हैं। स्टैक और हीप जैसे डेटा क्षेत्रों के लिए, जहां कस्टम कोड या उपयोगी डेटा लोड किया जा सकता है, कोड या डेटा की बार-बार कॉपी के लिए [[एनओपी स्लाइड]] का उपयोग करके एक से अधिक राज्यों पर हमला किया जा सकता है। यह एक हमले को सफल होने की अनुमति देता है यदि क्षेत्र को मुट्ठी भर मूल्यों में से एक में यादृच्छिक किया जाता है। इसके विपरीत, पुस्तकालय आधार और मुख्य निष्पादन योग्य जैसे कोड क्षेत्रों को सटीक रूप से खोजा जाना चाहिए। अक्सर इन क्षेत्रों को मिलाया जाता है, उदाहरण के लिए [[स्टैक फ्रेम]] को स्टैक पर इंजेक्ट किया जाता है और एक पुस्तकालय में लौटाया जाता है।
Line 38: Line 37:
कई प्रणालियों में, <math>2^N</math> हजारों या लाखों में हो सकता है; पर {{as of | 2009 | alt = modern}} [[64-बिट]] सिस्टम, ये संख्याएं आम तौर पर कम से कम लाखों तक पहुंचती हैं, हेक्टर मार्को-गिस्बर्ट और इस्माइल रिपोल ने 2014 में दिखाया कि कुछ परिस्थितियों में एक सेकंड से भी कम समय में 64-बिट सिस्टम में ASLR को कैसे बायपास किया जाए।<ref>{{cite web|last1=Marco-Gisbert|first1=Hector|first2=Ismael|last2=Ripoll|url=http://cybersecurity.upv.es/attacks/offset2lib/offset2lib-paper.pdf|title=On the Effectiveness of Full-ASLR on 64-bit Linux|date=20 November 2014}}</ref> 2004 की कंप्यूटर गति पर 32-बिट सिस्टम के लिए जिसमें एड्रेस रेंडमाइजेशन के लिए 16 बिट्स हैं, शचम और सहकर्मी राज्य ... 16 बिट्स एड्रेस रैंडमाइजेशन को मिनटों के भीतर एक क्रूर बल के हमले से हराया जा सकता है।<ref>{{cite conference|title=एड्रेस-स्पेस रेंडमाइजेशन की प्रभावशीलता पर|last1=Shacham|first1=H.|last2=Page|first2=M.|last3=Pfaff|first3=B.|last4=Goh|first4=E.J.|last5=Modadugu|first5=N.|last6=Boneh|first6=D|conference=11th ACM conference on Computer and communications security|pages=298–307|year=2004}}</ref> लेखकों का बयान बिना किसी देरी के एक ही एप्लिकेशन पर कई बार हमला करने की क्षमता पर निर्भर करता है। एएसएलआर के उचित कार्यान्वयन, जैसे कि जीआर सुरक्षा में शामिल, ऐसे क्रूर बल के हमलों को अक्षम्य बनाने के लिए कई तरीके प्रदान करते हैं। एक विधि में एक निश्चित समय के लिए एक निष्पादन योग्य को निष्पादित करने से रोकना शामिल है यदि यह एक निश्चित संख्या में दुर्घटनाग्रस्त हो गया है।
कई प्रणालियों में, <math>2^N</math> हजारों या लाखों में हो सकता है; पर {{as of | 2009 | alt = modern}} [[64-बिट]] सिस्टम, ये संख्याएं आम तौर पर कम से कम लाखों तक पहुंचती हैं, हेक्टर मार्को-गिस्बर्ट और इस्माइल रिपोल ने 2014 में दिखाया कि कुछ परिस्थितियों में एक सेकंड से भी कम समय में 64-बिट सिस्टम में ASLR को कैसे बायपास किया जाए।<ref>{{cite web|last1=Marco-Gisbert|first1=Hector|first2=Ismael|last2=Ripoll|url=http://cybersecurity.upv.es/attacks/offset2lib/offset2lib-paper.pdf|title=On the Effectiveness of Full-ASLR on 64-bit Linux|date=20 November 2014}}</ref> 2004 की कंप्यूटर गति पर 32-बिट सिस्टम के लिए जिसमें एड्रेस रेंडमाइजेशन के लिए 16 बिट्स हैं, शचम और सहकर्मी राज्य ... 16 बिट्स एड्रेस रैंडमाइजेशन को मिनटों के भीतर एक क्रूर बल के हमले से हराया जा सकता है।<ref>{{cite conference|title=एड्रेस-स्पेस रेंडमाइजेशन की प्रभावशीलता पर|last1=Shacham|first1=H.|last2=Page|first2=M.|last3=Pfaff|first3=B.|last4=Goh|first4=E.J.|last5=Modadugu|first5=N.|last6=Boneh|first6=D|conference=11th ACM conference on Computer and communications security|pages=298–307|year=2004}}</ref> लेखकों का बयान बिना किसी देरी के एक ही एप्लिकेशन पर कई बार हमला करने की क्षमता पर निर्भर करता है। एएसएलआर के उचित कार्यान्वयन, जैसे कि जीआर सुरक्षा में शामिल, ऐसे क्रूर बल के हमलों को अक्षम्य बनाने के लिए कई तरीके प्रदान करते हैं। एक विधि में एक निश्चित समय के लिए एक निष्पादन योग्य को निष्पादित करने से रोकना शामिल है यदि यह एक निश्चित संख्या में दुर्घटनाग्रस्त हो गया है।


एंड्रॉयड,<ref name=android-llor>{{cite web|title=लाइब्रेरी लोड ऑर्डर रैंडमाइजेशन लागू करें|url=https://android-review.googlesource.com/178130 |access-date=26 June 2017}}</ref>{{Primary source inline|date=March 2016}} और संभवतः अन्य प्रणालियाँ,{{which|date=October 2015}} लाइब्रेरी लोड ऑर्डर रेंडमाइजेशन को लागू करें, ASLR का एक रूप जो उस ऑर्डर को रैंडमाइज करता है जिसमें लाइब्रेरी लोड की जाती हैं। यह बहुत कम एन्ट्रॉपी प्रदान करता है। प्रति आवश्यक पुस्तकालय में आपूर्ति की गई एंट्रॉपी के बिट्स की संख्या का अनुमान नीचे दिखाई देता है; यह अभी तक विभिन्न पुस्तकालय आकारों के लिए खाता नहीं है, इसलिए प्राप्त वास्तविक एन्ट्रापी वास्तव में कुछ अधिक है। ध्यान दें कि हमलावरों को आमतौर पर केवल एक पुस्तकालय की आवश्यकता होती है; गणित कई पुस्तकालयों के साथ अधिक जटिल है, और नीचे भी दिखाया गया है। ध्यान दें कि केवल एक पुस्तकालय का उपयोग करने वाले हमलावर का मामला अधिक जटिल सूत्र का सरलीकरण है <math>l = 1</math>.
एंड्रॉयड,<ref name=android-llor>{{cite web|title=लाइब्रेरी लोड ऑर्डर रैंडमाइजेशन लागू करें|url=https://android-review.googlesource.com/178130 |access-date=26 June 2017}}</ref> और संभवतः अन्य प्रणालियाँ, लाइब्रेरी लोड ऑर्डर रेंडमाइजेशन को लागू करें, ASLR का एक रूप जो उस ऑर्डर को रैंडमाइज करता है जिसमें लाइब्रेरी लोड की जाती हैं। यह बहुत कम एन्ट्रॉपी प्रदान करता है। प्रति आवश्यक पुस्तकालय में आपूर्ति की गई एंट्रॉपी के बिट्स की संख्या का अनुमान नीचे दिखाई देता है; यह अभी तक विभिन्न पुस्तकालय आकारों के लिए खाता नहीं है, इसलिए प्राप्त वास्तविक एन्ट्रापी वास्तव में कुछ अधिक है। ध्यान दें कि हमलावरों को आमतौर पर केवल एक पुस्तकालय की आवश्यकता होती है; गणित कई पुस्तकालयों के साथ अधिक जटिल है, और नीचे भी दिखाया गया है। ध्यान दें कि केवल एक पुस्तकालय का उपयोग करने वाले हमलावर का मामला अधिक जटिल सूत्र का सरलीकरण है <math>l = 1</math>.


* {{mvar|l}} (लोडेड पुस्तकालयों की संख्या)
* {{mvar|l}} (लोडेड पुस्तकालयों की संख्या)
Line 52: Line 51:
हमलावर एक यादृच्छिक पता स्थान में मौजूद एन्ट्रापी को कम करने के लिए कई तरीकों का उपयोग कर सकते हैं, जिसमें साधारण सूचना लीक से लेकर एंट्रॉपी प्रति हमले के कई बिट्स पर हमला करना (जैसे हीप छिड़काव द्वारा) शामिल है। इस बारे में बहुत कम किया जा सकता है।
हमलावर एक यादृच्छिक पता स्थान में मौजूद एन्ट्रापी को कम करने के लिए कई तरीकों का उपयोग कर सकते हैं, जिसमें साधारण सूचना लीक से लेकर एंट्रॉपी प्रति हमले के कई बिट्स पर हमला करना (जैसे हीप छिड़काव द्वारा) शामिल है। इस बारे में बहुत कम किया जा सकता है।


[[प्रारूप स्ट्रिंग भेद्यता]] का उपयोग करके मेमोरी लेआउट के बारे में जानकारी लीक करना संभव है। स्वरूप स्ट्रिंग फ़ंक्शन जैसे कि [[ printf ]] अपना काम करने के लिए एक चर तर्क सूची का उपयोग करते हैं; प्रारूप विनिर्देशक वर्णन करते हैं कि तर्क सूची कैसी दिखती है। आम तौर पर जिस तरह से तर्क पारित किए जाते हैं, उसके कारण प्रत्येक प्रारूप निर्दिष्टकर्ता स्टैक फ्रेम के शीर्ष के करीब जाता है। आखिरकार, रिटर्न पॉइंटर और स्टैक फ्रेम पॉइंटर को निकाला जा सकता है, जिससे एक कमजोर लाइब्रेरी का पता और एक ज्ञात स्टैक फ्रेम का पता चलता है; यह एक हमलावर के लिए एक बाधा के रूप में लाइब्रेरी और स्टैक रैंडमाइजेशन को समाप्त कर सकता है।
[[प्रारूप स्ट्रिंग भेद्यता]] का उपयोग करके मेमोरी लेआउट के बारे में जानकारी लीक करना संभव है। स्वरूप स्ट्रिंग फ़ंक्शन जैसे कि [[ printf |printf]] अपना काम करने के लिए एक चर तर्क सूची का उपयोग करते हैं; प्रारूप विनिर्देशक वर्णन करते हैं कि तर्क सूची कैसी दिखती है। आम तौर पर जिस तरह से तर्क पारित किए जाते हैं, उसके कारण प्रत्येक प्रारूप निर्दिष्टकर्ता स्टैक फ्रेम के शीर्ष के करीब जाता है। आखिरकार, रिटर्न पॉइंटर और स्टैक फ्रेम पॉइंटर को निकाला जा सकता है, जिससे एक कमजोर लाइब्रेरी का पता और एक ज्ञात स्टैक फ्रेम का पता चलता है; यह एक हमलावर के लिए एक बाधा के रूप में लाइब्रेरी और स्टैक रैंडमाइजेशन को समाप्त कर सकता है।


स्टैक या हीप में एन्ट्रॉपी को भी कम किया जा सकता है। स्टैक को आमतौर पर 16 बाइट्स के साथ संरेखित किया जाना चाहिए, और इसलिए यह सबसे छोटा संभव यादृच्छिककरण अंतराल है; जबकि ढेर पृष्ठ-संरेखित होना चाहिए, आमतौर पर 4096 बाइट्स। हमले का प्रयास करते समय, इन अंतरालों के साथ डुप्लिकेट हमलों को संरेखित करना संभव है; एक एनओपी स्लाइड का उपयोग [[शेलकोड इंजेक्शन]] और स्ट्रिंग 'के साथ किया जा सकता है।{{code|/bin/sh}}' को ' से बदला जा सकता है{{code|////////bin/sh}}' सिस्टम पर लौटने का प्रयास करते समय स्लैश की मनमानी संख्या के लिए। हटाए गए बिट्स की संख्या बिल्कुल है <math>\log_2\!\left (n \right )</math> के लिए {{mvar|n}} अंतराल पर हमला किया।
स्टैक या हीप में एन्ट्रॉपी को भी कम किया जा सकता है। स्टैक को आमतौर पर 16 बाइट्स के साथ संरेखित किया जाना चाहिए, और इसलिए यह सबसे छोटा संभव यादृच्छिककरण अंतराल है; जबकि ढेर पृष्ठ-संरेखित होना चाहिए, आमतौर पर 4096 बाइट्स। हमले का प्रयास करते समय, इन अंतरालों के साथ डुप्लिकेट हमलों को संरेखित करना संभव है; एक एनओपी स्लाइड का उपयोग [[शेलकोड इंजेक्शन]] और स्ट्रिंग 'के साथ किया जा सकता है।{{code|/bin/sh}}' को ' से बदला जा सकता है{{code|////////bin/sh}}' सिस्टम पर लौटने का प्रयास करते समय स्लैश की मनमानी संख्या के लिए। हटाए गए बिट्स की संख्या बिल्कुल है <math>\log_2\!\left (n \right )</math> के लिए {{mvar|n}} अंतराल पर हमला किया।
Line 88: Line 87:




===={{Anchor|KASLR|FGKASLR}}कर्नेल एड्रेस स्पेस लेआउट रैंडमाइजेशन ====
====कर्नेल एड्रेस स्पेस लेआउट रैंडमाइजेशन ====
कर्नेल एड्रेस स्पेस लेआउट रेंडमाइजेशन (केएएसएलआर) लिनक्स कर्नेल छवि के लिए एड्रेस स्पेस रैंडमाइजेशन को यादृच्छिक रूप से सक्षम करता है जहां बूट समय पर कर्नेल कोड रखा जाता है।<ref>{{cite web | url = https://lwn.net/Articles/569635/ | title = कर्नेल एड्रेस स्पेस लेआउट रैंडमाइजेशन| date = 9 October 2013 | access-date = 2 April 2014 | author = Jake Edge | publisher = [[LWN.net]]
कर्नेल एड्रेस स्पेस लेआउट रेंडमाइजेशन (केएएसएलआर) लिनक्स कर्नेल छवि के लिए एड्रेस स्पेस रैंडमाइजेशन को यादृच्छिक रूप से सक्षम करता है जहां बूट समय पर कर्नेल कोड रखा जाता है।<ref>{{cite web | url = https://lwn.net/Articles/569635/ | title = कर्नेल एड्रेस स्पेस लेआउट रैंडमाइजेशन| date = 9 October 2013 | access-date = 2 April 2014 | author = Jake Edge | publisher = [[LWN.net]]
}}</ref> केएएसएलआर को 30 मार्च 2014 को जारी कर्नेल संस्करण 3.14 में [[लिनक्स कर्नेल मेनलाइन]] में विलय कर दिया गया था।<ref>{{cite web | url = http://kernelnewbies.org/Linux_3.14#head-192cae48200fccde67b36c75cdb6c6d8214cccb3 | title = Linux kernel 3.14, Section 1.7. Kernel address space randomization | date = 30 March 2014 | access-date = 2 April 2014 | website = kernelnewbies.org}}</ref> संकलित होने पर, इसे निर्दिष्ट करके बूट समय पर अक्षम किया जा सकता है {{Mono|nokaslr}} कर्नेल के बूट पैरामीटर में से एक के रूप में।<ref>{{cite web | url = https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8ab3820fd5b2896d66da7bb2a906bc382e63e7bc | title = kernel/git/torvalds/linux.git: x86, kaslr: Return location from decompress_kernel (Linux kernel source tree) | date = 13 October 2013 | access-date = 2 April 2014 | publisher = [[kernel.org]]}}</ref>
}}</ref> केएएसएलआर को 30 मार्च 2014 को जारी कर्नेल संस्करण 3.14 में [[लिनक्स कर्नेल मेनलाइन]] में विलय कर दिया गया था।<ref>{{cite web | url = http://kernelnewbies.org/Linux_3.14#head-192cae48200fccde67b36c75cdb6c6d8214cccb3 | title = Linux kernel 3.14, Section 1.7. Kernel address space randomization | date = 30 March 2014 | access-date = 2 April 2014 | website = kernelnewbies.org}}</ref> संकलित होने पर, इसे निर्दिष्ट करके बूट समय पर अक्षम किया जा सकता है {{Mono|nokaslr}} कर्नेल के बूट पैरामीटर में से एक के रूप में।<ref>{{cite web | url = https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8ab3820fd5b2896d66da7bb2a906bc382e63e7bc | title = kernel/git/torvalds/linux.git: x86, kaslr: Return location from decompress_kernel (Linux kernel source tree) | date = 13 October 2013 | access-date = 2 April 2014 | publisher = [[kernel.org]]}}</ref>
x86 प्रोसेसर में कई साइड-चैनल हमले हैं जो कर्नेल पतों को लीक कर सकते हैं।<ref name=":1">{{Cite conference|date=24 June 2017|title=KASLR is Dead: Long Live KASLR|url=https://gruss.cc/files/kaiser.pdf|conference=Engineering Secure Software and Systems 2017}}</ref><ref>{{Cite journal |last1=Jang |first1=Yeongjin |last2=Lee |first2=Sangho |last3=Kim |first3=Taesoo |date=2016 |title=इंटेल TSX के साथ कर्नेल एड्रेस स्पेस लेआउट रेंडमाइजेशन को तोड़ना|url=http://people.oregonstate.edu/~jangye/assets/papers/2016/jang:drk-bh.pdf |journal=2016 ACM SIGSAC Conference on Computer and Communications Security |series=CCS '16 |location=New York |publisher=Association for Computing Machinery |pages=380–392 |doi=10.1145/2976749.2978321|isbn=9781450341394 |s2cid=6293725 |doi-access=free}}</ref> 2017 के अंत में, इन हमलों को हराने के लिए [[ कर्नेल पेज-टेबल अलगाव ]] (KPTI उर्फ ​​KAISER) विकसित किया गया था।<ref>{{Cite news |url=https://lwn.net/Articles/741878/ |title=कर्नेल पेज-टेबल अलगाव की वर्तमान स्थिति|last=Corbet |first=Jonathan |date=20 December 2017 |work=Linux Weekly News}}</ref><ref name=":0">{{Cite news|url=https://lwn.net/Articles/738975/ |title=KAISER: hiding the kernel from user space |last=Corbet |first=Jonathan|date=15 November 2017 |work=Linux Weekly News}}</ref> हालाँकि, यह विधि [[शाखा भविष्यवक्ता]] संरचनाओं में टकराव का उपयोग करने वाले साइड-चैनल हमलों से रक्षा नहीं कर सकती है।<ref name="jump-over-aslr">{{Cite conference |url=http://www.cs.ucr.edu/~nael/pubs/micro16.pdf |doi=10.1109/MICRO.2016.7783743 |isbn=978-1-5090-3508-3 |title=Jump over ASLR: Attacking branch predictors to bypass ASLR |conference=2016 49th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO) |pages=1–13 |year=2016 |last1=Evtyushkin |first1=Dmitry |last2=Ponomarev |first2=Dmitry |last3=Abu-Ghazaleh |first3=Nael |s2cid=3801142}}</ref>
x86 प्रोसेसर में कई साइड-चैनल हमले हैं जो कर्नेल पतों को लीक कर सकते हैं।<ref name=":1">{{Cite conference|date=24 June 2017|title=KASLR is Dead: Long Live KASLR|url=https://gruss.cc/files/kaiser.pdf|conference=Engineering Secure Software and Systems 2017}}</ref><ref>{{Cite journal |last1=Jang |first1=Yeongjin |last2=Lee |first2=Sangho |last3=Kim |first3=Taesoo |date=2016 |title=इंटेल TSX के साथ कर्नेल एड्रेस स्पेस लेआउट रेंडमाइजेशन को तोड़ना|url=http://people.oregonstate.edu/~jangye/assets/papers/2016/jang:drk-bh.pdf |journal=2016 ACM SIGSAC Conference on Computer and Communications Security |series=CCS '16 |location=New York |publisher=Association for Computing Machinery |pages=380–392 |doi=10.1145/2976749.2978321|isbn=9781450341394 |s2cid=6293725 |doi-access=free}}</ref> 2017 के अंत में, इन हमलों को हराने के लिए [[ कर्नेल पेज-टेबल अलगाव |कर्नेल पेज-टेबल अलगाव]] (KPTI उर्फ ​​KAISER) विकसित किया गया था।<ref>{{Cite news |url=https://lwn.net/Articles/741878/ |title=कर्नेल पेज-टेबल अलगाव की वर्तमान स्थिति|last=Corbet |first=Jonathan |date=20 December 2017 |work=Linux Weekly News}}</ref><ref name=":0">{{Cite news|url=https://lwn.net/Articles/738975/ |title=KAISER: hiding the kernel from user space |last=Corbet |first=Jonathan|date=15 November 2017 |work=Linux Weekly News}}</ref> हालाँकि, यह विधि [[शाखा भविष्यवक्ता]] संरचनाओं में टकराव का उपयोग करने वाले साइड-चैनल हमलों से रक्षा नहीं कर सकती है।<ref name="jump-over-aslr">{{Cite conference |url=http://www.cs.ucr.edu/~nael/pubs/micro16.pdf |doi=10.1109/MICRO.2016.7783743 |isbn=978-1-5090-3508-3 |title=Jump over ASLR: Attacking branch predictors to bypass ASLR |conference=2016 49th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO) |pages=1–13 |year=2016 |last1=Evtyushkin |first1=Dmitry |last2=Ponomarev |first2=Dmitry |last3=Abu-Ghazaleh |first3=Nael |s2cid=3801142}}</ref>


{{as of|2021}}, महीन दानेदार कर्नेल एड्रेस स्पेस लेआउट रेंडमाइजेशन (या फंक्शन ग्रेन्युलर केएएसएलआर, एफजीकेएएसएलआर) केएएसएलआर का एक नियोजित विस्तार है जिसे फंक्शन लेवल तक रैंडमाइज किया जाता है।<ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.16-Preps-For-FGKASLR|title=Linux 5.16 Has Early Preparations For Supporting FGKASLR - Phoronix|website=www.phoronix.com}}</ref>
{{as of|2021}}, महीन दानेदार कर्नेल एड्रेस स्पेस लेआउट रेंडमाइजेशन (या फंक्शन ग्रेन्युलर केएएसएलआर, एफजीकेएएसएलआर) केएएसएलआर का एक नियोजित विस्तार है जिसे फंक्शन लेवल तक रैंडमाइज किया जाता है।<ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.16-Preps-For-FGKASLR|title=Linux 5.16 Has Early Preparations For Supporting FGKASLR - Phoronix|website=www.phoronix.com}}</ref>
Line 97: Line 96:


=== माइक्रोसॉफ्ट विंडोज ===
=== माइक्रोसॉफ्ट विंडोज ===
{{Update section|date=August 2018}}
माइक्रोसॉफ्ट के [[विंडोज विस्टा]] (जनवरी 2007 को जारी) और बाद में एएसएलआर को केवल एक्जीक्यूटेबल्स और [[डायनेमिक लिंक लाइब्रेरी]] के लिए सक्षम किया गया है जो विशेष रूप से एएसएलआर-सक्षम होने के लिए जुड़े हुए हैं।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/bb430720.aspx |title=विंडोज आईएसवी सॉफ्टवेयर सुरक्षा सुरक्षा|publisher=Msdn.microsoft.com |access-date=10 April 2012}}</ref> संगतता के लिए, यह अन्य अनुप्रयोगों के लिए डिफ़ॉल्ट रूप से सक्षम नहीं है। विशिष्ट रूप से, केवल पुराना सॉफ़्टवेयर असंगत होता है और रजिस्ट्री प्रविष्टि को संपादित करके ASLR को पूरी तरह से सक्षम किया जा सकता है {{code|HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages}},<ref>Windows Internals: Including Windows Server 2008 and Windows Vista, Fifth Edition (PRO-Developer) {{ISBN|978-0-7356-2530-3}}</ref> या Microsoft के [[एन्हांस्ड मिटिगेशन एक्सपीरियंस टूलकिट]] को स्थापित करके।
माइक्रोसॉफ्ट के [[विंडोज विस्टा]] (जनवरी 2007 को जारी) और बाद में एएसएलआर को केवल एक्जीक्यूटेबल्स और [[डायनेमिक लिंक लाइब्रेरी]] के लिए सक्षम किया गया है जो विशेष रूप से एएसएलआर-सक्षम होने के लिए जुड़े हुए हैं।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/bb430720.aspx |title=विंडोज आईएसवी सॉफ्टवेयर सुरक्षा सुरक्षा|publisher=Msdn.microsoft.com |access-date=10 April 2012}}</ref> संगतता के लिए, यह अन्य अनुप्रयोगों के लिए डिफ़ॉल्ट रूप से सक्षम नहीं है। विशिष्ट रूप से, केवल पुराना सॉफ़्टवेयर असंगत होता है और रजिस्ट्री प्रविष्टि को संपादित करके ASLR को पूरी तरह से सक्षम किया जा सकता है {{code|HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages}},<ref>Windows Internals: Including Windows Server 2008 and Windows Vista, Fifth Edition (PRO-Developer) {{ISBN|978-0-7356-2530-3}}</ref> या Microsoft के [[एन्हांस्ड मिटिगेशन एक्सपीरियंस टूलकिट]] को स्थापित करके।


Line 109: Line 107:




=== {{anchor|OpenBSD}} [[ओपनबीएसडी]] ===
=== [[ओपनबीएसडी]] ===
2003 में, OpenBSD ASLR के एक मजबूत रूप का समर्थन करने और डिफ़ॉल्ट रूप से इसे सक्रिय करने वाला पहला मुख्यधारा का ऑपरेटिंग सिस्टम बन गया।<ref name="OpenBSD-firstASLR">{{cite web
2003 में, OpenBSD ASLR के एक मजबूत रूप का समर्थन करने और डिफ़ॉल्ट रूप से इसे सक्रिय करने वाला पहला मुख्यधारा का ऑपरेटिंग सिस्टम बन गया।<ref name="OpenBSD-firstASLR">{{cite web
|url=http://www.openbsd.org/papers/ven05-deraadt/index.html
|url=http://www.openbsd.org/papers/ven05-deraadt/index.html

Revision as of 12:44, 1 May 2023


एड्रेस स्पेस लेआउट रैंडमाइजेशन (एएसएलआर) एक कंप्यूटर सुरक्षा तकनीक है जो स्मृति भ्रष्टाचार भेद्यता (कंप्यूटिंग) के शोषण (कंप्यूटर सुरक्षा) को रोकने में शामिल है।[1] उदाहरण के लिए, स्मृति में एक विशेष शोषित कार्य करने के लिए एक हमलावर को मज़बूती से कूदने से रोकने के लिए, ASLR एक प्रक्रिया (कंप्यूटर विज्ञान) के प्रमुख डेटा क्षेत्रों के पता स्थान की स्थिति को बेतरतीब ढंग से व्यवस्थित करता है, जिसमें निष्पादन योग्य का आधार और स्थिति शामिल है। ढेर आधारित स्मृति आवंटन, गतिशील स्मृति आवंटन और पुस्तकालय (कंप्यूटर विज्ञान)

इतिहास

Linux PaX प्रोजेक्ट ने सबसे पहले ASLR शब्द गढ़ा, और जुलाई 2001 में #KASLR के लिए पैच (कंप्यूटिंग) के रूप में पहला डिज़ाइन और PaX#History प्रकाशित किया। इसे एक पूर्ण कार्यान्वयन के रूप में देखा जाता है, जो अक्टूबर 2002 से कर्नेल स्टैक रेंडमाइजेशन के लिए एक पैच भी प्रदान करता है।[2] डिफ़ॉल्ट रूप से ASLR का समर्थन करने वाला पहला मेनस्ट्रीम ऑपरेटिंग सिस्टम 2003 में OpenBSD|3.4 का #OpenBSD संस्करण टाइमलाइन था,[3][4] के बाद 2005 में Linux आया।

लाभ

एड्रेस स्पेस रेंडमाइजेशन कुछ प्रकार के सुरक्षा हमलों में बाधा डालता है, जिससे हमलावर के लिए लक्षित पतों की भविष्यवाणी करना अधिक कठिन हो जाता है। उदाहरण के लिए, रिटर्न-टू-लिबक हमलों को अंजाम देने की कोशिश करने वाले हमलावरों को निष्पादित किए जाने वाले कोड का पता लगाना चाहिए, जबकि स्टैक पर इंजेक्ट किए गए app को निष्पादित करने की कोशिश करने वाले अन्य हमलावरों को पहले स्टैक को ढूंढना होगा। दोनों ही मामलों में, सिस्टम हमलावरों से संबंधित मेमोरी-एड्रेस को अस्पष्ट कर देता है। इन मूल्यों का अनुमान लगाया जाना है, और एक गलत अनुमान आमतौर पर एप्लिकेशन क्रैश होने के कारण पुनर्प्राप्त करने योग्य नहीं होता है।

प्रभावशीलता

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

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

निम्नलिखित चर घोषित किए जा सकते हैं:

  • (स्टैक टॉप के एंट्रॉपी बिट्स)
  • (एन्ट्रॉपी बिट्स mmap() आधार)
  • (मुख्य निष्पादन योग्य आधार के एंट्रॉपी बिट्स)
  • (ढेर आधार के एंट्रॉपी बिट्स)
  • (स्टैक एंट्रॉपी के प्रति प्रयास पर हमला किया गया बिट्स)
  • (प्रति प्रयास बिट्स पर हमला किया mmap() बेस एंट्रॉपी)
  • (मुख्य निष्पादन योग्य एंट्रॉपी के प्रति प्रयास पर हमला किया गया बिट्स)
  • (ढेर आधार एंट्रॉपी के प्रति प्रयास पर हमला किया गया बिट्स)
  • (प्रयास किए गए)
  • (एन्ट्रापी की कुल राशि: )

किसी हमलावर के सफल होने की संभावना की गणना करने के लिए, हमें कई प्रयास करने होंगे α हस्ताक्षर-आधारित IPS, कानून प्रवर्तन, या अन्य कारक द्वारा बाधित किए बिना किया गया; ब्रूट फ़ोर्सिंग के मामले में, डेमन को फिर से शुरू नहीं किया जा सकता है। हमें यह भी पता लगाना होगा कि कितने बिट्स प्रासंगिक हैं और प्रत्येक प्रयास में कितने पर हमला किया जा रहा है, हमलावर को कितने बिट्स को छोड़ना है।

निम्नलिखित सूत्र दिए गए सेट के लिए सफलता की संभावना का प्रतिनिधित्व करते हैं α प्रयास करता है N एंट्रॉपी के बिट्स।

  • (पृथक अनुमान; प्रत्येक प्रयास के बाद पता स्थान को फिर से यादृच्छिक किया जाता है)
  • (समान पता स्थान के साथ कार्यक्रम की प्रतियों पर व्यवस्थित क्रूर बल)

कई प्रणालियों में, हजारों या लाखों में हो सकता है; पर modern 64-बिट सिस्टम, ये संख्याएं आम तौर पर कम से कम लाखों तक पहुंचती हैं, हेक्टर मार्को-गिस्बर्ट और इस्माइल रिपोल ने 2014 में दिखाया कि कुछ परिस्थितियों में एक सेकंड से भी कम समय में 64-बिट सिस्टम में ASLR को कैसे बायपास किया जाए।[5] 2004 की कंप्यूटर गति पर 32-बिट सिस्टम के लिए जिसमें एड्रेस रेंडमाइजेशन के लिए 16 बिट्स हैं, शचम और सहकर्मी राज्य ... 16 बिट्स एड्रेस रैंडमाइजेशन को मिनटों के भीतर एक क्रूर बल के हमले से हराया जा सकता है।[6] लेखकों का बयान बिना किसी देरी के एक ही एप्लिकेशन पर कई बार हमला करने की क्षमता पर निर्भर करता है। एएसएलआर के उचित कार्यान्वयन, जैसे कि जीआर सुरक्षा में शामिल, ऐसे क्रूर बल के हमलों को अक्षम्य बनाने के लिए कई तरीके प्रदान करते हैं। एक विधि में एक निश्चित समय के लिए एक निष्पादन योग्य को निष्पादित करने से रोकना शामिल है यदि यह एक निश्चित संख्या में दुर्घटनाग्रस्त हो गया है।

एंड्रॉयड,[7] और संभवतः अन्य प्रणालियाँ, लाइब्रेरी लोड ऑर्डर रेंडमाइजेशन को लागू करें, ASLR का एक रूप जो उस ऑर्डर को रैंडमाइज करता है जिसमें लाइब्रेरी लोड की जाती हैं। यह बहुत कम एन्ट्रॉपी प्रदान करता है। प्रति आवश्यक पुस्तकालय में आपूर्ति की गई एंट्रॉपी के बिट्स की संख्या का अनुमान नीचे दिखाई देता है; यह अभी तक विभिन्न पुस्तकालय आकारों के लिए खाता नहीं है, इसलिए प्राप्त वास्तविक एन्ट्रापी वास्तव में कुछ अधिक है। ध्यान दें कि हमलावरों को आमतौर पर केवल एक पुस्तकालय की आवश्यकता होती है; गणित कई पुस्तकालयों के साथ अधिक जटिल है, और नीचे भी दिखाया गया है। ध्यान दें कि केवल एक पुस्तकालय का उपयोग करने वाले हमलावर का मामला अधिक जटिल सूत्र का सरलीकरण है .

  • l (लोडेड पुस्तकालयों की संख्या)
  • β (हमलावर द्वारा प्रयुक्त पुस्तकालयों की संख्या)

के बड़े मूल्यों के लिए भी ये मान कम होते हैं l, सबसे महत्वपूर्ण बात यह है कि हमलावर आमतौर पर केवल सी मानक पुस्तकालय का उपयोग कर सकते हैं और इस प्रकार कोई भी अक्सर यह मान सकता है . हालाँकि, यहां तक ​​​​कि पुस्तकालयों की एक छोटी संख्या के लिए भी यहाँ एन्ट्रापी के कुछ अंश प्राप्त हुए हैं; इस प्रकार एंट्रॉपी के कुछ अतिरिक्त बिट्स प्राप्त करने के लिए VMA एड्रेस रैंडमाइजेशन के साथ लाइब्रेरी लोड ऑर्डर रैंडमाइजेशन को संयोजित करना संभावित रूप से दिलचस्प है। ध्यान दें कि एंट्रॉपी के ये अतिरिक्त बिट अन्य mmap() सेगमेंट पर लागू नहीं होंगे, केवल लाइब्रेरीज़।

एंट्रॉपी कम करना

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

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

स्टैक या हीप में एन्ट्रॉपी को भी कम किया जा सकता है। स्टैक को आमतौर पर 16 बाइट्स के साथ संरेखित किया जाना चाहिए, और इसलिए यह सबसे छोटा संभव यादृच्छिककरण अंतराल है; जबकि ढेर पृष्ठ-संरेखित होना चाहिए, आमतौर पर 4096 बाइट्स। हमले का प्रयास करते समय, इन अंतरालों के साथ डुप्लिकेट हमलों को संरेखित करना संभव है; एक एनओपी स्लाइड का उपयोग शेलकोड इंजेक्शन और स्ट्रिंग 'के साथ किया जा सकता है।/bin/sh' को ' से बदला जा सकता है////////bin/sh' सिस्टम पर लौटने का प्रयास करते समय स्लैश की मनमानी संख्या के लिए। हटाए गए बिट्स की संख्या बिल्कुल है के लिए n अंतराल पर हमला किया।

स्टैक या हीप में डेटा की मात्रा के कारण ऐसी कमी सीमित होती है। ढेर, उदाहरण के लिए, आम तौर पर सीमित है MB[8] और बहुत कम बढ़ता है; यह अधिकतम के लिए अनुमति देता है 19 bits, हालांकि एक अधिक रूढ़िवादी अनुमान लगभग 8–10 bits के संगत 4–16 KB[8]स्टैक स्टफिंग का। दूसरी ओर ढेर स्मृति आवंटक के व्यवहार से सीमित है; glibc के मामले में, 128 KB से ऊपर के आवंटन mmap का उपयोग करके बनाए जाते हैं, हमलावरों को 5 बिट्स की कमी तक सीमित करते हैं। यह भी एक सीमित कारक है जब क्रूर बल; हालांकि प्रदर्शन करने के लिए हमलों की संख्या को कम किया जा सकता है, हमलों का आकार इतना बढ़ जाता है कि कुछ परिस्थितियों में व्यवहार घुसपैठ का पता लगाने वाली प्रणालियों के लिए स्पष्ट हो सकता है।

सीमाएं

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

कार्यान्वयन

कई मुख्यधारा, सामान्य-उद्देश्य वाले ऑपरेटिंग सिस्टम ASLR को लागू करते हैं।

एंड्रॉइड

एंड्रॉइड (ऑपरेटिंग सिस्टम) 4.0 आइसक्रीम सैंडविच मेमोरी-मैनेजमेंट मुद्दों के कारण सिस्टम और थर्ड-पार्टी एप्लिकेशन को शोषण से बचाने में मदद करने के लिए एड्रेस स्पेस लेआउट रैंडमाइजेशन (एएसएलआर) प्रदान करता है। एंड्रॉइड 4.1 में स्थिति-स्वतंत्र निष्पादन योग्य समर्थन जोड़ा गया था।[9] एंड्रॉइड 5.0 ने गैर-पीआईई समर्थन को छोड़ दिया और सभी गतिशील रूप से जुड़े बायनेरिज़ को स्थिति से स्वतंत्र होने की आवश्यकता है।[10][11] लाइब्रेरी लोड ऑर्डरिंग रैंडमाइजेशन को 26 अक्टूबर 2015 को एंड्रॉइड ओपन-सोर्स प्रोजेक्ट में स्वीकार किया गया था।[7][non-primary source needed] और Android 7.0 रिलीज़ में शामिल किया गया था।

ड्रैगनफली बीएसडी

DragonFly BSD में OpenBSD के मॉडल पर आधारित ASLR का कार्यान्वयन है, जिसे 2010 में जोड़ा गया था।[12] यह डिफ़ॉल्ट रूप से बंद है, और sysctl vm.randomize_mmap को 1 पर सेट करके सक्षम किया जा सकता है।

फ्रीबीएसडी

ASLR के लिए समर्थन FreeBSD 13.0 में दिखाई दिया।[13][14] यह 13.2 के बाद से डिफ़ॉल्ट रूप से सक्षम है।[15]


आईओएस (आईफोन, आईपॉड टच, आईपैड)

Apple Inc. ने iOS 4.3 (मार्च 2011 में रिलीज़) में ASLR पेश किया।[16] KASLR को iOS 6 में पेश किया गया था।[17] यादृच्छिक कर्नेल आधार है 0x01000000 + ((1+0xRR) * 0x00200000), कहाँ 0xRR iBoot (द्वितीय-चरण आईओएस बूट लोडर) द्वारा उत्पन्न SHA1 (यादृच्छिक डेटा) से एक यादृच्छिक बाइट है।[18]


लिनक्स

लिनक्स कर्नेल ने जून 2005 में जारी कर्नेल संस्करण 2.6.12 के बाद से डिफ़ॉल्ट रूप से ASLR के एक कमजोर रूप को सक्षम किया।[19] Linux कर्नेल के PaX और Exec शील्ड पैचसेट अधिक पूर्ण कार्यान्वयन प्रदान करते हैं। Linux के लिए Exec Shield पैच 16 बाइट्स की अवधि में 19 बिट्स स्टैक एंट्रॉपी की आपूर्ति करता है, और 4096 बाइट्स के 1 पृष्ठ की अवधि पर mmap बेस रेंडमाइज़ेशन के 8 बिट्स प्रदान करता है। यह स्टैक बेस को 8 एमबी चौड़े क्षेत्र में रखता है जिसमें 524,288 संभावित स्थान होते हैं, और एमएमएपी आधार 1 एमबी चौड़े क्षेत्र में होता है जिसमें 256 संभावित स्थान होते हैं।

स्थिति-स्वतंत्र निष्पादन योग्य (PIE) मुख्य निष्पादन योग्य बाइनरी के लिए एक यादृच्छिक आधार पता लागू करता है और 2003 से मौजूद है। यह मुख्य निष्पादन योग्य को समान पता यादृच्छिकता प्रदान करता है जैसा कि साझा पुस्तकालयों के लिए उपयोग किया जा रहा है। पीआईई सुविधा का उपयोग एक ही निष्पादन योग्य के लिए प्रीलिंक सुविधा के साथ नहीं किया जा सकता है। प्रीलिंक टूल रनटाइम के बजाय प्रीलिंक समय पर रैंडमाइजेशन को लागू करता है, क्योंकि डिजाइन के अनुसार प्रीलिंक का उद्देश्य डायनामिक लिंकर से पहले रिलोकेटिंग लाइब्रेरी को हैंडल करना है, जो प्रोग्राम के कई रन के लिए एक बार रिलोकेशन की अनुमति देता है। नतीजतन, वास्तविक पता स्थान यादृच्छिककरण प्रीलिंकिंग के उद्देश्य को विफल कर देगा।

एक विशिष्ट प्रक्रिया के लिए यादृच्छिककरण को इसके निष्पादन डोमेन को बदलकर अक्षम किया जा सकता है personality(2).[20]


कर्नेल एड्रेस स्पेस लेआउट रैंडमाइजेशन

कर्नेल एड्रेस स्पेस लेआउट रेंडमाइजेशन (केएएसएलआर) लिनक्स कर्नेल छवि के लिए एड्रेस स्पेस रैंडमाइजेशन को यादृच्छिक रूप से सक्षम करता है जहां बूट समय पर कर्नेल कोड रखा जाता है।[21] केएएसएलआर को 30 मार्च 2014 को जारी कर्नेल संस्करण 3.14 में लिनक्स कर्नेल मेनलाइन में विलय कर दिया गया था।[22] संकलित होने पर, इसे निर्दिष्ट करके बूट समय पर अक्षम किया जा सकता है nokaslr कर्नेल के बूट पैरामीटर में से एक के रूप में।[23] x86 प्रोसेसर में कई साइड-चैनल हमले हैं जो कर्नेल पतों को लीक कर सकते हैं।[24][25] 2017 के अंत में, इन हमलों को हराने के लिए कर्नेल पेज-टेबल अलगाव (KPTI उर्फ ​​KAISER) विकसित किया गया था।[26][27] हालाँकि, यह विधि शाखा भविष्यवक्ता संरचनाओं में टकराव का उपयोग करने वाले साइड-चैनल हमलों से रक्षा नहीं कर सकती है।[28]

As of 2021, महीन दानेदार कर्नेल एड्रेस स्पेस लेआउट रेंडमाइजेशन (या फंक्शन ग्रेन्युलर केएएसएलआर, एफजीकेएएसएलआर) केएएसएलआर का एक नियोजित विस्तार है जिसे फंक्शन लेवल तक रैंडमाइज किया जाता है।[29]


माइक्रोसॉफ्ट विंडोज

माइक्रोसॉफ्ट के विंडोज विस्टा (जनवरी 2007 को जारी) और बाद में एएसएलआर को केवल एक्जीक्यूटेबल्स और डायनेमिक लिंक लाइब्रेरी के लिए सक्षम किया गया है जो विशेष रूप से एएसएलआर-सक्षम होने के लिए जुड़े हुए हैं।[30] संगतता के लिए, यह अन्य अनुप्रयोगों के लिए डिफ़ॉल्ट रूप से सक्षम नहीं है। विशिष्ट रूप से, केवल पुराना सॉफ़्टवेयर असंगत होता है और रजिस्ट्री प्रविष्टि को संपादित करके ASLR को पूरी तरह से सक्षम किया जा सकता है HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages,[31] या Microsoft के एन्हांस्ड मिटिगेशन एक्सपीरियंस टूलकिट को स्थापित करके।

डायनेमिक मेमोरी आवंटन, कॉल स्टैक, प्रोसेस एनवायरनमेंट ब्लॉक और Win32 थ्रेड सूचना ब्लॉक के स्थान भी यादृच्छिक हैं। सिमेंटेक के एक सुरक्षा श्वेतपत्र ने नोट किया कि 32-बिट विंडोज विस्टा में एएसएलआर अपेक्षित रूप से मजबूत नहीं हो सकता है, और माइक्रोसॉफ्ट ने इसके कार्यान्वयन में कमजोरी को स्वीकार किया है।[32] होस्ट-आधारित घुसपैठ रोकथाम प्रणाली जैसे WehnTrust[33] और ओजोन[34] Windows XP और Windows Server 2003 ऑपरेटिंग सिस्टम के लिए ASLR भी प्रदान करता है। WehnTrust ओपन-सोर्स है।[35] ओजोन के कार्यान्वयन का पूर्ण विवरण उपलब्ध नहीं है।[36] यह फरवरी 2012 में नोट किया गया था[37] कि विंडोज 8 से पहले के 32-बिट विंडोज सिस्टम पर ASLR कम मेमोरी स्थितियों में इसकी प्रभावशीलता को कम कर सकता है। उसी शोध में लिनक्स पर भी इसी तरह का प्रभाव प्राप्त किया गया था। परीक्षण कोड ने मैक ओएस एक्स 10.7.3 सिस्टम को कर्नेल घबराहट का कारण बना दिया, इसलिए इस परिदृश्य में इसके एएसएलआर व्यवहार के बारे में अस्पष्ट छोड़ दिया गया।

नेटबीएसडी

यूजरलैंड में ASLR के लिए समर्थन NetBSD 5.0 ​​(अप्रैल 2009 में जारी) में दिखाई दिया,[38] और अप्रैल 2016 में NetBSD-current में डिफ़ॉल्ट रूप से सक्षम किया गया था।[39] amd64 पर कर्नेल ASLR सपोर्ट को अक्टूबर 2017 में NetBSD-current में जोड़ा गया, जिससे NetBSD KASLR को सपोर्ट करने वाला पहला BSD सिस्टम बन गया।[40]


ओपनबीएसडी

2003 में, OpenBSD ASLR के एक मजबूत रूप का समर्थन करने और डिफ़ॉल्ट रूप से इसे सक्रिय करने वाला पहला मुख्यधारा का ऑपरेटिंग सिस्टम बन गया।[3] ओपनबीएसडी ने 2008 में अपना एएसएलआर समर्थन पूरा किया जब उसने स्थिति स्वतंत्र निष्पादन योग्य बायनेरिज़ के लिए समर्थन जोड़ा।[41] OpenBSD 4.4 का C डायनेमिक मेमोरी आवंटन #OpenBSD.27s malloc|malloc(3) को ASLR और OpenBSD के हिस्से के रूप में कार्यान्वित गैप पेज सुविधाओं का लाभ उठाकर सुरक्षा में सुधार करने के लिए डिज़ाइन किया गया था। mmap सिस्टम कॉल, और उपयोग-बाद-मुक्त बग का पता लगाने के लिए।[42] 2013 में रिलीज़ किया गया, OpenBSD 5.3 पहला मेनस्ट्रीम ऑपरेटिंग सिस्टम था, जो कई कंप्यूटर आर्किटेक्चर पर डिफ़ॉल्ट रूप से स्थिति-स्वतंत्र निष्पादन योग्य को सक्षम करता था, और OpenBSD 5.7 डिफ़ॉल्ट रूप से स्थिति-स्वतंत्र स्थैतिक बायनेरिज़ (स्टेटिक-PIE) को सक्रिय करता था।[41]


मैकोज़

Mac OS X Leopard 10.5 (अक्टूबर 2007 में जारी) में, Apple ने सिस्टम लाइब्रेरी के लिए रेंडमाइजेशन की शुरुआत की।[43] मैक ओएस एक्स लायन 10.7 (जुलाई 2011 को जारी) में, ऐप्पल ने सभी अनुप्रयोगों को कवर करने के लिए अपने कार्यान्वयन का विस्तार किया, जिसमें कहा गया कि सभी अनुप्रयोगों के लिए एड्रेस स्पेस लेआउट रेंडमाइजेशन (एएसएलआर) में सुधार किया गया है। यह अब 32-बिट ऐप्स के लिए उपलब्ध है (जैसे हीप मेमोरी प्रोटेक्शन हैं), 64-बिट और 32-बिट एप्लिकेशन को हमले के लिए अधिक प्रतिरोधी बनाते हैं।[44] OS X माउंटेन लायन 10.8 (जुलाई 2012 को जारी) और बाद में, कर्नेल के साथ-साथ लोड करने योग्य कर्नेल मॉड्यूल और ज़ोन सहित पूरे सिस्टम को सिस्टम बूट के दौरान बेतरतीब ढंग से स्थानांतरित किया जाता है।[45]


सोलारिस

ASLR Solaris (ऑपरेटिंग सिस्टम) में Solaris 11.1 (अक्टूबर 2012 को जारी) के साथ शुरू किया गया है। Solaris 11.1 में ASLR को सिस्टम-वाइड, प्रति ज़ोन, या प्रति-बाइनरी आधार पर सेट किया जा सकता है।[46]


शोषण

ASLR सुरक्षा को बायपास करने के लिए शाखा लक्ष्य बफर का उपयोग करने वाले एक साइड-चैनल हमले का प्रदर्शन किया गया।[28]2017 में, ASLR⊕Cache नाम के एक हमले का प्रदर्शन किया गया था जो जावास्क्रिप्ट का उपयोग करके वेब ब्राउज़र में ASLR को हरा सकता था।[47]


यह भी देखें

संदर्भ

  1. Marco-Gisbert, Hector; Ripoll Ripoll, Ismael (2019-07-22). "एड्रेस स्पेस लेआउट रेंडमाइजेशन नेक्स्ट जेनरेशन". Applied Sciences (in English). 9 (14): 2928. doi:10.3390/app9142928. ISSN 2076-3417.
  2. Brad Spengler (October 2003). "PaX: The Guaranteed End of Arbitrary Code Execution" (PDF). grsecurity.net. Slides 22 through 35. Retrieved 20 August 2015.
  3. 3.0 3.1 Theo De Raadt (2005). "Exploit Mitigation Techniques (updated to include random malloc and mmap) at OpenCON 2005". Retrieved 26 August 2009.
  4. {{cite web|title=ओपनबीएसडी नवाचार|url=https://www.openbsd.org/innovations.html%7Cpublisher=The OpenBSD project|access-date=12 September 2016}
  5. Marco-Gisbert, Hector; Ripoll, Ismael (20 November 2014). "On the Effectiveness of Full-ASLR on 64-bit Linux" (PDF).
  6. Shacham, H.; Page, M.; Pfaff, B.; Goh, E.J.; Modadugu, N.; Boneh, D (2004). एड्रेस-स्पेस रेंडमाइजेशन की प्रभावशीलता पर. 11th ACM conference on Computer and communications security. pp. 298–307.
  7. 7.0 7.1 "लाइब्रेरी लोड ऑर्डर रैंडमाइजेशन लागू करें". Retrieved 26 June 2017.
  8. 8.0 8.1 Transistorized memory, such as RAM, ROM, flash and cache sizes as well as file sizes are specified using binary meanings for K (10241), M (10242), G (10243), etc.
  9. "Android सुरक्षा". Android Developers. Retrieved 7 July 2012.
  10. "oss-सुरक्षा". Retrieved 4 October 2015.
  11. ""गैर-पीआईई निष्पादन योग्य के लिए समर्थन सक्षम करें" वापस करें". Retrieved 26 June 2017.
  12. mmap - add mmap offset randomization, DragonFly Gitweb, 25 November 2010.
  13. "एड्रेस स्पेस लेआउट रेंडमाइजेशन (एएसएलआर) लागू करें". Retrieved 10 February 2019.
  14. "एएसएलआर - फ्रीबीएसडी विकी". Retrieved 17 May 2021.
  15. "FreeBSD 13.2-RELEASE Release Notes".
  16. Pwn2Own day 2: iPhone, BlackBerry beaten; Chrome, Firefox no-shows, Ars Technica, 11 March 2011
  17. Stefan Esser (7 March 2013). "iOS 6 Exploitation 280 Days Later". Slide 19, "iOS 6 introduces KASLR".
  18. Tarjei Mandt. "Attacking the iOS Kernel: A Look at 'evasi0n'" (PDF).
  19. Dang, Alan; Miller, Charlie (25 March 2009). "एनएक्स बिट और एएसएलआर". Tom's Hardware.
  20. "personality - set the process execution domain".
  21. Jake Edge (9 October 2013). "कर्नेल एड्रेस स्पेस लेआउट रैंडमाइजेशन". LWN.net. Retrieved 2 April 2014.
  22. "Linux kernel 3.14, Section 1.7. Kernel address space randomization". kernelnewbies.org. 30 March 2014. Retrieved 2 April 2014.
  23. "kernel/git/torvalds/linux.git: x86, kaslr: Return location from decompress_kernel (Linux kernel source tree)". kernel.org. 13 October 2013. Retrieved 2 April 2014.
  24. KASLR is Dead: Long Live KASLR (PDF). Engineering Secure Software and Systems 2017. 24 June 2017.
  25. Jang, Yeongjin; Lee, Sangho; Kim, Taesoo (2016). "इंटेल TSX के साथ कर्नेल एड्रेस स्पेस लेआउट रेंडमाइजेशन को तोड़ना" (PDF). 2016 ACM SIGSAC Conference on Computer and Communications Security. CCS '16. New York: Association for Computing Machinery: 380–392. doi:10.1145/2976749.2978321. ISBN 9781450341394. S2CID 6293725.
  26. Corbet, Jonathan (20 December 2017). "कर्नेल पेज-टेबल अलगाव की वर्तमान स्थिति". Linux Weekly News.
  27. Corbet, Jonathan (15 November 2017). "KAISER: hiding the kernel from user space". Linux Weekly News.
  28. 28.0 28.1 Evtyushkin, Dmitry; Ponomarev, Dmitry; Abu-Ghazaleh, Nael (2016). Jump over ASLR: Attacking branch predictors to bypass ASLR (PDF). 2016 49th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO). pp. 1–13. doi:10.1109/MICRO.2016.7783743. ISBN 978-1-5090-3508-3. S2CID 3801142.
  29. "Linux 5.16 Has Early Preparations For Supporting FGKASLR - Phoronix". www.phoronix.com.
  30. "विंडोज आईएसवी सॉफ्टवेयर सुरक्षा सुरक्षा". Msdn.microsoft.com. Retrieved 10 April 2012.
  31. Windows Internals: Including Windows Server 2008 and Windows Vista, Fifth Edition (PRO-Developer) ISBN 978-0-7356-2530-3
  32. Ollie Whitehouse (February 2007). "विंडोज विस्टा पर एड्रेस स्पेस लेआउट रेंडमाइजेशन का विश्लेषण" (PDF). Archived from the original (PDF) on 15 July 2019. Retrieved 18 January 2009.
  33. "WehnTrust". Codeplex.com. Retrieved 10 April 2012.
  34. "सुरक्षा आर्किटेक्ट 'ओजोन". Security Architects. Retrieved 10 April 2012.
  35. "WehnTrust सोर्स कोड". Archived from the original on 2013-11-28. Retrieved 15 November 2013.
  36. "विंडोज सिस्टम के लिए एड्रेस-स्पेस रेंडमाइजेशन" (PDF). Retrieved 10 April 2012.
  37. Ollie (2 March 2012). "Research, Develop, Assess, Consult & Educate | Recx: A Partial Technique Against ASLR – Multiple O/Ss". Recxltd.blogspot.co.uk. Retrieved 10 April 2012.
  38. "Announcing NetBSD 5.0". Retrieved 25 April 2016.
  39. Christos Zoulas (2016). "PIE binaries and ASLR are on in the default build for amd64". Retrieved 25 April 2016.
  40. "Kernel ASLR on amd64". 2017. Retrieved 16 October 2017.
  41. 41.0 41.1 Kurt Miller (2008). "OpenBSD की स्थिति स्वतंत्र निष्पादन योग्य (PIE) कार्यान्वयन". Archived from the original on 12 June 2011. Retrieved 22 July 2011.
  42. "libc/stdlib/malloc.c". BSD Cross Reference, OpenBSD src/lib/.
  43. "Mac OS X – Security – Keeps safe from viruses and malware". Apple. Archived from the original on 25 May 2011. Retrieved 10 April 2012.
  44. "सुरक्षा". Apple Inc. Archived from the original on 6 June 2011. Retrieved 6 June 2011.
  45. "ओएस एक्स माउंटेन लायन कोर टेक्नोलॉजीज अवलोकन" (PDF). June 2012. Retrieved 25 July 2012.
  46. Controlling Access to Machine Resources, Oracle Information Library, 26 October 2012.
  47. AnC VUSec, 2017


बाहरी संबंध