lunes, abril 28, 2008

IPsec

IPsec (abreviatura de Internet Protocol security) es un conjunto de protocolos cuya función es asegurar las comunicaciones sobre el Protocolo de Internet (IP) autenticando y/o cifrando cada paquete IP en un flujo de datos. IPsec también incluye protocolos para el establecimiento de claves de cifrado.

Sumario

Los protocolos de IPsec actúan en la capa de red, la capa 3 del modelo OSI. Otros protocolos de seguridad para Internet de uso extendido, como SSL, TLS y SSH operan de la capa de transporte (capas OSI 4 a 7) hacia arriba. Esto hace que IPsec sea más flexible, ya que puede ser utilizado para proteger protocolos de la capa 4, incluyendo TCP y UDP, los protocolos de capa de transporte más usados. IPsec tiene una ventaja sobre SSL y otros métodos que operan en capas superiores. Para que una aplicación pueda usar IPsec no hay que hacer ningún cambio, mientras que para usar SSL y otros protocolos de niveles superiores, las aplicaciones tienen que modificar su código.

Arquitectura de seguridad

IPsec está implementado por un conjunto de protocolos criptográficos para (1) asegurar el flujo de paquetes, (2) garantizar la autenticación mutua y (3) establecer parámetros criptográficos.

La arquitectura de seguridad de IP utiliza el concepto de asociación de seguridad (SA) como base para construir funciones de seguridad en IP. Una asociación de seguridad es simplemente el paquete de algoritmos y parámetros (tales como las claves) que se está usando para cifrar y autenticar un flujo particular en una dirección. Por lo tanto, en el tráfico normal bidireccional, los flujos son asegurados por un par de asociaciones de seguridad. La decisión final de los algoritmos de cifrado y autenticación (de una lista definida) le corresponde al administrador de IPsec.

Para decidir qué protección se va a proporcionar a un paquete saliente, IPsec utiliza el índice de parámetro de seguridad (SPI), un índice a la base de datos de asociaciones de seguridad (SADB), junto con la dirección de destino de la cabecera del paquete, que juntos identifican de forma única una asociación de seguridad para dicho paquete. Para un paquete entrante se realiza un procedimiento similar; en este caso IPsec coge las claves de verificación y descifrado de la base de datos de asociaciones de seguridad.

En el caso de multicast, se proporciona una asociación de seguridad al grupo, y se duplica para todos los receptores autorizados del grupo. Puede haber más de una asociación de seguridad para un grupo, utilizando diferentes SPIs, y por ello permitiendo múltiples niveles y conjuntos de seguridad dentro de un grupo. De hecho, cada remitente puede tener múltiples asociaciones de seguridad, permitiendo autenticación, ya que un receptor sólo puede saber que alguien que conoce las claves ha enviado los datos. Hay que observar que el estándar pertinente no describe cómo se elige y duplica la asociación a través del grupo; se asume que un interesado responsable habrá hecho la elección.

Estado actual del estándar

IPsec es una parte obligatoria de IPv6, y su uso es opcional con IPv4. Aunque el estándar está diseñado para ser indiferente a las versiones de IP, el despliegue y experiencia hasta 2007 atañe a las implementaciones de IPv4.

Los protocolos de IPsec se definieron originalmente en las RFCs 1825 y 1829, publicadas en 1995. En 1998 estos documentos fueron sustituidos por las RFCs 2401 y 2412, que no son compatibles con la 1825 y 1829, aunque son conceptualmente idénticas. En diciembre de 2005 se produjo la tercera generación de documentos, RFCs 4301 y 4309. Son en gran parte un superconjunto de la 2401 y 2412, pero proporcionan un segundo estándar de Internet Key Exchange. Esta tercera generación de documentos estandarizó la abreviatura de IPsec como "IP" en mayúsculas y "sec" en minúsculas.

Es raro ver un producto que ofrezca soporte de RFC1825 y 1829. "ESP" se refiere generalmente a 2406, mientras que ESPbis se refiere a 4303.

Propósito de diseño

IPsec fue proyectado para proporcionar seguridad en modo transporte (extremo a extremo) del tráfico de paquetes, en el que los ordenadores de los extremos finales realizan el procesado de seguridad, o en modo túnel (puerta a puerta) en el que la seguridad del tráfico de paquetes es proporcionada a varias máquinas (incluso a toda la red de área local) por un único nodo.

IPsec puede utilizarse para crear VPNs en los dos modos, y este es su uso principal. Hay que tener en cuenta, sin embargo, que las implicaciones de seguridad son bastante diferentes entre los dos modos de operación.

