====== Seguridad a nivel de transporte [L4] ====== ===== TLS (Transport Layer Security) ===== Es una evolución de SSL (Secure Socket Layer) para proveer comunicaciones seguras a través de infraestuctura insegura. Provee un canal seguro a un servicio arbitrario de internet. Garantiza autenticación, confidencialidad e integridad, tiene los siguientes objetivos: * Seguridad Criptográfica * Interoperabilidad * Extensibildiad * Eficiencia La arquitectura de TLS en internet es la siguiente: {{drawio>master_cs:secom:tls_internet.png}} ==== Competidores de TLS ==== * SSH (Secure Shell) * También en capa de aplicación * Usa cifrado de clave pública para la autenticación pero también puede usar contraseñas * Confiada basada en hosts conocidos e intercambio de claves en vez de PKI * Se suele usar para acceso remoto a servidores, transferencia de archivos o tunelado de otros protocolos. * PGP(Pretty Good Privacy): * Confianza de web descentralizada en vez de usar PKI jerárquico. * Se suele usar para email, archivos y verificación de paquetes de software. ==== Protocolo TSL (1.2 y 1.3) ==== Transporta y, opcionalmente, cifra cada mensaje TLS entre 2 aplicaciones. Un registro TLS tiene la siguiente estructura: {{drawio>master_cs:secom:diagtls2.png}} * Trasnsporte de mensaje: Se transportan buffers opacos enviados por subcapas del protocolo superarioes. Puede fragmentar mensajes mayores de 16384 bytes y combinar varios mensajes pequeños en un solo regisotr. * Cifrado y validación de integridad: Los primeros mensajes se transmiten en claro, una vez finaliza el handshake, se cifra y valida de acuerdo a los parámetros negociados * Compresión: Ya no se usa, sujetoa a ataques de compresión de canal lateral. * Extensibilidad: El protocolo de registro solo trata con el transporte y el cifrado, las demás tareas son llevadas a cabo por un subprotocolo. Hay 4 subprotocolos principales: * Handshake * Change cipher spec * Datos de aplicación * Alert. === Protocolo de Handshake === Responsable de la negociación de los parámetros de conexión y realizar la autenticación. Intercambia entre 6 y 10 mensajes, dependiendo de las características. Suelen haber 3 flujos comunes: * Handshake completo con autenticación de servidor * Handshake abreviado continuando una sesión anterior * Handshake completo con autenticación mutua. struct { HandshakeType msg_type; //1 Byte uint24 length; HandshakeMessage message; //Depende del tipo de mensaje } Handshake; El funcionamiento de un handshake con autenticación de servidor sería el siguiente: - Intercambio de capacidades y negociación de parámetros - Autenticación, se validan los certificados presentados - Se establece una clave secreta maestra para proteger la sesión - Se verifica la integridad de los mensajes de handshake Siguen los siguientes pasos: {{drawio>master_cs:secom:diagflujofullhadshakeserver.png}} - [Cliente] solicita sesión TLS y se envían las capabilities - Client Hello: Compueto por los siguientes campos - Random: Previene ataques de replay y asegura la integridad - Session ID: Vacío para la primera conexión - Cipher Suites: Ordenadas por preferencia. - [Server] selecciona los parámetros de conexión - Server Hello: La versión puede ser inferior a la del cliente. Contiene solo una opción por campo. - [Server] envía la cadena de certificados si es necesaria autenticación - Certificate Message: Sirve un certificado X.509 - Primero viene el certificado principal y luego los intermedios. No se debe enviar el certificado raid - El certificadod epende de la cipher suite - Un server puede ser configurado con múltiples certificados - [Server] envía información adicional para generar la clave maestra - Key Exchange: Los contenidos dependen de la cipher suite. - El ClientKeyExchange es obligatorio y el SeverKeyExchange es opcional. - [Server] Indica la finalización de la negociación - [Cliente] Envía información adicional para generar la clave maestra - [Cliente] Cambia el cifrado e informa al servidor - [Cliente] Envía un MAC (Message Authentication Code) para todos los mensajes intercambiados - [Server] Cambia el cifrado e informa al cliente - [Server] Envía un MAC para todos los mensajes intercambiados