ฉันใช้ Ubuntu 12.04 32- บิตในขณะนี้สำหรับการทดลองบางอย่างฉันต้องปิดการใช้งาน ASLR ฉันจะทำสิ่งนี้ได้อย่างไร และหลังจากนั้นฉันควรทำอย่างไรเพื่อเปิดใช้งาน ASLR อีกครั้ง
ฉันใช้ Ubuntu 12.04 32- บิตในขณะนี้สำหรับการทดลองบางอย่างฉันต้องปิดการใช้งาน ASLR ฉันจะทำสิ่งนี้ได้อย่างไร และหลังจากนั้นฉันควรทำอย่างไรเพื่อเปิดใช้งาน ASLR อีกครั้ง
คำตอบ:
อ้างอิงจากบทความASLR บนระบบ Linux มีประสิทธิภาพเพียงใด? คุณสามารถกำหนดค่า ASLR ใน Linux โดยใช้/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 ทั้งระบบ
หากคุณไม่ต้องการให้มีการเปลี่ยนแปลงทั้งระบบให้ใช้ADDR_NO_RANDOMIZE
บุคลิกภาพเพื่อปิดการใช้งาน ASLR ชั่วคราว การควบคุมการตั้งค่าสถานะบุคลิกภาพนี้สามารถทำได้ด้วยsetarch
และ-R
ตัวเลือก ( manpage ), การเตรียมคำสั่ง
ฉันคิดว่ามันสะดวกที่จะเปิดเปลือกใหม่โดยใช้:
setarch `uname -m` -R /bin/bash
สิ่งนี้จะเปิด Bash shell ใหม่สำหรับคุณโดยที่ปิดใช้งาน ASLR รวมถึงกระบวนการลูกทั้งหมด (โปรแกรมที่เรียกใช้จากเชลล์นี้)
เพียงแค่exit
เปลือกเมื่อคุณทำเสร็จแล้ว
โดยวิธีการบน i386 ulimit -s unlimited
สามารถ "ปิดการใช้งาน" ASLR
แก้ไข (เมษายน 2016): ผู้ulimit -s unlimited
ได้รับการแก้ไขและได้รับมอบหมายCVE-2016-3672
uname -m
อย่างใดอย่างหนึ่งก็สามารถใช้arch
เลขฐานสองที่ทำเช่นเดียวกัน
arch
ไม่สามารถใช้งานแอปเพล็ต busybox ได้
วิธีถาวรในการปิดใช้งาน ASLR ควรเก็บไว้ใน VM ด้วยเหตุผลที่ชัดเจน
เพื่อทดสอบความสามารถในการเขียนทับอยู่สแต็กรอบผลตอบแทนเป็นต้นคุณจะต้องรวบรวมโดยไม่ต้องคีรีบูนสแต็ค-fno-stack-protector
ในขณะที่เพื่อให้คุณสามารถรันโค้ดบนสแต็คที่คุณต้องการที่จะรวบรวมกับ-z execstack
ทำให้
$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c
คุณสามารถใช้sudo sysctl kernel.randomize_va_space=0
เพื่อปิดการใช้งาน temparaly ASLR