В Windows Vista будет реализовано случайное распределение адресного пространства
Уже в состав Windows Vista Beta 2 входит новая защита от переполнения буфера (ASLR) – случайное распределение адресного пространства, включенная по-умолчанию…
Сейчас, перед тем как я продолжу, хочу рассказать о ASLR. Это не панацея, это не отменяет требований к безопасности кода, но вместе с использованием ряда других технологий, которые я коротко опишу далее, это полезная защита – она позволяют Windows выглядеть «разной» для злонамеренного ПО, что усложняет организацию атак.
Так что же такое ASLR? Коротко, когда вы загружаетесь в Windows Vista Beta 2, мы записываем системный код в разные места памяти. Это помогает победить такую широко распространенную атаку, как «return-to-libc», где злонамеренный код пытается исполнить такую системную функцию, как socket() в файле wsock32.dll, или LoadLibrary в kernel32.dll для загрузки wsock32.dll на первое место. Задача ASLR состоит в перемешивании этих функций в памяти, чтобы каждая из них находилась в непредсказуемом месте. В Windows Vista Beta 2 любой DLL и EXE может быть загружен в любое из 256 мест, что означает 1/256 верного определения этого адреса и, как следствие, успешной атаки. Другими словами, это усложняет злонамеренный код сработать правильно.
К примеру, где находится Waldo()?
Например сегодня утром, мой лэптоп сообщил о следующем:
wsock32.dll (0x73ad0000)
winhttp.dll (0x74020000)
user32.dll (0x779b0000)
kernel32.dll (0x77c10000)
gdi32.dll (0x77a50000)
После перезагрузки, получилось такое:
wsock32.dll (0x73200000)
winhttp.dll (0x73760000)
user32.dll (0x770f0000)
kernel32.dll (0x77350000)
gdi32.dll (0x77190000)
Как можно увидеть, разные DLL загружаются в разные адреса и это делает сложнее злонамеренному коду определить их местонахождение и завладеть функциональностью этой DLL. Не невозможно, но сложно.
Что действительно поднимает уровень безопасности Windows Vista, это удачная комбинация разных технологий. Например, сегодня у нас есть следующее:
/GS
Это опция времени компиляции в Visual C++ (включена по-умолчанию), которая добавляет обнаружение переполнения буфера на базе стека. Она также переставляет местами некоторые аргументы функций, таким образом становится намного сложнее атаковать стек функции. На данный момент все исходники Windows Vista скомпилированы с использованием /GS.
/SafeSEH
Это опция компоновщика, который пишет адреса задач в PE заголовок исполняемого файла и когда задача выполнена, ОС повторно проверяет адрес в заголовке PE, и если адрес отсутствует, значит что-то нарушила процесс выполнения задачи и ОС убивает процесс.
Data Execution Protection (aka NX)
Это требует поддержки не только со стороны ОС, но и со стороны процесса. Большинство (читай – все) переполнения буферов попадают в уязвимые приложения как данные, и эти данные затем исполняются. NX может предотвратить исполнение злонамеренного кода, делая его No-Execute; другими словами, вы не можете исполнить данные. Когда была найдена дыра в WMF, я написал небольшой злонамеренный файл, который вывел на рабочем столе «ооопс!». Когда я запустил его на моем домашнем компьютере на базе AMD 64FX, который поддерживает NX, Windows отключила просмотр изображения, когда я попытался просмотреть мой WMF файл – потому что ОС обнаружила попытку выполнения данных.
Function Pointer Obfuscation (путаница указания функций)
Долговечные указатели функций подвержены атаки, потому что они долговечны и указывают на функции, временами запрашиваемые кодом. В Windows Vista мы кодируем ряд долговечных указателей, и раскодируем их лишь когда они необходимы. Вы можете подробнее прочесть про эту функции
Итого
ASLR другая часть безопасности, которая включена по-умолчанию в Windows Vista Beta 2. Я думаю это особенно важно – мы добавили ASLR очень поздно, но мы подумали, что добавления его в Beta 2 и включение по-умолчанию важны, мы сможем понять, как это работает в действительности. Но значит, что возможны проблемы несовместимости, поэтому мы оставляет за собой время до финального релиза Vista для настройки ASLR.
Пожалуйста, помните – разработка в процессе.
Я напишу больше о ASLR и некоторых других технологиях безопасностях в ближайшие недели.
Источник:
Перевод: Райкер
Комментарии
ужас....
Редакция: ...
предлагаю редактору "..." прверять статью вордом перед отправкой.
По теме
- Windows Vista официально "мертва"
- Завтра прекращается поддержка Windows Vista
- Остался последний месяц поддержки Windows Vista
- 11 апреля Microsoft прекратит поддержку Windows Vista
- Через год прекращается поддержка Windows Vista
- Microsoft открыла исходный код Open XML SDK
- Баллмер: Longhorn/Vista - моя самая серьезная ошибка
- Сегодня заканчивается бесплатная фаза поддержки Windows Vista и Office 2007
- Microsoft продлила срок поддержки Windows Vista и Windows 7
- Практики обеспечения безопасности Microsoft - лучшие в мире