Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fuzzing исследование уязвимостей методом грубой силы.pdf
Скачиваний:
1128
Добавлен:
13.03.2016
Размер:
5.96 Mб
Скачать

Ограничения и исключения при фаззинге

53

могут меняться в зависимости от целей тестера. Несмотря на всю свою мощь, фаззинг, однако, никогда не сможет выявить 100% ошибок ни в одном из объектов. В следующем разделе мы рассмотрим типы оши$ бок, которые, возможно, не будут обнаружены при исследовании.

Ограничения и исключения при фаззинге

Фаззинг по природе своей способен выявлять только определенные ти$ пы слабых мест объекта. Также он имеет частные ограничения по ти$ пам ошибок. В этом разделе поговорим о нескольких классах ошибок, которые фаззер обычно пропускает.

Ошибки контроля доступа

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

Фаззер может обнаружить дыру в программе, которая позволяет напа$ дающему получить полный контроль над системой календаря. На низ$ шем уровне программные ошибки сходны в различных объектах, так что во всей системе их можно обнаружить, пользуясь одной и той же логикой. Во время тестирования фаззер также может успешно присво$ ить права администратора обычному пользователю. Однако очень ма$ ловероятно, что сам обходной путь получения контроля доступа будет выявлен. Почему? Учтите, что фаззеру недоступна логика программы. Фаззер никак не сможет узнать, что область прав администратора не должна быть доступна обычному пользователю. Внедрение в фаззер способности логически мыслить возможно, но, вероятно, окажется ис$ ключительно сложным и чаще всего будет бесполезно при тестирова$ нии других объектов со значительными отличиями.

Ошибки в логике устройства

Фаззеры также нельзя признать лучшим средством для поиска оши$ бок в логике построения. Возьмем, к примеру, ошибку, обнаруженную в Veritas Backup Exec, которая позволяет нападающим получить уда$ ленный доступ к реестру сервера Windows, чтобы создавать, изменять или удалять ключи реестра.1 Это приведет, скорее всего, к полнейшей

1http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=269

54

Глава 2. Что такое фаззинг?

уязвимости системы. Сбой происходит из$за «подслушивающего уст$ ройства», которое применяет к протоколу TCP удаленный запрос RPC, не требующий идентификации, но принимающий команды для мани$ пуляций в регистре. Дело здесь не в проблемах идентификации – при создании программы она вовсе не требовалась. Это неудачное решение при разработке проистекает, вероятно, от неверия в то, что хакеры бу$ дут тратить свое время на расшифровку языка описаний интерфейсов Microsoft (Microsoft Interface Description Language, IDL), использо$ ванного для описания целевой программы и последовательного по$ строения пользовательской утилиты для взаимодействия с сервером.

Хотя фаззер может обнаружить слабости в разборе поступающих по RPC данных, что является результатом одной из форм ошибок уровня доступа, он не сможет определить, что оставшаяся без защиты функ$ ция небезопасна. Это будет играть важную роль, когда мы будем гово$ рить о фаззинге ActiveX в главе 18 «Фаззинг веб$броузера: автомати$ зация», поскольку многие средства управления дают хакерам возмож$ ность, например, создавать и запускать файлы. Чтобы выявить эти ошибки построения, требуется особая работа.

Тайные ходы

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

Повреждение памяти

При повреждении памяти тестируемое приложение часто зависает. Этот тип ошибки можно опознать по тем же симптомам, что и отказ сервиса. Тем не менее, с некоторыми типами повреждения памяти приложение справляется успешно, и обычный фаззер никогда не смо$ жет их опознать. Возьмем, к примеру, ошибку формата строки, кото$ рая может остаться невыявленной, если не воспользоваться специаль$ ным дебаггером. Ошибка формата строки часто сводится к одному опасному требованию на уровне машинного кода. Например, на маши$ не x86 Linux симптом атаки на формат строки, содержащей %n, часто выражается следующим требованием:

mov %ecx,(%eax)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]