IPsec

IPsec (сокращение от IP Security) - набор протоколов для обеспечения защиты данных, передаваемых по протоколу IP, позволяет осуществлять подтверждение подлинности и / или шифрования IP-пакетов. IPsec также включает в себя протоколы защищенного обмена ключами в сети Интернет.


1. Стандарты

  • RFC 2401 (Security Architecture for the Internet Protocol) - Архитектура защиты протокола IP.
  • RFC 2402 (IP Authentication header) - аутентификационные заголовок IP.
  • RFC 2403 (The Use of HMAC-MD5-96 within ESP and AH) - Использование алгоритма хеширования MD-5 для создания аутентификационные заголовка.
  • RFC 2404 (The Use of HMAC-SHA-1-96 within ESP and AH) - Использование алгоритма хеширования SHA-1 для создания аутентификационные заголовка.
  • RFC 2405 (The ESP DES-CBC Cipher Algorithm With Explicit IV) - Использование алгоритма шифрования DES.
  • RFC 2406 (IP Encapsulating Security Payload (ESP)) - Шифрование данных.
  • RFC 2407 (The Internet IP Security Domain of Interpretation for ISAKMP) - область применения протокола управления ключами.
  • RFC 2408 (Internet Security Association and Key Management Protocol (ISAKMP)) - Управление ключами и аутентификатором защищенных соединений.
  • RFC 2409 (The Internet Key Exchange (IKE)) - Обмен ключами.
  • RFC 2410 (The NULL Encryption Algorithm and Its Use With IPsec) - Нулевой алгоритм шифрования и использования.
  • RFC 2411 (IP Security Document Roadmap) - дальнейшее развитие стандарта.
  • RFC 2412 (The OAKLEY Key Determination Protocol) - проверка соответствия ключа.

2. Архитектура IPsec

Протоколы IPsec, в отличие от других хорошо известных протоколов SSL и TLS, работают на сетевом уровне (уровень 3 модели OSI). Это делает IPsec более гибким, так что он может использоваться для защиты любых протоколов, базирующихся на TCP и UDP. IPsec может использоваться для обеспечения безопасности между двумя IP-узлами, между двумя шлюзами безопасности или между IP-узлом и шлюзом безопасности. Протокол "надстройкой" над IP-протоколу, и обрабатывает сформированные IP-пакеты описанным ниже способом. IPsec может обеспечивать целостность и / или конфиденциальность данных передаваемых по сети.

IPsec использует следующие протоколы для выполнения различных функций:

  • Authentication Header (АН) обеспечивает целостность виртуального соединения (передаваемых данных), аутентификацию источника информации и дополнительную функцию по предотвращению повторной передачи пакетов
  • Encapsulating Security Payload (ESP) может обеспечить конфиденциальность ( шифрования) передаваемой информации, ограничение потока конфиденциального трафика. Кроме этого, он может обеспечить целостность виртуального соединения (передаваемых данных), аутентификацию источника информации и дополнительную функцию по предотвращению повторной передачи пакетов (Всякий раз, когда применяется ESP, в обязательном порядке должен использоваться тот или иной набор данных услуг по обеспечению безопасности)
  • Security Association (SA) обеспечивают связь алгоритмов и данных, которые предоставляют параметры, необходимые для работы AH и / или ESP. Internet security association and key management protocol (ISAKMP) обеспечивает основу для аутентификации и обмена ключами, проверки подлинности ключей.

3. Security Association

Концепция "защищенного виртуального соединения" (SA, "Security Association") является фундаментальной в архитектуре IPsec. SA это симплексный соединения, которое формируется для транспортировки по нему соответствующего трафика. При реализации услуг безопасности формируется SA на основе использования протоколов AH или ESP (или обоих одновременно). SA определенный согласно концепции межтерминального соединения (point-to-point) и может функционировать в двух режимах: транспортный режим (РТР) и режим туннелирования (РТС). Транспортный режим реализуется при SA между двумя IP-узлами. В режиме туннелирования SA формирует IP-туннель.