La seguridad de comunicaciones extremo a extremo a escala Internet se ha desarrollado más despacio de lo esperado. Parte de la razón a esto es que no ha surgido infraestructura de clave pública universal o universalmente de confianza (DNSSEC fue originalmente previsto para esto); otra parte es que muchos usuarios no comprenden lo suficientemente bien ni sus necesidades ni las opciones disponibles como para promover su inclusión en los productos de los vendedores.

Como el Protocolo de Internet no provee intrínsecamente de ninguna capacidad de seguridad, IPsec se introdujo para proporcionar servicios de seguridad tales como:

  1. Cifrar el tráfico (de forma que no pueda ser leido por nadie más que las partes a las que está dirigido)
  2. Validación de integridad (asegurar que el tráfico no ha sido modificado a lo largo de su trayecto)
  3. Autenticar a los extremos (asegurar que el tráfico proviene de un extremo de confianza)
  4. Anti-repetición (proteger contra la repetición de la sesión segura).

Modos

Así pues y dependiendo del nivel sobre el que se actúe, podemos establecer dos modos básicos de operación de IPsec: modo transporte y modo túnel.

Modo transporte

En modo transporte, sólo la carga útil (los datos que se transfieren) del paquete IP es cifrada y/o autenticada. El enrutamiento permanece intacto, ya que no se modifica ni se cifra la cabecera IP; sin embargo, cuando se utiliza la cabecera de autenticación (AH), las direcciones IP no pueden ser traducidas, ya que eso invalidaría el hash. Las capas de transporte y aplicación están siempre aseguradas por un hash, de forma que no pueden ser modificadas de ninguna manera (por ejemplo traduciendo los números de puerto TCP y UDP). El modo transporte se utiliza para comunicaciones ordenador a ordenador.

Una forma de encapsular mensajes IPsec para atravesar NAT ha sido definido por RFCs que describen el mecanismo de NAT-T.

Modo túnel

En el modo túnel, todo el paquete IP (datos más cabeceras del mensaje) es cifrado y/o autenticado. Debe ser entonces encapsulado en un nuevo paquete IP para que funcione el enrutamiento. El modo túnel se utiliza para comunicaciones red a red (túneles seguros entre routers, p.e. para VPNs) o comunicaciones ordenador a red u ordenador a ordenador sobre Internet.

Detalles técnicos [editar]

IPsec conta de dos protocolos que han sido desarrollados para proporcionar seguridad a nivel de paquete, tanto para IPv4 como para IPv6:

  • Authentication Header (AH) proporciona integridad, autenticación y no repudio si se eligen los algoritmos criptográficos apropiados.
  • Encapsulating Security Payload (ESP) proporciona confidencialidad y la opción -altamente recomendable- de autenticación y protección de integridad.

Los algoritmos criptográficos definidos para usar con IPsec incluyen HMAC- SHA1 para protección de integridad, y Triple DES-CBC y AES-CBC para confidencialidad. Más detalles en la RFC 4305.

Authentication header (AH)

AH está dirigido a garantizar integridad sin conexión y autenticación de los datos de origen de los datagramas IP. Para ello, calcula un Hash Message Authentication Code (HMAC) através de algún algoritmo hash operando sobre una clave secreta, el contenido del paquete IP y las partes inmutables del datagrama. Este proceso restringe la posibilidad de emplear NAT, que puede ser implementada con NAT transversal. Por otro lado, AH puede proteger opcionalmente contra ataques de repetición utilizando la técnica de ventana deslizante y descartando paquetes viejos. AH protege la carga útil IP y todos los campos de la cabecera de un datagrama IP excepto los campos mutantes, es decir, aquellos que pueden ser alterados en el tránsito. En IPv4, los campos de la cabecera IP mutantes (y por lo tanto no autenticados) incluyen TOS, Flags, Offset de fragmentos, TTL y suma de verificación de la cabecera. AH opera directamente por encima de IP, utilizando el protocolo IP número 51. Un cabecera AH mide 32 bits, he aquí un diagrama de cómo se organizan:

0 - 7 bit 8 - 15 bit 16 - 23 bit 24 - 31 bit
Next header Payload length RESERVED
Security parameters index (SPI)
Sequence number

Hash Message Authentication Code (variable)

Significado de los campos:

