Польские исследователи предложили новый способ сетевой стеганографии основанный на особенностях работы широко распространенного протокола транспортного уровня TCP. Авторы работы считают, что их схема, к примеру, может применяться для пересылки скрытых сообщений в тоталитарных странах вводящих жесткую интернет цензуру. Попробуем разобраться в чем, собственно, состоит нововведение и насколько оно действительно полезно.
В первую очередь нужно определить что такое стеганография. Так вот, стеганография — это наука о скрытой передаче сообщений. То есть используя ее методы стороны пытаются скрыть сам факт передачи. В этом и состоит отличие этой науки от криптографии, которая пытается сделать недоступным для прочтения содержание сообщения. Стоит отметить, что профессиональное сообщество криптографов достаточно презрительно относится к стеганографии в силу близости ее идеологии к принципу «Security through obscurity» (не знаю как это правильно звучит по-русски, что-то вроде «Безопасность через незнание»). Этим принципом, к примеру, пользуются в компании Skype Inc. — исходный код популярной звонилки закрыт и никто толком не знает как именно осуществляется шифрование данных. Недавно, кстати, об этом сетовали в NSA, о чем известный специалист Брюс Шнайер
Возвращаясь к стеганографии, ответим на вопрос а зачем она вообще нужна, если есть криптография. Действительно, ведь можно зашифровать сообщение при помощи какого-либо современного алгоритма и при использовании достаточного длинного ключа никто это сообщение прочитать не сможет если только вы этого не пожелаете. И тем не менее, иногда бывает полезнее скрыть сам факт тайной передачи. К примеру, если соответствующие органы перехватили ваше зашиврованное сообщение, расшифровать не могут, но очень хочется, то в конце концов есть и некомпьютерные методы воздействия и добычи информации. Звучит антиутопично, но, согласитесь, такое в принципе возможно. Поэтому лучше бы сделать так, чтобы те кому неположено вообще не знали, что передача имела место. Польские исследователи как раз и предложили такой метод. Причем сделать они это предлагают при помощи протокола, который каждый пользователь интернета использует по тысяче раз на дню.
Тут мы вплотную подошли к Transmission Control Protocol (TCP). Объяснять все его детали, разумеетется, не имеет смысла — длинно, скучно, те кому надо и так знают. Вкратце же можно сказать, что TCP — это протокол транспортного уровня (т.е. работает «над» IP и «под» протоколами уровня приложений, к примеру HTTP, FTP или SMTP), который обеспечивает надежную доставку данных от отправителя к получателю. Надежная доставка означает, что если какой-то пакет потерялся или пришел с изменениями, то TCP позаботится о том, чтобы переслать этот пакет. Отметим, что под изменениями в пакете тут подразумевается не умышленное искажение данных, а ошибки в передаче возникающие на физическом уровне. К примеру, пока пакет шел по медным проводам пару бит поменяли свое значение на противоположное или вообще затерялись среди шума (кстати для Ethernet значение Bit Error Rate обычно принимают равным порядка 10-8). Потеря пакетов в пути также относительно частое явление в интернете. Происходить она может, к примеру, из-за загруженности маршрутизаторов, которая приводит к переполнения буферов и как следствие отбросу всех вновь прибывающих пакетов. Обычно доля потерянных пакетов составляет около 0.1%, а при значении в пару процентов TCP вообще перестает нормально работать — у пользователя все будет жутко тормозить.
Таким образом мы видим, что пересылка (ретрансмиссия) пакетов явление для TCP частое и в общем-то нужное. Так почему бы не использовать его для нужд стеганографии при том что TCP, как уже отмечалось выше, используется повсеместно (по разным оценкам на сегодняшний день доля TCP в интернете достигает 80-95%). Суть предложенного метода состоит в том, чтобы в пересылаемом сообщении отправлять не то, что было в первичном пакете, а те данные, которые мы пытаемся скрыть. При этом обнаружить такую подмену не так-то просто. Ведь нужно знать куда смотреть — количество одновременных TCP соединений, проходящих через провайдера просто огромно. Если знать примерный уровень ретрансмиссии в сети, то можно подстроить механизм стеганографической пересылки так, что ваше соединение ничем не будет отличаться от других.
Конечно этот метод не свободен от недостатков. К примеру, с практической точки зрения внедрить его будет не так-то просто — это потребует изменения сетевого стэка в операционных системах, хотя и запредельно сложного в этом ничего нет. Кроме того, при наличии достаточного количества ресурсов все равно можно обнаружить «тайные» пакеты, для этого нужно просматривать и анализировать каждый пакет в сети. Но как правило это практически невозможно, поэтому обычно ищут чем-то выделяющиеся пакеты и соединения, а предложенный метод как раз и делает ваше соединение ничем не примечательным. Да и никто не мешает вам зашифровать тайные данные на всякий случай. При этом само соединение может оставаться незашифрованным, чтобы вызывать меньше подозрений.
Авторы работы (кстати, кому интересно,
Источник: habr.com