Разработчики Microsoft укрепили самую последнюю версию Windows при помощи
новой функции, призванной значительно затруднить эксплуатацию багов, затаившихся
в недрах операционной системы.
Новая мера предосторожности получила название "безопасное разъединение" (safe
unlinking) и была встроена в ту часть ядра Windows 7, которая ответственна за
распределение и освобождение участков памяти. При безопасном разъединении перед
удалением данных осуществляется серия проверок, позволяющих обеспечить
уверенность в том, что хакер не попытался воспользоваться выходом за пределы
памяти.
Как пишет член команды специалистов Microsoft по изучению безопасности Питер
Бек, такая простая проверка позволяет блокировать большинство эксплоитов,
связанных с выходом за границы участка памяти. Он подчеркнул, что она не делает
применение данного метода полностью невозможным, однако существенно увеличивает
для нападающего объем работы.
На протяжении последних пяти лет компания Microsoft последовательно добавляла
в свои системы такие средства защиты, как Предотвращение исполнения данных (DEP)
и Рандомизация адресного пространства (ASLR), стремясь затруднить хакерам
эксплуатацию багов в браузерах и других приложениях. Однако в 2007 году рост
числа вышедших бюллетеней безопасности, связанных с ядром Windows, составил 5%,
а в 2008 году – 10%, поэтому в компании приняли решение о введении
дополнительной защиты ядра.
Выход за границы памяти для ядра означает то же самое, что для приложений –
переполнение буфера. Атака осуществляется за счет манипуляции дважды связанными
списками адресации, в которых каждый блок памяти связан с предыдущим и
последующим. Указывая на неправильный участок памяти, хакер может поднять
уровень привилегий в операционной системе. Безопасное разъединение затрудняет
использование такой возможности, освобождая память только после проверки
целостности структуры памяти. В случае, если проверка не удалась, Windows выдаст
критическую ошибку.