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

From Vigyanwiki
No edit summary
No edit summary
Line 4: Line 4:


== इतिहास ==
== इतिहास ==
लिनक्स [[PaX|पैक्स]] प्रोजेक्ट ने सबसे पहले "एएसएलआर " शब्द गढ़ा, और जुलाई 2001 में लिनक्स कर्नेल के लिए एक पैच के रूप में एएसएलआर का पहला डिज़ाइन और कार्यान्वयन प्रकाशित किया। इसे एक पूर्ण कार्यान्वयन के रूप में देखा जाता है, जो अक्टूबर 2002 से कर्नेल स्टैक रेंडमाइजेशन के लिए एक पैच भी प्रदान करता है।
लिनक्स [[PaX|पैक्स]] प्रोजेक्ट ने सबसे पहले "एएसएलआर " शब्द गढ़ा, और जुलाई 2001 में लिनक्स कर्नेल के लिए एक पैच के रूप में एएसएलआर का पहला डिज़ाइन और कार्यान्वयन प्रकाशित किया। इसे एक पूर्ण कार्यान्वयन के रूप में देखा जाता है, जो अक्टूबर 2002 से कर्नेल स्टैक रेंडमाइजेशन के लिए एक पैच भी प्रदान करता है।


डिफ़ॉल्ट रूप से एएसएलआर को सहायता करने वाला पहला मुख्यधारा संचालन प्रणाली 2003 में ओपन बीएसडी वर्जन 3.4 था,,<ref name="OpenBSD-firstASLR" /><ref name="OpenBSD_Innovations-ASLR-PIE"><nowiki>{{cite web|title=ओपनबीएसडी नवाचार|url=</nowiki>https://www.openbsd.org/innovations.html|publisher=The OpenBSD project|access-date=12 September 2016}</ref> जिसके बाद 2005 में लिनक्स आया।
डिफ़ॉल्ट रूप से एएसएलआर को सहायता करने वाला पहला मुख्यधारा संचालन प्रणाली 2003 में ओपन बीएसडी वर्जन 3.4 था,,<ref name="OpenBSD-firstASLR" /><ref name="OpenBSD_Innovations-ASLR-PIE"><nowiki>{{cite web|title=ओपनबीएसडी नवाचार|url=</nowiki>https://www.openbsd.org/innovations.html|publisher=The OpenBSD project|access-date=12 September 2016}</ref> जिसके बाद 2005 में लिनक्स आया।


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


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


रैंडमाइजेशन को हराने के लिए, हमलावरों को उन सभी क्षेत्रों की स्थिति का सफलतापूर्वक अनुमान लगाना चाहिए जिन पर वे हमला करना चाहते हैं। स्टैक और हीप जैसे डेटा क्षेत्रों के लिए, जहां कस्टम कोड या उपयोगी डेटा लोड किया जा सकता है, कोड या डेटा की बार-बार कॉपी के लिए [[एनओपी स्लाइड]] का उपयोग करके एक से अधिक राज्यों पर हमला किया जा सकता है। यह एक हमले को सफल होने की अनुमति देता है यदि क्षेत्र को मुट्ठी भर मानो में से एक में यादृच्छिक किया जाता है। इसके विपरीत, पुस्तकालय आधार और मुख्य निष्पादन योग्य जैसे कोड क्षेत्रों को स्पष्ट रूप से खोजा जाना चाहिए। अधिकांशतः इन क्षेत्रों को मिलाया जाता है, उदाहरण के लिए [[स्टैक फ्रेम]] को स्टैक पर इंजेक्ट किया जाता है और एक पुस्तकालय में लौटाया जाता है।
रैंडमाइजेशन को हराने के लिए, हमलावरों को उन सभी क्षेत्रों की स्थिति का सफलतापूर्वक अनुमान लगाना चाहिए जिन पर वे हमला करना चाहते हैं। स्टैक और हीप जैसे डेटा क्षेत्रों के लिए, जहां कस्टम कोड या उपयोगी डेटा लोड किया जा सकता है, कोड या डेटा की बार-बार कॉपी के लिए [[एनओपी स्लाइड]] का उपयोग करके एक से अधिक राज्यों पर हमला किया जा सकता है। यह एक हमले को सफल होने की अनुमति देता है यदि क्षेत्र को मुट्ठी भर मानो में से एक में यादृच्छिक किया जाता है। इसके विपरीत, पुस्तकालय आधार और मुख्य निष्पादन योग्य जैसे कोड क्षेत्रों को स्पष्ट रूप से खोजा जाना चाहिए। अधिकांशतः इन क्षेत्रों को मिलाया जाता है, उदाहरण के लिए [[स्टैक फ्रेम]] को स्टैक पर इंजेक्ट किया जाता है और एक पुस्तकालय में लौटाया जाता है।
Line 35: Line 35:
* <math>b \left ( \alpha\, \right ) = \frac{\alpha\,}{{2^N}} \,\text{ if } 0 \le \, \alpha\, \le \, {2^N}</math> (समान पता स्थान के साथ कार्यक्रम की प्रतियों पर व्यवस्थित क्रूर बल)
* <math>b \left ( \alpha\, \right ) = \frac{\alpha\,}{{2^N}} \,\text{ if } 0 \le \, \alpha\, \le \, {2^N}</math> (समान पता स्थान के साथ कार्यक्रम की प्रतियों पर व्यवस्थित क्रूर बल)


कई प्रणालियों में, <math>2^N</math> हजारों या लाखों में हो सकता है; पर {{as of | 2009 | alt = आधुनिक}} [[64-बिट]] प्रणाली , ये संख्याएं सामान्यतः कम से कम लाखों तक पहुंचती हैं, हेक्टर मार्को-गिस्बर्ट और इस्माइल रिपोल ने 2014 में दिखाया कि कुछ परिस्थितियों में एक सेकंड से भी कम समय में 64-बिट प्रणाली में एएसएलआर को कैसे बायपास किया जाए।<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 = आधुनिक}} [[64-बिट]] प्रणाली , ये संख्याएं सामान्यतः कम से कम लाखों तक पहुंचती हैं, हेक्टर मार्को-गिस्बर्ट और इस्माइल रिपोल ने 2014 में दिखाया कि कुछ परिस्थितियों में एक सेकंड से भी कम समय में 64-बिट प्रणाली में एएसएलआर को कैसे बायपास किया जाए।<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> और संभवतः अन्य प्रणालियाँ, पुस्तकालय लोड ऑर्डर रेंडमाइजेशन को प्रयुक्त करें, एएसएलआर का एक रूप जो उस ऑर्डर को रैंडमाइज करता है जिसमें पुस्तकालय लोड की जाती हैं। यह बहुत कम एन्ट्रॉपी प्रदान करता है। प्रति आवश्यक पुस्तकालय में आपूर्ति की गई एंट्रॉपी के बिट्स की संख्या का अनुमान नीचे दिखाई देता है; यह अभी तक विभिन्न पुस्तकालय आकारों के लिए खाता नहीं है, इसलिए प्राप्त वास्तविक एन्ट्रापी वास्तव में कुछ अधिक है। ध्यान दें कि हमलावरों को सामान्यतः केवल एक पुस्तकालय की आवश्यकता होती है; गणित कई पुस्तकालयों के साथ अधिक जटिल है, और नीचे भी दिखाया गया है। ध्यान दें कि केवल एक पुस्तकालय का उपयोग करने वाले हमलावर की स्थति <math>l = 1</math> अधिक जटिल सूत्र का सरलीकरण है .
एंड्रॉयड,<ref name=android-llor>{{cite web|title=लाइब्रेरी लोड ऑर्डर रैंडमाइजेशन लागू करें|url=https://android-review.googlesource.com/178130 |access-date=26 June 2017}}</ref> और संभवतः अन्य प्रणालियाँ, पुस्तकालय लोड ऑर्डर रेंडमाइजेशन को प्रयुक्त करें, एएसएलआर का एक रूप जो उस ऑर्डर को रैंडमाइज करता है जिसमें पुस्तकालय लोड की जाती हैं। यह बहुत कम एन्ट्रॉपी प्रदान करता है। प्रति आवश्यक पुस्तकालय में आपूर्ति की गई एंट्रॉपी के बिट्स की संख्या का अनुमान नीचे दिखाई देता है; यह अभी तक विभिन्न पुस्तकालय आकारों के लिए खाता नहीं है, इसलिए प्राप्त वास्तविक एन्ट्रापी वास्तव में कुछ अधिक है। ध्यान दें कि हमलावरों को सामान्यतः केवल एक पुस्तकालय की आवश्यकता होती है; गणित कई पुस्तकालयों के साथ अधिक जटिल है, और नीचे भी दिखाया गया है। ध्यान दें कि केवल एक पुस्तकालय का उपयोग करने वाले हमलावर की स्थति <math>l = 1</math> अधिक जटिल सूत्र का सरलीकरण है .


* {{mvar|l}} (लोडेड पुस्तकालयों की संख्या)
* {{mvar|l}} (लोडेड पुस्तकालयों की संख्या)
Line 46: Line 46:
\end{cases}
\end{cases}
</math>
</math>
ये मान {{mvar|l}} के बड़े मानों के लिए भी कम होते हैं, सबसे महत्वपूर्ण बात यह है कि हमलावर सामान्यतः केवल C मानक पुस्तकालय का उपयोग कर सकते हैं और इस प्रकार कोई भी अक्सर यह मान सकता है कि <math>\beta\, = 1</math> चूंकि , यहां तक ​​कि पुस्तकालयों की एक छोटी संख्या के लिए भी यहाँ एन्ट्रापी के कुछ अंश प्राप्त हुए हैं; इस प्रकार एंट्रॉपी के कुछ अतिरिक्त बिट्स प्राप्त करने के लिए वीएमए एड्रेस रैंडमाइजेशन के साथ पुस्तकालय लोड ऑर्डर रैंडमाइजेशन को संयोजित करना संभावित रूप से रौचक है। ध्यान दें कि एंट्रॉपी के ये अतिरिक्त बिट अन्य mmap() सेगमेंट पर प्रयुक्त नहीं होंगे, केवल पुस्तकालय है ।
ये मान {{mvar|l}} के बड़े मानों के लिए भी कम होते हैं, सबसे महत्वपूर्ण बात यह है कि हमलावर सामान्यतः केवल C मानक पुस्तकालय का उपयोग कर सकते हैं और इस प्रकार कोई भी अक्सर यह मान सकता है कि <math>\beta\, = 1</math> चूंकि , यहां तक ​​कि पुस्तकालयों की एक छोटी संख्या के लिए भी यहाँ एन्ट्रापी के कुछ अंश प्राप्त हुए हैं; इस प्रकार एंट्रॉपी के कुछ अतिरिक्त बिट्स प्राप्त करने के लिए वीएमए एड्रेस रैंडमाइजेशन के साथ पुस्तकालय लोड ऑर्डर रैंडमाइजेशन को संयोजित करना संभावित रूप से रौचक है। ध्यान दें कि एंट्रॉपी के ये अतिरिक्त बिट अन्य mmap() सेगमेंट पर प्रयुक्त नहीं होंगे, केवल पुस्तकालय है ।


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


[[प्रारूप स्ट्रिंग भेद्यता]] का उपयोग करके मेमोरी लेआउट के बारे में जानकारी लीक करना संभव है। स्वरूप स्ट्रिंग फ़ंक्शन जैसे कि [[ 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}} अंतराल पर हमला किया है ।


स्टैक या हीप में डेटा की मात्रा के कारण ऐसी कमी सीमित होती है। ढेर, उदाहरण के लिए, सामान्यतः सीमित है {{val|8|u=[[megabyte|MB]]}}<ref name="Prefix2">{{BDprefix|p=b}}</ref> और बहुत कम बढ़ता है; यह अधिकतम के लिए अनुमति देता है {{val|19|u=bits}}, चूंकि एक अधिक रूढ़िवादी अनुमान लगभग 8–{{val|10|u=bits}} के संगत 4–{{val|16|u=[[kilobyte|KB]]}}<ref name="Prefix2"/> स्टैक स्टफिंग का दूसरी ओर ढेर स्मृति आवंटक के व्यवहार से सीमित है; [[glibc]] के स्थिति में, 128 KB से ऊपर के आवंटन [[mmap]] का उपयोग करके बनाए जाते हैं, हमलावरों को 5 बिट्स की कमी तक सीमित करते हैं। यह भी एक सीमित कारक है जब क्रूर बल; चूंकि प्रदर्शन करने के लिए हमलों की संख्या को कम किया जा सकता है, हमलों का आकार इतना बढ़ जाता है कि कुछ परिस्थितियों में व्यवहार अतिक्रमण का पता लगाने वाली प्रणालियों के लिए स्पष्ट हो सकता है।
स्टैक या हीप में डेटा की मात्रा के कारण ऐसी कमी सीमित होती है। ढेर, उदाहरण के लिए, सामान्यतः सीमित है {{val|8|u=[[megabyte|MB]]}}<ref name="Prefix2">{{BDprefix|p=b}}</ref> और बहुत कम बढ़ता है; यह अधिकतम के लिए अनुमति देता है {{val|19|u=bits}}, चूंकि एक अधिक रूढ़िवादी अनुमान लगभग 8–{{val|10|u=bits}} के संगत 4–{{val|16|u=[[kilobyte|KB]]}}<ref name="Prefix2"/> स्टैक स्टफिंग का दूसरी ओर ढेर स्मृति आवंटक के व्यवहार से सीमित है; [[glibc]] के स्थिति में, 128 KB से ऊपर के आवंटन [[mmap]] का उपयोग करके बनाए जाते हैं, हमलावरों को 5 बिट्स की कमी तक सीमित करते हैं। यह भी एक सीमित कारक है जब क्रूर बल; चूंकि प्रदर्शन करने के लिए हमलों की संख्या को कम किया जा सकता है, हमलों का आकार इतना बढ़ जाता है कि कुछ परिस्थितियों में व्यवहार अतिक्रमण का पता लगाने वाली प्रणालियों के लिए स्पष्ट हो सकता है।


=== सीमाएं ===
=== सीमाएं ===
Line 62: Line 62:


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


=== एंड्रॉइड ===
=== एंड्रॉइड ===
एंड्रॉइड (ऑपरेटिंग प्रणाली ) 4.0 आइसक्रीम सैंडविच मेमोरी-मैनेजमेंट उद्देश्य के कारण प्रणाली और थर्ड-पार्टी एप्लिकेशन को शोषण से बचाने में सहायता करने के लिए एड्रेस स्पेस लेआउट रैंडमाइजेशन (एएसएलआर) प्रदान करता है। एंड्रॉइड 4.1 में स्थिति-स्वतंत्र निष्पादन योग्य समर्थन जोड़ा गया था।<ref>{{cite web|title=Android सुरक्षा|url=http://source.android.com/tech/security/index.html#memory-management-security-enhancements|publisher=Android Developers|access-date=7 July 2012}}</ref> एंड्रॉइड 5.0 ने गैर-पीआईई समर्थन को छोड़ दिया और सभी गतिशील रूप से जुड़े बायनेरिज़ को स्थिति से स्वतंत्र होने की आवश्यकता है।<ref>{{cite web|title=oss-सुरक्षा|url=http://www.openwall.com/lists/oss-सुरक्षा/2015/03/13/1|access-date=4 October 2015}}</ref><ref>{{cite web|title="गैर-पीआईई निष्पादन योग्य के लिए समर्थन सक्षम करें" वापस करें|url=https://android-review.googlesource.com/100254 |access-date=26 June 2017}}</ref> पुस्तकालय लोड ऑर्डरिंग रैंडमाइजेशन को 26 अक्टूबर 2015 को एंड्रॉइड ओपन-सोर्स प्रोजेक्ट में स्वीकार किया गया था।<ref name=android-llor />{{Primary source inline|date=March 2016}} और Android 7.0 रिलीज़ में सम्मिलित किया गया था।
एंड्रॉइड (ऑपरेटिंग प्रणाली ) 4.0 आइसक्रीम सैंडविच मेमोरी-मैनेजमेंट उद्देश्य के कारण प्रणाली और थर्ड-पार्टी एप्लिकेशन को शोषण से बचाने में सहायता करने के लिए एड्रेस स्पेस लेआउट रैंडमाइजेशन (एएसएलआर) प्रदान करता है। एंड्रॉइड 4.1 में स्थिति-स्वतंत्र निष्पादन योग्य समर्थन जोड़ा गया था।<ref>{{cite web|title=Android सुरक्षा|url=http://source.android.com/tech/security/index.html#memory-management-security-enhancements|publisher=Android Developers|access-date=7 July 2012}}</ref> एंड्रॉइड 5.0 ने गैर-पीआईई समर्थन को छोड़ दिया और सभी गतिशील रूप से जुड़े बायनेरिज़ को स्थिति से स्वतंत्र होने की आवश्यकता है।<ref>{{cite web|title=oss-सुरक्षा|url=http://www.openwall.com/lists/oss-सुरक्षा/2015/03/13/1|access-date=4 October 2015}}</ref><ref>{{cite web|title="गैर-पीआईई निष्पादन योग्य के लिए समर्थन सक्षम करें" वापस करें|url=https://android-review.googlesource.com/100254 |access-date=26 June 2017}}</ref> पुस्तकालय लोड ऑर्डरिंग रैंडमाइजेशन को 26 अक्टूबर 2015 को एंड्रॉइड ओपन-सोर्स प्रोजेक्ट में स्वीकार किया गया था।<ref name=android-llor /> और Android 7.0 रिलीज़ में सम्मिलित किया गया था।


=== [[ड्रैगनफली बीएसडी]] ===
=== [[ड्रैगनफली बीएसडी]] ===
DragonFly BSD में ओपन बीएसडी के मॉडल पर आधारित एएसएलआर का कार्यान्वयन है, जिसे 2010 में जोड़ा गया था।<ref>[http://gitweb.dragonflybsd.org/dragonfly.git/commit/911e30e25724984efec56accba87f739cfca2937 mmap - add mmap offset randomization], DragonFly Gitweb, 25 November 2010.</ref> यह डिफ़ॉल्ट रूप से बंद है, और sysctl vm.randomize_mmap को 1 पर सेट करके सक्षम किया जा सकता है।
DragonFly BSD में ओपन बीएसडी के मॉडल पर आधारित एएसएलआर का कार्यान्वयन है, जिसे 2010 में जोड़ा गया था।<ref>[http://gitweb.dragonflybsd.org/dragonfly.git/commit/911e30e25724984efec56accba87f739cfca2937 mmap - add mmap offset randomization], DragonFly Gitweb, 25 November 2010.</ref> यह डिफ़ॉल्ट रूप से बंद है, और sysctl vm.randomize_mmap को 1 पर सेट करके सक्षम किया जा सकता है।


=== फ्रीबीएसडी ===
=== फ्रीबीएसडी ===
Line 82: Line 82:
[[लिनक्स कर्नेल]] ने जून 2005 में जारी कर्नेल संस्करण 2.6.12 के बाद से डिफ़ॉल्ट रूप से एएसएलआर के एक अशक्त रूप को सक्षम किया।<ref>{{cite web |first1=Alan |last1=Dang |first2=<!-- interviewee -->Charlie |last2=Miller |url=http://www.tomshardware.com/reviews/pwn2own-mac-hack,2254-4.html |title=एनएक्स बिट और एएसएलआर|website=[[Tom's Hardware]] |date=25 March 2009}}</ref> [[Linux]] कर्नेल के PaX और Exec शील्ड पैचसेट अधिक पूर्ण कार्यान्वयन प्रदान करते हैं। Linux के लिए [[Exec Shield]] पैच 16 बाइट्स की अवधि में 19 बिट्स स्टैक एंट्रॉपी की आपूर्ति करता है, और 4096 बाइट्स के 1 पृष्ठ की अवधि पर mmap बेस रेंडमाइज़ेशन के 8 बिट्स प्रदान करता है। यह स्टैक बेस को 8 एमबी चौड़े क्षेत्र में रखता है जिसमें 524,288 संभावित स्थान होते हैं, और एमएमएपी आधार 1 एमबी चौड़े क्षेत्र में होता है जिसमें 256 संभावित स्थान होते हैं।
[[लिनक्स कर्नेल]] ने जून 2005 में जारी कर्नेल संस्करण 2.6.12 के बाद से डिफ़ॉल्ट रूप से एएसएलआर के एक अशक्त रूप को सक्षम किया।<ref>{{cite web |first1=Alan |last1=Dang |first2=<!-- interviewee -->Charlie |last2=Miller |url=http://www.tomshardware.com/reviews/pwn2own-mac-hack,2254-4.html |title=एनएक्स बिट और एएसएलआर|website=[[Tom's Hardware]] |date=25 March 2009}}</ref> [[Linux]] कर्नेल के PaX और Exec शील्ड पैचसेट अधिक पूर्ण कार्यान्वयन प्रदान करते हैं। Linux के लिए [[Exec Shield]] पैच 16 बाइट्स की अवधि में 19 बिट्स स्टैक एंट्रॉपी की आपूर्ति करता है, और 4096 बाइट्स के 1 पृष्ठ की अवधि पर mmap बेस रेंडमाइज़ेशन के 8 बिट्स प्रदान करता है। यह स्टैक बेस को 8 एमबी चौड़े क्षेत्र में रखता है जिसमें 524,288 संभावित स्थान होते हैं, और एमएमएपी आधार 1 एमबी चौड़े क्षेत्र में होता है जिसमें 256 संभावित स्थान होते हैं।


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


एक विशिष्ट प्रक्रिया के लिए यादृच्छिककरण को इसके निष्पादन डोमेन को बदलकर अक्षम किया जा सकता है <code>personality(2)</code>.<ref>{{cite web | url = http://man7.org/linux/man-pages/man2/personality.2.html | title = personality - set the process execution domain}}</ref>
एक विशिष्ट प्रक्रिया के लिए यादृच्छिककरण को इसके निष्पादन डोमेन को बदलकर अक्षम किया जा सकता है <code>personality(2)</code>.<ref>{{cite web | url = http://man7.org/linux/man-pages/man2/personality.2.html | title = personality - set the process execution domain}}</ref>
Line 99: Line 99:


डायनेमिक मेमोरी आवंटन, [[कॉल स्टैक]], प्रोसेस एनवायरनमेंट ब्लॉक और [[Win32 थ्रेड सूचना ब्लॉक]] के स्थान भी यादृच्छिक हैं। सिमेंटेक के एक सुरक्षा श्वेतपत्र ने नोट किया कि 32-बिट विंडोज विस्टा में एएसएलआर अपेक्षित रूप से मजबूत नहीं हो सकता है, और माइक्रोसॉफ्ट ने इसके कार्यान्वयन में कमजोरी को स्वीकार किया है।<ref>{{cite web |url=http://www.symantec.com/avcenter/reference/Address_Space_Layout_Randomization.pdf |title=विंडोज विस्टा पर एड्रेस स्पेस लेआउट रेंडमाइजेशन का विश्लेषण|author=Ollie Whitehouse |date=February 2007 |access-date=18 January 2009 |archive-url=https://web.archive.org/web/20190715102700/http://www.symantec.com/avcenter/reference/Address_Space_Layout_Randomization.pdf |archive-date=15 July 2019 |url-status=dead }}</ref>
डायनेमिक मेमोरी आवंटन, [[कॉल स्टैक]], प्रोसेस एनवायरनमेंट ब्लॉक और [[Win32 थ्रेड सूचना ब्लॉक]] के स्थान भी यादृच्छिक हैं। सिमेंटेक के एक सुरक्षा श्वेतपत्र ने नोट किया कि 32-बिट विंडोज विस्टा में एएसएलआर अपेक्षित रूप से मजबूत नहीं हो सकता है, और माइक्रोसॉफ्ट ने इसके कार्यान्वयन में कमजोरी को स्वीकार किया है।<ref>{{cite web |url=http://www.symantec.com/avcenter/reference/Address_Space_Layout_Randomization.pdf |title=विंडोज विस्टा पर एड्रेस स्पेस लेआउट रेंडमाइजेशन का विश्लेषण|author=Ollie Whitehouse |date=February 2007 |access-date=18 January 2009 |archive-url=https://web.archive.org/web/20190715102700/http://www.symantec.com/avcenter/reference/Address_Space_Layout_Randomization.pdf |archive-date=15 July 2019 |url-status=dead }}</ref>
होस्ट-आधारित घुसपैठ रोकथाम प्रणाली जैसे WehnTrust<ref>{{cite web|url=http://www.codeplex.com/wehntrust |title=WehnTrust|publisher=Codeplex.com |access-date=10 April 2012}}</ref> और ओजोन<ref>{{cite web|url=http://www.secarch.com/products.html |title=सुरक्षा आर्किटेक्ट 'ओजोन|publisher=Security Architects |access-date=10 April 2012}}</ref> [[Windows XP]] और [[Windows Server 2003]] ऑपरेटिंग प्रणाली के लिए एएसएलआर भी प्रदान करता है। WehnTrust ओपन-सोर्स है।<ref>{{cite web |url=http://wehntrust.codeplex.com/ |title=WehnTrust सोर्स कोड|access-date=15 November 2013 |archive-date=2013-11-28  |archive-url=https://web.archive.org/web/20131128032117/http://wehntrust.codeplex.com/ |url-status=dead }}</ref> ओजोन के कार्यान्वयन का पूर्ण विवरण उपलब्ध नहीं है।<ref>{{cite web|url=http://seclab.cs.sunysb.edu/seclab/pubs/acsac06.pdf |title=विंडोज सिस्टम के लिए एड्रेस-स्पेस रेंडमाइजेशन|access-date=10 April 2012}}</ref>
होस्ट-आधारित घुसपैठ रोकथाम प्रणाली जैसे WehnTrust<ref>{{cite web|url=http://www.codeplex.com/wehntrust |title=WehnTrust|publisher=Codeplex.com |access-date=10 April 2012}}</ref> और ओजोन<ref>{{cite web|url=http://www.secarch.com/products.html |title=सुरक्षा आर्किटेक्ट 'ओजोन|publisher=Security Architects |access-date=10 April 2012}}</ref> [[Windows XP]] और [[Windows Server 2003]] ऑपरेटिंग प्रणाली के लिए एएसएलआर भी प्रदान करता है। WehnTrust ओपन-सोर्स है।<ref>{{cite web |url=http://wehntrust.codeplex.com/ |title=WehnTrust सोर्स कोड|access-date=15 November 2013 |archive-date=2013-11-28  |archive-url=https://web.archive.org/web/20131128032117/http://wehntrust.codeplex.com/ |url-status=dead }}</ref> ओजोन के कार्यान्वयन का पूर्ण विवरण उपलब्ध नहीं है।<ref>{{cite web|url=http://seclab.cs.sunysb.edu/seclab/pubs/acsac06.pdf |title=विंडोज सिस्टम के लिए एड्रेस-स्पेस रेंडमाइजेशन|access-date=10 April 2012}}</ref>
यह फरवरी 2012 में नोट किया गया था<ref>{{cite web|author=Ollie |url=http://recxltd.blogspot.co.uk/2012/03/partial-technique-against-aslr-multiple.html |title=Research, Develop, Assess, Consult & Educate &#124; Recx: A Partial Technique Against ASLR – Multiple O/Ss |publisher=Recxltd.blogspot.co.uk |date=2 March 2012 |access-date=10 April 2012}}</ref> कि [[विंडोज 8]] से पहले के 32-बिट विंडोज प्रणाली पर एएसएलआर कम मेमोरी स्थितियों में इसकी प्रभावशीलता को कम कर सकता है। उसी शोध में लिनक्स पर भी इसी तरह का प्रभाव प्राप्त किया गया था। परीक्षण कोड ने मैक ओएस एक्स 10.7.3 प्रणाली को कर्नेल घबराहट का कारण बना दिया, इसलिए इस परिदृश्य में इसके एएसएलआर व्यवहार के बारे में अस्पष्ट छोड़ दिया गया।
यह फरवरी 2012 में नोट किया गया था<ref>{{cite web|author=Ollie |url=http://recxltd.blogspot.co.uk/2012/03/partial-technique-against-aslr-multiple.html |title=Research, Develop, Assess, Consult & Educate &#124; Recx: A Partial Technique Against ASLR – Multiple O/Ss |publisher=Recxltd.blogspot.co.uk |date=2 March 2012 |access-date=10 April 2012}}</ref> कि [[विंडोज 8]] से पहले के 32-बिट विंडोज प्रणाली पर एएसएलआर कम मेमोरी स्थितियों में इसकी प्रभावशीलता को कम कर सकता है। उसी शोध में लिनक्स पर भी इसी तरह का प्रभाव प्राप्त किया गया था। परीक्षण कोड ने मैक ओएस एक्स 10.7.3 प्रणाली को कर्नेल घबराहट का कारण बना दिया, इसलिए इस परिदृश्य में इसके एएसएलआर व्यवहार के बारे में अस्पष्ट छोड़ दिया गया।


=== [[नेटबीएसडी]] ===
=== [[नेटबीएसडी]] ===
यूजरलैंड में एएसएलआर के लिए समर्थन NetBSD 5.0 ​​(अप्रैल 2009 में जारी) में दिखाई दिया,<ref>{{cite web|url=https://netbsd.org/releases/formal-5/NetBSD-5.0.html|title=Announcing NetBSD 5.0|access-date=25 April 2016}}</ref> और अप्रैल 2016 में NetBSD-current में डिफ़ॉल्ट रूप से सक्षम किया गया था।<ref>{{cite web|url=https://mail-index.netbsd.org/current-users/2016/04/10/msg029186.html|title=PIE binaries and ASLR are on in the default build for amd64|author=Christos Zoulas|year=2016|access-date=25 April 2016}}</ref>
यूजरलैंड में एएसएलआर के लिए समर्थन NetBSD 5.0 ​​(अप्रैल 2009 में जारी) में दिखाई दिया,<ref>{{cite web|url=https://netbsd.org/releases/formal-5/NetBSD-5.0.html|title=Announcing NetBSD 5.0|access-date=25 April 2016}}</ref> और अप्रैल 2016 में NetBSD-current में डिफ़ॉल्ट रूप से सक्षम किया गया था।<ref>{{cite web|url=https://mail-index.netbsd.org/current-users/2016/04/10/msg029186.html|title=PIE binaries and ASLR are on in the default build for amd64|author=Christos Zoulas|year=2016|access-date=25 April 2016}}</ref>
amd64 पर कर्नेल एएसएलआर सपोर्ट को अक्टूबर 2017 में NetBSD-current में जोड़ा गया, जिससे NetBSD केएएसएलआर को सपोर्ट करने वाला पहला BSD प्रणाली बन गया।<ref>{{cite web|url=https://blog.netbsd.org/tnf/entry/kernel_aslr_on_amd64|title=Kernel ASLR on amd64|year=2017|access-date=16 October 2017}}</ref>
amd64 पर कर्नेल एएसएलआर सपोर्ट को अक्टूबर 2017 में NetBSD-current में जोड़ा गया, जिससे NetBSD केएएसएलआर को सपोर्ट करने वाला पहला BSD प्रणाली बन गया।<ref>{{cite web|url=https://blog.netbsd.org/tnf/entry/kernel_aslr_on_amd64|title=Kernel ASLR on amd64|year=2017|access-date=16 October 2017}}</ref>




=== [[ओपनबीएसडी]] ===
=== [[ओपनबीएसडी]] ===
2003 में, ओपन बीएसडी एएसएलआर के एक मजबूत रूप का समर्थन करने और डिफ़ॉल्ट रूप से इसे सक्रिय करने वाला पहला मुख्यधारा का ऑपरेटिंग प्रणाली बन गया।<ref name="OpenBSD-firstASLR">{{cite web
2003 में, ओपन बीएसडी एएसएलआर के एक मजबूत रूप का समर्थन करने और डिफ़ॉल्ट रूप से इसे सक्रिय करने वाला पहला मुख्यधारा का ऑपरेटिंग प्रणाली बन गया।<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
|title=Exploit Mitigation Techniques (updated to include random malloc and mmap) at OpenCON 2005
|title=Exploit Mitigation Techniques (updated to include random malloc and mmap) at OpenCON 2005
Line 114: Line 114:
|year=2005
|year=2005
|access-date=26 August 2009}}</ref>
|access-date=26 August 2009}}</ref>
ओपनबीएसडी ने 2008 में अपना एएसएलआर समर्थन पूरा किया जब उसने [[स्थिति स्वतंत्र निष्पादन योग्य]] बायनेरिज़ के लिए समर्थन जोड़ा।<ref name="OpenBSD-PIE">{{cite web|url=http://www.openbsd.org/papers/nycbsdcon08-pie/|title=OpenBSD की स्थिति स्वतंत्र निष्पादन योग्य (PIE) कार्यान्वयन|author=Kurt Miller|year=2008|access-date=22 July 2011| archive-url= https://web.archive.org/web/20110612150147/http://openbsd.org/papers/nycbsdcon08-pie/| archive-date= 12 June 2011 | url-status= live}}</ref> ओपन बीएसडी 4.4 का C डायनेमिक मेमोरी आवंटन #ओपन बीएसडी .27s malloc|malloc(3) को एएसएलआर और ओपन बीएसडी के हिस्से के रूप में कार्यान्वित गैप पेज सुविधाओं का लाभ उठाकर सुरक्षा में सुधार करने के लिए डिज़ाइन किया गया था। <code>mmap</code> [[सिस्टम कॉल|प्रणाली कॉल]], और उपयोग-बाद-मुक्त बग का पता लगाने के लिए।<ref name="malloc.c">{{cite web|url=http://bxr.su/OpenBSD/lib/libc/stdlib/malloc.c |title=libc/stdlib/malloc.c |website=BSD Cross Reference, OpenBSD src/lib/}}</ref> 2013 में रिलीज़ किया गया, ओपन बीएसडी 5.3 पहला मेनस्ट्रीम ऑपरेटिंग प्रणाली था, जो कई [[कंप्यूटर आर्किटेक्चर]] पर डिफ़ॉल्ट रूप से स्थिति-स्वतंत्र निष्पादन योग्य को सक्षम करता था, और ओपन बीएसडी 5.7 डिफ़ॉल्ट रूप से स्थिति-स्वतंत्र स्थैतिक बायनेरिज़ (स्टेटिक-PIE) को सक्रिय करता था।<ref name="OpenBSD-PIE"/>
ओपनबीएसडी ने 2008 में अपना एएसएलआर समर्थन पूरा किया जब उसने [[स्थिति स्वतंत्र निष्पादन योग्य]] बायनेरिज़ के लिए समर्थन जोड़ा।<ref name="OpenBSD-PIE">{{cite web|url=http://www.openbsd.org/papers/nycbsdcon08-pie/|title=OpenBSD की स्थिति स्वतंत्र निष्पादन योग्य (PIE) कार्यान्वयन|author=Kurt Miller|year=2008|access-date=22 July 2011| archive-url= https://web.archive.org/web/20110612150147/http://openbsd.org/papers/nycbsdcon08-pie/| archive-date= 12 June 2011 | url-status= live}}</ref> ओपन बीएसडी 4.4 का C डायनेमिक मेमोरी आवंटन #ओपन बीएसडी .27s malloc|malloc(3) को एएसएलआर और ओपन बीएसडी के हिस्से के रूप में कार्यान्वित गैप पेज सुविधाओं का लाभ उठाकर सुरक्षा में सुधार करने के लिए डिज़ाइन किया गया था। <code>mmap</code> [[सिस्टम कॉल|प्रणाली कॉल]], और उपयोग-बाद-मुक्त बग का पता लगाने के लिए।<ref name="malloc.c">{{cite web|url=http://bxr.su/OpenBSD/lib/libc/stdlib/malloc.c |title=libc/stdlib/malloc.c |website=BSD Cross Reference, OpenBSD src/lib/}}</ref> 2013 में रिलीज़ किया गया, ओपन बीएसडी 5.3 पहला मेनस्ट्रीम ऑपरेटिंग प्रणाली था, जो कई [[कंप्यूटर आर्किटेक्चर]] पर डिफ़ॉल्ट रूप से स्थिति-स्वतंत्र निष्पादन योग्य को सक्षम करता था, और ओपन बीएसडी 5.7 डिफ़ॉल्ट रूप से स्थिति-स्वतंत्र स्थैतिक बायनेरिज़ (स्टेटिक-PIE) को सक्रिय करता था।<ref name="OpenBSD-PIE"/>




=== मैकोज़ ===
=== मैकोज़ ===
[[Mac OS X Leopard]] 10.5 (अक्टूबर 2007 में जारी) में, Apple ने प्रणाली पुस्तकालय के लिए रेंडमाइजेशन की शुरुआत की।<ref>{{cite web|url=https://www.apple.com/macosx/security/#sixtyfour |title=Mac OS X – Security – Keeps safe from viruses and malware |publisher=Apple |access-date=10 April 2012|archive-url=https://web.archive.org/web/20110525190329/http://www.apple.com/macosx/security/#sixtyfour |archive-date=25 May 2011 }}</ref>
[[Mac OS X Leopard]] 10.5 (अक्टूबर 2007 में जारी) में, Apple ने प्रणाली पुस्तकालय के लिए रेंडमाइजेशन की शुरुआत की।<ref>{{cite web|url=https://www.apple.com/macosx/security/#sixtyfour |title=Mac OS X – Security – Keeps safe from viruses and malware |publisher=Apple |access-date=10 April 2012|archive-url=https://web.archive.org/web/20110525190329/http://www.apple.com/macosx/security/#sixtyfour |archive-date=25 May 2011 }}</ref>
[[मैक ओएस एक्स लायन]] 10.7 (जुलाई 2011 को जारी) में, ऐप्पल ने सभी अनुप्रयोगों को कवर करने के लिए अपने कार्यान्वयन का विस्तार किया, जिसमें कहा गया कि सभी अनुप्रयोगों के लिए एड्रेस स्पेस लेआउट रेंडमाइजेशन (एएसएलआर) में सुधार किया गया है। यह अब 32-बिट ऐप्स के लिए उपलब्ध है (जैसे हीप मेमोरी प्रोटेक्शन हैं), 64-बिट और 32-बिट एप्लिकेशन को हमले के लिए अधिक प्रतिरोधी बनाते हैं।<ref>{{cite web|url=https://www.apple.com/macosx/whats-new/features.html#security|title=सुरक्षा|publisher=Apple Inc.|access-date=6 June 2011| archive-url= https://web.archive.org/web/20110606235315/http://www.apple.com/macosx/whats-new/features.html#security| archive-date= 6 June 2011}}</ref>
[[मैक ओएस एक्स लायन]] 10.7 (जुलाई 2011 को जारी) में, ऐप्पल ने सभी अनुप्रयोगों को कवर करने के लिए अपने कार्यान्वयन का विस्तार किया, जिसमें कहा गया कि सभी अनुप्रयोगों के लिए एड्रेस स्पेस लेआउट रेंडमाइजेशन (एएसएलआर) में सुधार किया गया है। यह अब 32-बिट ऐप्स के लिए उपलब्ध है (जैसे हीप मेमोरी प्रोटेक्शन हैं), 64-बिट और 32-बिट एप्लिकेशन को हमले के लिए अधिक प्रतिरोधी बनाते हैं।<ref>{{cite web|url=https://www.apple.com/macosx/whats-new/features.html#security|title=सुरक्षा|publisher=Apple Inc.|access-date=6 June 2011| archive-url= https://web.archive.org/web/20110606235315/http://www.apple.com/macosx/whats-new/features.html#security| archive-date= 6 June 2011}}</ref>
OS X माउंटेन लायन 10.8 (जुलाई 2012 को जारी) और बाद में, कर्नेल के साथ-साथ [[लोड करने योग्य कर्नेल मॉड्यूल]] और ज़ोन सहित पूरे प्रणाली को प्रणाली बूट के दौरान व्यवस्थित ढंग से स्थानांतरित किया जाता है।<ref>{{cite web|url=http://movies.apple.com/media/us/osx/2012/docs/OSX_MountainLion_Core_Technologies_Overview.pdf|title=ओएस एक्स माउंटेन लायन कोर टेक्नोलॉजीज अवलोकन|date=June 2012 |access-date=25 July 2012}}</ref>
OS X माउंटेन लायन 10.8 (जुलाई 2012 को जारी) और बाद में, कर्नेल के साथ-साथ [[लोड करने योग्य कर्नेल मॉड्यूल]] और ज़ोन सहित पूरे प्रणाली को प्रणाली बूट के दौरान व्यवस्थित ढंग से स्थानांतरित किया जाता है।<ref>{{cite web|url=http://movies.apple.com/media/us/osx/2012/docs/OSX_MountainLion_Core_Technologies_Overview.pdf|title=ओएस एक्स माउंटेन लायन कोर टेक्नोलॉजीज अवलोकन|date=June 2012 |access-date=25 July 2012}}</ref>





Revision as of 14:03, 1 May 2023

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

इतिहास

लिनक्स पैक्स प्रोजेक्ट ने सबसे पहले "एएसएलआर " शब्द गढ़ा, और जुलाई 2001 में लिनक्स कर्नेल के लिए एक पैच के रूप में एएसएलआर का पहला डिज़ाइन और कार्यान्वयन प्रकाशित किया। इसे एक पूर्ण कार्यान्वयन के रूप में देखा जाता है, जो अक्टूबर 2002 से कर्नेल स्टैक रेंडमाइजेशन के लिए एक पैच भी प्रदान करता है।

डिफ़ॉल्ट रूप से एएसएलआर को सहायता करने वाला पहला मुख्यधारा संचालन प्रणाली 2003 में ओपन बीएसडी वर्जन 3.4 था,,[2][3] जिसके बाद 2005 में लिनक्स आया।

लाभ

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

प्रभावशीलता

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

सीमाएं

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

कार्यान्वयन

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

एंड्रॉइड

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

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

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

फ्रीबीएसडी

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


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

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


लिनक्स

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

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

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


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

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

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


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

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

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

नेटबीएसडी

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


ओपनबीएसडी

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


मैकोज़

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


सोलारिस

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


शोषण

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


यह भी देखें

संदर्भ

  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. 2.0 2.1 Theo De Raadt (2005). "Exploit Mitigation Techniques (updated to include random malloc and mmap) at OpenCON 2005". Retrieved 26 August 2009.
  3. {{cite web|title=ओपनबीएसडी नवाचार|url=https://www.openbsd.org/innovations.html%7Cpublisher=The OpenBSD project|access-date=12 September 2016}
  4. Marco-Gisbert, Hector; Ripoll, Ismael (20 November 2014). "On the Effectiveness of Full-ASLR on 64-bit Linux" (PDF).
  5. 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.
  6. 6.0 6.1 "लाइब्रेरी लोड ऑर्डर रैंडमाइजेशन लागू करें". Retrieved 26 June 2017.
  7. 7.0 7.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.
  8. "Android सुरक्षा". Android Developers. Retrieved 7 July 2012.
  9. "oss-सुरक्षा". Retrieved 4 October 2015.
  10. ""गैर-पीआईई निष्पादन योग्य के लिए समर्थन सक्षम करें" वापस करें". Retrieved 26 June 2017.
  11. mmap - add mmap offset randomization, DragonFly Gitweb, 25 November 2010.
  12. "एड्रेस स्पेस लेआउट रेंडमाइजेशन (एएसएलआर) लागू करें". Retrieved 10 February 2019.
  13. "एएसएलआर - फ्रीबीएसडी विकी". Retrieved 17 May 2021.
  14. "FreeBSD 13.2-RELEASE Release Notes".
  15. Pwn2Own day 2: iPhone, BlackBerry beaten; Chrome, Firefox no-shows, Ars Technica, 11 March 2011
  16. Stefan Esser (7 March 2013). "iOS 6 Exploitation 280 Days Later". Slide 19, "iOS 6 introduces KASLR".
  17. Tarjei Mandt. "Attacking the iOS Kernel: A Look at 'evasi0n'" (PDF).
  18. Dang, Alan; Miller, Charlie (25 March 2009). "एनएक्स बिट और एएसएलआर". Tom's Hardware.
  19. "personality - set the process execution domain".
  20. Jake Edge (9 October 2013). "कर्नेल एड्रेस स्पेस लेआउट रैंडमाइजेशन". LWN.net. Retrieved 2 April 2014.
  21. "Linux kernel 3.14, Section 1.7. Kernel address space randomization". kernelnewbies.org. 30 March 2014. Retrieved 2 April 2014.
  22. "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.
  23. KASLR is Dead: Long Live KASLR (PDF). Engineering Secure Software and Systems 2017. 24 June 2017.
  24. 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.
  25. Corbet, Jonathan (20 December 2017). "कर्नेल पेज-टेबल अलगाव की वर्तमान स्थिति". Linux Weekly News.
  26. Corbet, Jonathan (15 November 2017). "KAISER: hiding the kernel from user space". Linux Weekly News.
  27. 27.0 27.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.
  28. "Linux 5.16 Has Early Preparations For Supporting FGKASLR - Phoronix". www.phoronix.com.
  29. "विंडोज आईएसवी सॉफ्टवेयर सुरक्षा सुरक्षा". Msdn.microsoft.com. Retrieved 10 April 2012.
  30. Windows Internals: Including Windows Server 2008 and Windows Vista, Fifth Edition (PRO-Developer) ISBN 978-0-7356-2530-3
  31. Ollie Whitehouse (February 2007). "विंडोज विस्टा पर एड्रेस स्पेस लेआउट रेंडमाइजेशन का विश्लेषण" (PDF). Archived from the original (PDF) on 15 July 2019. Retrieved 18 January 2009.
  32. "WehnTrust". Codeplex.com. Retrieved 10 April 2012.
  33. "सुरक्षा आर्किटेक्ट 'ओजोन". Security Architects. Retrieved 10 April 2012.
  34. "WehnTrust सोर्स कोड". Archived from the original on 2013-11-28. Retrieved 15 November 2013.
  35. "विंडोज सिस्टम के लिए एड्रेस-स्पेस रेंडमाइजेशन" (PDF). Retrieved 10 April 2012.
  36. 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.
  37. "Announcing NetBSD 5.0". Retrieved 25 April 2016.
  38. Christos Zoulas (2016). "PIE binaries and ASLR are on in the default build for amd64". Retrieved 25 April 2016.
  39. "Kernel ASLR on amd64". 2017. Retrieved 16 October 2017.
  40. 40.0 40.1 Kurt Miller (2008). "OpenBSD की स्थिति स्वतंत्र निष्पादन योग्य (PIE) कार्यान्वयन". Archived from the original on 12 June 2011. Retrieved 22 July 2011.
  41. "libc/stdlib/malloc.c". BSD Cross Reference, OpenBSD src/lib/.
  42. "Mac OS X – Security – Keeps safe from viruses and malware". Apple. Archived from the original on 25 May 2011. Retrieved 10 April 2012.
  43. "सुरक्षा". Apple Inc. Archived from the original on 6 June 2011. Retrieved 6 June 2011.
  44. "ओएस एक्स माउंटेन लायन कोर टेक्नोलॉजीज अवलोकन" (PDF). June 2012. Retrieved 25 July 2012.
  45. Controlling Access to Machine Resources, Oracle Information Library, 26 October 2012.
  46. AnC VUSec, 2017


बाहरी संबंध