ฉันใช้ 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