Сайт о телевидении

Сайт о телевидении

» » Скрытые каналы. Скрытый канал

Скрытые каналы. Скрытый канал

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

Появился термин «скрытый канал» (covert channel). Впервые понятие скрытого канала было введено в работе Лэмпсона в 1973 году. Канал называется скрытым, если он не проектировался, не предполагался для передачи информации в электронной системе обработки данных. Таким образом, термин скрытые каналы больше относится к внутрикомпьютерным телекоммуникациям.

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

В любом наборе информации, будь то исполняемая программа, графическое изображение или сетевой протокол есть пути переноса дополнительных «скрытых» данных. Такая возможность есть и практически на всех уровнях модели OSI. Широко известны инструменты туннелирования, использующие служебные заголовки протоколов сетевого уровняTCP/UDP.

Основное поле для использования скрытых каналов это локальные сети, имеющие доступ в Интернет.

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

Традиционно скрытые каналы характеризуются как каналы по памяти или каналы по времени/

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

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

Простейшим скрытым каналом по памяти является возможность показа на уровне Low названий директорий и файлов, созданных на уровне High. В данном случае информация может передаваться в именах файлов, которые выбираются в соответствии с заранее условленным кодом, в атрибутах файлов, в которых информация может кодироваться, размерами файлов, датами изменения файлов и т.д. И, наконец, существование файла с данным названием несет бит информации с верхнего уровня на нижний.

Другим примером канала по памяти является кодирование информации в сохраняемых настройках каких-либо ресурсов общего пользования субъектов уровней High и Low. Настройки, проведенные на уровне High, доступны наблюдению на уровне Low и, следовательно, могут нести информацию, выраженную заранее условленным кодом .

Скрытые каналы по времени впервые стали серьезно рассматриваться с 1976 г., когда один из создателей защищенной операционной системы Multics Миллен продемонстрировал своим коллегам скрытый канал по времени, реализованный на изолированных машинах High и Low. Обе машины были подсоединены к некоторым общим ресурсам ROM, других каналов или связей между ними не было. В подсистемах High и Low находились «Троянские кони». На уровне High «Троянский конь» при нажатии букв на клавиатуре модулировал специальным кодом интервалы времен занятости библиотеки ROM. Время занятости библиотеки верхним уровнем сканировалось запросами в библиотеку «Троянским конем» нижнего уровня. Получившийся скрытый канал по времени позволял в реальном времени печатать информацию, получаемую через скрытый канал с клавиатуры подсистемы уровня High.

Скрытый канал передачи информации через Интернет строится с помощью вписывания сообщения вместо последнего бита оцифрованного изображения, которое передается в качестве легального сообщения. Поскольку последний бит мало влияет на качество изображения, передача информации оказывается скрытой от субъекта, ведущего перехват и допускающего передачу только легальных изображений. Хорошо известен метод борьбы с данным методом стеганографии, заключающийся в изменении формата изображения, например, с помощью компрессии. Данный метод уничтожает скрытый канал указанного вида.

Примером скрытого канала в аналогичной задаче является скрытый канал в TCP/IP протоколе. Поле ISN в TCP-протоколе служит для организации связи клиента с удаленным сервером. Размер этого поля 32 бита. Используя это поле, например в n пакетах, можно осуществить скрытую передачу.

Один из способов организации скрытого канала - перестановка сетевых пакетов определенным образом. При этом на основе заранее оговоренных признаков передается последовательность бит.

Еще один способ организации скрытого канала - использование алгоритмов электронной цифровой подписи. С.В. Белим и А.М. Федосеев в 2007 г. провели исследование и доказали возможность создания скрытых каналов в рамках алгоритма электронной цифровой подписи ГОСТ Р 34.10-2001.

Особо следует выделить два примера каналов по времени, использующих возможности изменять длительности занятости в работе центрального процессора. В первом примере отправитель информации меняет время занятости CPU в течение каждого фрагмента времени, выделенного для его работы. Например, для передачи 0 и 1 одна длина промежутка времени кодирует 1, а другая - 0. В другом случае отправитель использует промежутки времени между обращениями к процессору.

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

В случае использования методов стеганографии решение задачи выделения скрытых сообщений представляется более оптимистичным. Примером успешного выявления стеганографических вставок является использование скрытого канала в поле ISN протокола TCP, упоминавшегося выше.

