Tôi hiện đang sử dụng Ubuntu 12.04 32 bit cho một số thử nghiệm Tôi cần tắt ASLR, làm cách nào để làm điều này? và sau đó tôi nên làm gì để kích hoạt lại ASLR?
Tôi hiện đang sử dụng Ubuntu 12.04 32 bit cho một số thử nghiệm Tôi cần tắt ASLR, làm cách nào để làm điều này? và sau đó tôi nên làm gì để kích hoạt lại ASLR?
Câu trả lời:
Theo một bài báo ASLR hiệu quả như thế nào trên các hệ thống Linux? , bạn có thể định cấu hình ASLR trong Linux bằng /proc/sys/kernel/randomize_va_space
giao diện.
Các giá trị sau được hỗ trợ:
- 0 - Không ngẫu nhiên. Mọi thứ đều tĩnh.
- 1 - Ngẫu nhiên bảo thủ. Thư viện dùng chung, ngăn xếp
mmap()
, VDSO và heap được chọn ngẫu nhiên.- 2 - Hoàn toàn ngẫu nhiên. Ngoài các yếu tố được liệt kê ở điểm trước, bộ nhớ được quản lý thông qua
brk()
cũng được chọn ngẫu nhiên.
Vì vậy, để vô hiệu hóa nó, hãy chạy
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
và để kích hoạt lại, hãy chạy
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
Điều này sẽ không tồn tại khi khởi động lại, vì vậy bạn sẽ phải cấu hình cái này trong sysctl
. Thêm một tập tin /etc/sysctl.d/01-disable-aslr.conf
có chứa:
kernel.randomize_va_space = 0
nên vô hiệu hóa vĩnh viễn điều này.
brk()
gì?
Các /proc/sys/kernel/randomize_va_space
giao diện điều khiển ASLR toàn hệ thống.
Nếu bạn không muốn thay đổi toàn hệ thống, hãy sử dụng ADDR_NO_RANDOMIZE
tính cách để tạm thời vô hiệu hóa ASLR. Kiểm soát cờ cá tính này có thể được thực hiện với setarch
và -R
tùy chọn của nó ( manpage ), chuẩn bị một lệnh.
Tôi thấy thật tiện lợi khi mở một vỏ hoàn toàn mới bằng cách sử dụng:
setarch `uname -m` -R /bin/bash
Điều này sẽ mở một vỏ Bash mới cho bạn khi bị vô hiệu hóa ASLR, bao gồm tất cả các tiến trình con (các chương trình chạy từ vỏ này).
Chỉ cần exit
cái vỏ một khi bạn đã hoàn thành.
Nhân tiện, trên i386, ulimit -s unlimited
có thể "vô hiệu hóa" ASLR.
EDIT (Tháng 4 năm 2016): ulimit -s unlimited
Đã được sửa và gán CVE-2016-3672 .
uname -m
người ta cũng có thể sử dụng arch
, một nhị phân về cơ bản cũng làm như vậy.
arch
không khả dụng dưới dạng applet busybox
Các cách vô hiệu hóa ASLR lâu dài hơn nên được giữ trong VM vì những lý do rõ ràng.
để kiểm tra khả năng ghi đè lên địa chỉ ngăn xếp khung trở etcetera, bạn sẽ cần phải biên dịch mà không cần chồng chim hoàng yến -fno-stack-protector
, trong khi để cho phép bạn thực thi mã trên stack bạn cần phải biên dịch với -z execstack
, làm cho
$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c