Меню Рубрики

Windows xp noexecute alwaysoff

Настройка предотвращения выполнения данных (Data Execution Prevention, DEP)

Предотвращение выполнения данных DEP представляет собой возможность процессора по защите страниц от выполнения. DEP позволяет защититься от определенных типов переполнения буфера и обработки исключений. Цель поддержки DEP — обеспечить предсказуемость работы компьютера, сведя к минимуму потенциальные проблемы совместимости приложений.

Дополнительные сведения о DEP (на английском языке) см. в статье 875352 в базе знаний корпорации Майкрософт.

Системные администраторы и ПВТ могут настраивать возможность DEP, внося изменения непосредственно в файл Boot.ini или используя для этого файл Unattend.txt.

Файл Boot.ini должен включать следующие параметры:

/NoExecute=<AlwaysOn | AlwaysOff | OptIn | OptOut>

Параметр Описание
AlwaysOn DEP распространяется полностью и на всю систему. Все процессы выполняются с применением DEP. Список исключений, позволяющий исключить отдельные приложения из DEP, не используется. Если системный администратор решит исключить из защиты DEP одно или несколько приложений с помощью инструментария настройки совместимости приложений (Application Compatibility Toolkit), DEP все равно будет действовать в отношении выбранных приложений. Средства устранения неполадок совместимости систем («оболочки») в отношении DEP не действуют. ПВТ не могут использовать этот параметр.
AlwaysOff Защита DEP не применяется, независимо от наличия аппаратной поддержки DEP. Для процессора не действует режим PAE, если только в загрузочных записях не присутствует ключ /PAE. ПВТ не могут использовать этот параметр.
OptIn Для систем, процессор которых поддерживает аппаратную защиту DEP, таковая по умолчанию включена для ряда системных двоичных файлов, а также для «выбранных» приложений. При выборе этого параметра защита DEP по умолчанию действует только в отношении системных двоичных файлов Windows. Системные администраторы могут включить защиту DEP и для других приложений.
OptOut Защита DEP по умолчанию включена в отношении всех процессов. В окне «Свойства системы» пользователи могут вручную выбирать приложения, в отношении которых эта защита не будет действовать. Системные администраторы могут исключить из DEP одно или несколько приложений с помощью инструментария настройки совместимости приложений. В отношении DEP средства устранения неполадок совместимости систем («оболочки») не действуют.

Файл загрузки Boot.ini системы Windows XP с пакетом обновлений 2 по умолчанию содержит параметр NoExecute = OptIn. В файле загрузки в семействе продуктов Windows Server 2003 с пакетом обновлений 1 по умолчанию установлен параметр NoExecute = OptOut.

Если в файле загрузки Boot.ini версии Windows с поддержкой DEP отсутствует параметр /NoExecute, поведение системы аналогично поведению установленном значении по умолчанию.

Ниже приводится образец файла Boot.ini с параметром /NoExecute:

В процессе установки Windows программа обнаружения DEP не меняет значение параметра /NoExecute в файле Boot.ini. Благодаря этому, можно перемещать образ операционной системы, независимо от процессорной поддержки DEP как на основном, так и на конечном компьютерах.

Unattend.txt

Чтобы настроить предотвращение выполнения данных с помощью файла Unattend.txt, следует использовать запись OSLoadOptionsVar в разделе этого файла [SetupData]. Запись OSLoadOptionsVar изменяет параметр /NoExecute в файле Boot.ini.

Используется следующий синтаксис:

OSLoadOptionsVar = <«/noexecute=AlwaysOn» | «/noexecute=AlwaysOff» | «/noexecute=OptIn» | «/noexecute=OptOut»>

Источник

Whatis.Ru

Информация о компьютерах доступным языком
Назад на сайт

Страниц: 1

#1 21-08-2007 21:56:35

Файл boot.ini чем отличается загрузочная надпись .

Привет всем форумчанам и Админам. Подскажите люди добрые чем отличаются загрузочные надписи в файле boot.ini и для чего так пишется , что обозначают эти записи
1. multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=»C:\Microsoft_Windows_XP_SP2_Pro_RAID_Internet_RU» /fastdetect
2. multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=»C:\Microsoft_Windows_XP_SP2_Pro_RAID_Internet_RU» /noexecute=optin /fastdetect
3. multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=»C:\Microsoft_Windows_XP_SP2_Pro_RAID_Internet_RU» /noexecute=optin /fastdetect /TUTag=FAO3ME
собственно меня интересует и не только меня , что обозначают вот эти записи в конце
1. /fastdetect (это что бы быстро происходил вход или нет?)
2. /noexecute=optin /fastdetect (это мне не понятно )
3. /noexecute=optin /fastdetect /TUTag=FAO3ME (это вообще ноль понятия)
Это всё появилось когда я проводил эксперименты с разными дистрибутивами Windows XP pro SP2
ну очень интересно что бы это значило.

#2 21-08-2007 22:09:38

Re: Файл boot.ini чем отличается загрузочная надпись .

* /3GB — Этот параметр появился в третьем сервис паке для NT 4.0 и существует на всех более поздних версиях. Этот ключ поменяет стандартное распределение между пользователем и системой карты виртуальной адресации NT, то есть пользователь получит в свое распоряжениек 3GB, а система 1GB. Предоставление большей виртуальной памяти прикладным программам, интенсивно использующим память подобно серверам баз данных может улучшать их производительность. Однако,чтобы приложение смогло использовать это преимущество оно должно быть помечено как приложение 3GB-aware (обычно такие приложения, например MS SQL 2000 имеют соответствующую настройку в параметрах).

* /BASEVIDEO — Заставляет NT использовать стандартный драйвер VGA в режиме GUI.

* /BAUDRATE=number — Включает режим отладки ядра и определяет скорость порта по умолчанию (19200) по которой будет подключаться удаленный узел отладки. При установке этого параметра автоматически включается параметр /DEBUG. Например: /BAUDRATE=115200.

* /BOOTLOG — Определение этого ключа позволяет NT записать последовательность загруки в лог файл в %SystemRoot%\NTBTLOG.TXT. В лог файле описывается детально какой драйвер загружен или не загружен при загрузке ОС. Например, что-то вроде этого:

Microsoft (R) Windows NT (R) Version 5.0
Loaded driver WINNT\System32\Ntoskrnl.exe
Loaded driver WINNT\System32\hal.dll
Loaded driver WINNT\System32\BOOTVID.dll
Loaded driver pci.sys
Loaded driver isapnp.sys
Loaded driver intelide.sys

* /BURNMEMORY — Эта опция заставит NT «забыть» все ограничения относительно указанного объема памяти, типа /MAXMEM. Значение в МБАЙТ. Пример: /BURNMEMORY=128 указал бы системе — отбрось 128МБ физической памяти на машине как непригодные.

* /CHANNEL — Используется совместно с параметрами /debug и /debugport в целях поддержки порта IEEE 1394.

* /CRASHDEBUG — Загружает отладчик ядра в память, где он остается до тех пор, пока не возникнет ошибка ядра.

* /DEBUG — Загружает отладчик ядра в память. Этот параметр может быть активирован в любой момент из удаленного отладчика, расположенного на компьютере, который подключен к последовательному порту локального компьютера. В отличие от параметра /CRASHDEBUG, при использовании параметра /DEBUG последовательный порт всегда работает как порт отладки. Используйте этот режим, если в работе системы регулярно возникают ошибки.[1]

* /DEBUGPORT=COMx — Задает COM порт для отладки.

* /INTAFFINITY — Ключ определяет использование многопроцессорного HAL (HALMPS.DLL) для распределения прерываний, например назначение прерывания в многопроцессорной системе только процессору, имеющиму высший приоритет. Без этого ключа HAL обычным образом разрешает всем процессорам получать IRQ.

* /FASTDETECT[:COMn] — Если у вас стоит две или более операционных систем от Microsoft, то при процессе загрузки используется NTDETECT.COM от самой старшей версии. В Win2K инициализация параллельных и последовательных устройств осуществляется с помощью plug-and-play драйверов устройств, но NT 4.0 в этом смысле полностью полагается на NTDETECT.COM. Таким образом, определяя параметр FASTDETECT, как раз в том месте, где NTDETECT производит инициализацию оборудования при загрузке NT 4.0, ключ заставляет NTDETECT пропустить эти вещи при загрузке Win2K. Установщик Win2K автоматически распознает наличие второй установленной системы и прописывает этот параметр в BOOT.INI автоматически. Можно указывать номера последовательных портов, для которых надо отключить поиск устройств, через запятую. При пропуске параметра COM поиск устройств будет отключен для всех портов.