Наиболее эффективным способом борьбы со скрытыми каналами является их уничтожение. Например, в приведенных выше примерах скрытых каналов спуска информации при использовании интерфейса RS-232 встраивание между уровнями High и Low устройства, транслирующего байты и рандомизирующего задержку выставления сигнала на верхнем уровне, видимую на нижнем уровне, позволяет полностью уничтожить любой детерминированный скрытый канал по времени и существенно испортить скрытый статистический канал. Аналогичные методы успешно используются для защиты от скрытых каналов при скрытой передаче информации через открытые системы.

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

В России о разработке научной методологии организации борьбы со скрытыми каналами в информационных сетях было заявлено в конце 2006 г. Российские ученые разработали математическую модель построения скрытых каналов, оценки их пропускной способности и методов борьбы с ними.

В 2008м году в Российской Федерации был принят ГОСТ Р 53113.1 «Информационная технология. Защита информационных технологий и автоматизированных систем от угроз информационной безопасности, реализуемых с использованием скрытых каналов. Часть 1. Общие положения.»

В 2009 году принимается ГОСТ Р 53113.2 «Защита информационных технологий и автоматизированных систем от угроз информационной безопасности, реализуемых с использованием скрытых каналов. Часть 2. Рекомендации по организации защиты информации, информационных технологий и автоматизированных систем от атак с использованием скрытых каналов.»

А. С. САННИКОВ

Московский инженерно-физический институт (государственный университет)

СКРЫТЫЕ КАНАЛЫ ПЕРЕДАЧИ ИНФОРМАЦИИ

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

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

В настоящее время наиболее популярными являются механизмы создания скрытых каналов в сетевых протоколах, таких как: IP, TCP, ICMP, HTTP, DNS . Основным принципом организации подобных скрытых каналов является подмена значений в заголовке протокола на собственные, при этом не нарушая корректность заголовка и соблюдая его правдоподобность.

Скрытые каналы могут быть организованы не только в сетевых протоколах. Интересным примером может служить возможность организации скрытых каналов в алгоритме цифровой подписи .

Можно предложить следующую классификацию скрытых каналов:

· Тип скрытого канала

o По памяти

§ На основе значений.

o По времени

§ На основе значений

§ На основе изменения значений

· Пропускная способность

· Направленность

o Однонаправленный

o Двунаправленный

· Поведение

o Активный

o Пассивный

o Косвенный

· Сложность обнаружения (правдоподобие)

· Надежность

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

В данном инструменте реализована возможность организации скрытого управления удаленным компьютером с установленной ОС “Linux”.

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

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

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

Список литературы

Скрытый канал

Скрытый канал - это коммуникационный канал, пересылающий информацию методом, который изначально был для этого не предназначен.

Отличительные черты

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

Скрытые каналы часто путают с использованием законных каналов, при котором происходит атака на псевдо-защищённые системы с низкой степенью доверенности, используя такие схемы как стеганография или даже менее сложные схемы, предназначенные для того, чтобы спрятать запрещённые объекты внутри объектов с легальной информацией. Подобные использования законных каналов с применением схем скрытия данных не являются скрытыми каналами и могут быть предотвращены доверенными системами с высокой степенью защищённости.

Скрытые каналы могут проходить сквозь защищённые операционные системы, и необходимы особые меры для их контроля. Единственным проверенным методом контроля скрытых каналов является так называемый анализ скрытых каналов. В то же время, защищённые операционные системы могут с лёгкостью предотвратить неверные (или незаконные) использования легальных каналов. Часто анализ легальных каналов на предмет скрытых объектов неверно представляют как единственную успешную меру против незаконного использования легальных каналов. Поскольку на практике это означает необходимость анализировать большое количество программного обеспечения, ещё в 1972 было показано что подобные меры неэффективны . Не зная этого, многие верят в то, что подобный анализ может помочь справиться с рисками, связанными с легальными каналами.

Стандарт TCSEC

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

В Критериях определяют два вида скрытых каналов:

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

Критерии, также известные как Оранжевая книга , требуют, чтобы анализ скрытых каналов памяти был классифицирован как требование для системы класса B2, а анализ скрытых каналов времени как требование для класса B3.

Устранение скрытых каналов

Возможность наличия скрытых каналов не может быть устранена полностью, но её можно существенно уменьшить аккуратным проектированием системы и её анализом.

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

Похожим случаем является технология «port knocking». Обычно при передаче информации распределение запросов во времени не важно, и за ним не наблюдают, но при использовании «port knocking» оно становится существенным.

Скрытие данных в модели OSI

Хэнделом и Сэнфордом была предпринята попытка расширить перспективу и сфокусироваться на скрытых каналах в общей модели сетевых протоколов. В качестве основы своих рассуждений они берут сетевую модель OSI и затем характеризуют элементы системы, которые возможно использовать для скрытия данных. У принятого подхода есть преимущества над подходом Хэндела и Сэнфорда, так как в последнем рассматриваются стандарты, противоположные некоторым используемым сетевым средам и архитектурам. Также не разработано надёжной схемы стенографирования.

Тем не менее, установлены общие принципы для скрытия данных на каждом из семи уровней модели OSI. Помимо того, что Хэндел и Сэнфорд предложили использовать зарезервированные поля заголовков протоколов (что легко обнаружимо), они также предположили возможность каналов по времени, касающуюся операции над CSMA/CD на физическом уровне.

Их работа определяет ценность скрытого канала по следующим параметрам:

  • Обнаружимость: Только у получателя, для которого предназначена передача, должна быть возможность производить измерения скрытого канала.
  • Неотличимость: Скрытый канал должен быть неидентифицируем.
  • Полоса пропускания: Количество битов скрытых данных за каждое использование канала.

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

Скрытие данных в среде ЛВС

Первым, кто проанализировал скрытые каналы в среде локальных сетей, был Гирлинг. Его работа фокусируется на локальных вычислительных сетях (ЛВС), в которых определяются три очевидных скрытых канала - два по памяти и один по времени. Это показывает реальные примеры возможных полос пропускания для простых скрытых каналов в ЛАС. Для особой среды ЛАС, автор ввёл понятие перехватчика, который наблюдает за действиями определённого передатчика в ЛВС. Стороны, осуществляющие скрытую передачу, - это передатчик и перехватчик. Скрытая информация, согласно Гирлингу, может быть передана любым из следующих способов:

  • Наблюдение за адресами, к которым обращается передатчик. Если количество адресов, к которым он может обращаться, равно 16, то существует возможность секретной передачи с размером секретного сообщения 4 бита. Автор отнёс эту возможность к скрытым каналам памяти, так как она зависит от посылаемого содержимого.
  • Другой очевидный скрытый канал полагается на размер кадра, посланного передатчиком. Если существует 256 различных размеров кадра, то количество секретной информации, полученной при расшифровке одного размера кадра, будет 8 бит. Этот канал также был отнесён автором к скрытым каналам памяти.
  • Третий, временной, способ полагается на разность между временами передачи. К примеру, нечётная разность будет означать «0», а чётная - «1». Время, необходимое для передачи блок данных, рассчитывается как функция от программной вычислительной скорости, скорости сети, размеров сетевого блока и затрат времени протокола. В предположении, что в ЛВС передаются блоки различных размеров, вычисляются средние программные затраты времени и также оценивается полоса пропускания скрытых каналов.

Скрытие данных в пакете протоколов TCP/IP

Более конкретный подход был предпринят Роулэндом. Сосредотачиваясь на IP и TCP заголовках пакета протоколов TCP/IP, Роулэнд выводит правильные методы кодирования и декодирования с использованием поля идентификации IP и TCP-поля начального номера последовательности и номера последовательности подтверждения. Эти методы реализованы в простом приложении, написанном для Linux-систем, работающих на ядре версии 2.0.

Роулэнд просто доказывает саму идею существования скрытых каналов в TCP/IP, а также их использования. Соответственно, его работу можно оценивать как практический прорыв в этой сфере. Принятые им методы кодирования и декодирования более прагматичны по сравнению с ранее предложенными работами. Эти методы проанализированы с учётом механизмов безопасности, таких как преобразование сетевых адресов брандмауэром.

Тем не менее, необнаружимость этих методов скрытой передачи стоит под вопросом. Например, в случае когда производятся операции над полем номера последовательности TCP-заголовка, принята схема, в которой алфавит каждый раз скрытно передаётся, но тем не менее кодируется одним и тем же номером последовательности.

Более того, использование поля номера последовательности, так же, как и поля подтверждения, нельзя осуществлять с привязкой к ASCII -кодировке английского алфавита, как это предложено, так как оба поля учитывают получение байтов данных, относящихся с определённым сетевым пакетам.

У скрытия данных в пакете протоколов TCP/IP существуют следующие важные аспекты:

  • Идентифицируются скрытые каналы в сетевой среде.
  • Получаются удовлетворительные методы кодирования и декодирования у отправителя и получателя, соответственно.
  • Не учитывается эффект использования сети скрытых коммуникаций в целом.

Примечания

См. также

Ссылки

  • Gray-World - Команда разработчиков Gray-World: Программы и Статьи
  • Steath Network Operations Centre - Система поддержки скрытой связи

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

Забросить shell-код на удаленную машину и застолбить там back-door — это только половина дела. А что делать дальше, мы подумали? Необходимо скрыть свой IP-адрес и обойти все брандмауэры, не оставляя никаких следов в логах, анализируемых как вручную, так и автоматизированными системами определения вторжения. Существует множество утилит, прячущих левые сетевые соединения от глаз администраторов, однако на физическом уровне весь «хакерский» трафик элементарно обнаруживается и пресекается практически любым брандмауэром, чего атакующему допускать ни в коем случае нельзя. В идеале необходимо пробить тоннель, открыв секретный канал связи, не создающий никаких дополнительных соединений и не
генерирующий никакого избыточного трафика, чтобы даже самый строгий разбор дампов, награбленных сетевым анализатором, не выявил ничего подозрительного.

Над решением этой проблемы бились лучшие хакерские умы. Сначала идея получила чисто теоретическое обоснование (Andrew Hintz, Craig Rowland) с чисто лабораторной реализацией, непригодной для практического использования. Затем к делу подключилась Жанна Рутковская, разработавшая специальный протокол с кодовым названием NUSHU и вполне жизнеспособные модули, ориентированные на работу в Linux Kernel 2.4. Жанна вручила нам мощное средство для управления удаленными shell’ами, от которого практически невозможно разработать адекватную защиту. Осталось только разобраться, как этим средством воспользоваться.

Скрытые пассивные каналы: основные концепции

С недавних пор в хакерском лексиконе появилось понятие «скрытых пассивных каналов » (Passive Covert Channels , или сокращенно PCC ). Они представляют собой разновидность обычных скрытых каналов (Covert Channels ), однако, в отличие от последних, не только не устанавливают своих соединений, но и вообще не генерируют никакого собственного трафика! Передача информации осуществляется исключительно путем модификации пакетов, пролетающих мимо атакованного узла.

Соль в том, что эти пакеты направляются не к хакеру, а шуруют своими путями на различные узлы интернета, например, www.google.com, за счет чего достигается высочайшая степень анонимности. Естественно, возникает резонный вопрос: как хакер сможет добраться до содержимого пакетов, идущих мимо него? Для этого необходимо подломать один из промежуточных маршрутизаторов (как правило, принадлежащих провайдеру, обслуживающему атакуемую организацию) и установить на него специальный модуль, анализирующий заголовки TCP/IP-пакетов на предмет наличия скрытой информации или ее внедрения.

Таким образом, хакер организует двухсторонний секретный пассивный канал связи с узлом-жертвой, не только засекретив факт передачи левой информации, но еще и надежно замаскировав свой IP, который может определить только администратор взломанного маршрутизатора, но никак не владелец узла-жертвы!

Рассмотрим схему взаимодействия с целевым узлом (жертвой) по скрытому пассивному каналу. Хакер (обозначенный буквой Х) каким-то совершенно не относящимся к обсуждаемой теме образом забрасывает на целевой узел (обозначенный буквой A) shell-код, захватывающий управление и устанавливающий back-door вместе со специальным модулем, обеспечивающим функционирование PCC-канала. Теперь все TCP/IP-пакеты, отправляемые жертвой во внешний мир, содержат незначительные изменения, кодирующие, например, пароли или другую конфиденциальную информацию.

Часть этих пакетов проходит через внешний маршрутизатор B, заблаговременно взломанный хакером, внедрившим в него PCC-модуль. PCC-модуль анализирует заголовки всех TCP/IP-пакетов на предмет скрытого содержимого, после чего декодирует его и отправляет хакеру по открытому каналу. Передача данных от хакера к жертве осуществляется по аналогичной схеме. PCC-модуль, установленный на маршрутизаторе, выявляет пакеты, направленные на целевой IP-адрес, и модифицирует их заголовки в соответствии с выбранным принципом кодирования информации.