Все SA хранятся в базе данных SADB (Security Associations Database) IPsec-модуля. Каждое SA имеет уникальный маркер, состоящий из трех элементов:

  • Индекса параметра безопасности (SPI)
  • IP-адреса назначения
  • Идентификатор протокола безопасности (ESP или AH)

IPsec-модуль, имея эти три параметра, может найти в SADB запись о конкретном SA. В список компонентов SA входят:

Последовательный номер
32-битное значение, которое используется для формирования поля Sequence Number в заголовках АН и ESP.
Переполнение счетчика порядкового номера
Флаг, который сигнализирует о переполнении счетчика последовательного номера.
Окно для подавления атак воспроизведения
Используется для определения повторной передачи пакетов. Если значение в поле Sequence Number не попадает во заданный диапазон, то пакет уничтожается.
Информация AH
используемый алгоритм аутентификации, необходимые ключи, время жизни ключей и другие параметры.
Информация ESP
алгоритмы шифрования и аутентификации, необходимые ключи, параметры инициализации (например, IV), время жизни ключей и другие параметры
Режим работы IPsec
туннельный или транспортное
MTU
Максимальный размер пакета, который можно передать по виртуальному каналу без фрагментации.

Так как защищенные виртуальные соединения являются симплексными, то для организации дуплексного канала, как минимум, нужны два SA. Кроме этого, каждый протокол (ESP / AH) должен иметь свою собственную SA для каждого направления, то есть связи AH + ESP требует наличия четырех SA. Все эти данные располагаются в SADB.

В SADB содержатся:

  • AH: алгоритм аутентификации.
  • AH: секретный ключ для аутентификации
  • ESP: алгоритм шифрования.
  • ESP: секретный ключ шифрования.
  • ESP: использование аутентификации (да / нет).
  • Параметры обмена ключами
  • Ограничения маршрутизации
  • IP политика фильтрации

Кроме базы данных SADB, реализации IPsec поддерживают базу данных SPD (Security Policy Database-База данных политик безопасности). Запись в SPD состоит из набора значений полей IP-заголовка и полей заголовка протокола верхнего уровня. Эти поля называются селекторами. Селекторы используются для фильтрации исходящих пакетов, с целью поставить каждый пакет в соответствии с определенным SA. Когда формируется пакет, сравниваются значения соответствующих полей в пакете (селекторные поля) с теми, которые содержатся SPD. Находятся соответствующие SA. Затем определяется SA (в случае, если оно есть) для пакета и связанный с ней индекс параметров безопасности (SPI). После чего выполняются операции IPsec (операции протокола AH или ESP).

Примеры селекторов, которые содержатся в SPD:

  • IP-адрес места назначения
  • IP-адрес отправителя
  • Протокол IPsec (AH, ESP или AH + ESP)
  • Порты отправителя и получателя

4. Authentication Header

+ Authentication Header format - Offsets Octet 16 0 1 2 3 - Octet 16 Bit 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - 0 0 Next Header Payload Len Reserved - 4 32 Security Parameters Index (SPI) - 8 64 Sequence Number - C 96 Integrity Check Value (ICV)
...
- ... ...
Next Header (8 bits)
Тип заголовка протокола идет после заголовка AH. По этому полю приемный IP-sec модуль узнает о защищаемом протоколе верхнего уровня. Значение этого поля для различных протоколов можно посмотреть в RFC 1700.
Payload Len (8 bits)
Это поле определяет общий размер АН-заголовка в 32-битовых словах, минус 2. Несмотря на это, при использовании IPv6 длина заголовка должна быть кратна 8 байтам.
Reserved (16 bits)
Зарезервировано. Заполняется нулями.
Security Parameters Index (32 bits)
Индекс параметров безопасности. Значение этого поля вместе с IP-адресом получателя и протоколом безопасности (АН-протокол), однозначно определяет защищенное виртуальное соединение (SA) для данного пакета. Диапазон значений SPI 1 ... 255 зарезервирован IANA.
Sequence Number (32 bits)
Последовательный номер. Служит для защиты от повторной передачи. Поле содержит монотонно возрастающее значение параметра. Несмотря на то, что получатель может отказаться от услуги по защите от повторной передачи пакетов, оно является обязательным и всегда присутствует в AH-заголовке. Передаточный IPsec-модуль всегда использует это поле, но получатель может его и не обрабатывать.
Integrity Check Value
Контрольная сумма. Должна быть кратна 8 байтам для IPv6, и 4-байтам для IPv4.

