II Encuentro Macroregional Sur de Software Libre Tecnologías Libres para Túneles y VPNs. jun 2006 II EMSSOL Universidad Peruana Unión, Juliaca, Perú 26 may 2006-1ra. Semana de la Ciencia y la Tecnología - Universidad Católica del Uruguay
Introducción: Agenda Descripción de la situación Conceptos generales encriptación y autenticación Conceptos generales túneles Conceptos generales VPNs Túneles: ssh, stunnel, zebedee VPNs: OpenVPN Otros: pptp, cipe,vpnd, vtun, tunnelv Túneles, VPNs y Firewalls
Introducción Por qué encriptar: Confidencialidad, seguridad (passwords). No siempre tengo control de la conexión física (wireless, internet, etc.) No confiar en el canal físico: sniffers equipos comprometidos tempest echelon
Introducción Por qué autenticar: No siempre los protocolos de aplicación autentican cliente y servidor de forma confiable (nfs, aplicaciones legadas). Atacantes pueden personificar el servidor y/o el cliente. Ataques comprometiendo elementos que no están bajo mi control (dns, rutas en Internet, etc.)
Introducción Encripción y autenticación del tráfico: Dos problemas diferentes: Para una aplicación específica, Lo ideal es que la aplicación soporte encripción en forma nativa (smtp/tls, imaps, pops, ssh, https) Cuando no soporta encripción: túnel o VPN Para todo el tráfico de la red: VPN
Introducción - Encripción Encripción por clave simétrica: Las dos partes comparten la misma clave secreta. La seguridad depende del secreto de la clave compartida. Muy eficiente en CPU. Escala muy mal al aumentar número de participantes (((n-1) * n) / 2) Ejemplos: Blowfish, AES, RC5, 3DES
Introducción - Encripción Encripción por clave pública: Dos claves relacionadas entre si, una pública, la otra privada. La clave pública se distribuye libremente (seguridad cero). La seguridad depende de la clave privada, que debe ser conocida solo por el dueño. (seguridad relativa + frase acceso) Alto costo en CPU. Escala muy bien con el número de participantes (n+1). Ejemplos: dsa, rsa
Diffie-Hellman: Introducción - Encripción Protocolo para intercambio de claves. Combina las ventajas de la criptografía de clave pública con la eficiencia en CPU de clave simétrica. Permite generar dinámicamente sobre una conexión insegura una clave simétrica compartida por las dos partes. El resto de la comunicación se realiza encriptando con estas claves simétricas. Usado en: GNUpg, TLS, IKE, etc.
Introducción - Túneles Para encriptar el tráfico de aplicaciones individuales. El túnel encripta el tráfico para un protocolo y puerto determinado. No para aplicaciones que generan conexiones dinámicamente (ej. ftp, voip) Como ventaja adicional, algunas implementaciones permiten comprimir el tráfico. La conveniencia de usar compresión depende de la relación entre la velocidad de la red y de la cpu. Túnel: 10.1.1.10:1234 ==> 172.16.1.2:25 (vía 172.16.1.1) 10.1.1.1 10.1.1.10:1234 172.16.1.1 WAN/ LAN 172.16.1.2:25 telnet 10.1.1.10 1234
Introducción - VPNs Red Privada Virtual, simula una conexión segura, a través de una red insegura (Internet, etc.). La VPN es un dispositivo de red más, deben establecerse rutas, etc. Comúnmente la VPN es en capa 3, también es posible hacer VPNs en capa 2. Generalmente es posible comprimir el tráfico. 10.1.1.2 VPN es GW a: VPN es GW a: 172.16.1.2 172.16.1.0/24 10.1.1.0/24 WAN/ LAN 10.1.1.3 10.1.1.1 172.16.1.1 172.16.1.3
Introducción - IPsec Estándar opcional en IPv4, obligatorio en IPv6. Usando IKE y encripción oportunista es posible encriptar en forma transparente nodos que no se conocen previamente. Es una modificación del stack IP, requiere modificación del kernel. Código no portable, cada sistema operativo tiene su propia implementación. Complejo de configurar en ambientes heterogéneos. El protocolo es complejo: http://www.schneier.com/paper-ipsec.pdf
Túneles - ssh Interoperatibilidad: Instalado en la mayoría de los equipos Unix. Ideal para hacer túneles para resolver problemas puntuales. Soportado bajo Windows con cygwin (hoy está portado) Algoritmos usados: Clave pública: DSA, RSA (recomendado) Clave simétrica: 3DES, Blowfish, CAST128, Arcfour, AES
Túneles - ssh Ventajas: Tuneliza en forma nativa y transparente conexiones X11. Comprime con gzip. Inconvenientes: Su objetivo principal no es hacer túneles. Cuidado al configurar!. No dar privilegios al usuario que crea el túnel. El cliente del túnel no corre como demonio, es necesario hacer scripts para verificar que no muera, iniciarlo automáticamente, etc. No soporta UDP. Tuneliza sobre TCP.
Configuración: Túneles - ssh Especificar el túnel en línea de comandos (remoto/local?). Para túneles que deban ser creados en forma automática usar clave pública. Restringir privilegios de la clave pública en el servidor. Túnel: 10.1.1.10:1234 ==> 172.16.1.2:25 (vía 172.16.1.1) 10.1.1.10:1234 172.16.1.1 WAN/ LAN 172.16.1.2:25 $ ssh -L 1234:172.16.1.2:25 user@172.16.1.1 $ telnet 10.1.1.10 1234
Interoperatibilidad: Túneles - stunnel Depende solo de openssl y tcpwrappers. Compila en todos los unixes, freebsd, gnu/linux. Compila bajo Win NT/2000/XP. Algoritmos usados: Autenticación X 509, y todos los algoritmos soportados por openssl.
Ventajas: Túneles - stunnel Permite dar soporte SSL a servidores que no tienen SSL nativamente (imaps, https, etc.) Una sola instancia del demonio puede atender varios túneles. Soporta chroot en forma nativa. Inconvenientes: Un thread por conexión, usar solo con kernel 2.6 No soporta UDP. Tuneliza sobre TCP (usar opción TCP_NODELAY=1).
Túneles - stunnel Configuración: /etc/stunnel/stunnel.conf: socket = r:tcp_nodelay=1 pid = /var/run/stunnel4/stunnel.pid client = yes [1234] accept = 127.0.0.1:1234 connect = 172.16.1.1:5678 /etc/stunnel/stunnel.conf: socket = l:tcp_nodelay=1 pid = /var/run/stunnel4/stunnel.pid cert = /etc/stunnel/stunnel.pem [5678] accept = 5678 connect = 127.0.0.1:1234 127.0.0.1:1234 WAN/ LAN :5678 10.1.1.10 172.16.1.1:1234 Túnel: 10.1.1.10:1234 ==> 172.16.1.2:1234
Interoperatibilidad: Túneles - zebedee Compila en todos os Unix, *BSD, GNU/Linux. Compila bajo Win NT/2000/XP. Algoritmos usados: Zlib Blowfish Diffie-Hellman. Autenticación mediante clave pública asociada a Diffie-Hellman.
Ventajas: Túneles - zebedee Configuración simple. Suporta UDP. Permite compresión zlib, opcionalmente bzip2. Inconvenientes: Desarrollo estable (estancado) desde 2003. Multithread, usar con kernel 2.6. En UDP o limite por datagrama es de 16kb. Tuneliza sobre TCP. No garantiza integridad de los datos (es posible introducir ruido).
/usr/local/etc/zebedee/zebedee.conf Túneles - zebedee /usr/local/etc/zebedee/zebedee.conf detached true server false ipmode tcp listenip 127.0.0.1 logfile /var/log/zebedee-client serverhost 172.16.1.1 tunnel 12300,12400:172.16.1.1:1230,1240 compression zlib:9 keylength 256 maxbufsize 16383 keygenlevel 2 checkidfile '/usr/local/zebedee-client_server-id.id' detached true server true ipmode tcp logfile /var/log/zebedee-server compression zlib:9 keylength 256 keygenlevel 2 include '/usr/local/zebedee-server.key' redirect none target localhost:1230/tcp,1240/tcp 127.0.0.1:12300 127.0.0.1:12400 10.1.1.10 WAN/ LAN 172.16.1.1 172.16.1.1:1230 172.16.1.1:1240 Túneles: 10.1.1.10:12300 ==> 172.16.1.2:1230 10.1.1.10:12400 ==> 172.16.1.2:1240
VPN - OpenVPN Interoperatibilidad: Compila en GNU/Linux, *BSD, Mac OS X, Solaris. Compila en Windows 2000/XP. Algoritmos usados: Los soportados por OpenSSL. Certificados X509. Autenticación por TLS. Opcional clave simétrica compartida.
VPN - OpenVPN Ventajas: Compresión adaptativa dependiendo del tipo de datos. Ethernet Bridge vía VPN. VPNs en las que ambos nodos tienen IP dinámica (adsl, dhcp, etc.) Tuneliza sobre UDP, TCP opcional. Simples de configurar y utilizar, ideal para ambientes heterogéneos.
Configuración: VPN - OpenVPN /etc/openvpn/casa.conf : dev tun remote 172.16.0.1 ifconfig 10.1.0.2 10.1.0.1 ## route add -net 10.0.0.0 netmask 255.255.255.0 gw $5 up./home.up ## openvpn --genkey --secret servidor.key secret servidor.key ping 15 ping-restart 45 ping-timer-rem persist-tun persist-key /etc/openvpn/servidor.conf : dev tun ifconfig 10.1.0.1 10.1.0.2 ## route add -net 10.0.1.0 netmask 255.255.255.0 gw $5 up./office.up ## La misma que en el cliente. secret servidor.key ping 15 ping-restart 45 ping-timer-rem persist-tun persist-key
CIPE: Requiere módulo de kernel. Otros - VPN Solo funciona con kernel Linux (existe también un porte a Windows). Seguridad cuestionada: http://diswww.mit.edu/bloom-picayune/crypto/14238 pptp: Nativo en Windows NT, soportado en GNU/Linux, Solaris. Completamente inseguro: http://www.schneier.com/pptp.html En vías de extinción. vpnd: Usa SLIP. Sin desarrollo desde 2001.
Otros - Túneles tunnelv: Usa ethertap (deprecated en el kernel). Desde 1999 sin desarrollo. vtun: Inseguro: http://diswww.mit.edu/bloom-picayune/crypto/14238 Desarrollo estancado en 2003. Compila en casi todos os Unix, no compila en Windows
Túneles, VPNs y firewalls Al hacer un túnel o una VPN, genero una conexión directa entre dos redes que pueden estar protegidas por varias capas de firewalls. Esto es especialmente peligroso en una VPN en la que uno de los nodos es comprometido. Aplicar reglas de firewall a los devices de la VPN. Restringir los túneles para que sean solo entre puertos y clientes autorizados. Mucho cuidado si cada punta de la VPN está en zonas con distinto nivel de seguridad.
Preguntas? Original de: Mario Bonilla <miope@miope.org>