Как зашифровать интернет трафик. Шифрованный трафик может быть классифицирован

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

При использовании HTTPS или SSL твой HTTP трафик зашифрован, то есть защищен. Когда ты используешь VPN, шифруется уже весь твой трафик (конечно, все зависит от настроек VPN, но, как правило, так оно и есть). Но иногда, даже когда используется VPN, твои DNS-запросы не зашифрованы, они передаются как есть, что открывает огромное пространство для «творчества», включая MITM-атаки, перенаправление трафика и многое другое.

Тут на помощь приходит опенсорсная утилита DNSCrypt, разработанная хорошо известными тебе создателями OpenDNS, - программа, позволяющая шифровать DNS-запросы. После ее установки на компьютер твои соединения также будут защищены и ты сможешь более безопасно бороздить просторы интернета. Конечно, DNSCrypt - это не панацея от всех проблем, а только одно из средств обеспечения безопасности. Для шифрования всего трафика все еще нужно использовать VPN-соединение, но в паре с DNSCrypt будет безопаснее. Если тебя такое краткое объяснение устроило, можешь сразу переходить к разделу, где я буду описывать установку и использование программы.

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

Допустим, клиент (ноутбук на рисунке) пытается обратиться к google.com Первым делом он должен
разрешить символьное имя узла в IP-адрес. Если же конфигурация сети такова, что используется DNS-сервер провайдера (незашифрованное соединение, красная линия на рисунке), то разрешение символьного имени в IP-адрес происходит по незашифрованному соединению.

Да, какие данные ты будешь передавать на dkws.org.ua, никто не узнает. Но есть несколько очень неприятных моментов. Во-первых, провайдер, просмотрев логи DNS, сможет узнать, какие сайты ты посещал. Тебе это нужно? Вовторых, вероятна возможность атак DNS спуфинг и DNS снупинг. Подробно описывать их не буду, об этом уже написано множество статей. В двух словах ситуация может быть следующей: некто между тобой и провайдером может перехватить DNS-запрос (а так как запросы не шифруются, то перехватить запрос и прочитать его содержимое не составит никакого труда) и отправить тебе «поддельный» ответ. В результате вместо того, чтобы посетить google.com, ты перейдешь на сайт злоумышленника, как две капли воды похожий на тот, который тебе нужен, введешь свой пароль от форума, ну а дальше развитие событий, думаю, ясно.

Описанная ситуация называется DNS leaking («утечка DNS»). DNS leaking происходит, когда твоя система даже после соединения с VPN сервером или Tor продолжает запрашивать DNS серверы провайдера для разрешения доменных имен. Каждый раз, когда ты посещаешь новый сайт, соединяешься с новым сервером или запускаешь какое-то сетевое приложение, твоя система обращается к DNS провайдера, чтобы разрешить имя в IP. В итоге твой провайдер или любой желающий, находящийся на «последней миле», то есть между тобой и провайдером, может получить все имена узлов, к которым ты обращаешься. Приведенный выше вариант с подменой IP-адреса совсем жестокий, но в любом случае есть возможность отслеживать посещенные тобой узлы и использовать эту информацию в собственных целях.

Если ты «боишься» своего провайдера или просто не хочешь, чтобы он видел, какие сайты ты посещаешь, можешь (разумеется, кроме использования VPN и других средств защиты) дополнительно настроить свой компьютер на использование DNS серверов проекта OpenDNS (www.opendns.com). На данный момент это следующие серверы:

208.67.222.222
208.67.220.220

При этом тебе не нужно никакое другое дополнительное программное обеспечение. Просто настрой свою систему на использование этих DNS-серверов.

Но все равно остается проблема перехвата DNS-соединений. Да, ты уже обращаешься не к DNS провайдера, а к OpenDNS, но все еще можно перехватить пакеты и посмотреть, что в них. То есть при желании можно узнать, к каким узлам ты обращался.

Вот мы и подошли к DNSCrypt. Эта программулина позволяет зашифровать твое DNS соединение. Теперь твой провайдер (и все, кто между тобой и им) точно не узнает, какие сайты ты посещаешь! Еще раз повторюсь. Эта программа не замена Tor или VPN. По-прежнему остальные передаваемые тобой данные передаются без шифрования, если ты не используешь ни VPN, ни Tor. Программа шифрует только DNS трафик.


В КАЧЕСТВЕ ЗАКЛЮЧЕНИЯ

Статья получилась не очень большая, поскольку сама программа очень проста в использовании. Но она была бы неполной, если бы я не упомянул и о VPN. Если ты прочитал эту статью, тебя она заинтересовала, но ты еще не пользуешься услугами VPN-провайдера для шифрования своих данных, то самое время это сделать.
VPN-провайдер предоставит тебе безопасный туннель для передачи твоих данных, а DNSCrypt обеспечит защиту DNS-соединений. Конечно, услуги VPN провайдеров платны, но ведь за безопасность нужно платить?

Можно использовать, конечно, и Tor, но Tor работает относительно медленно, и это, как ни крути, не VPN - весь трафик «торифицировать» не получится. В любом случае (какой бы вариант ты ни выбрал) теперь твои DNS-соединения защищены. Осталось только определиться со средством шифрования трафика (если ты это еще не сделал).

Last updated by at Октябрь 30, 2016 .

6 декабря 2008 в 17:43

Безопасность (шифрование) трафика

  • Информационная безопасность

Параллельно с развитием технологий защиты интернет-трафика от несанкционированного доступа развиваются и технологии перехвата защищенного трафика. Перехватить и изучить незашифрованный трафик пользователя уже давно не составляет труда даже для рядового юзера. Практически каждому известно слово «сниффер». Теоретически, защищенные SSL /TSL -соединения перехватить обычными средствами невозможно. Но так ли это?

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

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

А как они это делают? Обычно - по тому же каналу, по которому далее будет идти защищенный трафик. Причем обмен ключами происходит в открытом режиме. В случае HTTPS ключ сервера связан с сертификатом, который пользователю предлагается просмотреть и принять. И вот этот сертификат как раз и может перехватить любой промежуточный сервер, на пути которого идет сертификат в открытом виде (прокси, роутер).

Чтобы далее «читать» весь трафик пользователя, промежуточный сервер подменяет сертификат на свой. Т.е. он просто сам подключается к клиенту со своим сертификатом, и в то же время подключается к удаленному серверу. Клиенту приходит «левый» сертификат от сервера-злоумышленника, а браузер сообщает пользователю об опасности (такие сертификаты всегда не подписаны). У пользователя остается выбор: принять сертификат и работать с сайтом, либо отказаться его принимать, но и работать с сайтом тогда уже не получится. Иногда пользователи вообще игнорируют содержимое сертификатов и машинально принимают любые переданные им.

Если пользователь принимает сертификат-подделку, то трафик будет идти по следующей схеме:

клиент <= SSL-соединение => сервер-прослушка <= SSL-соединение => сервер назначения

Т.е. промежуточный сервер будет получать весь ваш «защищенный» трафик в открытом виде. Стоит также заметить, что передача сертификата происходит в начале каждой сессии HTTPS.

В случае защищенного SSH при первом соединении с сервером на клиенте сохраняется ключ сервера, а на сервере - ключ клиента. Эти ключи передаются между данными клиентом-сервером только один раз, при первом подключении. Если в этом случае SSH-трафик попытаются перехватить, то и клиент, и сервер откажут в соединении из-за несоответствия ключей. Так как ключи можно перенести между клиентом и сервером обходным путем (по защищенному каналу или на внешнем носителе), этот способ соединения является относительно безопасным. Его могут лишь заблокировать, заставив пользователя работать в открытую.

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

Но пути спасения от тотальной слежки есть. Через установленное SSH-соединение можно направлять любой нужный трафик, который с SSH-сервера будет уже в открытом виде идти на конечную точку. Этот способ называется SSH-туннелинг (tunneling). Так можно обезопасить прохождение трафика по незащищенному каналу, но имеет смысл такой подход только при наличии доверенного сервера с поднятым и настроенным на туннелинг SSH-демоном. Причем организовать это достаточно просто. SSH-клиент подключается к серверу, настраивается на прослушку любого данного порта на локальной машине. Этот клиент будет предоставлять услугу SOCKS5-прокси, т.е. его использование можно настроить в любом браузере, почтовых программах, IM-ах и т.д. Через SSH-туннель пакеты попадают на сервер, а с него уходят на целевой сервер. Схема получается следующая:

<== SSH-соединение ==> сервер <=> целевой сервер

Другой способ защиты трафика - VPN -канал. В использовании он проще и удобнее SSH-туннелинга, но в первичной установке и настройке сложнее. Основное удобство этого способа в том, что в программах не нужно прописывать прокси. А некоторый софт и вовсе прокси не поддерживает, следовательно только VPN и подойдет.

На практике есть два варианта работы. Первый - покупка VPN-акканута, который продается специально для этих целей (шифрование трафика по небезопасному каналу). В этом случае продаются обычно аккаунты, соединяться с которыми надо по протоколам PPTP (обычный VPN, который реализован, например, в Windows) или L2TP.

Второй вариант - покупка VDS-сервера (виртуальный выделенный сервер) с любым дистрибутивом линукса на борту и поднятие на нем VPN-сервера. VDS может быть российским или американским (только не забывайте про заокеанские пинги), дешевым (от $5) и слабым или дорогим и помощнее. На VDS ставят OpenVPN -сервер, а на компьютере поднимается OpenVPN-клиент. Для Windows есть даже гуишная версия клиента .

Если вы решите использовать вариант с OpenVPN, то есть например эта простая пошаговая инструкция по поднятию сервера (Debian). Установить клиента еще проще, особенно под Windows. Отметить стоит только один нюанс. Если весь трафик требуется пустить по созданному VPN-соединению, то требуется прописать default gateway на шлюз VPN (параметр redirect-gateway в конфиге клиента), а если только часть трафика (на определенные хосты), то можно прописать обычные статические маршруты на данные хосты (по IP; например, route add -p 81.25.32.25 10.7.0.1).

Для соединения OpenVPN обмен ключами происходит в ручном режиме, т.е. транспортировать их от сервера на клиент можно абсолютно безопасно.

Таким образом, SSH- и VPN-соединения могут практически полностью гарантировать безопасность вашего трафика при перемещении по незащищенному каналу. Единственная проблема, которая может возникнуть в этом случае, - это запрет на SSL-трафик на корпоративном файрволе. Если SSL-трафик разрешен хотябы на один любой порт (обычно дефолтный 443), то вы уже потенциально можете поднять и SSH-тонель, и VPN-соединение, настроив соответствующего демона на вашем VDS на этот порт.

Теги:

  • internet
  • security
  • ssl
Добавить метки

О конфиденциальности информации говорят все и временами даже требуют ее обеспечения. Но мало кто задумывается о том, куда такие требования нас заводят? С одной стороны - да, приватность, тайна личной жизни, тайна переписки... Все это нам даровано Конституцией и вроде как является правом неотчуждаемым. Отсюда и рост объема зашифрованного трафика в Интернете согласно последним исследованиям Cisco.

Положительным образом на увеличение этого показателя влияет внедрение шифрования в различные стандарты (например, PCI DSS) и лучшие практики, которым начинают следовать многие организации и поставщики услуг. Например:

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


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

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

Им стали активно пользоваться и злоумышленники, скрывая свою деятельность от мониторинга или просто используя шифрование в недобрых целях (те же шифровальщики TeslaCrypt или CryptoWall). Контролировать такие потоки информации становится очень сложно, но и от шифрования отказа не произойдет ни с точки зрения ИБ, ни с точки зрения злоумышленников. Поэтому так важно использовать дополнительные механизмы анализа сетевого трафика, который позволяет мониторить сопутствующие параметры, не погружаясь в содержимое самих коммуникаций - Netflow, домены и IP-адреса и даты их появления на свет, репутацию взаимодействующих узлов и другие метаданные. Также важно не забывать про интегрированную безопасность, которая должна стоять не "в разрыв", как это часто бывает, а быть встроенной в сетевое оборудование, операционные системы, базы данных, сервера, рабочие станции и т.п. В этом случае работа с зашифрованным трафиком будет более эффективной, чем попытка перенаправить его куда-то для расшифрования.

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


С контролем данных и Интернет ситуация гораздо сложнее - там шифрование можно легко сделать сквозным и никакой СОРМ тут не сильно поможет. А тут еще и переломный момент в использовании шифрования - свыше 50% трафика в Интернет стало неприступным для анализа спецслужбами. Поэтому остается только одна - либо запрещать шифрование вообще (что маловероятно), либо заставлять всех депонировать ключи шифрования и делиться сертификатами открытых ключей для "законного" вклинивания в поток данных, как пытались сделать в середине 90-х годов в США в рамках проекта Clipper , либо развивать негласную СОРМ.

Что характерно, "разоблачения" Сноудена, как раз являются демонстрацией третьего пути борьбы с шифрованием, по которому пошли спецслужбы США. Запрещать что-то в самое демократической стране никому и в голову бы не пришло. Требовать от Facebook, Twitter, Microsoft публичного отказа от конфиденциальности депонирования ключей бессмысленно (опять же демократия мешает). Остается только одно - развивать технологии негласного съема информации, а также принуждать Интернет-компании делиться информацией по секретным решениям секретного суда.

Россия сейчас тоже вплотную подошла к этой дилемме, с которой США столкнулись 20 лет назад, начиная проект Clipper, Capstone и Skipjack. Мы пока выбрали второй путь, так как первый является ну очень уж одиозным (а главное, что террористы и экстремисты все равно плевать будут на этот запрет), а третий плохо работающим и не масштабируемым (достаточно вспомнить, как Twitter, Google и Facebook "посылали" Роскомнадзор с его запросами относительно блокировок аккаунтов, публикующих нелицеприятные для российских властей сведений).

Вот такая история у нас получается с шифрованием. И какой будет ее финал пока непонятно...

Для обеспечения надежного шифрования трафика, передаваемого между вашим компьютером и VPN-сервером, к которому вы подключаетесь. Используя приложение ExpressVPN, вы можете легко переключаться между протоколами , хотя мы рекомендуем использовать протокол, установленный по умолчанию (это протокол OpenVPN с открытым исходным кодом), или позволить приложению автоматически выбрать настройки, наиболее оптимальные для вашей скорости подключения и безопасности.

(При подключении через стороннее приложение, например через Tunnelblick для Mac OS X или Network Manager или Terminal на Linux , у вас также есть множество вариантов шифрования с использованием протокола OpenVPN.)

Вот некоторые из особенностей шифрования с использованием протокола OpenVPN:

Аутентификация сервера

Протокол OpenVPN функционирует аналогично протоколу TLS или HTTPS, поэтому его можно назвать TLS VPN. (HTTPS - это защищенная версия базового интернет-протокола HTTP, используемая для защиты подлинности сайта в Интернете. Предварительно установленные сертификаты в вашем браузере позволяют проверить целостность веб-сайта , если он использует протокол HTTPS. Чтобы убедиться, что веб-сайт использует протокол HTTPS правильно, найдите значок в виде зеленого замка ( ) в адресной строке браузера.)

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

ExpressVPN использует сертификат RSA с длиной ключа 4096 бит, идентифицированный алгоритмом хеширования SHA-512, входящим в семейство алгоритмов SHA-2.

Код HMAC

HMAC - это код аутентификации (проверки подлинности) сообщений на основе хеширования с использованием секретного ключа. Этот код позволяет гарантировать, что данные не будут изменены в процессе передачи злоумышленниками, у которых есть доступ к данным в режиме реального времени. Для обеспечения надежной аутентификации сообщений в протоколах TLS и OpenVPN используются хеш-функции (отсюда буква H в аббревиатуре HMAC).

Шифрование канала управления

Для защиты канала управления ExpressVPN использует алгоритм AES-256-CBC. AES - это один из наиболее широко используемых стандартов шифрования , который основывается на алгоритме Rijndael, разработанном бельгийскими криптографами Йоаном Дайменом и Винсентом Райменом. Цифра 256 означает длину ключа в битах. Эта длина является самой большой из доступных. CBC (от англ. Cipher Block Chaining) означает режим сцепления блоков шифротекста, при котором каждый блок шифруемой информации зависит от предыдущего блока. Таким образом, даже короткое прерывание в канале может быть быстро обнаружено.

Шифрование канала передачи данных

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

Полная безопасность пересылки

Полная безопасность пересылки означает, что даже если злоумышленники каким-то образом смогли скомпрометировать ваш компьютер или VPN-сервер во время одного сеанса, они не смогут расшифровать трафик из прошлых сеансов. Поэтому каждый раз, когда вы подключаетесь к ExpressVPN, согласовывается новый секретный ключ. Даже если вы подключены к VPN в течение длительного периода времени, ExpressVPN автоматически согласовывает новый ключ каждые 60 минут .

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

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

Мир цензуры

Дело в том, что в последнее время началось активное распространение роскомнадзоров, СОРМов, золотых щитов, корневых сертификатов, черных фургонов ФБР и прочих методов прослушки/ограничения/подмены трафика во всеми любимой сети Интернет.

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

Говорят, шифрование всех спасет. Но так ли это? Опуская проблемы классической и современной криптографии, так или иначе, шифрованный трафик всегда можно относительно просто обнаружить и банально прикрыть канал передачи. И тут на помощь приходит стеганография.

Чтобы проникнуться и понять, зачем оно нам, посмотрим на классическую схему передачи трафика от Алисы к Бобу в интернете:

Учтем, что интернет и каналы связи в нем нам неподконтрольны и уязвимы by design. Более того, между Алисой и Бобом есть некто, контролирующие среду передачи и ( /вставьте свое слово) их обмен сообщениями.

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

А схема выглядит так:

Где Вилли - не садовник, как кажется на первый взгляд, а охранник, ограничивающий передачу любых сообщений к Бобу. Алиса же - свободный человек (или заключенный в другой камере), с которым Боб хочет общаться в обход охранника.

Соответственно, задача стеганографии в том, чтобы охранник просто не замечал обмена сообщениями. А кто именно является охранником - ркн или фургончик фбр - частные случаи.

А при чем здесь прокси?

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

В зависимости от ситуации, между Алисой и Бобом может быть как контролируемый Вилли канал связи, так его (канала) может и не быть в принципе. Правды ради, стоит отметить, что мало кто полностью обрезает каналы связи, и даже за великим файероволом можно при желании посидеть в фейсбуке. Так что этот случай будет первый и простой вариант.

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

Стегоканал создается подключением Боба к Алисе через сокет на установленном заранее порту.

Получившаяся схема отличается простотой и надежностью. Но, это не совсем стеганография. Для Вилли вполне очевидно, что обмен картинками на нестандартных портах - неспроста. Частично можно снизить уровень подозрительности, используя стандартные порты и протоколы. Например, обмен файлами через FTP. В целом, один из самых быстрых и удобных вариантов. Можно пользоваться, пока градус неадеквата и подозрительности со стороны Вилли не очень высок.

А теперь представим, что Вилли запретил обмениваться Бобу сообщениями с Алисой. Вообще.

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

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

А теперь о самой реализации и том, что вышло

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

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

И как оно работает?

Для тестирования, в качестве прокси-сервера я арендовал дешевый ARM-сервер во франции, развернул на нем Ubuntu 16.10 и на ней Squid вместе с ретранслятором. Все замеры проводились из дома с интернетом на 5 Мбит/с через ADSL национальнейшего русского провайдера. Если кто-то хочет проверить на нормальной скорости - в конце оставлю ссылки на GitHub.

В качестве proof of concept я реализовал стегоканал поверх сокетов. Если будет интерес - аналогичное тестирование проведу и для реализации с VK в качестве среды обмена. В качестве алгоритма - свой собственный вариант метода LSB с максимальной емкостью примерно в четверть байт от общего числа пикселей, работающий с изображениями без сжатия, о котором, возможно, напишу позже. В качестве контейнера сначала использовалось одно единственное изображение Че Гевары в png разрешением 518х587.

Результаты тестирования в качестве прокси в firefox без каких-либо плагинов и доп. настроек:

  • wikipedia.org - 1:13;
  • en.wikipedia.org - 2:01, после этого общение с сервером продолжается, но контент весь уже загружен;
  • google.com (.fr) - ~2м, подсказки не работают, поисковая выдача грузится по минуте;
  • duckduckgo.com - так и не загрузился в течение 10 минут;
  • txti.es - ~3с на страницу. И правда, fast web pages;
  • garfield.vexer.ru - 1:35. Реклама при этом не загрузилась (и адблок не нужен);
  • reddit.com - грузится очень долго (больше 10 минут), что-то загружает, но терпения у вас вряд ли хватит;
  • bing.com - 1:45 на полную загрузку. ~50 секунд на страницу поисковой выдачи;
  • jcgonzalez.com - не загрузился;
  • minergate.com - 4м;
  • vk.com - ~1м, изображения догружаются дольше, диалоги работают шустро;
  • linkedin.com - ~50c, но громадное изображение-фон будет грузиться еще долго;
  • weather.com - не загрузился;

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

Отключив изображения и медиа-элементы, включив адблок, скорость можно повысить. Переместившись таки методом на лет 10 (15?) назад, получаем соответствующую тому же времени скорость загрузки страниц. Но в целом, вывод остается тем же - такое стеганографическое прокси годится только для экстренных случаев.

Впечатления от такого интернета далеко не положительные. Возможно, с другими методами стеганографии, или просто оптимизируя мой, можно добиться больших результатов. Однако, пока что, получившийся Proof of Concept говорит лишь о том, что такое прокси годится только для экстренных случаев. Что, на самом деле, не особо удивительно. Или неожиданно. Большая часть проблем с задержками - тайминги при рукопожатии в ssl. Вот вам и повсеместное насаждение https.

Подумав, было решено заменить бедного статичного Че Гевару на случайные изображения с минимальной избыточностью. Ведь если передавать не в 16 раз больше информации, а в 4, то теоретически, получим приятный бонус к скорости. Благо, генераторов случайных изображений заданного размера в интернете полно.

Результаты при повторном тестировании:

  • wikipedia.org - 21с;
  • en.wikipedia.org - 21с;
  • google.com (.fr) - 23с до работоспособности, 45с до полной загрузки, 3с на выдачу;
  • duckduckgo.com - 45с до работоспособности, 55с до полной загрузки;
  • txti.es - мгновенно;
  • garfield.vexer.ru - 1:10 вместе с рекламой, последующие стрипы грузятся секунд по 10, так как все самое тяжелое уже в кеше;
  • reddit.com - 44с без контента, 1:20 с его превью;
  • jcgonzalez.com - упал, но 404 выдает быстро;
  • minergate.com - 1м;
  • vk.com - 23c, страницы с сообщениями по секунд 10 и больше, в зависимости от содержимого;
  • linkedin.com - 40c;
  • weather.com - не загрузился;

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

Last updated by at Январь 12, 2017 .