* /HAL=имя_файла — Указывает аппаратно-зависимый уровень (HAL). Используется для проверки работы различных файлов HAl.

* /KERNEL=имя_файла — Указывает загрузчику какое ядро следует загружать. Например, /KERNEL=ntkrnlmp.exe — загрузка многопроцессорного ядра с памятью меньше 3 ГБ.

* /MAXMEM — Эта опция ограничивает для NT использование памяти. Число в МБайт. Пример: /MAXMEM:32 ограничил бы NT 32МБ системной памяти.

* /MAXPROCSPERCLUSTER — Многопроцессорный HAL в Win2K (HALMPS.DLL) имеет способность к работе с многопроцессорными системами, которые составлены из кластеров в свою очередь состоящих из малых мультипроцессорных систем. Например, если имеется 8-процессорная система, которая составлена из двух 4-процессорных кластеров, то ID каждого процессора должен быть определен ориентируемым кластером через HAL. Размер максимального кластера — 4, и значение по умолчанию — 0 (система не основана на кластерах). Пример: /MAXPROCSPERCLUSTER=3.

* /NODEBUG — Запрещает использование любой отладочной информации.

* /NOEXECUTE — Определяет уровень DEP[2] (появилась начиная с Windows XP SP2). Может принимать четыре значения AlwaysOn, AlwaysOff, OptIn и OptOut.
o OptIn — данное значение используется по умолчанию. На компьютерах, оснащенных процессорами с поддержкой DEP, функция DEP включена по умолчанию для ограниченного числа системных файлов и программ. При этом по умолчанию защищаются только системные файлы Windows.
o OptOut — по умолчанию функция DEP включена для всех процессов. В диалоговом окне Система панели управления можно вручную создать список приложений, для которых следует отключить DEP. Специалисты по информационным технологиям могут воспользоваться пакетом средств обеспечения совместимости приложений (Application Compatibility Toolkit), чтобы отключить функцию DEP для одной или нескольких программ. При этом вступают в силу исправления, обеспечивающие совместимость программ, для функции DEP.
o AlwaysOn — Функция DEP включается для всей системы. Все процессы работают с выполнением проверок DEP. В этом режиме нельзя отключить функцию DEP для отдельных приложений. Исправления, обеспечивающие совместимость программ, для функции DEP в силу не вступают. Программы, для которых с помощью пакета средств обеспечения совместимости приложений было отключено использование функции DEP, также работают с выполнением проверок DEP.
o AlwaysOff — Функция DEP отключена для всей системы, независимо от наличия аппаратной поддержки DEP. Процессор не работает в режиме PAE, если в файле Boot.ini не указан параметр /PAE.

* /NOGUIBOOT — Когда эта опция описана, VGA video драйвер, ответственный за представление графики в течение процесса загрузки Win2K’s не инициализируется. Вообще этот драйвер используется для отображения на экране монитора процесса загрузки, и как правило для отображения Blue Screen, таким образом включение этой опции в BOOT.INI сделает все это невозможным.

* /NOSERIALMICE — [COMx | COMx, y, z …] — Отключает обнаружение мыши, подключенной к последовательному COM порту (портам).

* /NUMPROC — Допускается только число указанных центральных процессоров. Пример: /NUMPROC=2 на системе с 4 процессорами заставит 2 из этих 4 процессоров простаивать под NT.

* /ONECPU — эта опция указывает NT, использовать только один процессор мультипроцессорной системы.

* /PCILOCK — Запрещает Windows NT динамически назначать IO/IRQ ресурсы на PCI устройства и оставляет конфигурацию BIOS-а.

* /PERFMEM —
* /PERFPAGES — Эти ключи не поддерживаются в final release операционных систем, так как они используются NT для резервирования физической памяти для Basic Block Testing (BBT). Существует только одно известное упоминание о BBT на сайте Microsoft: судебное дело США против Microsoft от 2-ого февраля 1999 года. В нем рассказывается о том как Jim Allchin отвечал под присягой на вопросы по поводу BBT. Он сказал, что BBT — вещь оптимизирующая производительность системы. Microsoft использует ее в пререлизах, для того чтобы минимизировать количество страниц памяти. PERFMEM определяет резервирование физической памяти в MB, а PERFPAGES — количество страниц памяти. Эти параметры не должны присутствовать совместно. Место для BBT резервируется в Thread Environment Block (TEB) каждого потока. На самом деле точно не известно как конкретно влияет каждый из параметров на работу системы.