Next header
Identifica el protocolo de los datos transferidos.
Payload length
Tamaño del paquete AH.
RESERVED
Reservado para uso futuro (hasta entonces todo ceros).
Security parameters index (SPI)
Indica los parámetros de seguridad que, en combinación con la dirección IP, identifican la asociación de seguridad implementada con este paquete.
Sequence number
Un número siempre creciente, utilizado para evitar ataques de repetición.
HMAC
Contiene el valor de verificación de integridad (ICV) necesario para autenticar el paquete; puede contener relleno.

Encapsulating Security Payload (ESP)

El protocolo ESP proporciona autenticidad de origen, integridad y protección de confidencialidad de un paquete. ESP también soporta configuraciones de sólo cifrado y sólo autenticación, pero utilizar cifrado sin autenticación está altamente desaconsejado porque es inseguro[1] [2] .[3] Al contrario que con AH, la cabecera del paquete IP no está protegida por ESP (aunque en ESP en modo túnel, la protección es proporcionada a todo el paquete IP interno, incluyendo la cabecera interna; la cabecera externa permanece sin proteger). ESP opera directamente sobre IP, utilizando el protocolo IP número 50.

Un diagrama de paquete ESP:

0 - 7 bit 8 - 15 bit 16 - 23 bit 24 - 31 bit
Security parameters index (SPI)
Sequence number


Payload data (variable)


Padding (0-255 bytes)
Pad Length Next Header

Authentication Data (variable)


Significado de los campos

Security parameters index (SPI)
Identifica los parámetros de seguridad en combinación con la dirección IP.
Sequence number
Un número siempre creciente, utilizado para evitar ataques de repetición.
Payload data
Los datos a transferir.
Padding
Usado por algunos algoritmos criptográficos para rellenar por completo los bloques.
Pad length
Tamaño del relleno en bytes.
Next header
Identifica el protocolo de los datos transferidos.
Authentication data
Contiene los datos utilizados para autenticar el paquete.

Implementaciones

El soporte de IPsec está normalmente implementado en el núcleo con la gestión de claves y negociación de ISAKMP/IKE realizada en espacio de usuario. Las implementaciones de IPsec existentes suelen incluir ambas funcionalidades. Sin embargo, como hay un interfaz estándar para la gestión de claves, es posible controlar una pila IPsec de núcleo utilizando las herramientas de gestión de claves de una implementación distinta.

Por esta razón, hay confusión en los orígenes de la implementación de IPsec que se encuentra en el núcleo de Linux. El proyecto FreeS/WAN realizó la primera implementación completa y de código abierto de IPsec para Linux. Consiste en una pila IPsec de núcleo KLIPS, junto con un demonio (pluto) y muchos scripts de shell. El proyecto FreeS/WAN fue desmantelado en marzo de 2004. Openswan y strongSwan son continuaciones de FreeS/WAN. El proyecto KAME también implementó soporte IPsec completo para NetBSD y FreeBSD. Su demonio de gestión de claves se llama racoon. OpenBSD hizo su propio demonio ISAKMP/IKE, llamado simplemente isakmpd (y ha sido portado a otros sistemas, incluyendo Linux).

Sin embargo, ninguna de estas pilas IPsec de núcleo estaba integrada en el núcleo de Linux. Alexey Kuznetsov y David S. Miller escribieron desde cero una implementación de IPsec de núcleo para el núcleo de Linux alrededor de finales de 2002. Esta pila fue posteriormente lanzada como parte de Linux 2.6, y es llamada por varios "nativa"o "NETKEY".

Por lo tanto, contrariamente a la creencia popular, la pila IPsec de Linux no se originó en el proyecto KAME. Como soporta el protocolo estándar PF KEY (RFC 2368) y el intefaz nativo XFRM para gestión de claves, la pila IPsec de Linux puede utilizarse junto con pluto de Openswan/strongSwan, isakmpd del proyecto OpenBSD, racoon del proyecto KAME o sin ningún demonio ISAKMP/IKE (utilizando claves manuales).

Las nuevas arquitecturas de procesadores de red, incluyendo procesadores multinúcleo con motores de cifrado integrados, han cambiado la forma en que las pilas IPsec son diseñadas. Un Fast Path dedicado es utilizado para descargar el procesado de las tareas de IPsec (SA, búsquedas SP, cifrado, etc). Estas pilas Fast Path deben estar cointegradas en núcleos dedicados con Linux o RTOS corriendo en otros núcleos. Estos SO son el plano de control que ejecuta ISAKMP/IKE de la pila IPsec Fast Path.

Hay bastantes implementaciones de los protocolos IPsec e ISAKMP/IKE. Entre otras:

Lista de RFCs relacionados con IPsec

RFC 2367
PF_KEY Interface
RFC 2401 (sustituye a RFC 1825 y fué sustituida por RFC 4301)
Security Architecture for the Internet Protocol
RFC 2402 (sustituida por RFC 4302 y RFC 4305)
Authentication Header
RFC 2403
The Use of HMAC-MD5-96 within ESP and AH
RFC 2404
The Use of HMAC-SHA-1-96 within ESP and AH
RFC 2405
The ESP DES-CBC Cipher Algorithm With Explicit IV
RFC 2406 (sustituida por RFC 4303 y RFC 4305)
Encapsulating Security Payload
RFC 2407 (sustituida por RFC 4306)
IPsec Domain of Interpretation for ISAKMP (IPsec DoI)
RFC 2408 (sustituida por RFC 4306)
Internet Security Association and Key Management Protocol (ISAKMP)
RFC 2409 (sustituida por RFC 4306)
Internet Key Exchange (IKE)
RFC 2410
The NULL Encryption Algorithm and Its Use With IPsec
RFC 2411
IP Security Document Roadmap
RFC 2412
(sustituye a RFC 1829) The OAKLEY Key Determination Protocol
RFC 2451
The ESP CBC-Mode Cipher Algorithms
RFC 2857
The Use of HMAC-RIPEMD-160-96 within ESP and AH
RFC 3526
More Modular Exponential (MODP) Diffie-Hellman groups for Internet Key Exchange (IKE)
RFC 3706
A Traffic-Based Method of Detecting Dead Internet Key Exchange (IKE) Peers
RFC 3715
IPsec-Network Address Translation (NAT) Compatibility Requirements
RFC 3947
Negotiation of NAT-Traversal in the IKE
RFC 3948
UDP Encapsulation of IPsec ESP Packets
RFC 4106
The Use of Galois/Counter Mode (GCM) in IPsec Encapsulating Security Payload (ESP)
RFC 4301 (sustituye a RFC 2401)
Security Architecture for the Internet Protocol
RFC 4302 (sustituye a RFC 2402)
IP Authentication Header
RFC 4303 (sustituye a RFC 2406)
IP Encapsulating Security Payload (ESP)
RFC 4304
Extended Sequence Number (ESN) Addendum to IPsec Domain of Interpretation (DOI) for Internet Security Association and Key Management Protocol (ISAKMP)
RFC 4305 (sustituida por RFC 4835)
Cryptographic Algorithm Implementation Requirements for Encapsulating Security Payload (ESP) and Authentication Header (AH)
RFC 4306 (sustituye a RFC 2407, RFC 2408, and RFC 2409)
Internet Key Exchange (IKEv2) Protocol
RFC 4307
Cryptographic Algorithms for Use in the Internet Key Exchange Version 2 (IKEv2)
RFC 4308
Cryptographic Suites for IPsec
RFC 4309
Using Advanced Encryption Standard (AES) CCM Mode with IPsec Encapsulating Security Payload (ESP)
RFC 4478
Repeated Authentication in Internet Key Exchange (IKEv2) Protocol
RFC 4543
The Use of Galois Message Authentication Code (GMAC) in IPsec ESP and AH
RFC 4555
IKEv2 Mobility and Multihoming Protocol (MOBIKE)
RFC 4621
Design of the IKEv2 Mobility and Multihoming (MOBIKE) Protocol
RFC 4718
IKEv2 Clarifications and Implementation Guidelines
RFC 4806
Online Certificate Status Protocol (OCSP) Extensions to IKEv2
RFC 4809
Requirements for an IPsec Certificate Management Profile
RFC 4835 (sustituye a RFC 4305)
Cryptographic Algorithm Implementation Requirements for Encapsulating Security Payload (ESP) and Authentication Header (AH)
RFC 4945
The Internet IP Security PKI Profile of IKEv1/ISAKMP, IKEv2, and PKIX

Referencias

  1. Bellovin, Steven M. (1996). "Problem Areas for the IP Security Protocols". Proceedings of the Sixth Usenix Unix Security Symposium: 1-16. Revisado el 13-11-2007.
  2. K.G. Paterson y A. Yau (2006). "Cryptography in theory and practice: The case of encryption in IPsec". Eurocrypt 2006, Lecture Notes in Computer Science Vol. 4004: 12-29. Revisado el 13-11-2007.
  3. J.P. Degabriele y K.G. Paterson (2007). "Attacking the IPsec Standards in Encryption-only Configurations". IEEE Symposium on Security and Privacy, IEEE Computer Society: 335-349. Revisado el 13-11-2007.

No hay comentarios: