Протоколы для организации VPN. IPSec
- Подробности
- Опубликовано 19.08.2016 03:25
IPSec – довольно сложная для понимания технология, но также довольно гибкая. Структура IPSec состоит из множества внутренних протоколов, которые можно отключать и подключать для управления уровнем защиты передаваемых данных (также поддерживается система ключей и система сертификатов для удостоверения личности владельца пакета). Ну и, конечно же, множество сторонних алгоритмов шифрования – MD5, SHA-1, DES, 3DES и пр. Зато, хоть она и сложна – с правильно настроенным IPSec можно быть уверенным в том, что ваш VPN защищена от вторжения по максиму.
IPSec может работать в туннельном и транспортном режимах. При работе в транспортном – шифруются только данные пакета (его payload), а в туннельном – пересобирается и шифруется весь пакет, и заголовки также переписываются. Транспортный режим подходит, когда для организации туннеля используется другой протокол – например, L2TP, а туннельный – когда строите VPN-решение полностью на IPSec. Зачем использовать другой протокол для туннелей, и какая вообще разница? Ну, пакеты, зашифрованные IPSec в транспортном режиме – весят немного меньше, но в транспортном способе можно увидеть настоящие адреса получателя/отправителя, что не подходит при использовании VPN в целях анонимности. Также, несмотря на обилие различных данных для проверки целостности и аутентификации – многие из них можно отключить, да и выбор алгоритмов шифрования и длины ключей достаточно велик.
Процесс работы IPSec можно разделить на две части:
- Согласование параметров соединения, его создание поддержание (в терминологии IPSec эта часть называется IKE - Internet Key Exchange).
- Обработка 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) и видит – написанная отправителем сумма и высчитанная самостоятельно не сходятся – значит, пакет пришел не от отправителя, и потому он отклоняется.
Вы скажете “а что мешает злоумышленнику пересчитать хеш и добавить в поле своё значение?” - и это чертовски правильный вопрос. Изменить сообщение и пересчитать хэш действительно возможно, поэтому, помимо MD5 и SHA-1, IPSec поддерживает также HMAC. При хэшировании с помощью HMAC, в сообщение добавляется секретный ключ, и хэш высчитывается на основании самого пакета + этого ключа. Даже если злоумышленник пересчитает хэш пакета, он не будет верным без задействия ключа, и потому пакет вновь будет отклонен.
AH-заголовок состоит из:
- Поле “next header”, обозначающее, какой протокол используется для следующей за AH частью пакета. Служит для определения, какой режим использовался – туннельный или транспортный. Если в “next header” прописан IP – это туннельный. Если TCP или UDP – транспортный.
- Длина AH-заголовка.
- SPI (Security Parameters Index) – индекс протокола, использованного для создания хэш-суммы.
- Порядковый номер пакета, возрастающий с каждым переданным пакетом, для защиты от повторной передачи.
- Хеш-сумма.
В зависимости от режима (транспортный или сетевой), AH-заголовок расположен в разных местах IP-пакета. Обычно AH лежит между заголовком пакета и полезной нагрузкой пакета.
ESP (Encapsulating Security Payload) – ещё одна важная часть работы IPSec, которая отвечает за обработку payload пакета (хотя также ESP может заменять AH, или даже работать в паре с ним). ESP – немного сложнее AH, так как помимо тех же заголовков, вроде хэш и порядкового номера, содержит дополнительную информацию аутентификации и шифрует (или передает нетронутым) payload.
ESP-пакет состот из:
- SPI – аналогичен оному в AH
- Порядковый номер пакета.
- Данные пакета (зашифрованные или нетронутые).
- Дополнение для данных, которые не уместились в других частях пакета.
- Размер дополнения в байтах.
- Next Header – аналогичен оному в AH, содержит информацию о протоколе, использованнов в Payload (TCP, или IP).
- Хэш-сумма. Методы её создания те же самые что и в AH – MD5, SHA-1 или HMAC.
Вот, к примеру, сравнение оригинального ip-пакета и пакета с обработкой ESP в транспортном режиме работы:
А вот так ESP пакет выглядит в туннельном режиме:
Исходный заголовок пакета остался практически не тронут – 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-пакет.
Советуем почитать
В случае перепечатки материалов обязательна прямая ссылка на сайт Cs-Companion.ru