Как ASLR может быть эффективным?

Я слышал теорию. Рандомизация расположения адресного пространства берет библиотеки и загружает их в случайные места в виртуальном адресном пространстве, так что в случае, если хакер обнаружит дыру в вашей программе, у него не будет заранее известного адреса для выполнения атаки с возвратом к libc против, например. Но если подумать об этом в течение нескольких секунд, это не имеет никакого смысла в качестве защитной меры.

Допустим, наша гипотетическая TargetLib (libc или что-то еще, что ищет хакер) загружается по случайному адресу вместо детерминированный. Теперь хакер не знает заранее, где находится TargetLib и подпрограммы внутри него, но и код приложения тоже. Где-то в двоичном файле должна быть какая-то таблица поиска, чтобы найти подпрограммы внутри TargetLib, и это должно быть в детерминированном месте. (Или в случайном месте, на которое указывает что-то еще. Вы можете добавить столько косвенных ссылок, сколько захотите, но в конечном итоге вам придется начать с известного места.)

Это означает, что вместо того, чтобы указывать его код атаки на известное расположение TargetLib, все, что нужно сделать хакеру, это указать своим кодом атаки на запись в поисковой таблице приложения для TargetLib и разыменовать указатель на целевую подпрограмму, и атака будет продолжена беспрепятственно.

Есть ли что-то в том, как работает ASLR, чего я не делаю. понять? Потому что, как описано, я не понимаю, что это что-то большее, чем лежачий полицейский, обеспечивающий имидж безопасности, но не действительный. Я что-то упустил?

6
задан Mason Wheeler 3 October 2010 в 21:08
поделиться