* /SAFEBOOT — Используется крайне редко, так как выполняет те же действия, что и при нажатии F8 для загрузки в защищенном режиме NTLDR. Но Вы можете определить один из трех дополнительных ключей: MINIMAL, NETWORK, или DSREPAIR. MINIMAL и NETWORK отвечают за загрузку ОС в защищенном режиме без и с поддержкой сети соответственно. При защищенном режиме NT загружает только драйвера и сервисы, описанные по имени или группе в Minimal или Network ключах реестра: [HKLM\System\CurrentControlSet\Control\SafeBoot]. Ключ DSREPAIR (Directory Services Repair) указывает NT, что необходимо грузиться в режиме, который восстанавливает Active Directory из backup’а. Дополнительная опция, которую можно определить — «(ALTERNATESHELL)». Она укказывает ядру NT, какую программу, описанную в реестре [HKLM\System\CurrentControlSet\Control\SafeBoot\AlternateShell] использовать в качестве графической оболочки, взамен используемого по умолчанию Explorer’а.

* /SOS — Заставляет NT выдавать во время загрузки всю информацию относительно того, какие драйверы загружены, и насколько успешно.

* /TIMERES — На многопроцессорном HAL (HALMPS.DLL) эта опция установит разрешающую способность системного таймера. Параметр -число, в сотнях наносекунд, его значение будет установлено ближайшим меньшим, который поддерживает HAL. Заданная по умолчанию разрешающая способность — 7.8ms. Пример: /TIMERES=9000 установил бы таймер на разрешение в 98ms.

* /USE8254 — Этот параметр предназначен для систем со старым BIOSом. Он говорит NT HAL, что необходимо использовать 8254 чип таймера в качестве основного.

Источник

Обход аппаратной реализации DEP в Windows

В Microsoft проделали неплохую работу по повышению уровня безопасности, результаты которой появились в XP Service Pack 2. Описанная методика атаки не должна восприниматься как следствие того, что Microsoft не в состоянии делать что-то качественно и надежно, так как уступки в плане безопасности были сделаны для сохранения совместимости. Всегда есть компромисс между новыми системами защиты и потенциальными проблемами совместимости и нужно заметить, что возможно никто другой так не заботится о сохранении обратной совместимости своих продуктов, как Microsoft.

Обход аппаратной реализации DEP в Windows

Одним из самых значительных изменений, представленных Microsoft в Windows XP Service Pack 2 и Windows 2003 Server Service Pack 1, было поддержка новой возможности, названной Data Execution Prevention (DEP). Этот механизм позволяет делать именно то, что подразумевает его название: предотвращать выполнение кода в областях памяти не предназначенных для выполнения. Такая технология очень важна для предотвращения использования многих уязвимостей в программном обеспечении, так как большинство эксплойтов основано на хранении произвольного кода в областях памяти, не предназначенных для выполнения, например в стеке или куче.

DEP может работать в двух режимах. Первый режим называется Программный DEP (Software-enforced DEP) и обладает ограниченной функциональностью для предотвращения выполнения кода эксплойтов, использующих технику перезаписи SEH. Программный DEP используется на компьютерах, не имеющих поддержки неисполняемых страниц на аппаратном уровне. Кроме того, программная защита DEP встраивается во время компиляции, и поэтому работает только для системных библиотек и пересобранных с поддержкой DEP сторонних приложений. Способ обхода программного DEP был описан ранее и не будет обсуждаться в этой статье.

Второй режим работы DEP – аппаратный (Hardware-enforced DEP). Он используется в тех случаях, когда аппаратное обеспечение поддерживает неисполняемые страницы памяти. Большинство существующих процессоров intel-подобной архитектуры не поддерживают такую возможность (из-за унаследованной поддержки только страниц доступных на чтение или на запись), однако новые чипсеты начинают поддерживать неисполняемые страницы через технологии типа Page Address Extensions (PAE). Аппаратный DEP наиболее интересный режим, так как он действительно сильно затрудняет использование большинства методов атаки. В этой статье описана методика обхода DEP, работающего в аппаратном режиме.

