Stateful Packet Inspection
Stateful Packet Inspection — это разновидность сетевого экрана, которая хранит информацию о состоянии сетевых соединений (например, потоков Transmission Control Protocol и обменах данными по User Datagram Protocol), проходящих через него. Благодаря хранению информации о предыдущих состояниях соединений такой межсетевой экран способен более эффективно выявлять и предотвращать попытки вторжений, что повышает уровень безопасности. Программное обеспечение экрана настраивается таким образом, чтобы различать допустимые пакеты для разных типов соединений. Только те пакеты, которые соответствуют известному активному соединению, будут пропущены через экран, остальные — отклонены.
Происхождение и основные принципы
До появления экранов с отслеживанием состояния применялись так называемые «безсостояния» (stateless) сетевые экраны, которые обрабатывали каждую кадру (или пакет) изолированно. Такой «примитивный» экран осуществляет фильтрацию пакетов на уровне сетевого уровня (уровень 3 по модели OSI), что обеспечивает высокую производительность за счёт анализа только заголовка каждого пакета. Однако без сохранения информации о предыдущих пакетах и состояниях соединения такие экраны уязвимы к атакам с подменой идентификаторов. Такой сетевой экран не может определить, принадлежит ли полученный пакет к уже установленному соединению, инициирует ли новое соединение или является посторонним (вредоносным) пакетом.
Stateful Packet Inspection, напротив, ориентирован на отслеживание текущего состояния соединения и предоставляет администратору сети более точный контроль над сетевым трафиком. Классическим примером сетевой операции, которая может работать неправильно через экран без состояния, является протокол FTP. Для корректной работы этот и подобные протоколы должны иметь возможность открывать соединения на произвольных высоких портах. Так как безсостоянию экран не может определить, что пакет, направленный на защищаемый порт (например, порт 4970 некоего хоста), на самом деле относится к легитимной FTP-сессии, он такой пакет блокирует. Экраны с отслеживанием состояния решают эту проблему за счёт ведения таблицы открытых соединений и интеллектуального сопоставления новых запросов с уже существующими легитимными сессиями.
Описание
Сохранение истории соединений
Stateful Packet Inspection обеспечивает отслеживание состояния сетевых соединений (например, потоков TCP и UDP) и способен хранить важные атрибуты каждой сессии. Эти атрибуты, в совокупности называемые состоянием соединения, могут включать данные об адресах IP и портах, задействованных в сеансе, а также номера последовательностей пакетов, проходящих через соединение. Инспекция с отслеживанием состояния анализирует входящий и исходящий трафик во времени, хранит сведения о состоянии в динамических таблицах. При фильтрации учитываются не только заранее определённые администратором правила, но и контекст, накопленный для данного соединения на основе предыдущих пакетов.
Наиболее сложная проверка проводится экраном при установлении соединения; в таблицу состояний заносятся только те TCP-сессии или потоки UDP, которые соответствуют политикам безопасности. После этого все пакеты данной сессии обрабатываются быстрее, так как достаточно определить, относятся ли они к существующему соединению. Такие пакеты пропускаются экраном. Сессии, не соответствующие политике безопасности, как и не совпадающие с существующими таблицами состояния пакеты, блокируются.
Завершение сессий (time-out)
Чтобы предотвратить переполнение таблицы состояний, сессии автоматически завершаются (истекают по времени ожидания) при отсутствии сетевой активности в течение определённого времени; устаревшие соединения удаляются из таблицы состояний. Это может вызвать проблемы с разрывом соединения для некоторых приложений. Во избежание подобных сбоев многие приложения периодически отправляют специальные сообщения keepalive, чтобы поддерживать соединение в периоды пользовательской неактивности; аналогичную функцию могут реализовывать и некоторые сетевые экраны.
Аутентификация на основе трёхэтапного рукопожатия
Экран с отслеживанием состояния полагается на установление соединения по механизму «трёхэтапного рукопожатия» (англ. three-way handshake, также известно как «SYN, SYN-ACK, ACK» — по последовательности установки битов SYN (синхронизация) и ACK (подтверждение)) протокола TCP, если используется протокол TCP; для UDP эта процедура не применяется.
Когда клиент инициирует новое соединение, он отправляет пакет с установленным битом SYN в заголовке пакета. Такие пакеты со стороны экрана идентифицируются как начало новых соединений. Если запрошенная услуга доступна на сервере, то последний отвечает пакетом с установленными битами SYN и ACK. После чего клиент отправляет пакет с битом ACK и соединение переходит в состояние ESTABLISHED (установлено). Экран с отслеживанием состояния обычно пропускает все исходящие пакеты, а входящие — только те, которые относятся к уже установленным соединениям (ESTABLISHED), тем самым защищая сеть от несанкционированных попыток доступа со стороны злоумышленников.
Сессии с протоколами без установления соединения
Многие stateful экраны способны отслеживать состояние сессий и для протоколов без установления соединения (connectionless), например, UDP. Широко применяется метод UDP hole punching, при котором для поддержания актуальности сессии через экран периодически отправляются служебные пакеты с минимальным содержимым.
Для таких протоколов сессия обычно считается установленной (ESTABLISHED) уже после первого зафиксированного пакета.
Завершение сессий в connectionless-протоколах происходит только по истечении тайм-аута (time-out).
Ограничения подхода
Реализуя различные функции, stateful-экраны по сути ограничиваются отслеживанием состояния соединений; для действующих сессий экран просто обращается к таблице состояний, обычно не сравнивая пакет с набором всех фильтрующих правил. Следует отметить, что концепция глубокой инспекции пакетов (deep packet inspection) не является частью механизма stateful inspection. Функция такого экрана — сверка входящего трафика с таблицей состояний для определения легитимности соединения, без необходимости углублённого анализа содержимого пакетов.
Недостатки и уязвимости
Уязвимости
Существует риск того, что уязвимости в программных декодерах отдельных протоколов могут позволить злоумышленнику получить контроль над межсетевым экраном. Это подчёркивает важность своевременного обновления программных средств защиты[1].
Некоторые экраны с отслеживанием состояния подвержены риску того, что отдельные узлы сети могут быть обманом вынуждены инициировать внешние соединения; полностью исключить данный класс атак нельзя даже после аудита программного обеспечения на самом узле. В ряде случаев сетевой экран может быть обойдён с помощью посещения определённой веб-страницы (например, с активным JavaScript или после нажатия некоторой кнопки)[2].
Примечания
- ↑ Обзор Tomato от Grumpy Editor (англ.), LWN.net (11 January 2010). Дата обращения: 20 июня 2024.
- ↑ Взлом межсетевого экрана через веб-страницу без необходимости взаимодействия (англ.), The Register (6 January 2010). Дата обращения: 20 июня 2024.