ฉันจะปิดการใช้งาน ASLR (การสุ่มเลย์เอาต์พื้นที่ที่อยู่) ได้อย่างไร


57

ฉันใช้ Ubuntu 12.04 32- บิตในขณะนี้สำหรับการทดลองบางอย่างฉันต้องปิดการใช้งาน ASLR ฉันจะทำสิ่งนี้ได้อย่างไร และหลังจากนั้นฉันควรทำอย่างไรเพื่อเปิดใช้งาน ASLR อีกครั้ง


คำตอบ:


75

อ้างอิงจากบทความ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

ควรปิดใช้งานสิ่งนี้อย่างถาวร


1
"การสุ่มแบบเต็ม" คืออะไร? นั่นรวมถึงไฟล์ปฏิบัติการเองหรือไม่? แล้วอะไรbrk()ล่ะ
Shuzheng

26

/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


รายละเอียดเล็ก ๆ น้อย ๆ ในจิตวิญญาณของ util-linux: แทนที่จะใช้uname -mอย่างใดอย่างหนึ่งก็สามารถใช้archเลขฐานสองที่ทำเช่นเดียวกัน
drumfire

1
@drumfire archไม่สามารถใช้งานแอปเพล็ต busybox ได้
youfu

+1 สำหรับการกลับมาอีกสองปีต่อมาและเพิ่มข้อมูลเกี่ยวกับ CVE
Multisync

3

วิธีถาวรในการปิดใช้งาน ASLR ควรเก็บไว้ใน VM ด้วยเหตุผลที่ชัดเจน

เพื่อทดสอบความสามารถในการเขียนทับอยู่สแต็กรอบผลตอบแทนเป็นต้นคุณจะต้องรวบรวมโดยไม่ต้องคีรีบูนสแต็ค-fno-stack-protectorในขณะที่เพื่อให้คุณสามารถรันโค้ดบนสแต็คที่คุณต้องการที่จะรวบรวมกับ-z execstackทำให้

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.