2012-06-28 32 views
16

Tôi muốn tắt ngẫu nhiên bố cục không gian địa chỉ (ASLR) trên hệ thống của mình (Ubuntu Gnu/Linux 2.6.32-41-server), nhưng, nếu tôi sử dụngVô hiệu hóa và kích hoạt lại ngẫu nhiên bố cục không gian địa chỉ cho bản thân mình

sysctl -w kernel.randomize_va_space=0 

thay đổi sẽ ảnh hưởng đến tất cả người dùng trên hệ thống, tôi giả sử. (Điều này có đúng không?) Làm thế nào tôi có thể giới hạn hiệu ứng của việc vô hiệu hóa ASLR cho bản thân mình với tư cách là người dùng, hoặc chỉ với phiên trình bao mà tôi gọi lệnh để vô hiệu hóa?

BTW, tôi thấy rằng hiện tại (mặc định) thiết lập hệ thống của tôi là

sysctl -w kernel.randomize_va_space=0 

Tại sao 2 và không 1 hoặc 3? Tôi có thể tìm tài liệu về các giá trị số của cài đặt/proc/sys, phạm vi và ý nghĩa của chúng ở đâu? Cảm ơn!

+2

http://gcc.gnu.org/wiki/Randomization nói rằng 'setarch $ (uname -m) -RL bash' phải hoạt động –

+0

http://unix.stackexchange.com/questions/15881/disable-address -Không gian-bố trí-ngẫu nhiên-aslr-cho-my-process || http://askubuntu.com/questions/318315/how-can-i-temporarily-disable-aslr-address-space-layout-randomization –

Trả lời

11

Tài liệu dành cho cài đặt randomize_va_spacesysctl nằm ở Documentation/sysctl/kernel.txt trong cây nguồn hạt nhân. Về cơ bản,

0 - Tắt quá trình phân cách ngẫu nhiên không gian địa chỉ.

1 - Đặt địa chỉ của trang mmap, ngăn xếp và trang VDSO ngẫu nhiên.

2 - Ngoài ra bật ngẫu nhiên heap.

+0

Cảm ơn! Điều đó không giải quyết câu hỏi thứ hai của tôi ("BTW") ở trên, nhưng tôi vẫn không thấy một cách để hạn chế hiệu ứng của sysctl thành một phiên tài khoản hoặc trình bao. Tôi đoán nó phải là không thể. : -/ –

+1

Có, cài đặt là toàn cầu. Grep nhanh cho thấy có một số mã (có thể là dấu tích) trong mã "cá tính" (xử lý nhiều ABI) có thể thực hiện trò chuyện. Đặt cờ ADDR_NO_RANDOMIZE trên trường cá tính của một task_struct sẽ vô hiệu hóa hành vi ngay cả khi nó được kích hoạt trên toàn cầu.Nhưng đó có lẽ là voodoo hạt nhân nhiều hơn bạn muốn đối phó với. –

20

Cách tốt nhất để vô hiệu hóa cục bộ ASLR trên hệ thống dựa trên Linux là sử dụng quy trình cờ cá tính. Các lệnh để thao tác cờ cá tính là setarch với

-R, --addr-no-randomize

Vô hiệu hóa ngẫu nhiên của không gian địa chỉ ảo (bật ADDR_NO_RANDOMIZE).

Dưới đây là cách thức tiến hành:

$> setarch $(uname -m) -R /bin/bash 

Lệnh này chạy một vỏ trong đó ASLR đã bị vô hiệu hóa. Tất cả các hậu duệ của quá trình này sẽ kế thừa các cờ cá tính của người cha và do đó có ASLR bị vô hiệu hóa. Cách duy nhất để phá vỡ sự thừa kế của các lá cờ sẽ là gọi một chương trình setuid (nó sẽ là một vi phạm an ninh để hỗ trợ tính năng này).

Lưu ý rằng uname -m là ở đây để không mã hóa cứng kiến ​​trúc nền tảng của bạn và làm cho lệnh này được di động.

Các vấn đề liên quan