Скрытый канал
Скрытый канал (от англ. англ. covert channel) — это канал, который может использоваться для передачи информации от одного пользователя системы к другому с помощью средств, не предназначенных разработчиками системы для этой цели[1][2]. Для того чтобы коммуникация была возможна, обычно требуется предварительная договорённость между отправителем и получателем, с определением способа кодирования сообщения, который был бы распознаваем получателем. Скрытые каналы тесно связаны с стеганографией.
В противоположность скрытым каналам существуют открытые каналы или легитимные каналы (от англ. англ. overt channel), которые представляют собой специально спроектированные для этого пути передачи информации.
Эволюция понятия
Понятие скрытого канала было введено в 1973 году Батлером Лэмпсоном (англ. Butler W. Lampson)[3], когда он рассматривал задачу по сохранению в секрете информации одного процесса от другого в системах с многоуровневой безопасностью (проблема изоляции). В этом контексте он описал скрытые каналы как каналы, позволяющие процессу передавать информацию по средствам, изначально не предназначенным для этого. Например, если процесс захватывает эксклюзивный доступ к файлу (и другие процессы не могут получить к нему доступ) или использует всё доступное дисковое пространство. Другие процессы способны обнаружить подобную активность, и это может быть использовано для создания скрытого канала.
В развитии идеи Лэмпсона Министерство обороны США в своей TCSEC (также известной как «оранжевая книга») определило скрытые каналы как любой канал, который может быть использован процессом для передачи информации с нарушением политики безопасности системы.
Common Criteria определяет скрытый канал как «принудительный нелегальный сигнальный канал, позволяющий пользователю тайно обойти требования многоуровневой безопасности и невидимости системы».
В «Handbook for the Computer Security Certification of Trusted System» Военно-морской исследовательской лаборатории США[1] скрытый канал определяется как механизм, способный передавать информацию между пользователями системы с помощью средств, не предназначенных для этого разработчиками.
Со временем понятие эволюционировало от сферы операционных систем и проблемы изоляции процессов до обозначения любого взаимодействия между сущностями через каналы, которые не были спроектированы в качестве средств коммуникации. Предыдущие определения тесно связаны со стеганографией.
Классификации
Традиционно скрытые каналы классифицируют по механизму передачи информации, выделяя два основных типа: каналы хранения и каналы синхронизации (временные). Один и тот же общий ресурс может использоваться для обоих типов каналов; различие заключается в том, используется ли он для хранения (канал хранения) или его поведение модулируется во времени (временной канал)[1][4].
Однако такая классификация подвергается критике и остаётся спорной[4].
В каналах хранения получатель обнаруживает информацию через изменение значения разделяемого ресурса или его атрибута. Примеры таких областей памяти:
- определённые поля в заголовках сетевых пакетов, которые находятся вне использования или их модификация не влияет на корректную работу протокола,
- использование разделяемых областей памяти: блокировки файлов на жёстком диске, изменение использования дискового пространства.
Чтобы инициализировать связь и корректно упорядочить события, требуется отдельный механизм синхронизации (возможно, с низкой пропускной способностью).
В этом случае получатель определяет информацию по изменению времени, необходимого для обнаружения определённого действия. То есть информация кодируется посредством изменения времени поведения отправителя — обычно через вариации скоростей передачи информации. Примеры:
- время использования ЦП,
- время запуска процесса,
- запрос на выполнение задачи, видимый другому пользователю.
Отправителю и получателю нужен общий источник времени, напр., реальное время. Также требуется механизм инициализации и синхронизации событий. Для этого типа каналов важна возможность отправителя изменить атрибут разделяемого ресурса, а получателя — зафиксировать это изменение.
Для использования скрытого канала требуется предварительная договорённость между отправителем и получателем о схеме кодирования информации[2]. Особым видом скрытых каналов являются побочные каналы (от англ. англ. side channel), в которых отправитель непреднамеренно передаёт информацию получателю. В такой ситуации задача последнего — обнаружить и декодировать побочный канал.
Самыми частыми побочными каналами являются те, что связаны с электромагнитными эманациями устройств.
Также были предложены иные варианты классификации скрытых каналов:[4]
- с точки зрения вероятности ошибок из-за шума (насколько вероятно, что получатель получит ошибочные данные),
- односторонние (1–1, один отправитель — один получатель, неагрегированные каналы) и агрегированные (создаются несколькими парами процессов с доступом к одному множеству переменных).
Области применения
Изначально скрытые каналы рассматривались как способ несанкционированного получения информации одним процессом от другого в рамках одной вычислительной системы. Позже понятие распространилось на компьютерные сети и эманации устройств (например, электромагнитные или тепловые).
Понятие скрытого канала было введено при исследовании многоуровневой безопасности и способов обхода изоляции процессов[3]. С тех пор были проведены серьёзные исследования для предотвращения подобных коммуникаций. Современные операционные системы реализуют механизмы ограничения процессов (конфайнмент), позволяющие строго регламентировать их действия.
Логическую защиту от скрытых каналов обеспечивают именно операционные системы: они отвечают за управление каналами и общими ресурсами, а значит и за предотвращение скрытых каналов, поскольку те используют общие ресурсы для коммуникации. Аппаратные средства теоретически могут быть построены для предотвращения обхода конфайнмента, но это сделало бы систему сложной или неработоспособной на практике[5].
Поскольку единственный эффективный способ борьбы со скрытым каналом — перестроить систему так, чтобы полностью исключить возможность его появления, разработчики ОС должны уметь выявлять скрытые каналы и устранять их. Для этого были разработаны специальные методы их обнаружения и минимизации.
В общем случае необходимо контролировать доступ к любым разделяемым ресурсам (любым объектам или их совокупностям, которые могут быть адресованы или модифицированы несколькими процессами). Примеры общих ресурсов, пригодных для организации скрытых каналов:
- использование процессорного времени (ЦП). Например, интенсивное использование может означать «истина», бездействие — «ложь»;
- использование памяти;
- блокировки в файловой системе.
Для организации скрытых каналов часто задействуют существующие потоки данных. Этот сценарий можно проиллюстрировать на примере проблемы заключённых: двое заключённых, А и B, хотят тайно договориться о побеге, обмениваясь сообщениями через контролирующего всё надзирателя, W, который способен читать, изменять или подменять сообщения. Если надзиратель обнаружит скрытую коммуникацию (например, зашифрованное сообщение), он прекратит передачу. В таких условиях заключённые должны организовать скрытый канал. Наиболее распространённые техники:
- сокрытие скрытого канала внутри разрешённых сообщений посредством стеганографии (дисциплина скрытия сообщений, не путать с криптографией — наукой о кодировании);
- использование аутентификации, при этом в сам процесс аутентификации может быть встроен скрытый канал (т.н. сублиминальный канал). Обычно этот канал формируется внутри алгоритма цифровой подписи и без знания секретного ключа не может быть выявлен или прочитан.
В сетевых протоколах связи активно исследуются различные типы скрытых каналов:
- скрытые каналы на основе использования определённых полей сетевых пакетов. Для внедрения информации в данные прикладного уровня требуется глубокое понимание их структуры, чтобы изменения не были замечены. Поэтому часто используют неиспользуемые или необязательные поля заголовков пакетов;
- скрытые каналы на основе синхронизации (времени) сообщений;
- каналы, использующие переупорядочивание пакетов (впервые предложено Камраном Ахсаном[6]).
Для организации скрытых каналов исследовались протоколы TCP/IP[7],[6][8] HTTP[9], DNS[10], DHCP[4] ICMP,[11],[6] IGMP[6] IPsec,[6] IPv6,[12], протоколы IEEE 802[13], и протоколы модели OSI[14].
Часть этих исследований реализована в демонстрационных системах: Covert_TCP (для TCP/IP[7]), Loki (для ICMP[11]), Firepass (для HTTP[9]), PingTunnel (для ICMP[15]), Ozyman (для DNS[10]).
Также реализованы временные скрытые каналы, однако вначале их синхронизация и сохранение пропускной способности вызывали серьёзные сложности[4] и страдали от состояния сети[16]. В 2006 году были предложены jitterbugs — устройства (аппаратные или программные), позволяющие незаметно передавать чувствительную информацию (например, пароли) по сетям, используя задержки в отправке пакетов, вызванные пользовательским вводом[17]. Например, при работе с интерактивными сетевыми программами (SSH, Telnet, IM) злоумышленник, следящий за сетевым трафиком, способен восстановить скрытые данные даже из зашифрованного трафика, анализируя интервалы между пакетами.
Существует множество примеров использования непреднамеренных (обычно электромагнитных) эманаций различных устройств для организации скрытых каналов[18]. Например:
- Пол Кочер использовал колебания потребления электроэнергии микроконтроллерами смарт-карт для восстановления ключей DES.
- Петер Смулдерс исследовал подслушивание электромагнитных сигналов по кабелям RS232.
- Вин ван Эк показал возможность перехвата излучений с экранов (так называемый эффект интерференция ван Эка).
- Немецкая армия использовала аппаратуру для перехвата заземляющих сигналов от полевых телефонов.
- Департамент MI5 проводил анализ высокочастотных излучений кабелей для защищённого телекс-связи.
Опасаясь подобных проблем, Правительство США создало программу TEMPEST, изучающую подобные технологии и стандартизующую классы средств защиты и уровни безопасности.
Также, помимо электромагнитных эманаций, были проведены эксперименты по индукции изменений температуры (например, через перегрузку процессора), что может использоваться как для геолокации, так и для скрытых каналов[19].
Использование
Компьютерная система считается надёжной, если пользователь должен пройти аутентификацию и иметь разрешение для доступа к нужной информации (политика многоуровневой безопасности). На практике нельзя полностью гарантировать доверенность посредников; многие системы содержат ресурсы и атрибуты (например, файловые блокировки, состояния, память, диски, сети), разделяемые между пользователями на разных уровнях. Некоторые такие ресурсы становятся основой для создания скрытых каналов и обхода политики безопасности[1]
Скрытые каналы могут использоваться для передачи информации третьим лицам без обнаружения: паролей, электронной почты, конфиденциальных документов, а также могут применяться вирусами или троянами.[20]
Скрытые каналы позволяют передавать информацию незаметно для неподготовленного третьего лица и часто используются для обхода цензуры[4].
Иногда скрытые каналы используют для создания новых сервисов; например, Збигнев Котульски предложил применение скрытых каналов для повышения безопасности протокола VoIP[21].
Контроль
По вопросам обнаружения, предотвращения и устранения скрытых каналов было опубликовано множество исследований[4]
- В 1993 году NCSC АНБ США опубликовал «The Light Pink Book»,[22]. посвящённую исключительно анализу скрытых каналов, с описанием различных методов их идентификации (например, Shared Resource Matrix).
- В 1993 году Кан и Москвиц предложили NRL Pump[23] — систему буферов, вставляемых между процессами, которые вводят случайные задержки, уменьшая возможности скрытой коммуникации; методика позже была применена и в сетях.
- В 1995 году J. MacHugh предложил[1] различные методы анализа и обнаружения скрытых каналов.
- В 1996 году Н. Оргутсов и др[24]. изучили существующие методы и разработали новый.
- В 2002 году Фиск и соавторы[25] представили концепцию активных стражей (термин из проблема заключённых), анализирующих заголовки протоколов и вносящих в них шум.
- В 2004 году Кабук и соавторы[26] предложили методы обнаружения временных скрытых каналов на основе анализа интервалов между пакетами.
- В 2005 году Льюис и Мердок[27] подвергли критике скрытые каналы в заголовках TCP/IP, отметив зависимость их значений от ОС, что позволяет проводить тесты для их выявления.
Определить, содержит ли какой-либо аппарат или программа скрытые каналы, в общем случае невозможно (проблема неразрешима)[20].
Тем не менее, были разработаны методы поиска каналов, основанные на анализе зависимостей между ресурсами. Примеры подходов:[1][5][22]
- Shared Resource Matrix (матрица общих ресурсов)
- Covert Flow Trees (деревья скрытых потоков)
- Information Flow Formulae (формулы потоков информации)
- Методы невзаимодействия
После обнаружения скрытых каналов необходимо оценить потенциальную значимость их использования с учётом:
- важности/ценности информации, которая может быть скомпрометирована через данный канал,
- пропускной способности, которой должно быть достаточно для заданной коммуникации,
- обнаружимости — чем труднее канал диагностировать, тем эффективнее он скрыт; например, некоторые поля протокольных заголовков имеют системозависимые значения, и при их некорректном изменении канал может быть разоблачён (например, в TCP модифицируют лишь наименее значимые биты в поле timestamps),
- сложности устранения — некоторые брандмауэры реализуют стандартные меры по очистке инициализированных полей для предотвращения скрытых каналов.
После обнаружения скрытого канала можно предпринять три основных решения:[1]
- разрешить его использование (если имеет малую пропускную способность, а ликвидация связана с чрезмерными затратами; возможна организация аудита использования),
- снизить его пропускную способность (внести ограничения),
- устранить канал.
Подходы к борьбе со скрытыми и побочными каналами включают:[5]
- добавление шума,
- виртуализацию,
- безопасное объединение.
Инструменты для эксплуатации скрытых каналов
Существуют специальные инструменты для эксплуатации скрытых каналов и обеспечения скрытной коммуникации[28].
Примеры инструментов:
- Loki — изначально разрабатывался как доказательство концепции использования протокола ICMP для скрытого обмена, позволяет встраивать сообщения в редко применяемые ICMP echo-пакеты[28];
- ICMP Backdoor — аналогичен Loki, но использует не echo, а другие типы ICMP-пакетов[28];
- 007Shell — также применяет ICMP, но дополнительно форматирует пакеты, чтобы их размеры выглядели нормальными[28];
- B0CK — аналог Loki, но построен для Internet Group Management Protocol (IGMP)[28];
- Reverse WWW Tunneling Shell — строит скрытые каналы через брандмауэры и прокси, маскируя трафик под обычный веб-трафик[28];
- AckCmd — обеспечивает оболочку в операционных системах Windows[28].


