Средство проверки приложений — обзор

Сводка

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

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

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

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

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

Средство проверки приложений можно использовать отдельно или в сочетании с отладчиком в пользовательском режиме. Текущий пользователь должен быть членом группы администраторов на компьютере.

Установка AppVerifier

Средство проверки приложений входит в комплект средств разработки программного обеспечения (SDK) для Windows . Чтобы установить Application Verifier, проверка поле для него во время установки пакета SDK.

Снимок экрана: меню проверки приложений main с одним тестируемым приложением и списком тестов в правой части.

Что такое AppVerifier?

AppVerifier — это средство, предназначенное для обнаружения и отладки повреждений памяти, критических уязвимостей системы безопасности и проблем с ограниченными привилегиями учетных записей пользователей. AppVerifier помогает создавать надежные и безопасные приложения, отслеживая взаимодействие приложения с операционной системой Microsoft Windows и профилируя его использование объектов, реестра, файловой системы и API Win32 (включая кучи, дескрипторы и блокировки). AppVerifier также включает проверки для прогнозирования того, насколько хорошо приложение будет работать в средах без прав администратора.

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

Проблемы, определяемые AppVerifier

AppVerifier помогает определить:

Если приложение использует API правильно:

  • Небезопасные API TerminateThread.
  • Правильное использование API-интерфейсов локального хранилища потоков (TLS).
  • Правильное использование операций с виртуальным пространством (например, VirtualAlloc, MapViewOfFile).
  • Указывает, скрывает ли приложение нарушения доступа с помощью структурированной обработки исключений.
  • Указывает, пытается ли приложение использовать недопустимые дескрипторы.
  • Имеются ли повреждения памяти или проблемы в куче.
  • Указывает, не хватает ли приложению памяти из-за нехватки ресурсов.
  • Указывает, правильно ли используется критически важные разделы.
  • Указывает, будет ли приложение, работающее в административной среде, хорошо работать в среде с меньшими привилегиями.
  • Существуют ли потенциальные проблемы при запуске приложения от имени ограниченного пользователя.
  • Существуют ли неинициализированные переменные в будущих вызовах функций в контексте потока.

Тесты AppVerifier

AppVerifier состоит из наборов тестов, называемых "слоями проверки". Их можно включать или отключать для каждого тестируемого приложения. Если развернуть уровень проверки в области тестов, отображаются конкретные тесты. Чтобы включить тест для приложения, щелкните поле проверка рядом с ним. Чтобы включить весь уровень проверки, например Основные сведения, выберите поле проверка на верхнем уровне.

Существует тринадцать различных типов тестов, которые может выполнять AppVerifier.

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

Совместимость . Тесты уровня проверки совместимости помогают определить приложение, которое может иметь проблемы с операционной системой Microsoft Windows. Многие из этих проверок также можно использовать для проверки требований к логотипу. Дополнительные сведения см. в разделе Проверка приложений— тесты в приложении Verifier

Cuzz — уровень проверки нечеткого параллелизма (Cuzz) обнаруживает ошибки параллелизма и условия гонки данных. Cuzz корректирует планирование потоков, внедряя случайные задержки в ключевых точках в коде приложения. Дополнительные сведения см. в разделе Проверка приложений— тесты в приложении Verifier

Моделирование с низкими ресурсами . Имитация с низкими ресурсами пытается смоделировать среду при нехватке ресурсов, например нехватке памяти. Это моделирование позволит выявить ошибки, возникающие в условиях нехватки памяти. Это также называется внедрением ошибок. Дополнительные сведения см. в статье Проверка приложений — тесты в приложении

LuaPriv — тесты с ограниченными привилегиями учетной записи пользователя (LuaPriv) — это прогнозная и диагностическая работа, связанная с запуском приложения с правами администратора, а также будет ли это приложение работать так же, как при запуске с меньшими привилегиями (как правило, в качестве обычного пользователя). Дополнительные сведения см. в разделе Проверка приложений— тесты в приложении Verifier

Прочее — прочее состоит из тестов для различных тестов, таких как для опасных API, которые принимают небезопасные действия. Дополнительные сведения см. в разделе Проверка приложений— тесты в приложении Verifier

