Применяется ли рандомизация макета адресного пространства к разветвленному процессу - PullRequest
0 голосов
/ 17 ноября 2011

Скажем, я разветвляю процесс из другого процесса.Будет ли на нем применена рандомизация размещения адресного пространства (ASLR) в ОС, для которой установлен ASLR?

Обратите внимание, что я имею в виду случай, когда я не вызываю функцию execve после выполнения fork.

1 Ответ

10 голосов
/ 17 ноября 2011

Да.

Однако обратите внимание, что после fork к родителю и ребенку применяется одинаковая рандомизация (в конце концов, они являются копиями друг друга!).

Если ребенок и родитель звонят mmap(NULL, ...), , тогда их адресные карты начнут расходиться.

Обновление:

Разве ваше утверждение не противоречит?

Совсем нет. Сразу после fork родительское и дочернее адресные пространства идентичны (это определение того, что делает fork). Но ASLR все еще действует как для родителя, так и для ребенка. Рандомизация не может «вернуться назад во времени» и рандомизировать решения, которые уже были приняты, но любые будущие решения (например, где разместить следующие mmap) будут случайными и, вероятно, приведут к различный результат для родителя и ребенка.

Имеет ли это отношение к основному mmap или оператору записи, вводящему случайность в mmap, а также для безопасности?

Возможно, вы не понимаете, что такое ASLR?

Короче говоря, при включенном ASLR ОС будет r и определять размещение основного стека и размещение любых не MAP_FIXED mmaps .

К тому времени, как вы fork, размещение в главном стеке уже давно определено, поэтому родительский и дочерний элементы будут одинаковыми. Будущее mmap - единственное, что может (и будет) затронуто ASLR в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...