Серверная (www.it-simple.ru)

1Сv7: сбой программы с ошибкой в dll-файле


Описание

При работе пользователей в терминале — 1Cv7 падает без видимых причин.
В журнале событий для приложений появляется следующая ошибка:

Ошибка приложения 1cv7.exe, версия 7.ХХ.Х.ХХ, модуль *.dll, версия Х.ХХ.ХХХ, адрес 0xХХХХХХХХ.

где *.dll — конкретное имя библиотеки, которое может быть разным (например, ntdll.dll, oleaut32.dll, frame.dll, Moxel.dll и т.д.). Причём, обращаю внимание: библиотеки встречаются как 1С-овские, так и системные, то есть, ошибка кроется в ОС.

Решение

Редактируем системный файл boot.ini, находящийся в корне системного раздела.
Опцию ядра "/noexecute" меняем на значение "AlwaysOff" и добавляем опцию "/nopae".

Например, было:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise RU" /noexecute=optout /fastdetect

Станет:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise RU" /noexecute=AlwaysOff /nopae /fastdetect

После изменений, понятно, нужно будет перезагрузиться.

Причина.

Замечено, что сбой стал проявляться после выхода второго сервис пака для Windows XP и первого для Windows Server 2003. Именно после этих обновлений в системе появилась поддержка технологии защиты от вирусов, названной Data Execution Prevention (DEP)

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

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

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

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

Обход аппаратной реализации DEP в Windows (http://www.securitylab.ru/analytics/263899.php)

Дополнительно

Проверяем, доступна ли аппаратная функциональность DEP (в командной строке):

wmic OS Get DataExecutionPrevention_Available

Если вернётся значение TRUE — аппаратный DEP включен.

Определяем текущую настройку уровня DEP:

wmic OS Get DataExecutionPrevention_SupportPolicy

Вернётся численное значение от 0 до 3. Обозначает оно следующее:

3OptOutФункция DEP включена для всех процессов.
Администратор может вручную создать список приложений, для которых функция DEP отключена
(Значение по умолчанию для Windows 2003)
2OptInФункция DEP включена только для системных компонентов и служб Windows
(Значение по умолчанию для Windows XP)
1AlwaysOnФункция DEP включена для всех процессов
0AlwaysOffФункция DEP отключена для всех процессов