Перед описанием методики, разумно будет определить некоторые понятия, которыми мы будем оперировать. В данном случае методика предназначена для обеспечения выполнения кода из области памяти, не предназначенной для исполнения, например стека потока или кучи процесса, при условии использования аппаратного DEP. Данная методика должна полностью нейтрализовывать DEP, так как при написании эксплойтов все еще используется прием исполнения произвольного кода из доступных на запись областей памяти. Кроме того, этот способ должен быть универсален, насколько это возможно, и без серьезных изменений должен работать и для существующих и для новых эксплойтов. Определившись с требованиями, самое время разобраться в новых возможностях, пришедших с аппаратным DEP.

Реализуя поддержку DEP, в Microsoft хорошо представляли, какое количество сторонних приложений может столкнуться с проблемой несовместимости из-за постановки под вопрос факта исполняемости той или иной области памяти. С учетом этого, DEP был спроектирован с возможностью настройки параметров его работы. По умолчанию защита включена только для системных процессов и либо для некоторых заранее определенных приложений (OptIn), либо для всех приложений, кроме заранее определенных (OptOut). Два этих флага передаются в ядро во время загрузки системы через опцию /NoExecute в файле boot.ini. Кроме того, в дополнение к NoExecute, в ядро могут быть переданы еще два флага — AlwaysOn или AlwaysOff. Два этих параметра устанавливают флаг использования или не использования DEP для каждого процесса, независимо от его настроек. В Windows XP SP2 по умолчанию используется OptIn, тогда как в Windows 2003 Server SP1 – OptOut.

Кроме использования глобального системного флага, существует возможность включить или отключить использование DEP для каждого процесса. Отключить поддержку NX (non-executable) можно во время выполнения процесса. Для этого, в ntdll.dll была добавлена функция LdrpCheckNXCompatibility, проверяющая некоторые условия и определяющая, нужно ли использовать поддержку NX для процесса. Эта функция вызывается каждый раз, когда какая-либо DLL загружается в контекст процесса, через функцию LdrpRunInitializationRoutines. Вначале проверяется, загружена ли SafeDisc DLL. Если да, NX не используется. Затем происходит анализ базы данных приложений, чтобы узнать, должна ли быть включена или отключена поддержка NX для процесса. И, наконец, проверяется, есть ли в DLL секции не совместимые с NX (такие как .aspack, .pcle, и .sforce).

По результатам этих проверок, поддержка NX или разрешается или не разрешается через новый PROCESSINFOCLASS, названный ProcessExecuteFlags (0x22). При вызове NtSetInformationProcess с этим параметром, в качестве дополнительного аргумента в функцию передается 4 байта битовой маски. Далее эта битовая маска передается в функцию nt!MmSetExecuteOptions, которая выполняет соответствующую операцию. В качестве части битовой маски можно передать параметр MEM_EXECUTE_OPTION_PERMANENT (0x8), означающий запрет на повторное изменение флагов исполнения. Для включения поддержки NX используется флаг MEM_EXECUTE_OPTION_DISABLE (0x1), для отключения — MEM_EXECUTE_OPTION_ENABLE (0x2). В зависимости от флагов процесса, выполнение кода из областей памяти, не предназначенных для исполнения, может быть разрешено (MEM_EXECUTE_OPTION_ENABLE) или запрещено (MEM_EXECUTE_OPTION_DISABLE).

Если бы можно было изменить флаги исполнения процесса, атакующий мог бы выполнять код из областей памяти ранее защищенных от исполнения. Чтобы осуществить это, атакующий должен иметь возможность выполнять код из областей памяти разрешенных для исполнения. Для этого могут пригодиться исполняемые области памяти, находящиеся по одним и тем же адресам в каждом процессе.

Чтобы использовать эту возможность в своих интересах, атакующий должен тем или иным способом вызвать функцию NtSetInformationProcess с параметром ProcessExecuteFlags. Кроме того, аргумент ProcessInformation должен иметь установленный бит MEM_EXECUTE_OPTION_ENABLE и обязательно сброшенный MEM_EXECUTE_OPTION_DISABLE. Следующий код демонстрирует вызов этой функции, результатом которого является отключение поддержки NX для вызывающего процесса:

Используя технику ret2libc, можно перенаправить поток выполнения в функцию NtSetInformationProcess с фреймом стека, созданным атакующим. В данном случае, аргументы, описанные в комментарии справа от строчек кода, должны быть помещены в стек так, чтобы вызванная NtSetInformationProcess правильно их интерпретировала. Огромным недостатком этого способа является то, что он требует использования нулевых байтов в части буфере, применяемой для переполнения. Короче говоря, это практически не применимо, особенно при использовании переполнений в строковых функциях. Однако в тех случаях, когда это условие удовлетворяется, данные метод может быть полезен.

