Apunte de Seguridad en Redes (Teoría de las Comunicaciones)

De Cuba-Wiki
Saltar a: navegación, buscar
Back.png Volver a la página de la materia

Seguridad en redes[editar]

El siguiente es un apunte de seguridad en redes, útil tanto para el segundo parcial como para el final.

Requisitos[editar]

Confidencialidad[editar]

Solamente el emisor y el receptor deseado deben "entender" el contenido del mensaje. Esto es, cualquier tercero que snifee la conexión, no debe ser capaz de comprender el mensaje. Esto se logra mediante cualquier técnica de encriptación, sea simétrica o asimétrica, siempre y cuando sea lo suficientemente robusta.

Integridad de datos[editar]

Se refiere a que el emisor y el receptor puedan estar seguros de que el contenido del mensaje no fue alterado. Para esto se utilizan firmas digitales sobre el mensaje: el emisor cifra el contenido con una clave privada de encriptación, y el receptor puede desencriptarlo con la clave pública de desencriptación. Esto asegura no solamente que el mensaje ha sido enviado por quien posee la clave privada de encriptación, sino que la firma se realizó sobre un determinado contenido que no puede modificarse, ya que se desconoce la manera de reencriptarlo.

Sin embargo, como estos algoritmos son bastante costosos, generalmente se aplican sobre un hash del contenido del mensaje. Así, el receptor debe desencriptar el hash enviado y firmado por el emisor y compararlo contra el hash que él mismo calcula de los datos recibidos.

Autenticación[editar]

Se desea que el emisor y el receptor sean capaces de confirmar la identidad de cada uno. Lo más frecuente es el uso de certificados digitales: un documento firmado por una autoridad de confianza que incluye el nombre y la clave pública de encriptación de un sujeto (entre otras cosas).

Otra posibilidad es el envío de challenges por parte del emisor hacia el receptor, y que el receptor envíe una respuesta en función del dato enviado por el emisor y de una clave, la cual puede ser simétrica (y que solamente el emisor y receptor conozcan) o asimétrica (el emisor usa la clave pública de desencriptación del receptor para verificar). Esta última opción es vulnerable al problema de distribución de claves, en el que un man in the middle se hace pasar por las partes y envía claves públicas falsas.

No Repudiación[editar]

Ninguna de las dos partes puede negar el envío o la recepción de un determinado mensaje. Es decir, si el receptor recibe un mensaje del emisor, éste no puede negar haber sido quien lo envió.

Para esto se usan generalmente firmas digitales sobre los mensajes. Así, como se supone que solamente el emisor puede enviar un mensaje firmado por él, se elimina la no repudiación de origen. También se suele usar un árbitro en el medio que coordina los mensajes hacia ambas partes incluyendo timestamps y firmando digitalmente los mensajes reenviados.

Autorización[editar]

Autorización se refiere a que un usuario pueda acceder solamente a los servicios que tiene permitidos. Esto se resuelve generalmente mediante el envío de alguna contraseña al servidor, el cual la hashea y compara contra el hash guardado (así se evita guardar las contraseñas en texto plano).

Disponibilidad[editar]

Es importante que los servicios estén disponibles y sean accesibles por los usuarios a los que les corresponde.

Algoritmos criptográficos[editar]

Básicamente, hay tres tipos de algoritmos: de clave secreta, de clave pública y de hashing. Los algoritmos de clave secreta son simétricos en el sentido de que ambos participantes de la comunicación comparten la misma clave. DES es el ejemplo más conocido de función de encripción, IDEA es otro ejemplo.

Los de clave pública involucran una clave privada por cada participante y una clave pública que todo el mundo conoce. Para mandarle un mensaje seguro a un participante, se encripta el mensaje usando la clave pública. El participante entonces desencripta el mensaje usando su clave privada. El algoritmo más famoso de este tipo es el RSA (Rivest, Shamir, Adleman).

El tercer tipo de algoritmo se llama de hash o message digest. Típicamente las funciones criptográficas de hash no implican el uso de claves. La idea es mapear un mensaje potencialmente muy largo en un número pequeño de tamaño fijo.

La mejor manera de pensar en estos métodos es considerarlos como un checksum criptográfico. Los algoritmos de hash están pensados como funciones no inversibles tales que sea casi computacionalmente imposible encontrar dos mensajes que hashean al mismo valor. Entonces, si nos llega un mensaje y su código hash, y nosotros calculamos ese hash y obtenemos el mismo valor, tenemos altísimas probabilidades de que el mensaje no haya sido violado.

Una variante del hash, llamado MAC, hace uso de claves. La idea es hashear el mensaje sumado a una clave secreta, para que ante una modificación del contenido del mensaje, un intruso no pueda reproducir el hash. Se usa en TLS.

El método más famoso de este tipo es el MD5 (Message Digest 5). Una propiedad importantísima de MD5 es que es muchísimo más eficiente de computar que DES o RSA.

NOTA: en las siguientes secciones correspondientes a DES, RSA y MD5, ignoré deliberadamente los detalles implementativos que se mencionan en Peterson, ya que en clase quedó bastante claro que no les daban importancia. Para las generaciones futuras, me estoy refiriendo a la cursada del segundo cuatrimestre de 2007 :P.

Implementación y performance[editar]

DES y MD5 son varios órdenes de magnitud más rápidos que RSA, implementados en software. En un procesador bien moderno de fines de los noventa, DES procesaba datos a un rate de mas o menos 100 Mbps y MD5 a 600 Mbps, mientras que RSA sólo a 100 Kbps. RSA puede firmar 100 valores de 1024 bits por segundo y verificar 2000 valores de 1024 bits por segundo.

Implementados en hardware, DES y MD5 alcanzan rates del orden del Gbps, mientras que RSA se mantiene en los Kbps. Típicamente RSA se utiliza para encriptar cantidades pequeñas de datos, como una clave secreta. Los protocolos de seguridad usan estos "secretos" encriptados con RSA en conjunción con DES y MD5, posiblemente implementados por hardware, para proveer privacidad e integridad.

Respecto de los algoritmos de clave simétrica vs asimétrica, los primeros son mucho más rápidos que los segundos. En algunos casos lo que se hace es utilizar asimétrica para acordar la clave simétrica, superando así la mayor limitación que es la distribución de claves.

En lo que respecta a firmas digitales, que consiste en cifrar un determinado archivo con una clave privada (con lo que es desencriptable por cualquiera, pero no puede ser modificado), debido a la lentitud de los algoritmos tipo RSA, se firma un hash del archivo.

Secure Shell (SSH)[editar]

Secure shell provee un servicio de login remoto y la idea es que remplace a Telnet y rlogin.

SSH se usa habitualmente paa proveer autenticación cliente/servidor fuerte, pero también soporta servicios integridad y confidencialidad. Ni Telnet ni rlogin proveen estos últimos servicios.

SSH consiste de 3 protocolos:

  • SSH-TRANS: un protocolo de capa de transporte
  • SSH-AUTH: un protocolo de autenticación
  • SSH-CONN: un protocolo de conexión

SSH-TRANS provee un canal encriptado entre cliente y servidor. Corre sobre una conexión TCP. Cuando un usuario se logue en una máquina remota, el primer paso es setear un canal SSH-TRANS entre las dos máquinas. El canal se establece previa autenticación del cliente usando RSA. Una vez autenticado, cliente y servidor establecen una clave de sesión que usarán para encriptar los datos que intercambien a través del canal. El protocolo incluye una fase de negociación del algoritmo de encripción que usarán ambas partes. En general eligen 3DES. Además, SSH-TRANS incluye un chequeo de integridad de los datos intercambiados a través del canal.

La primera vez que un cliente se conecta a un servidor particular, SSH le advierte al usuario que nunca se conectó a esa máquina previamente y le pregunta si quiere seguir. Cuando el cliente contesta que sí, el servidor SSH le da su clave pública. El cliente guarda esa clave y la próxima vez que el usuario se conecta a esa máquina compara la clave que le da el servidor y si son iguales, se autentica al servidor.

El siguiente paso es que el usuario se autentique directamente a la máquina. SSH maneja tres mecanismos diferentes para hacer esto. En primer lugar, como las máquinas ya se comunican a través de un canal seguro, está OK si el usuario simplemente manda su password al server. El segundo mecanismo utiliza encripción de clave pública. Esto requiere que el usario le haya dado su clave pública al servidor previamente. El tercer mecanismo, llamado host-based authentication, básicamente dice que cualquier usuario que diga "soy fulano de tal" desde un set de hosts "confiables" es considerado automáticamente el mismo usuario en el server. Este mecanismo requiere que el host cliente se autentique con el servidor al conectarse por primera vez, por default sólo se autentica el servidor.

Transport Layer Security (TLS, SSL, HTTPS)[editar]

El protocolo "vive" en el medio de la capa de aplicación y la de transporte. Cuando se utiliza HTTP sobre TLS, usualmente se lo conoce como HTTPS. Por conveniencia, se asignó un puerto default a TLS, el 443.

TLS está partido en 2:

  • Un protocolo de handshake, para negociar los parámetros de la comunicación
  • Un protocolo "record", para realizar la transferencia de datos en sí

Los parámetros que se negocian son el set de algoritmos criptográficos y los parámetros necesarios para estos algoritmos, como claves de sesión, vectores de inicialización, etc. También podría negociar un algoritmo de compresión. El handshaking toma por lo menos 2 RTTs y hasta una docena de mensajes.

De ser necesario además, se aprovecha el handshaking para intercambiar certificados.

El record protocol define un set de formatos y procedimientos por los cuales los mensajes que vienen desde la capa de aplicación son:

  • Fragmentados o unidos en bloques de un tamaño conveniente para los pasos subsiguientes
  • Opcionalmente comprimidos
  • Protegidos en su integridad a través de un hash como MD5
  • Encriptados
  • Pasados a la capa subyacente para ser transmitidos (por ejemplo TCP)

En la etapa de negociación, podemos ser víctimas de un ataque man-in-the-middle. El atacante podría intentar hacernos usar un algoritmo de encripción muy débil, que él pueda romper. Si el sistema TLS está bien diseñado, sólo debería usar algoritmos suficientemente fuertes como para que este ataque no tenga sentido, y debería abortar la transacción al detectar que se le pide un algoritmo distinto de los que tiene "en catálogo".

Otra característica interesante de TLS es que soporta reanudación de sesiónes.