Проверка компонентов безопасности Windows

Позволяет проверить, использует ли приложение компоненты безопасности Windows и надежные ACL.

Общие сведения

Изменение используемых по умолчанию защитных средств Windows может подвергнуть пользователей повышенному риску.

Сведения о тесте

Выполняется проверка безопасности программы путем запуска средств BinScope Binary Analyzer и Attack Surface Analyzer.

Корректирующие действия

Устраните неполадки и исправьте проблемы, выявленные при тестировании. Перестройте приложение и повторите тестирование.

Тесты BinScope Binary Analyzer

Тесты BinScope Binary Analyzer проверяют способы кодирования и построения двоичных файлов программы, снижающие уязвимость приложения перед атаками и возможность использования его в качестве вектора атаки.

В тестах BinScope Binary Analyzer проверяется правильность использования следующих средств безопасности:

AllowPartiallyTrustedCallersAttribute

Сообщение об ошибке комплекта сертификации приложений для Windows: Ошибка диагностики APTCACheck

Атрибут AllowPartiallyTrustedCallersAttribute (APTCA) разрешает доступ к полностью доверенному коду со стороны частично доверенного кода в подписанных сборках. Применяя атрибут APTCA к сборке, частично доверенные вызывающие стороны могут получать доступ к этой сборке на весь срок ее жизни, что может нанести ущерб безопасности.

Порядок действий в случае отрицательного результата теста

Используйте атрибут APTCA для сборок со строгим именем только в том случае, если для вашего проекта это необходимо, а риски хорошо вам понятны. Если это все же неизбежно, убедитесь, что все API защищены соответствующими требованиями к управлению доступом для кода. Атрибут APTCA не действует, когда сборка является частью приложения для Магазина Windows.

Примечания

