В первой статье цикла мы рассказали о том, что несет в себе понятие сетевых скрытых каналов. Во второй статье мы поговорим о том, как строятся сетевые скрытые каналы в реальных сетях пакетной передачи на примере протоколов IPv4, ICMP и HTTP.

Скрытый канал в IPv4: где спрячешь бит информации?

Начнём с самого простого – скрытый канал по памяти на основе изменения полей заголовка пакета. Заголовок IPv4 пакета – это структурированный набор полей, при этом имеются:

  • обязательные используемые поля, изменение которых возможно в пределах заданных в сети правил;

  • обязательные неиспользуемые или зарезервированные поля и биты, изменение которых возможно;

  • поля-расширения заголовков, изменение которых также возможно.

Возьмём Reserved bit в поле Flags заголовка IPv4. Как правило, его значение равно нулю, однако в реальности это значение можно изменять, и большинство средств сетевой защиты проигнорируют это изменение. Это позволяет построить скрытый канал, передающий информацию в данном бите. Для отправки скрытого сообщения "1001" отправитель отправляет 4 пакета:

  • Пакет 1: Reserved = 1 (кодируем единицу)

  • Пакет 2: Reserved = 0 (кодируем ноль)

  • Пакет 3: Reserved = 0 (кодируем ноль)

  • Пакет 4: Reserved = 1 (кодируем единицу)

Схема скрытого канала в IPv4
Схема скрытого канала в IPv4

Для расчета пропускной способности скрытых каналов существует отдельный набор формул, основанный на расчете средней взаимной информации, однако для простейших скрытых каналов мы можем ее оценить «на пальцах» - 1 бит/пакет. Обычный брандмауэр пропустит такой пакет – потому что это технически валидный пакет IPv4. Конечно, это медленно, но для утечки 256-битного криптографического ключа потребуется всего несколько минут даже в условиях низкой загруженности канала связи.

Скрытый канал по времени: ICMP-туннель с модуляцией задержек

Использование «сырого» IP-трафика выглядит менее изящным, чем использование трафика более специализированного протокола. Возьмем, к примеру, ICMP протокол. Он довольно прост, при этом разрешен в большинстве сетей, и средства защиты будут к нему менее внимательны. Давайте построим в нем скрытый канал по времени на основе изменения длин межпакетных интервалов (ДМИ), и будем кодировать информацию в интервалах между ping-запросами. Нужно определить базовый интервал t и стандартное отклонение Δt. Эти параметры определяются из наблюдения за трафиком. При нормальной работе длина межпакетного интервала между ping-пакетами – параметр t – примерно 1 секунда. Пусть ДМИ, равная t, кодирует нулевой скрытый символ. Для кодирования скрытой единицы будем добавлять к t значение Δt. Получатель анализирует последовательность интервалов и восстанавливает исходное сообщение.

Схема кодирования простая, снова посчитаем пропускную способность «на пальцах»: между двумя последовательными пакетами идет одна длина межпакетного интервала, в которой кодируется скрытый символ. То есть, заnпакетов мы передадим скрытый символ. Пропускная способность такого канала равна (n-1)/n бит/пакет.

Схема скрытого канала в ICMP
Схема скрытого канала в ICMP

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

HTTP скрытый канал: угадайте, как загружается сайт

Схема каналов HTTP
Схема каналов HTTP

Усложнение схемы кодирования скрытого канала несет в себе две цели – повышение его пропускной способности и повышение устойчивости к противодействию. Чем сложнее протокол, тем больше он дает возможностей по построению скрытого канала. Поэтому перейдем к следующему уровню – построение скрытого канала в прикладном протоколе. Рассмотрим самый популярный прикладной протокол HTTP. Когда браузер загружает веб-страницу, он может загружать объекты параллельно через несколько соединений. Предположим, на странице 6 объектов и браузер использует 3 соединения. Количество способов распределить 6 объектов по 3 потокам равно 28 комбинациям. Каждой комбинации мы присваиваем номер от 0 до 27. Это даёт нам 4.8 бита информации за одну загрузку страницы.

Пример схемы кодирования скрытого канале в HTTP
Пример схемы кодирования скрытого канале в HTTP

Например, для кодирования сообщения "1010" по примеру кодировки на изображении выше: поток 1 получает 2 объекта, поток 2 получает 4 объекта, поток 3 получает 0 объектов. Получатель считает, сколько запросов в каждом потоке, и восстанавливает сообщение.

Скрытый тайник: ARP-кэш как хранилище секретов

А что, если отправитель и получатель не могут общаться одновременно? Для таких случаев придуман трюк: использовать кэш сторонней системы как «тайник».

Схема скрытого канала "тайник"
Схема скрытого канала "тайник"

Скрытый отправитель создаёт поддельный ARP-запрос с кортежем (MAC: AA:BB:CC, IP: 192.168.0.1). Этот запрос отправляется сторонней системе, например, маршрутизатору. Сторонняя система добавляет этот кортеж в локальный ARP-кэш. Кэш хранит запись в течение заданного времени жизни. Скрытый получатель в любой момент может запросить этот ARP-кэш и получить скрытые данные.

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

Исторический скрытый канал: призрак в сети

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

И отправитель, и получатель анализируют весь сетевой трафик, попутно считая хэши от полезной нагрузки каждого пролетающего пакета. Как только отправитель видит в общем потоке легитимный пакет, хэш которого случайно совпадает с тем секретным сообщением, которое он хочет передать, он посылает короткий «маячок» – например, стандартный ARP-запрос. Для средства защиты это выглядит как обычное поведение, но для получателя это сигнал о скрытом сообщении. Получается практически идеальная схема для нарушителя, где закладка создает минимум вмешательства в сеть, просто указывая на уже существующую историю трафика.

Пример исторического скрытого канала
Пример исторического скрытого канала

Заключение

В научной литературе представлено множество способов построения сетевых скрытых каналов практически во всех известных сетевых протоколах – и в классических «корпоративных», и «домашних» сетях, и в сетях умного дома, в промышленных сетях, и даже в LTE и 5G сетях. Чем сложнее протокол, тем больше возможностей по построению скрытого канала. Скрытые каналы по памяти сильнее зависят от конкретного протокола, чем каналы по времени, ведь в первом случае нам нужно смотреть на структуру конкретного пакета, а во втором – достаточно иметь механизмы для отслеживания временных характеристик наблюдаемого процесса.

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