ASLR действительно поддерживается OS X - PullRequest
1 голос
/ 26 сентября 2019

В настоящее время я изучаю меры безопасности, адаптированные под OSX, и заметил кое-что действительно странное.Хотя они утверждают, что по умолчанию поддерживают ASLR для всех двоичных файлов, похоже, что все dylib расположены по фиксированному адресу при каждом запуске.

Вот мой скрипт для проверки этого, выходные данные также показаны ниже

test.c

#include<stdio.h>

int main(){
    printf("main address : %p\n",&main);
    printf("printf address : %p\n",&printf);
    return 0;
}

вывод для пяти последовательных прогонов

main address : 0x10bbd5f00
printf address : 0x7fff9a053154

main address : 0x109c82f00
printf address : 0x7fff9a053154

main address : 0x1044a7f00
printf address : 0x7fff9a053154

main address : 0x103d7cf00
printf address : 0x7fff9a053154

main address : 0x10c90ef00
printf address : 0x7fff9a053154

Результат ясно показывает, что, хотя PIE включен, ASLR определенно нет.

Чтобы дополнительно проверить, специально ли отключена ASLR для libsystem_c.dylib, я также запустил тестовый код с DYLD_PRINT_SEGMENTS = 1 и подтвердил, что все dylib расположены в фиксированных местах.

Итак, мой вопрос: действительно ли ASLR доступен / поддерживается на Mac?
Если да, как мне его включить?
Если нет, каковы возможные причины отказа / отказа Apple реализовать эту функцию?

Примечания:
Код запускается на OSX El Captain (10.11.6) и Mojave (10.14.6)

...