Làm cách nào để tạm thời vô hiệu hóa ASLR (Ngẫu nhiên bố trí không gian địa chỉ)?


Câu trả lời:


75

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_spacegiao 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.confcó chứa:

kernel.randomize_va_space = 0

nên vô hiệu hóa vĩnh viễn điều này.


1
Chính xác thì "Hoàn toàn ngẫu nhiên" là gì? Có bao gồm bản thân thực thi? Và là brk()gì?
Shuzheng

26

Các /proc/sys/kernel/randomize_va_spacegiao 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-Rtù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 exitcái vỏ một khi bạn đã hoàn thành.


Nhân tiện, trên i386, ulimit -s unlimitedcó 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 .


Chi tiết nhỏ theo tinh thần của linux-linux: thay vì uname -mngườ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.
trống

1
@drumfire archkhông khả dụng dưới dạng applet busybox
youfu

+1 để quay lại hai năm sau và thêm thông tin liên quan đến CVE.
Multisync

3

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

2

Bạn chỉ có thể sử dụng sudo sysctl kernel.randomize_va_space=0để tạm thời vô hiệu hóa ASLR.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.