मैं Ubuntu 12.04 32-बिट्स का उपयोग कर रहा हूं अब कुछ प्रयोग के लिए मुझे एएसएलआर को अक्षम करने की आवश्यकता है मैं यह कैसे कर सकता हूं? और उसके बाद मुझे एएसएलआर को फिर से सक्षम करने के लिए क्या करना चाहिए?
मैं Ubuntu 12.04 32-बिट्स का उपयोग कर रहा हूं अब कुछ प्रयोग के लिए मुझे एएसएलआर को अक्षम करने की आवश्यकता है मैं यह कैसे कर सकता हूं? और उसके बाद मुझे एएसएलआर को फिर से सक्षम करने के लिए क्या करना चाहिए?
जवाबों:
एक लेख के अनुसार लिनक्स सिस्टम पर एएसएलआर कितना प्रभावी है? , आप /proc/sys/kernel/randomize_va_space
इंटरफ़ेस का उपयोग करके लिनक्स में एएसएलआर को कॉन्फ़िगर कर सकते हैं ।
निम्नलिखित मान समर्थित हैं:
- 0 - कोई यादृच्छिककरण नहीं। सब कुछ स्थिर है।
- 1 - रूढ़िवादी यादृच्छिककरण। साझा लाइब्रेरी, स्टैक,
mmap()
VDSO और हीप को यादृच्छिकीकृत किया जाता है।- 2 - पूर्ण यादृच्छिकरण। पिछले बिंदु में सूचीबद्ध तत्वों के अलावा, इसके माध्यम से प्रबंधित मेमोरी
brk()
को भी यादृच्छिक किया जाता है।
तो, इसे निष्क्रिय करने के लिए, भागो
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
और इसे फिर से सक्षम करने के लिए, चलाएं
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
यह एक रिबूट नहीं बचेगा, इसलिए आपको इसे कॉन्फ़िगर करना होगा sysctl
। एक फ़ाइल जोड़ें /etc/sysctl.d/01-disable-aslr.conf
:
kernel.randomize_va_space = 0
इसे स्थायी रूप से अक्षम करना चाहिए।
brk()
?
/proc/sys/kernel/randomize_va_space
इंटरफ़ेस ASLR सिस्टम-वाइड नियंत्रित करता है।
यदि आप सिस्टम-वाइड परिवर्तन नहीं चाहते हैं, तो ASLR को अस्थायी रूप से अक्षम करने के लिए ADDR_NO_RANDOMIZE
व्यक्तित्व का उपयोग करें । इस व्यक्तित्व ध्वज को नियंत्रित किया जा सकता है setarch
और इसके -R
विकल्प ( मैनपेज ) के साथ कमांड को प्रस्तुत किया जा सकता है ।
मुझे इसका उपयोग करके एक नया शेल खोलना वास्तव में सुविधाजनक लगता है:
setarch `uname -m` -R /bin/bash
यह आपके लिए एएसएलआर अक्षम के साथ एक नया बैश शेल खोलेगा, जिसमें सभी बाल प्रक्रियाएं (इस शेल से चलने वाले प्रोग्राम) शामिल हैं।
आपके द्वारा किए जाने के बाद केवल exit
शेल।
वैसे, i386 पर, एएसएलआर ulimit -s unlimited
को "अक्षम" कर सकते हैं।
EDIT (अप्रैल 2016): सीवीई-2016-3672ulimit -s unlimited
को तय किया गया और सौंपा गया ।
uname -m
उपयोग -लिनेक्स की भावना में मामूली विस्तार: एक के बजाय एक का उपयोग भी कर सकता है arch
, एक द्विआधारी जो अनिवार्य रूप से एक ही करता है।
arch
एक व्यस्त बॉक्सलेट के रूप में उपलब्ध नहीं है
ASLR को अक्षम करने के अधिक स्थायी तरीके स्पष्ट कारणों के लिए VM में रखे जाने चाहिए।
स्टैक फ्रेम रिटर्न एड्रेस वगैरह को अधिलेखित करने की क्षमता का परीक्षण करने के लिए, आपको स्टैक कैनरी के बिना संकलन करने की आवश्यकता होगी -fno-stack-protector
, जबकि आपको स्टैक पर कोड निष्पादित करने की अनुमति देने के लिए आपको -z execstack
बनाने की आवश्यकता है।
$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c