मैं ASLR (एड्रेस स्पेस लेआउट रैंडमाइजेशन) को अस्थायी रूप से कैसे अक्षम कर सकता हूं?


57

मैं Ubuntu 12.04 32-बिट्स का उपयोग कर रहा हूं अब कुछ प्रयोग के लिए मुझे एएसएलआर को अक्षम करने की आवश्यकता है मैं यह कैसे कर सकता हूं? और उसके बाद मुझे एएसएलआर को फिर से सक्षम करने के लिए क्या करना चाहिए?


जवाबों:


75

एक लेख के अनुसार लिनक्स सिस्टम पर एएसएलआर कितना प्रभावी है? , आप /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

इसे स्थायी रूप से अक्षम करना चाहिए।


1
वास्तव में "पूर्ण यादृच्छिकरण" क्या है? क्या इसमें निष्पादन योग्य ही शामिल है? और क्या है brk()?
शुज़ेंग

26

/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, एक द्विआधारी जो अनिवार्य रूप से एक ही करता है।
ड्रम

1
@ ड्रेमफायर archएक व्यस्त बॉक्सलेट के रूप में उपलब्ध नहीं है
Youfu

+1 दो साल बाद वापस आने और CVE से संबंधित जानकारी जोड़ने के लिए।
मल्टीसंकल

3

ASLR को अक्षम करने के अधिक स्थायी तरीके स्पष्ट कारणों के लिए VM में रखे जाने चाहिए।

स्टैक फ्रेम रिटर्न एड्रेस वगैरह को अधिलेखित करने की क्षमता का परीक्षण करने के लिए, आपको स्टैक कैनरी के बिना संकलन करने की आवश्यकता होगी -fno-stack-protector, जबकि आपको स्टैक पर कोड निष्पादित करने की अनुमति देने के लिए आपको -z execstackबनाने की आवश्यकता है।

$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c

2

आप बस उपयोग कर सकते हैं sudo sysctl kernel.randomize_va_space=0 ASLR को अक्षम करने के लिए ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.