Безопасность и Internet - статьи


Метод поиска различий - часть 2


TCP-фрагментом будем называть TCP-сегмент, являющийся частью одного сеанса. (Спецификация протокола TCP не оперирует этим понятием; нам же оно необходимо для описания нашей методики.) Пример TCP-фрагмента: в процессе работы через telnet-соединение в рамках одного сеанса передается множество TCP-сегментов, содержащих всего один символ, введенный пользователем. В нашей методике поиска уязвимостей возможные различия искались в следующих аспектах реализации стека протоколов;

  • обработка некорректных заголовков кадров канального уровня (Ethernet);
  • обработка некорректных пакетов сетевого уровня (IP);
  • обработка некорректных заголовков сегментов транспортного уровня (TCP);
  • обработка IP-фрагментов;
  • обработка TCP-фрагментов;
  • обработка различных комбинаций TCP-флагов;
  • обработка пакетов с неправильными порядковыми номерами протокола TCP;
  • обработка некорректного HTTP-сеанса.

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

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

  1. Обработка заголовков.
  2. Назначение данных тестов - определить, каким образом происходит обработка заголовков сетевых пакетов, и какие заголовки система считает некорректными. Тестирование проводится в четыре этапа:

    • обработка некорректных пакетов канального уровня;
    • обработка некорректного IP-заголовка;
    • обработка некорректного TCP-заголовка;
    • посылка TCP-сегмента с неправильным номером очереди.

  3. Обработка фрагментов.
  4. Данный класс тестов предназначен для определения той стороны реализации стека, которая связана с обработкой TCP- и IP-фрагментов. Проведение тестов проходило в четыре этапа: