Протоколы для организации VPN. IPSec

IPSec – довольно сложная для понимания технология, но также довольно гибкая. Структура IPSec состоит из множества внутренних протоколов, которые можно отключать и подключать для управления уровнем защиты передаваемых данных (также поддерживается система ключей и система сертификатов для удостоверения личности владельца пакета). Ну и, конечно же, множество сторонних алгоритмов шифрования – MD5, SHA-1, DES, 3DES и пр. Зато, хоть она и сложна – с правильно настроенным IPSec можно быть уверенным в том, что ваш VPN защищена от вторжения по максиму.

IPSec может работать в туннельном и транспортном режимах. При работе в транспортном – шифруются только данные пакета (его payload), а в туннельном – пересобирается и шифруется весь пакет, и заголовки также переписываются. Транспортный режим подходит, когда для организации туннеля используется другой протокол – например, L2TP, а туннельный – когда строите VPN-решение полностью на IPSec. Зачем использовать другой протокол для туннелей, и какая вообще разница? Ну, пакеты, зашифрованные IPSec в транспортном режиме – весят немного меньше, но в транспортном способе можно увидеть настоящие адреса получателя/отправителя, что не подходит при использовании VPN в целях анонимности. Также, несмотря на обилие различных данных для проверки целостности и аутентификации – многие из них можно отключить, да и выбор алгоритмов шифрования и длины ключей достаточно велик.

Процесс работы IPSec можно разделить на две части:

  1. Согласование параметров соединения, его создание поддержание (в терминологии IPSec эта часть называется IKE - Internet Key Exchange).
  2. Обработка IP-пакетов и защита данных в них.

Туннелирование

Для того, чтобы IPSec соединение прошло успешно, нужно установить соединение по протоколу SA (Security Association). SA-соединение – однонаправленное (то есть, устанавливается и отправителем, и получателем). Нужны такие соединения, для согласования пареметров передачи: какой тип шифрования использовать, осуществлять ли проверку целостности данных по хэш-суммам и как, какой режим IPSec использовать (транспортный или сетевой), проводить ли аутентификацию и прочее. SA-данные хранятся в базе данных SAD (Security Associations Database), а для быстрого поиска и создания соединений используется три основных параметра:

  • Индекс SPI (Security Parameters Index).
  • IP-адреса отправителя и получателя.
  • Используемый протокол безопасности (AH, ESP или оба).

Работа с пакетами

Для обработки передаваемых пакетов IPSec использует 2 внутренних протокола: AH и ESP.

Большое внимание в IPSec уделено процессу аутентификации (подтверждение того, что пакет был выслан именно тем, кем нужно, и не был изменен по пути), поэтому переданные пакеты содержат дополнение в заголовке – AH (Authentication Header). AH не шифрует сами данные, а лишь гарантирует, что пакет не был поврежден или изменен по пути. По сути, AH высчитывает хеш-сумму из всех заголовков IP-пакета, которые не должны измениться по пути от отправителя к получателю. Сумма записывается, пакет отправляется. Если кто-то его перехватит и отправит снова – значения заголовков изменятся. IPSec на стороне получателя снова высчитывает хеш-сумму по тому же протоколу (как мы помним, все протоколы были обговорены SA) и видит – написанная отправителем сумма и высчитанная самостоятельно не сходятся – значит, пакет пришел не от отправителя, и потому он отклоняется.

vpn 7

Вы скажете “а что мешает злоумышленнику пересчитать хеш и добавить в поле своё значение?” - и это чертовски правильный вопрос. Изменить сообщение и пересчитать хэш действительно возможно, поэтому, помимо MD5 и SHA-1, IPSec поддерживает также HMAC. При хэшировании с помощью HMAC, в сообщение добавляется секретный ключ, и хэш высчитывается на основании самого пакета + этого ключа. Даже если злоумышленник пересчитает хэш пакета, он не будет верным без задействия ключа, и потому пакет вновь будет отклонен.

vpn 8

AH-заголовок состоит из:

  1. Поле “next header”, обозначающее, какой протокол используется для следующей за AH частью пакета. Служит для определения, какой режим использовался – туннельный или транспортный. Если в “next header” прописан IP – это туннельный. Если TCP или UDP – транспортный.
  2. Длина AH-заголовка.
  3. SPI (Security Parameters Index) – индекс протокола, использованного для создания хэш-суммы.
  4. Порядковый номер пакета, возрастающий с каждым переданным пакетом, для защиты от повторной передачи.
  5. Хеш-сумма.

В зависимости от режима (транспортный или сетевой), AH-заголовок расположен в разных местах IP-пакета. Обычно AH лежит между заголовком пакета и полезной нагрузкой пакета.

ESP (Encapsulating Security Payload) – ещё одна важная часть работы IPSec, которая отвечает за обработку payload пакета (хотя также ESP может заменять AH, или даже работать в паре с ним). ESP – немного сложнее AH, так как помимо тех же заголовков, вроде хэш и порядкового номера, содержит дополнительную информацию аутентификации и шифрует (или передает нетронутым) payload.

ESP-пакет состот из:

  1. SPI – аналогичен оному в AH
  2. Порядковый номер пакета.
  3. Данные пакета (зашифрованные или нетронутые).
  4. Дополнение для данных, которые не уместились в других частях пакета.
  5. Размер дополнения в байтах.
  6. Next Header – аналогичен оному в AH, содержит информацию о протоколе, использованнов в Payload (TCP, или IP).
  7. Хэш-сумма. Методы её создания те же самые что и в AH – MD5, SHA-1 или HMAC.

Вот, к примеру, сравнение оригинального ip-пакета и пакета с обработкой ESP в транспортном режиме работы:

vpn 9

А вот так ESP пакет выглядит в туннельном режиме:

vpn 11

Исходный заголовок пакета остался практически не тронут – IP-адреса отправителя и получателя на месте.

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

Для шифрования используются алгоритмы DES, 3DES, AES или Blowfish, а ключи для расшифровки генерируются на этапе SA. Конечно, мы рассмотрели не все функции IPSec, но в общих чертах всё работает именно так.

IPSec и NAT

Напоследок отметим один из недостатков IPSec – он не работает с NAT из-за особенностей ESP-пакета. NAT – это технология, которая на лету транслирует IP-адреса пакетов, поступающих из локальной сети, на адрес маршрутизатора, после чего отправляет их в сеть, при поступлении ответа транслирует их обратно и отправляет обратно по локалке (это нужно потому, что для глобальной сети в принципе не существует вашего локального адреса, а в заголовке пакета, в адресе отправителя, записан именно он. Так вот - IPSec не работает через NAT потому что ESP и AH, как мы помним, пишет хэш-сумму для проверки – это один из основных принципов аутентификации. После прохождения через NAT – пакет видоизменяется, меняется адрес и порт, а следовательно – хэш при проверке на стороне получателя будет не тот, и пакет отклонят. Однако, для IPSec существует NAT-T (NAT-Traversal). Проходя через NAT-T, пакет оснащается дополнительным UDP-заголовком, а доходя до получателя – заголовок удаляется и распознается как обычный IPSec-пакет.  

Компьютерный портал "Компаньон" © 2016.
В случае перепечатки материалов обязательна прямая ссылка на сайт cs-companion.ru.