Другой подход заключается в том, что атакующий может использовать код, уже находящийся в пространстве ntdll, с целью отключения поддержки NX для процесса. Вернувшись в определенный блок кода можно отключить поддержку NX при условии, что ntdll сможет вернуть управление в контролируемый атакующим буфер. Ограничением этого метода является то, атакующий должен контролировать стек, так же как при большинстве атак в стиле ret2libc, однако есть и плюс — нет надобности в контроле аргументов.

Вначале нужно переместить поток управления в область памяти, в которой находятся команды эквивалентные комбинации mov al, 0x1 / ret. Существует много примеров таких комбинаций команд: xor eax, eax/inc eax/ret; mov eax, 1/ret; и т.д. Один из таких примеров можно найти в функции ntdll!NtdllOkayToLockRoutine.

Эта команда устанавливает младший байт регистра eax в 1. Для чего это нужно, будет понятно далее. Как только поток управления перейдет к команде mov, а затем и ret, атакующий должен будет изменить стек таким образом, чтобы по команде ret произошел возврат в другой сегмент кода внутри ntdll. А точнее, должен произойти возврат в подпрограмму ntdll!LdrpCheckNXCompatibility.

В этом блоке кода проверяется, равен ли младший байт регистра eax единице. Независимо от результатов проверки, в регистр esi кладется значение 2. После этого проверяется, установлен ли zero-флаг (он будет установлен, если младший байт eax равен 1). Так как этот код будет выполнен после первого набора инструкций mov al, 0x1 / ret, флаг ZF будет установлен всегда, что вызовет передачу управления на адрес 0x7c93feba.

Здесь локальной переменной присваивается значение регистра esi, в данном случае 2. Далее поток выполнения переходит на адрес 0x7c91d403.

Этот блок кода, в свою очередь, сравнивает значение локальной переменной, равной 2, с нулем. Если переменная не равна нулю, происходит переход на адрес 0x7c935d6d.

С этого места становится интересней. Здесь происходит вызов NtSetInformationProcess с параметром ProcessExecuteFlags. Указатель на параметр ProcessInformation, ранее инициализированный значением 2, также передается в качестве дополнительного аргумента. Результатом этого будет отключение поддержки NX для процесса. После завершения работы функции ZwSetInformationProcess поток выполнения перейдет на адрес 0x7c91d441.

Здесь происходит восстановление сохраненных значений регистров, выполняется команда leave и возврат в вызывающую функцию. В данном случае атакующий изменяет фрейм стека таким образом, что команда ret осуществит переход на команду, которая, в свою очередь, перенаправит поток выполнения в контролируемый буфер, содержащий произвольный код, который теперь, когда поддержка NX отключена, будет выполнен.

Для реализации этой техники, нужно знать три адреса. Первый – это адрес комбинации mov al, 0x1 / ret или эквивалентной. К счастью, таких комбинаций много, хотя и не все такие простые, как та, что описана в этой статье. Второй – адрес начала блока кода cmp al, 0x1 внутри ntdll!LdrpCheckNXCompatibility. Если оба этих адреса находятся в пределах ntdll, эксплойт будет более переносимый, чем тот, который зависит от адресов в двух разных DLL. И, наконец, третий адрес, который использовался бы на машинах, не имеющих поддержки аппаратного DEP, команды jmp esp или подобной, в зависимости от рассматриваемой уязвимости.

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

Для тестирования техники, был модифицирован эксплойт warftpd_165_user из Metasploit Framework, написанный Fairuzan Roslan. Эксплойт использует простое переполнение стека. Да модификации он выглядел следующим образом:

Этот код создает массив размером 1024 байт, заполненный опкодами NOP. Начиная с 485 байта, записан 4-байтовый адрес возврата, указывающий на шелкод, добавленный в конец массива. В системе с включенной поддержкой аппаратного DEP, эксплойт терпит неудачу при попытке выполнения первой же команды NOP, находящейся в области памяти (стеке потока), не предназначенной для выполнения.

Применив описанную выше методику, эксплойт, а точнее структура отправляемого буфера, была модифицирована:

В нашем случае буфер заполняется 485 командами int3. Затем в буфер помещается адрес возврата, указывающий на ntdll!NtdllOkayToLockRoutine. Так как эта подпрограмма выполняет retn 0x4, следующие 4 байта являются подделанным аргументом, выталкивающимся из стека. Когда NtdllOkayToLockRoutine отработает, стек будет указывать на 493 байт буфера, который уже заранее проинициализирован (находится сразу за перезаписанным адресом возврата 0x7c952080 и подделанным аргументом). Это означает, что по завершению работы NtdllOkayToLockRoutine поток выполнения перейдет на адрес 0x7c91d3f8. Этот блок кода проверяет младший байт регистра eax и конечном счете приводит к отключению поддержки NX для процесса. После этого из стека выталкиваются сохраненные значения регистров и выполняется команда leave, присваивающая указателю стека значение, на которое в данный момент указывает регистр ebp. В данном случае, ebp на 0x54 байта был отдален от esp, поэтому мы вставили дополнительные 0x54 байта. После этого указатель стека указывает на 577 байт нашего буфера (сразу за дополнительными 0x54 байтами). Это означает, что произойдет возврат на любой адрес, находящийся в этом месте буфера. В данном конкретном случае, здесь должен находиться специфичный для каждой системы адрес команды jmp esp или эквивалентной. После выполнения команды jmp esp поток выполнения перейдет на шелкод. Когда отработает шелкод, эксплойт будет вести себя так, как будто не было никаких изменений:

Методика, описанная в этой статье, позволяет обойти защитный механизм, реализуемый аппаратным DEP в стандартных дистрибутивах Windows XP Service Pack 2 и Windows 2003 Server Service Pack 1. Недостаток защиты не связан с какой-нибудь определенной ошибкой, допущенной в процессе реализации поддержки аппаратного DEP, а является побочным эффектом архитектуры решения Microsoft для отключения поддержки NX для процесса режима пользователя из самого процесса. Если бы такой возможности не было, т.е. поддержку NX нельзя было бы отключить во время работы процесса из самого процесса, подходы, описанные в статье, не были бы применимы.

Не интересно описывать проблему, не предложив путей ее решения. Для противодействия атаке нужно выделить ряд вещей, от которых зависит ее успех. Первое и самое главное, описанный подход зависит от знания трех не связанных друг с другом адресов. Во-вторых, успех зависит от того, позволено ли процессу режима пользователя отключать поддержку NX самому себе. И, в-третьих, необходимо контролировать стек, чтобы иметь возможность выполнить атаку в стиле ret2libc.

Первое условие можно нарушить, реализовав механизм Случайного Размещения в Адресном Пространстве (Address Space Layout Randomization), который сделает неизвестным для атакующего расположение нужного блока кода. Второе условие нарушается путем вынесения программной логики контроля над включением/отключением поддержки NX для процесса в режим ядра, так чтобы нельзя было изменять эти параметры напрямую. Нужно пересмотреть сегодняшнею модель, в рамках которой можно отключить поддержку NX при возникновении некоторых событий (типа загрузки несовместимой с NX динамической библиотеки). Несмотря на неоднозначность данного решения, авторы рассматривают его с точки зрения совместимости и находят вполне пригодным. И, наконец, третье условие не относится к той сфере, которую Microsoft может контролировать. Кроме этих потенциальных решений, можно было бы сделать так, чтобы флаг поддержки NX устанавливался при инициализации процесса и был бы неизменен на протяжении всей его жизни. Хотя авторы не уверены насчет выполнимости такого решения с сохранением возможности отключения поддержки NX для несовместимых с этой технологий подгружаемых динамических библиотек.

В заключение, авторы хотели бы отметить, что в Microsoft проделали неплохую работу по повышению уровня безопасности, результаты которой появились в XP Service Pack 2. Описанная методика атаки не должна восприниматься как следствие того, что Microsoft не в состоянии делать что-то качественно и надежно, так как уступки в плане безопасности были сделаны для сохранения совместимости. Всегда есть компромисс между новыми системами защиты и потенциальными проблемами совместимости и нужно заметить, что возможно никто другой так не заботится о сохранении обратной совместимости своих продуктов, как Microsoft.

Ссылки

Подписывайтесь на каналы «SecurityLab» в Telegram и Twitter, чтобы первыми узнавать о новостях и эксклюзивных материалах по информационной безопасности.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Windows xp nexus mtp driver windows
  • Windows xp netbook edition iso
  • Windows xp multimedia player
  • Windows xp mui русификатор
  • Windows xp msinfo32 exe