Таким образом, мы получаем защищенный канал A-B и открытый B-X, однако хакеру ничего не стоит общаться с узлом B через анонимный proxy-сервер или даже выстроить цепочку из нескольких защищенных хостов. К тому же, выбор маршрутизатора B необязателен. Главное, чтобы маршрутизатор располагался между целевым узлом А и одним из узлов, с которыми общается жертва.

Во власти протокола IP

Возьмем протокол IP и попробуем создать на его основе скрытый пассивный канал. Среди множества полезных и бесполезных полей заголовка наше внимание привлекает 16-битовое поле Identification , генерируемое операционной системой случайным образом и используемое для идентификации дейтаграммы в случае ее фрагментации. Узел-получатель группирует фрагменты с одинаковыми IP-адресами источника/назначения, типом протокола и, разумеется, идентификатором.

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

Фишка в том, что PCC-модуль может беспрепятственно модифицировать поле идентификатора по своему вкусу, передавая с каждым IP-пакетом 16 бит полезных данных. Это в теории. На практике же нам потребуется выделить несколько бит для маркировки своих пакетов, иначе PCC-приемник ни за что не сможет отличить их от остальных. Пусть в 12 младших битах передаются полезные данные, а в четырех старших — их контрольная сумма. Тогда PCC-приемнику останется всего лишь взять 12 бит, рассчитать их CRC и сравнить с оставшимися четырьмя битами. Если они совпадут, значит, это наш пакет, если же нет — пускай идет себе лесом.

Также следует позаботиться о нумерации пакетов, поскольку порядок следования IP-пакетов в общем случае не совпадает с порядком их отправки. А для этого также требуются биты, в результате чего реальная информационная емкость IP-заголовка стремится к одному байту, что, в общем-то, не так уж и плохо. Для передачи небольших объемов данных (типа паролей) вполне сойдет. Главное — не забывать о том, что идентификатор должен: а) быть уникальным; б) выглядеть случайным. Поэтому необходимо прибегнуть к скремблированию, то есть к наложению на передаваемый текст некоторой псевдослучайной последовательности данных (известной как PCC-отправителю, так и PCC-получателю) через оператор XOR.

Кроме идентификатора, можно (с некоторой осторожностью) менять поля TTL (Time To Live – максимальное время жизни пакета), тип сервиса (TOS) и протокола (protocol). Однако это слишком заметно и легко обнаруживается просмотром дампов, полученных любым снифером.

Наш извозчик — протокол TCP

При установке TCP-соединения передающая сторона (узел A) устанавливает флаг SYN и выбирает произвольный 32-битный номер последовательности (Sequence Number, или сокращенно SEQ). Если принимающая сторона (узел B) согласна принять узел А в свои объятия, она отправляет ему пакет с установленным флагом ACK и номером подтверждения (Acknowledgment Number), равным SEQ+1, а также генерирует свой собственный номер последовательности, выбираемый случайными образом. Узел A, получив подтверждение, поступает аналогичным образом, что наглядно демонстрирует следующая схема:

узел A —— SYN(ISN) ————> узел B
узел A <—— SYN(ISN+1)/ACK —— узел B
узел A —— ACK —————-> узел B

ISN – это начальный номер последовательности (Initial Sequence Number ), уникальный для каждого TCP/IP-соединения. С момента установки соединения номера последовательности планомерно увеличиваются на количество принятых/отправленных байт. Впрочем, не будем углубляться в теорию. Остановимся на том факте, что 32-битное поле ISN можно изменять псевдослучайным образом, «промодулированным» секретными данными и… никто ничего не заметит! Конечно, пропускная способность упадет до четырех байт на каждое TCP-соединение, устанавливаемое узлом-жертвой, а TCP-соединений устанавливается не так уж и много (особенно если мы имеем дело не с нагруженным сервером, а с рабочей станцией). Тем не менее, для
перекачки паролей и удаленного управления через командную строку даже такой скромной пропускной способности вполне достаточно.

Жанна Рутковская , решив не ограничивать себя лабораторными опытами, разработала протокол NUSHU , создающий скрытые пассивные каналы посредством модификации ISN с последующим шифрованием последнего алгоритмом DES на основе идентификатора IP-пакета (IP.id), порта-источника (TCP.sport) и IP-адреса назначения (IP.daddr).

Сеанс практической магии