Данный тест выполняется только для управляемого кода (C#, .NET и пр.).

Защита с использованием обработчика исключений /SafeSEH

Сообщение об ошибке комплекта сертификации приложений для Windows: Ошибка диагностики SafeSEHCheck

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

Порядок действий в случае отрицательного результата теста

При выполнении сборки приложения включите параметр /SAFESEH в команде компоновщика. Этот параметр включен по умолчанию в конфигурациях выпуска Visual Studio. Убедитесь, что этот параметр включен в инструкциях сборки для всех исполняемых модулей вашего приложения.

Примечания

Тест не проводится для 64-разрядных двоичных файлов или двоичных файлов для набора микросхем ARM, так как они не хранят адреса обработчика исключений в стеке.

Предотвращение выполнения данных

Сообщение об ошибке комплекта сертификации приложений для Windows: Ошибка диагностики NXCheck

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

Порядок действий в случае отрицательного результата теста

При сборке приложения включите параметр /NXCOMPAT в команде компоновщика. Этот параметр включен по умолчанию в версиях компоновщика, которые поддерживают предотвращение выполнения данных (DEP).

Примечания

Рекомендуется протестировать приложения на ЦП с поддержкой DEP и устранить сбои, возникшие в результате DEP.

Случайный выбор расположения адресного пространства

Сообщение об ошибке комплекта сертификации приложений для Windows: Ошибка диагностики DBCheck

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

Порядок действий в случае отрицательного результата теста

При сборке приложения включите параметр /DYNAMICBASE в команде компоновщика. Убедитесь, что все модули, используемые приложением, также используют этот параметр компоновщика.

Примечания.

Обычно ASLR не влияет на производительность. Однако в некоторых сценариях наблюдается небольшое повышение производительности на 32-разрядных системах. Существует вероятность снижения производительности в сильно перегруженных системах, где во множество расположений загружено множество образов.

Этот тест выполняется только для программ, написанных с управляемым кодом, например с помощью C# или .NET Framework.

Общий раздел PE чтения/записи

Сообщение об ошибке комплекта сертификации приложений для Windows. Ошибка диагностики SharedSectionsCheck.

Двоичные файлы с записываемыми разделами, помеченными как общие, представляют угрозу безопасности. Без необходимости не выполняйте сборку программ с общими записываемыми разделами. Используйте CreateFileMapping или MapViewOfFile, чтобы создать правильно защищенный объект общей памяти.

Порядок действий в случае отрицательного результата теста

Удалите из приложения все общие разделы и создайте объекты общей памяти, вызвав CreateFileMapping или MapViewOfFile с соответствующими атрибутами безопасности, а затем перестройте программу.

Примечания

Этот тест выполняется только для приложений, написанных на неуправляемых языках, например C или C++.

AppContainerCheck

Сообщение об ошибке комплекта сертификации приложений для Windows. Ошибка диагностики AppContainerCheck.

AppContainerCheck проверяет, установлен ли бит appcontainer в заголовке переносимого исполняемого (PE) файла для исполняемого двоичного файла. Для правильного выполнения приложений Магазина Windows бит appcontainer должен быть установлен для всех EXE-файлов и всех неуправляемых библиотек DLL.

Порядок действий в случае отрицательного результата теста

Если собственный исполняемый файл не проходит тест, убедитесь, что вы используете последнюю версию компилятора и компоновщика, а также что флажок /appcontainer используется в компоновщике.

Если управляемый исполняемый файл не проходит тест, убедитесь, что для выполнения сборки приложения Магазина Windows вы используете последнюю версию компилятора и компоновщика, например Microsoft Visual Studio.

Примечания.

Этот тест выполняется для всех EXE-файлов и для неуправляемых библиотек DLL.

ExecutableImportsCheck

Сообщение об ошибке комплекта сертификации приложений для Windows. Ошибка диагностики ExecutableImportsCheck.

Образ переносимого исполняемого (PE) файла не проходит этот тест, если его таблица помещена в раздел исполняемого кода. Это может происходить, если вы включили слияние .rdata для образа PE, установив для флажка /merge компоновщика Visual C++ значение /merge:.rdata=.text.

Порядок действий в случае отрицательного результата теста

Не выполняйте слияние таблицы импорта с разделом исполняемого кода. Убедитесь, что с помощью флажка /merge компоновщика Visual C++ не установлено слияние раздела ".rdata" с разделом кода.

Примечания.

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

WXCheck

Сообщение об ошибке комплекта сертификации приложений для Windows. Ошибка диагностики WXCheck.

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

Порядок действий в случае отрицательного результата теста

Убедитесь, что в двоичном файле нет записываемого или исполняемого раздела и что значение SectionAlignment двоичного файла как минимум равно его PAGE_SIZE.

Примечания.

Этот тест выполняется для всех EXE-файлов и для собственных неуправляемых библиотек DLL.

Исполняемый файл может содержать записываемый и исполняемый раздел, если он был создан с включенным параметром "Изменить и продолжить" (/ZI). В результате отключения параметра "Изменить и продолжить" недействительный раздел не будет присутствовать.

PAGE_SIZE — это SectionAlignment по умолчанию для исполняемых файлов.

Запрещенные файлы в Магазине Windows

Сообщение об ошибке комплекта сертификации приложений для Windows. Тест на наличие запрещенных файлов не пройден.

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

На данный момент в комплекте сертификации приложений для Windows выполняется проверка наличия следующих запрещенных файлов:

Attack Surface Analyzer

Тесты Attack Surface Analyzer проводят поиск слабых мест системы безопасности, проверяя изменения состояния системы, параметры времени выполнения и защищаемые объекты, которые возникают после установки и запуска программы. Устранение таких слабых мест не приводит к снижению производительности. Мы не сможем сертифицировать ваше приложение для Магазина Windows, если в нем обнаруживаются такие слабые места системы безопасности.

Тесты Attack Surface Analyzer, применимые ко всем языкам программирования, проводят поиск слабых мест системы безопасности в программе.

Безопасные исполняемые файлы со слабыми ACL

В этом тесте проводится поиск безопасных исполняемых файлов, у которых имеются слабые списки управления доступом (ACL). Для этого выполняется проверка ACL для каждого нового или измененного исполняемого файла, владельцем которого является администратор. Списки управления доступом таких файлов должны запрещать их изменение пользователями, не являющимися администраторами. Attack Surface Analyzer тестирует исполняемые (EXE) файлы, а также файлы, которые могут иметь исполняемое содержимое, такие как сценарии и файлы справки.

Порядок действий в случае отрицательного результата теста

Если в вашем приложении обнаружены такие слабые места, найдите и удалите следующие права для всех учетных записей, не являющихся записями администраторов: GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, FILE_WRITE_ATTRIBUTES, FILE_WRITE_EA, FILE_APPEND_DATA и FILE_WRITE_DATA, DELETE

Примечания

Слабые ACL позволяют изменять исполняемые файлы не только администраторам. Измененный исполняемый файл может работать не так, как ожидается. Если права доступа настроены неправильно, злоумышленник может заменить или изменить содержимое файла и сделать его вредоносным.

Безопасные каталоги, которые содержат объекты и имеют слабые ACL

В этом тесте проводится поиск безопасных каталогов, которые содержат объекты и имеют слабые ACL. Проверяются ACL для новых и измененных иерархий папок. Иерархические ACL (или наследуемые ACL) управляют доступом ко всем файлам и папкам внутри папки. ACL для таких папок должны разрешать изменять эти папки и их содержимое только администраторам.

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

Порядок действий в случае отрицательного результата теста

Если в вашей программе обнаружены такие слабые места, для найденного в процессе теста каталога найдите и удалите (чтобы они не наследовались) следующие права для всех учетных записей, не являющихся записями администраторов: GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, FILE_ADD_FILE, FILE_ADD_SUBDIRECTORY, FILE_WRITE_ATTRIBUTES, FILE_WRITE_EA, FILE_APPEND_DATA, FILE_WRITE_DATA, FILE_DELETE_CHILD и DELETE. Для этого может потребоваться изменить флажок Inherited для ACL корневого каталога.

После исправления прав для корневого каталога может также потребоваться исправить права для отдельных исполняемых файлов, как описано в разделе Безопасные исполняемые файлы со слабыми ACL.

Примечания

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

Безопасные разделы реестра со слабыми ACL

В этом тесте проводится поиск безопасных разделов реестра, у которых имеются слабые списки управления доступом (ACL). Для этого проверяются ACL новых и измененных разделов в кусте реестра Local Machine (HKLM). Только администраторы должны иметь доступ на запись к кусту реестра Local Machine.

Порядок действий в случае отрицательного результата теста

Удалите для всех учетных записей, не являющихся записями администраторов, следующие права на объект, определенный в процессе теста: GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, KEY_SET_VALUE, KEY_CREATE_SUBKEY и DELETE.

Примечания.

Параметры реестра в этом разделе могут определять, где следует искать исполняемые файлы, такие как EXE- и DLL-файлы. Приложения также используют разделы реестра в кусте Local Machine, чтобы сохранять и считывать пути к исполняемым файлам. Если злоумышленник изменит такой раздел, например укажет путь к недоверенному исполняемому файлу, программа может выполнить неверный файл.

Если раздел реестра содержит ссылку на исполняемый файл, в этом тесте проверяется, предоставляют ли ACL раздела неподходящие права для учетных записей, не являющихся записями администраторов.

Службы, разрешающие доступ учетным записям, которые не являются записями администраторов, уязвимы для незаконного изменения

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

Порядок действий в случае отрицательного результата теста

Исправьте отдельные файлы, как описано в разделе Безопасные исполняемые файлы со слабыми ACL.

Примечания.

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

Например, злоумышленник может вызвать ChangeServiceConfig, чтобы изменить путь к исполняемому файлу службы.

Службы, которые быстро перезапускаются или могут перезапускаться более двух раз каждые 24 часа

В этом тесте проводится поиск служб, которые могут часто перезапускаться. Проверяется конфигурация службы. Службы не должны перезапускаться более двух раз за 24 часа.

Порядок действий в случае отрицательного результата теста

Измените параметр Reset Period службы, чтобы предотвратить ее перезапуск более двух раз за 24 часа.

Примечания.

В этом тесте проводится поиск уязвимостей, связанных с технологией случайного выбора расположения адресного пространства (ASLR). ASLR — это функция, которая загружает исполняемый код в случайные места памяти. Это затрудняет создание надежных эксплойтов для уязвимостей. Если злоумышленник может заставить службу часто перезапускаться, он может принудительно загрузить исполняемый код во все возможные расположения и обойти ASLR.

В этом тесте проверяются элементы lpsaActions структуры Service Failure Actions на наличие значений SC_ACTION_REBOOT и SC_ACTION_RESTART. Эти значения можно настроить, вызвав ChangeServiceConfig2.

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

 

 

Показ:
© 2015 Microsoft