Протокол AH используется для аутентификации, т.е. для подтверждения того, что мы связываемся именно с тем, с кем предполагаем, и данные, которые получаем мы, не искаженные при передаче.


4.1. Обработка исходящих IP-пакетов

Если передающий IPsec-модуль определяет, что пакет связан с SA, которое предусматривает AH-обработку, то он начинает обработку. В зависимости от режима (транспортный или режим туннелирования) он по-разному вставляет AH-заголовок у IP-пакет. В транспортном режиме AH-заголовок располагается после заголовка протокола IP и перед заголовками протоколов верхнего уровня (обычно, TCP или UDP). В режиме туннелирования весь исходный IP-пакет обрамляется сначала заголовком AH, затем заголовком IP-протокола. Такой заголовок называется внешним, а заголовок исходного IP-пакета-внутренним. После этого передающий IPsec-модуль должен сгенерировать последовательный номер и записать его в поле Sequence Number. При установке SA последовательный номер устанавливается в 0, и перед отправкой каждого IPsec-пакета увеличивается на единицу. Кроме того, происходит проверка-ное зациклился или счетчик. Если он достиг своего максимального значения, то он снова устанавливается в 0. Если используется услуга по предотвращению повторной передачи, то при достижении счетчика своего максимального значения, передает IPsec-модуль переустанавливает SA. Таким образом обеспечивается защита от повторной посылки пакета - приемный IPsec-модуль будет проверять поле Sequence Number, и игнорировать повторно приходят пакеты. Далее происходит вычисление контрольной суммы ICV. Надо заметить, что здесь контрольная сумма вычисляется с применением секретного ключа, без которого злоумышленник сможет заново вычислить хэш, но не зная ключа, не сможет сформировать правильную контрольную сумму. Конкретные методы, используемые для вычисления ICV, можно узнать RFC 4305. В настоящее время могут применяться, например, алгоритмы HMAC-SHA1-96 или AES-XCBC-MAC-96. Протокол АН вычисляет контрольную сумму (ICV) по следующим полям IPsec-пакета:

  • Поля IP-заголовка, которые не были подвержены изменениям в процессе трансляции, или определены как важнейшие
  • АН-заголовок (Поля: "Next Header", "Payload Len," Reserved "," SPI "," Sequence Number "," Integrity Check Value ". Поле" Integrity Check Value "устанавливается в 0 при вычислении ICV
  • Данные протокола верхнего уровня
Если поле может изменяться в процессе транспортировки, то его значение устанавливается в 0 перед вычислением ICV. Исключения составляют поля, которые могут изменяться, но значение которых можно предусмотреть при приеме. При вычислении ICV они не заполняются нулями. Примером изменяемого поля может служить поле контрольной суммы, примером меняющегося, но обусловленного может быть IP-адрес получателя. Подробное описание того, какие поля как учитываются при исчислении ICV, можно найти в стандарте RFC 2402.

4.2. Обработка входящих IP-пакетов

После получения пакета, содержащего сообщение АН-протокола, приемный IPsec-модуль ищет подходящее защищенное виртуальное соединение (SA) SADB (Security Associations Database), используя IP-адрес получателя, протокол безопасности (АН) и индекс SPI. Если соответствующее SA не найдено, пакет уничтожается. Найдено защищенное виртуальное соединение (SA) указывает на то, используется услуга по предотвращению повторной передачи пакетов, то есть необходимость проверки поля Sequence Number. Если услуга используется, то поле проверяется. Для этого используется метод скользящего окна. Приемный IPsec-модуль формирует окно шириной W. Левый край окна соответствует минимальному последовательном номера (Sequence Number) N правильно принятого пакета. Пакет с полем Sequence Number, в котором содержится значение, начиная от N +1 и заканчивая N + W, принимается корректно. Если полученный пакет оказывается по левую границу окна-он уничтожается. Затем приемный IPsec-модуль вычисляет ICV по соответствующим полям принятого пакета, используя алгоритм аутентификации, который он узнает из записи о SA, и сравнивает полученный результат со значением ICV, расположенным в поле ?Integrity Check Value". Если вычисленное значение ICV совпало с принятым, пришел пакет считается действительным и принимается для дальнейшей IP-обработки. Если проверка дала отрицательный результат, то приемный пакет уничтожается.


5. Encapsulating Security Payload

+ Encapsulating Security Payload format - Offsets Octet 16 0 1 2 3 - Octet 16 Bit 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - 0 0 Security Parameters Index (SPI) - 4 32 Sequence Number - 8 64 Payload data - ... ... - ... ... - ... ... Padding (0-255 octets) - ... ... Pad Length Next Header - ... ... Integrity Check Value (ICV)
...
- ... ...
Security Parameters Index (32 bits)
Индекс параметров безопасности. Значение этого поля вместе с IP-адресом получателя и протоколом безопасности (АН-протокол), однозначно определяет защищенное виртуальное соединение (SA) для данного пакета. Диапазон значений SPI 1 ... 255 зарезервирован IANA для использования.
Sequence Number (32 bits)
Последовательный номер. Служит для защиты от повторной передаче. Поле содержит монотонно возрастающее значение параметра. Несмотря на то, что получатель может и отказаться от услуги по защите от повторной передачи пакетов, оно всегда присутствует в AH-заголовке. Отправитель (передающий IPsec-модуль) должен всегда использовать это поле, но получатель может и не нуждаться в его обработке.
Payload data (variable)
Это поле содержит данные согласно полем "Next Header". Это поле является обязательным и состоит из целого числа байтов. Если алгоритм, используемый для шифрования этого поля, требует данных для синхронизации криптопроцессов (например, вектор инициализации - "Initialization Vector"), то это поле может содержать эти данные в явном виде.
Padding (0-255 octets)
Дополнение. Необходимо, например, для алгоритмов, которые требуют, чтобы открытый текст был кратен определенному числу байтов), например, размером блока для блочного шифра.
Pad Length (8 bits)
Размер дополнения (в байтах).
Next Header (8 bits)
Это поле определяет тип данных, содержащихся в поле "Payload data".
Integrity Check Value
Контрольная сумма. Должна быть кратна 8 байтам для IPv6, и 4-байтам для IPv4.



5.1. Обработка выходных IPsec-пакетов

Если передающий IPsec-модуль определяет, что пакет связан с SA, которое предусматривает ESP-обработку, то он начинает обработку. В зависимости от режима (транспортный или режим туннелирования) исходный IP-пакет обрабатывается по-разному. В транспортном режиме передающий IPsec-модуль осуществляет процедуру обрамление (инкапсуляции) протокола верхнего уровня (например, TCP или UDP), используя для этого ESP-заголовок и ESP-концевик, не затрагивая при этом заголовок исходного IP-пакета. В режиме туннелирования IP-пакет обрамляется ESP-заголовком и ESP-концевиком, после чего обрамляется внешним IP-заголовком. Далее проводится шифрование-в транспортном режиме шифруется только сообщения протокола выше лежащего уровня (то есть все, что находилось после IP-заголовка в исходном пакете), в режиме туннелирования-весь исходный IP-пакет. Передаточный IPsec-модуль с записи о SA определяет алгоритм шифрования и секретный ключ. Стандарты IPsec позволяют использование алгоритмов шифрования triple-DES, AES и Blowfish. Так как размер открытого текста должен быть кратен определенному числу байт, например, размером блока для блочных алгоритмов, перед шифрованием проводится еще и необходимое дополнение сообщение что шифруется. Зашифрованное сообщение помещается в поле Payload Data. В поле Pad Length помещается длина дополнения. Затем, как и в AH, исчисляется Sequence Number. После чего считается контрольная сумма (ICV). Контрольная сумма, в отличие от протокола AH, где при ее исчислении учитываются также и некоторые поля IP-заголовка, в ESP исчисляется только по полям ESP-пакета за вычетом поля ICV. Перед вычислением контрольной суммы оно заполняется нулями. Алгоритм вычисления ICV, как и в протоколе AH, передающий IPsec-модуль определяется по записи о SA, с которым связан обрабатываемый пакет.


5.2. Обработка входящих IPsec-пакетов

После получения пакета, содержащего сообщение ESP-протокола, приемный IPsec-модуль ищет подходящее защищенное виртуальное соединение (SA) в SADB (Security Associations Database), используя IP-адрес получателя, протокол безопасности (ESP) и индекс SPI. Если соответствующее SA не найдено, пакет уничтожается. Найдено защищенное виртуальное соединение (SA) указывает на то, используется услуга по предотвращению повторной передачи пакетов, то есть необходимость проверки поля Sequence Number. Если услуга используется, то поле проверяется. Для этого, так же как и в AH, используется метод скользящего окна. Приемный IPsec-модуль формирует окно шириной W. Левый край окна соответствует минимальному последовательном номера (Sequence Number) N правильно принятого пакета. Пакет с полем Sequence Number, в котором содержится значение, начиная от N +1 и заканчивая N + W, принимается корректно. Если полученный пакет оказывается по левую границу окна-он уничтожается. Затем, если используется услуга аутентификации, приемный IPsec-модуль вычисляет ICV по соответствующим полям принятого пакета, используя алгоритм аутентификации, который он узнает из записи о SA, и сравнивает полученный результат со значением ICV, расположенным в поле ?Integrity Check Value". Если вычисленное значение ICV совпало с принятым, пришел пакет считается действительным. Если проверка дала отрицательный результат, то приемный пакет уничтожается. Далее проводится расшифровка пакета. Приемный IPsec-модуль узнает из записи о SA, какой алгоритм шифрования используется, и секретный ключ. Надо заметить, что проверка контрольной суммы и процедура расшифровки могут проводиться не только последовательно, но и параллельно. В последнем случае процедура проверки контрольной суммы должна закончиться раньше процедуры расшифровки, и если проверка ICV провалилась, процедура расшифровки также должна прекратиться. Это позволяет быстрее выявлять испорченные пакеты, в свою очередь, повышает уровень защиты от атак типа "отказ в обслуживании" (DOS-атаки). Далее расшифровано сообщение согласно полем Next Header передается для дальнейшей обработки.


6. Использование

Протокол IPsec используется, в основном, для организации VPN-туннелей. В этом случае протоколы ESP и AH работают в режиме туннелирования. Кроме того, настраивая политики безопасности определенным образом, протокол можно использовать для создания межсетевого экрана. Смысл межсетевого экрана заключается в том, что он контролирует и фильтрует пакеты, проходящие через него, в соответствии с заданными правилами. Устанавливается набор правил, и экран просматривает все пакеты которые проходят через него. Если переданы пакеты попадают под действие этих правил, межсетевой экран обрабатывает их соответствующим образом. Например, он может отклонять определенные пакеты, тем самым прекращая опасные соединения. Настроив политику безопасности соответствующим образом, можно, например, запретить интернет-трафик. Для этого достаточно запретить отсылку пакетов, в которые вкладываются сообщение протоколов HTTP и HTTPS. IPsec можно применять и для защиты серверов - для этого отбрасываются все пакеты, кроме пакетов, необходимых для корректного выполнения функций сервера. Например, для Web-сервера можно блокировать весь трафик, за исключением соединений через 80-й порт протокола TCP, либо через порт TCP 443 в случаях, когда применяется HTTPS.