Сетевые тесты ищут неправильное использование API WinSock. Например, если сетевой API вызывается до успешного вызова WSAStartup() или после успешного вызова WSACleanup(). Дополнительные сведения см. в разделе Проверка приложений— тесты в приложении Verifier

NTLM — отслеживает использование API проверки подлинности AcquireCredentialsHandle и InitializeSecurityContext для обнаружения использования протокола NTLM. NTLM — это устаревший протокол проверки подлинности с недостатками, которые могут поставить под угрозу безопасность приложений и операционной системы. Дополнительные сведения см. в разделе Проверка приложений— тесты в приложении Verifier

Печать . Средство проверки печати помогает находить и устранять проблемы, которые могут возникнуть при вызове приложением подсистемы печати. Средство проверки печати предназначено для двух уровней подсистемы печати: слоя PrintAPI и слоя PrintDriver. Дополнительные сведения см. в разделе Проверка приложений— тесты в приложении Verifier

Веб-службы . Уровень проверки windows Webservices API (WWSAPI) работает для проверка для правильного использования WWSAPI, например WWSAPI, который ссылается на недопустимый встроенный объект WWSAPI или вызов WWSAPI со ссылками на один потоковый объект, уже используемый. Дополнительные сведения см. в разделе Проверка приложений— тесты в приложении Verifier

Службы — службы проверяют, проверка для правильного использования служб Windows. Например, службы запускаются и останавливаются должным образом. Сведения об исключениях кода остановки, создаваемых этими тестами, см. в разделе Application Verifier — Stop Codes and Definitions.

Производительность — тест производительности проверка для эффективного использования API, влияющих на производительность системы и энергопотребление, например вызов функции Windows, которая использует неправильный период ожидания. Сведения об исключениях кода остановки, создаваемых этими тестами, см. в разделе Application Verifier — Stop Codes and Definitions.

Зависания — тесты зависания для использования API- интерфейсов, которые приводят к тому, что система перестает отвечать на запросы, например, когда поток DllMain ожидает другой заблокированный поток. Сведения об исключениях кода остановки, создаваемых этими тестами, см. в разделе Application Verifier — Stop Codes and Definitions.

Как работает AppVerifier?

AppVerifier работает путем изменения неуправляемых таблиц методов DLL таким образом, чтобы необходимые проверки выполнялись перед выполнением реальной функции (это также называется "перехватом функций"). Например, адрес метода CreateFileA API Win32 заменяется внутренним методом AppVerifier, который активирует ряд тестов, которые в случае положительного результата будут зарегистрированы.

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

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

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

Использование средства проверки приложений в жизненном цикле разработки программного обеспечения

На протяжении всего жизненного цикла разработки программного обеспечения следует использовать средство проверки приложений.

Этап требований . AppVerifier должен быть запланирован и выделено время для его выполнения и последующего выполнения.

Этап разработки . Планируйте использование средства проверки приложений и определите, какие компоненты (модули, библиотеки DLL или EXEs) будут тестироваться.

Этап реализации . Запуск средства проверки приложений в стабильных сборках (от Альфа до RTM) различных разрабатываемых компонентов (важно тестировать компоненты по отдельности и вместе).

Этап проверки . Тестировщики должны выполнять все свои тесты (как вручную, так и автоматически) с помощью средства проверки приложений, так как это будет первый раз, когда приложение будет отправлено к ограничениям и будет отправлено непредвиденное поведение и данные. AppVerifier также является мощным инструментом для консультантов по безопасности, выполняющего аудиты (черный и белый ящик), так как он позволяет быстро перечислять реальные (или потенциальные) векторы атак и эксплойтов.

Этап выпуска . Клиенты и консультанты по безопасности могут использовать AppVerifier в выпущенных двоичных файлах для выявления потенциальных уязвимостей системы безопасности.

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

Разделы разделов

Этот раздел содержит следующие подразделы.

Средство проверки приложений — функции

Средство проверки приложений — тестирование приложений

Средство проверки приложений — тесты в службе проверки приложений

Средство проверки приложений — коды и определения остановки

Средство проверки приложений — отладка остановки средства проверки приложений

Средство проверки приложений — часто задаваемые вопросы