Автор: Саватеев Е.О.
Источник: Конкурс статей №4 на сайте http://www.securitylab.ru
На сегодняшний день существует два основных направления в решении задачи защиты информации от несанкционированного доступа: криптография и стеганография. Целью криптографии является скрытие содержимого сообщения за счет шифрования. Стеганография скрывает сам факт существования и передачи тайного сообщения.
В связи с развитием аппаратных средств вычислительной техники и огромным количеством каналов передачи информации появились новые стеганографические методы, в основе которых лежат особенности представления информации в файлах, вычислительных сетях и т. п.
В данной статье рассматриваются возможности стеганографии в Internet Protocol версии 4 (далее IP) и в Internet Control Message Protocol (ICMP), как части IP. Поиск этих возможностей производится путем анализа структуры пакетов и устройства соответствующих протоколов. На основе найденных возможностей описаны средства и сформулированы методы, направленные на формирование скрытого канала передачи информации.
Стеганографическая система или стего-система – совокупность средств и методов, которые используются для формирования скрытого канала передачи информации [1].
Рассмотрим обобщенную модель стеганографической системы (Рис. 1).
Определим основные понятия:
· Сообщение – данные любого типа.
· Контейнер – любая информация, пригодная для сокрытия в ней сообщений.
· Стего-контейнер – контейнер, содержащий скрытое сообщение.
· Ключ (стего-ключ) – секретный ключ, необходимый для шифрования (расшифровки) сообщения с целью усиления защиты.
На основе обобщенной модели можно построить стеганографическую систему, базирующуюся на протоколе IP. В качестве контейнера в такой системе будет использоваться IP-датаграмма. Ключ выбирается в зависимости от алгоритма шифрования и должен быть определен до начала обмена сообщениями, либо передан по защищенному каналу связи.
При построении стего-системы следует учитывать следующие положения:
1) Потенциальный противник имеет полное представление о стеганографической системе и деталях ее реализации. Единственной информацией, которая остается неизвестной противнику, является ключ, с помощью которого его владелец может установить факт присутствия скрытого сообщения и его содержание.
2) Если противник каким-то образом узнает о существовании скрытого сообщения, то это не должно позволить ему извлечь подобные сообщения из других контейнеров до тех пор, пока ключ хранится в тайне (обеспечивается средствами криптографии).
Кроме того, стего-система должна отвечать определенным требованиям:
1)Свойства контейнера должны быть модифицированы таким образом, чтобы стего-контейнер беспрепятственно проходил по каналу связи, никоим образом не привлекая внимание потенциального противника.
2) Стего-система должна быть надежной. А именно: предполагать защиту от потери, дублирования и нарушения очередности получения стего-контейнеров, и осуществлять контроль целостности сообщения.
Чтобы учесть положения и выполнить требования, определенные выше, необходимо из исходного сообщения сформировать последовательность блоков данных, пригодных для встраивания в контейнер (далее M-блоков). Каждый такой блок должен быть зашифрован, и помимо фрагмента сообщения содержать информацию, достаточную для обеспечения надежности стего-системы. Также должен быть определен M-блок содержащий информацию о размере сообщения и М-блок являющийся подтверждением получения стего-контейнера.
Определим общую структуру M-блока и алгоритмы отправки и получения стего-контейнера. Остальные средства и методы будут определены при описании стего-системы, базирующейся на конкретном протоколе.
Общая структура M-блока
Смещение фрагмента указывает на то, где в исходном сообщении находится данный фрагмент. Фрагмент ключа содержит старшие k бита ключа.
Последовательность полей может быть произвольной, а для строгого описания структуры M-блока необходимо лишь определить значения m, n и k.
В связи с тем, что M-блоки могут передаваться по каналу связи в произвольном порядке, рекомендуется использовать блочный шифр, работающий в режиме Electronic Codebook (ECB) [2]. Длина блока при этом, очевидно, должна совпадать с длиной M-блока.
1.Сформировать последовательность M-блоков.
2.Встроить M-блок в контейнер.
3.Отправить стего-контейнер адресату.
4.В течение определенного времени ожидать от адресата подтверждения получения. Если подтверждение не получено, прервать процесс отправки, иначе перейти к шагу
5.Выполнять шаги 2-4 для каждого M-блока сформированной последовательности до тех пор, пока не достигнут конец этой последовательности.
1.Определить, содержит ли полученный контейнер встроенное сообщение. Если содержит, перейти к шагу 2, иначе ожидать получения следующего контейнера.
2.Извлечь фрагмент сообщения.
3.Подтвердить получение стего-контейнера.
4.Выполнять шаги 1-3 до тех пор, пока не будет установлен факт получения всего сообщения
Удалив шаг 4 из алгоритма отправки и шаг 3 из алгоритма получения, можно увеличить скорость передачи сообщения, снизив при этом надежность стего-системы.
Internet Protocol обеспечивает передачу блоков данных, называемых датаграммами, от отправителя к получателю. Протокол IP обеспечивает при необходимости также фрагментацию и сборку датаграмм для передачи данных через сети с малым размером пакетов.
Version (4 бита) – версия протокола,в данном случае рассматриваетсяверсия 4.IHL (4 бита) – длина заголовка.Type of Service (8 бит) – тип сервиса,определяет с помощью неких абстрактных параметров тип обслуживания.Total Length (16 бит) – общая длина датаграммы.Identification (16 бит) – идентификатор, устанавливается отправителем для сборкифрагментов какой-либо датаграммы.Flags (3 бита) – управляющие флаги.Fragment Offset (13 бит) – смещение фрагмента.Time to Live (8 бит) – максимальное время, в течение которого датаграмме позволенонаходиться в сети Internet.Protocol (8 бит) -это поле показывает, какой протокол следующего уровня используетданные из Internet датаграммы.Header Checksum (16 бит) – контрольная сумма заголовка.Source Address (32 бита) – адрес отправителя.Destination Address (32 бита) – адрес получателя.Options (переменной длины) – дополнительные опции.
Padding (переменной длины) – выравнивание, используется для того, чтобы убедиться, что заголовок заканчивается на 32-битной границе.
Наибольший интерес представляют поля Identification (ID) и Options. Рассмотрим назначение этих полей подробнее.
В соответствии со спецификацией протокола IP [3], ID содержит уникальный идентификатор пакета, который используется для сборки фрагментированных датаграмм. Значение этого поля не зависит от значений других полей заголовка и сохраняется при фрагментации.
Опции должны поддерживаться всеми Internet модулями (хостами и шлюзами). Не обязательно каждая конкретная датаграмма несет опции, но нести их все же может. Существует 8 различных опций, из которых лишь одна пригодна для передачи тайного сообщения (убедиться в этом можно обратившись к спецификации [3]). Это опция Internet Timestamp.
Length (8 бит) -количество байт в опции, которое учитывает байты типа, длины, указателя и oflw/flg. Pointer (8 бит) -количество байт от начала этой опции до конца временных штампов, плюс единица.
Overflow (oflw, 4 бита) -количество IP модулей, которые не могут произвести регистрацию временных штампов по причине отсутствия свободного места. Flag (flg, 4 бита) - флаг, определяет способ регистрации временных штампов. Timestamp (32 бита) -временной штамп в миллисекундах (относительно полуночи по Единому Времени). Если время в миллисекундах неопределимо или не может быть отсчитано относительно полуночи по Единому Времени, то может быть внесено любое другое время при условии, что самый старший бит в поле временного штампа будет установлен в единицу (что указывает на использование нестандартного значения и дает некоторую свободу в заполнении данного поля).
Опишем процесс формирования последовательности М-блоков, структуру M-блока и процесс встраивания. Также определим M-блок, содержащий информацию о размере сообщения и M-блок, являющийся подтверждением получения стего-контейнера.
Общая структура M-блока определена на стр. 2, необходимо лишь задать значения переменных m, n и k:
m = 24·n = 16·k = 24
Информацию о размере сообщения несет M-блок, в котором: ·поле «фрагмент сообщения» содержит количество М-блоков в сформированной последовательности (включая данный); ·поле «смещение фрагмента» содержит некоторую случайную последовательность бит; ·поле «фрагмент ключа» содержит последовательность бит, соответствующую строке “siz”.
Очевидно, что максимальный размер сообщения при этом равен 3((2)^24 – 2) байт (примерно 48 Мб).
1.Из исходного сообщения создать последовательность M-блоков, добавив к ней блок, содержащий информацию о размере сообщения.
2.Полученную последовательность упорядочить по старшим 16 битам алгоритмом, который дает результат, описанный в следующем примере.
Пример (упорядочивание последовательности)
Рассмотрим последовательность, составленную из десятичных чисел, соответствующих старшим 16 битам M-блоков.
Исходная последовательность: 3 1 2 1 3 3 4 5 1 4 2 5Упорядоченная последовательность: 1 2 3 4 5 1 2 3 4 5 1 3
Следует отметить, что такое упорядочивание приводит к тому, что M-блок, содержащий размер сообщения оказывается в произвольном месте последовательности.
Встраивание осуществляется в поле Identification заголовка IP-датаграммы и в опцию временного штампа Internet. При этом необходимо учитывать следующие условия:
1) Спецификация протокола IP [3] требует, чтобы идентификатор был уникальным в течение времени жизни (Time To Live) датаграммы. На практике это часто реализуется увеличением значения поля ID на единицу для каждой следующей датаграммы.
2) Несмотря на возможность использования нестандартного временного штампа, для каждой следующей датаграммы значение этого поля должно увеличиваться. Увеличение должно происходить, по крайней мере, для определенного числа идущих друг за другом датаграмм.
3) В соответствии со спецификацией, отправитель должен создавать опцию Internet Timestamp так, чтобы поля для временных штампов были достаточны для размещения всей ожидаемой информации. Размер опции не изменяется при добавлении временных штампов. Если поле с временными штампами уже заполнено, то датаграмма передается без вставки временного штампа, а счетчик переполнения увеличивается на единицу.
Рассмотрим процесс встраивания подробнее. Процесс извлечения после этого станет очевиден и не будет требовать дополнительного описания.
1. Старшие 16 бит встраиваемого M-блока поместить в поле ID заголовка IP-датаграммы. Упорядочивание последовательности M-блоков обеспечивает частичное выполнение первого из условий, определенных выше. Частичное, поскольку упорядочивание лишь обеспечит увеличение идентификатора на значение большее или равное единице для определенного числа идущих друг за другом IP-датаграмм (число таких датаграмм либо постоянно, либо постепенно уменьшается)
2. В заголовке IP-датаграммы создать опцию Internet Timestamp, содержащую два временных штампа, размещенных в следующих друг за другом 32-битных словах (поля опции заполняются строго в соответствии со спецификацией протокола [3]). Биты 8-31 (нумерация с нуля, старший бит -нулевой) каждого временного штампа содержат оставшиеся 48 бит встраиваемого М-блока, старший бит устанавливается в 1, а биты 1-7 обеспечивают выполнение второго из определенных выше условий
Подтверждением получения данного стего-контейнера является M-блок, в котором значения полей «Фрагмент сообщения» и «Фрагмент ключа» совпадают со значениями идентичных полей М-блока, извлеченного из этого стего-контейнера, а поле «Смещение фрагмента» больше на единицу.
Т. к. отправку подтверждений получения следует осуществлять с учетом условий, изложенных в пункте «Встраивание» (стр. 5), целесообразно подтверждать получение не одного стего-контейнера, а их определенного числа. Это число выбирается произвольным образом и, например, может совпадать с числом стего-контейнеров, в которых значение поля Identification возрастает. Обобщенные алгоритмы отправки и получения (стр. 3) при этом должны быть незначительно модифицированы.
Internet Control Message Protocol – протокол контрольных сообщений Internet, использует основные свойства IP, как если бы он являлся протоколом более высокого уровня [4]. Однако фактически ICMP является составной частью протокола Internet.
Сообщения ICMP протокола, как правило, оповещают об ошибках, возникающих при обработке датаграмм, и посылаются с помощью стандартного IP заголовка. Структура сообщения зависит от его типа. Наибольший интерес представляют ICMP сообщения типа 8 (эхо-запрос), поскольку они применяются в программе ping– одном из главных и полезных инструментов отладки сетей.
Type (8 бит) – тип: 8 для эхо-запроса и 0 для эхо-ответа.
Code (8 бит) – код (влияет на заполнение полей Identifier и Sequence Number).
Checksum (16 бит) – контрольная сумма. Identifier (16 бит) - идентификатор для соотнесения эхо-сообщений и ответов на них. Sequence Number (16 бит) -номер очереди, служащий для соотнесения эхо-сообщений и ответов на них. Data (переменной длины) – поле дополнительной информации.
Пакет, посылаемый ping, состоит из IP-заголовка длинной 20 байт и, собственно, ICMP-сообщения длинной 8 + n байт (8 байт на заголовок и n байт дополнительной информации) [5]. Обычно в качестве значения n выбирается 56 (для UNIX) или 32 (для Windows). Так как часто поле дополнительной информации содержит конкретные данные, полезные при отладке ошибок, от них зависящих, представляется возможным использовать его для передачи тайного сообщения.
В соответствии со спецификацией протокола ICMP [4], на каждый эхо-запрос должен быть отправлен эхо-ответ. Причем если эхо-сообщение содержало дополнительные данные, то эти же данные должны содержаться в сообщении в ответ на эхо. Т. о. задача контроля целостности сообщения и подтверждения получения стего-контейнера уже решена на уровне протокола.
Перейдем к описанию стеганографической системы, основывающейся на обнаруженной возможности.
m = 64
n = k = 32
Общая длина M-блока при этом равна 128 битам. Такое значение выбрано с целью имитации работы оригинальной программы ping, позволяющей заполнить поле дополнительной информации заданным шаблоном, максимальная длина которого равна 16 байтам.
Поле «фрагмент сообщения» содержит количество М-блоков в сформированной последовательности (включая данный). ·Поле «смещение фрагмента» содержит некоторую случайную последовательность бит. ·Поле «фрагмент ключа» содержит последовательность бит, соответствующую строке “size”.
Необходимо лишь из исходного сообщения создать последовательность M-блоков, поместив в ее начало блок, содержащий информацию о размере сообщения. Других ограничений на порядок элементов данной последовательности нет.
Встраивание осуществляется в поле дополнительной информации ICMP эхо-сообщения. Опишем этот процесс.
1. Создать ICMP эхо-сообщение, которое содержит поле дополнительной информации определенной длины. Длина выбирается из интервала от 24 до 65507 байт. Однако, следует учесть, что фрагментированный ICMP пакет откровенно демаскирует факт передачи тайного сообщения.
2. В старшие 8 байт поля дополнительной информации поместить временной штамп. Оставшиеся байты заполнить данными, соответствующими встраиваемому M-блоку. При этом если длина поля дополнительной информации превышает минимальную, то эти данные заполняют его циклически. Т. о. имитируется работа оригинальной программы ping.
3. Сформировать корректную IP-датаграмму, поместив в поле данных созданное эхо-сообщение.
Чтобы не привлекать внимание потенциального противника, каждый стего-контейнер необходимо отправлять определенное количество раз с заданным временным интервалом, имитируя таким образом работу программы ping. Перед отправкой нового стего-контейнера, не являющегося дубликатом предыдущего, необходима временная задержка, которая должна быть достаточно велика и непостоянна.
Прежде всего, программа, реализующая любую из предложенных стего-систем, должна быть построена на архитектуре клиент-сервер [5], однако и клиент и сервер могут быть равноправными участниками обмена тайной информацией.
Формирование и отправка стего-контейнера (IP-датаграммы) может осуществляться через интерфейс «сырых» сокетов (raw sockets) [5], либо с использованием библиотеки, предоставляющей требуемые функции (например, libnet). Для получения стего-контейнера рекомендуется использовать платформенно-независимую библиотеку, позволяющую перехватывать пакеты на уровне ядра операционной системы. Такой библиотекой может быть libpcap [6].
В процессе написания данной статьи была разработана программа, реализующая стего-систему на базе ICMP. Результаты тестирования этой программы приведены в приложении.
Краткая характеристика предложенных стего-систем
В будущем планируется реализовать стего-систему на базе Internet Protocol, а также рассмотреть возможности формирования скрытого канала передачи информации в протоколе Internet версии 6 и в Transmission Control Protocol.
*Число маршрутизаторов – количество маршрутизаторов, которые прошел стего-контейнер от отправителя кполучателю.**Интервал2 – задержка между отправкой стего-контейнеров, не являющихся дубликатами.
Число маршрутизаторов определялось с помощью программы traceroute [5]. Задержка между отправкой дубликатов во всех тестах равнялась 1 сек.
1. В. Генне, “Основные положения стеганографии”. Журнал “Защита информации. Конфидент”, №3, 2000.
2. Брюс Шнайер, Прикладная криптография. Протоколы, алгоритмы и исходные тексты на языке C. – Триумф, 2002 – 816с.
3. Marina del Rey, Request for Comments 791, Internet Protocol, September 1981.
4. J. Postel, Request for Comments 792, Internet Control Message Protocol, September 1981.
5. Йон Снейдер, Эффективное программирование TCP/IP. – СПб: Питер, 2001 – 320с.
6. У. Р. Стивенс, UNIX: разработка сетевых приложений. – СПб: Питер, 2004 – 1086с.