Идем на сайт Жанны Рутковской — invisiblethings.org , видим раздел с инструментами tools, находим в нем «NUSHU — passive covert channel engine for Linux 2.4 kernels » и качаем архив исходных текстов — invisiblethings.org/tools/nushu/nushu.tar.gz (всего 18 Кб). Распаковываем, компилируем. Компиляция осуществляется стандартно. Просто запускаем утилиту make и получаем три модуля ядра: nushu_receiver.o (приемник), nushu_sender.o (передатчик) и nushu_hider.o.

Механизм шифрования ISN в протоколе NUSHU

Приемник устанавливается на поломанный маршрутизатор, передатчик — на целевой узел жертвы. Для организации двухсторонней связи приемник и передатчик устанавливаются на оба узла. Модуль nushu_hider.o в организации скрытого канала не участвует и предназначен для обмана штатных анализаторов (типа tcpdump), не позволяя им обнаруживать факт изменения ISN.

Из readme следует, что модуль-передатчик обрабатывает следующие параметры командной строки:

  • dev=, где device – сетевое устройство, с которым предполагается работать (например, eth0);
  • cipher=, где 0 означает передачу без шифрования, а 1 предписывает использование DES;
  • key="string", где string — произвольная строка-маркер, идентичная строке-маркеру, установленной на модуле-приемнике (используется только в том случае, если шифрование выключено, иначе игнорируется);
  • src_ip= — IP-адрес узла, на котором установлен передатчик.

Модуль-приемник, помимо описанных выше ключей dev, cipher и key, обрабатывает аргумент exclude_ip=<172.16.*.*>, задающий список неприкосновенных IP-адресов, при отправке пакетов на которые протокол NUSHU задействован не будет, поскольку ISN останется неизменным (этот параметр является опциональным).

Модуль nushu_hider.o загружается без каких-либо параметров и только в том случае, если в этом возникает необходимость.

Хорошо, все модули успешно загружены, ядро функционирует нормально и в панику, судя по всему, впадать не собирается. Что делать дальше? А ничего! Ведь это только движок, обеспечивающий функционирование PCC-каналов . К нему можно прикрутить кейлоггер или удаленный shell, но это уже придется делать самостоятельно. А как?! Ни readme, ни сопроводительные презентации не дают ответа на этот вопрос, поэтому приходится зарываться в исходные тексты и разбирать их на отдельные байты.

Начнем с передатчика, реализованного в файле sender.c. В процедуре init_module(), отвечающей за инициализацию модуля, сразу же бросаются в глаза следующие строки:


create_proc_read_entry ("info", 0, proc_de, cc_read_proc_info, NULL);
struct proc_dir_entry * wpde = create_proc_entry ("message_to_send", 0, proc_de);

Все ясно! Модуль использует псевдофайловую систему /proc, создавая директорию nushu, а в ней — два файла: info и message_to_send, с которыми можно работать с прикладного уровня, как с обычными устройствами (если быть точнее, псевдоустройствами).Аналогичным образом обстоят дела и с приемником, реализованным в файле receiver.c, ключевой фрагмент которого приведен ниже:

Struct proc_dir_entry *proc_de = proc_mkdir ("nushu", NULL);
create_proc_read_entry ("message_received", 0, proc_de, cc_read_proc_message, NULL);
create_proc_read_entry ("info", 0, proc_de, cc_read_proc_info, NULL);

Как видно, вместо устройства message_to_send на этот раз создается message_received, из которого можно читать получаемые сообщения через стандартные функции ввода/вывода. В общем, имея на руках исходные тексты, со всеми этими причиндалами совсем несложно разобраться, тем более что их суммарный объем составляет всего 69 Кб.

Заключение

Помимо описанных, существуют и другие транспортные средства, пригодные для передачи скрытого трафика, например, опция штампа времени в TCP-заголовке. HTTP-протокол дает еще большие возможности, поскольку включает в себя множество факультативных полей, которые можно безболезненно модифицировать в весьма широких пределах. Однако все это слишком заметно, и наиболее стойким к обнаружению на сегодняшний день остается протокол NUSHU , работающий с ISN.

Может ли атакованный администратор обнаружить скрытые пассивные каналы хотя бы теоретически? Скрупулезный анализ сетевого трафика позволяет выявить некоторую ненормальность распределения ISN, но для этого требуется обработать сотни тысяч «хакнутых» пакетов, сравнивая их с оригиналами. Потому намного проще выявить посторонний ядерный модуль, отвечающий за создание и поддержку PCC-каналов, используя общие методики верификации целостности системы. Однако это уже совсем другой разговор, к которому мы еще вернемся.