domingo, 10 de febrero de 2008

Seguridad de Contraseña y Encriptación

Uno de los rasgos de seguridad más importantes usados hoy son las contraseñas. Tanto para tí como para tus usuarios es importante tener contraseñas seguras y no fácilmente averiguables. La mayoría de las distribuciones de Linux más recientes incluyen programas passwd que no te permiten poner una contraseña fácilmente averiguable. Asegúrate de que tu programa passwd está actualizado y tiene esos atributos.
Está más allá del alcance de este documento una discusión profunda sobre encriptación, pero una introducción viene bien. La encriptación es muy útil, posiblemente incluso necesaria en este momento y época. Hay todo tipo de métodos de encriptar datos, cada uno con su propio conjunto de características.
La mayoría de los Unices (y Linux no es una excepción) usan principalmente un algoritmo de encriptación de una sola vía, llamado DES (Data Encryption Standard), para encriptar tus contraseñas. Esta contraseña encriptada se almacena entonces (normalmente) en /etc/passwd o (menos común) en /etc/shadow. Cuando intentas conectar, la contraseña que introduces se encripta de nuevo y se compara con la que se entró en el fichero que almacena tus contraseñas. Si casan, debe ser la misma contraseña y se te permite el acceso. Aunque DES es un algoritmo de encriptación de doble vía (puedes codificar y luego descodificar un mensaje, dadas las claves correctas), la variante que la mayoría de los Unices usan es de una vía. Esto quiere decir que no es posible revertir la encriptación para obtener la contraseña a partir de los contenidos de /etc/passwd (o /etc/shadow).
Los ataques de fuerza bruta, tales como "Crack" o "John the Ripper" (ver la Sección crack ) a menudo pueden averiguar las contraseñas, a menos que tu contraseña sea lo suficientemente aleatoria. Los módulos PAM (ver abajo) te permiten usar una rutina de encriptación diferente con tus contraseñas (MD5 o parecidos). También puedes usar Crack en tu provecho. Considera el ejecutar periódicamente Crack contra tu base de datos de contraseñas, para encontrar contraseñas inseguras. Contacta entonces con el usuario afectado e instrúyelo para que cambie su contraseña.
Puedes ir a http://consult.cern.ch/writeup/security/security_3.html para más información sobre cómo elegir una buena contraseña.
Criptografía PGP y de Clave-Pública
La criptografía de clave pública, tal como la que usa PGP, usa una clave para encriptación y una clave para desencriptación. La criptografía tradicional, sin embargo, usa la misma clave para encriptación y desencriptación; esta clave debe ser conocida por las dos partes y ser transferida de alguna forma desde una a la otra con seguridad.
Para aliviar la necesidad de transmitir con seguridad la clave de encriptación, la encriptación de clave pública usa dos claves separadas: una clave pública y una clave privada. La clave pública de cada persona está disponible para que cualquiera haga la encriptación, mientras que, al mismo tiempo, cada persona mantiene su clave privada para descifrar los mensajes encriptados con la clave pública correcta.
Hay ventajas tanto en la criptografía de clave pública y de clave privada y se puede leer sobre sus diferencias en el RSA Cryptography FAQ, listado al final de esta sección.
PGP (Pretty Good Privacy) está bien soportado en Linux. Las versiones 2.6.2 y 5.0 se sabe que funcionan bien. Para una buena instrucción sobre PGP y cómo usarlo, echa un vistazo al FAQ de PGP: http://www.pgp.com/service/export/faq/55faq.cgi
Asegúrate de usar la versión que es aplicable en tu país. Debido a las restricciones a la exportación por parte del Gobierno de los USA, está prohibido que la encriptación fuerte sea transferida de forma electrónica fuera del país.
Los controles de USA sobre la exportación se rigen ahora por EAR (Export Administration Regulations). Ya no se gobiernan por ITAR.
Hay también una guía paso a paso para configurar PGP en Linux disponible en http://mercury.chem.pitt.edu/~angel/LinuxFocus/English/November1997/article7.html. Fue escrita para la versión internacional de PGP, pero es adaptable fácilmente a la versión de los Estados Unidos. También puedes necesitar un patch para algunas de las últimas versiones de Linux; el patch está disponible en ftp://metalab.unc.edu/pub/Linux/apps/crypto.
Hay funcionando un proyecto sobre una re-implementación libre de pgp con fuente abierta. GnuPG es un sustituto completo y grátis de PGP. Porque no usa IDEA ni RSA puede usarse sin restricciones. GnuPG está casi de acuerdo con RFC2440 (OpenPGP). Ver la página web GNU Privacy Guard para más información: http://www.gpg.org/.
Más información sobre criptografía puede encontrarse en el FAQ de criptografía de RSA, disponible en http://www.rsa.com/rsalabs/newfaq/. Aquí encontrarás información sobre términos tales como "Diffie-Hellman", "criptografía de clave pública", "certificados digitales", etc.
SSL, S-HTTP, HTTPS y S/MIME
Con frecuencia los usuarios preguntan sobre las diferencias entre los diversos protocolos de seguridad y encriptación y sobre cómo usarlos. Aunque éste no es un documento sobre encriptación, es una buena idea explicar brevemente lo que es cada protocolo y dónde encontrar más información.
SSL: - SSL, o Secure Sockets Layer, es un método de encriptación desarrollado por Netscape para proveer de seguridad en Internet. Soporta diversos protocolos de encriptación diferentes y proporciona autentificación de cliente y servidor. SSL opera en el nivel de transporte, crea un canal seguro de datos encriptados, y así puede encriptar sin costuras datos de muchos tipos. Esto se ve más fácilmente cuando se va a un sitio seguro para ver un documento online seguro con Communicator, y sirve de base para comunicaciones seguras con Communicator, así como para muchas otras Comunicaciones de Netscape con encriptación de datos. Más información puede encontrarse en http://www.consensus.com/security/ssl-talk-faq.html. Hay información sobre otras implementaciones de seguridad de Netscape, y un buen punto de partida para estos protocolos, disponible en http://home.netscape.com/info/security-doc.html.
S-HTTP: - S-HTTP es otro protocolo que proporciona servicios de seguridad en Internet. Fue diseñado para proporcionar confidencialidad, autentificación, integridad y no repudiabilidad no puede confundirse con ningún otro], al tiempo que para soportar mecanismos de gestión de claves múltiples y algoritmos criptográficos mediante la negociación opcional entre las partes implicadas en cada transacción. S-HTTP está limitado al software específico que lo implementa, y encripta cada mensaje individualmente. [Del FAQ de Criptografía de RSA, página 138].
S/MIME: - S/MIME, o Secure Multipurpose Internet Mail Extension, es un estándar de encriptación usado para encriptar correo electrónico y otros tipos de mensajes en Internet. Es un estándar abierto desarrollado por RSA, así que es probable que lo veamos en Linux un día de estos. Más información sobre S/MIME puede encontrarse en http://home.netscape.com/assist/security/smime/overview.html.
Implementaciones IPSEC para Linux
Junto a CIPE y otras formas de encriptación de datos, hay también diversas otras implementaciones de IPSEC para Linux. IPSEC es un esfuerzo de la IETF para crear comunicaciones criptográficamente seguras a nivel de red IP y para proporcionar autentificación, integridad, control de acceso y confidencialidad. Información sobre IPSEC e Internet puede encontrarse en http://www.ietf.org/html.charters/ipsec-charter.html. También puedes encontrar enlaces a otros protocolos que implican gestión de claves, una lista de correo sobre IPSEC y ficheros.
La implementación del x-kernel de Linux, que se está desarrollando en la Universidad de Arizona, usa un entorno basado en el objeto para implementar protocolos de red llamados x-kernel y puede encontrarse en http://www.cs.arizona.edu/xkernel/hpcc-blue/linux.html. Dicho más sencillo, el x-kernel es un método de pasar mensajes a nivel de núcleo, lo que contribuye a una implementación más fácil.
Otra implementación IPSEC de libre disposición es el FreeS/WAN IPSEC de Linux. Su página web afirma,
"Estos servicios te permiten construir túneles seguros a través de redes inseguras. Todo lo que pasa a través de la red insegura es encriptado por la máquina pasarela IPSEC y desencriptado por la pasarela en el otro extremo. El resultado es la Red Privada Virtual (Virtual Private Network) o VPN. Esta es una red que es efectivamente privada, aún cuando incluye equipos en diversos sitios diferentes conectados mediante la insegura Internet."
Está disponible para descargar en http://www.xs4all.nl/~freeswan/ y ha alcanzado ya la 1.0 en el momento de escribir esto.
Al igual que otras formas de criptografía, no se distribuye por defecto con el núcleo debido a restrictiones a la exportación.
ssh (Shell Seguro) y stelnet
ssh y stelnet son programas que te permiten conectarte a sistemas remotos y tener una conexión encriptada.
ssh es un paquete de programas usados como un sustituto seguro para rlogin, rsh y rcp. Usa la criptografía de clave pública para encriptar comunicaciones entre dos hosts, asi como para autentificar usuarios. Puede usarse para conectar de forma segura a un host remoto o copiar datos entre hosts, al tiempo que se impiden los ataques hombre-en-medio (sesión hijacking) y el engaño de DNS. Realizará una compresión de datos en tus conexiones y comunicaciones X11 seguras entre hosts. La página principal de ssh puede encontrarse en http://www.cs.hut.fi/ssh/
También puedes usar ssh desde tu estación de trabajo Windows a tu servidor Linux ssh. Hay varias implementaciones de cliente de Windows libremente disponibles, incluyendo la que está en http://guardian.htu.tuwien.ac.at/therapy/ssh/ así como la implementación comercial de DataFellows, en http://www.datafellows.com/. Hay también un proyecto de fuente abierta para re-implementar ssh llamado "psst...". Para más información ver: http://www.net.lut.ac.uk/psst/
SSLeay es una implementación libre del protocolo Secure Sockets Layer de Netscape, desarrollado por Eric Young. Incluye diversas aplicaciones, tales como Secure para telnet, un módulo para Apache, diversas bases de datos y diversos algoritmos incluyendo DES, IDEA y Blowfish.
Usando esta librería se crea una sustitución segura de telnet que realiza la encriptación sobre una conexión telnet. A diferencia de SSH, stelnet usa SSL, el protocolo Secure Sockets Layer desarrollado por Netscape. Puedes encontrar Telnet Seguro y FTP Seguro, comenzando por el FAQ SSLeay, disponible en http://www.psy.uq.oz.au/~ftp/Crypto/.
SRP es otra implementación segura de telnet/ftp. De su página web:
"El proyecto SRP está desarrollando software de Internet seguro para uso libre en todo el mundo. Comenzando con una distribución de Telnet y FTP completamente segura, esperamos reemplazar los débiles sistemas de autentification en redes con sustitutos fuertes que no sacrifican la seguridad por la amigabilidad hacia el usuario. ¡La seguridad debe estar por defecto, no ser una opción!"
Para más información, ir a http://srp.stanford.edu/srp.
PAM - Módulos de Autentificación Enfuchables
Las versiones más recientes de la distribución Red Hat de Linux vienen con un esquema unificado de autentificación llamado "PAM". PAM te permite cambiar tus métodos y requisitos de autentificación al vuelo y encapsular todos los métodos de autentificación local sin recompilar ninguno de tus binarios. La configuración de PAM está más allá del alcance de este documento, pero no dejes de echar una ojeada al sitio web de PAM para más información. http://www.kernel.org/pub/linux/libs/pam/index.html.
Sólo unas pocas de las cosas que puedes hacer con PAM:
Usar otra encriptación distinta a DES para tus contraseñas. (Haciéndolas más difíciles a la decodificación por fuerza bruta)
Establecer límites de recursos sobre todos tus usuarios para que no puedan realizar ataques de negación-de-servicio (número de procesos, cantidad de memoria, etc)
Activar contraseñas sombra (ver debajo) al vuelo
Permitir a usuarios específicos conectar sólo en momentos específicos desde sitios específicos
Dedicar unas pocas horas a instalar y configurar tu sistema, puede impedir muchos ataques incluso antes de que ocurran. Por ejemplo, usa PAM para desactivar el uso por todo el sistema de ficheros .rhosts en los directorios home del usuario, añadiendo estas líneas a /etc/pam.d/rlogin: # # Disable rsh/rlogin/rexec for users # login auth required pam_rhosts_auth.so no_rhosts
Encapsulación IP Criptográfica (CIPE)
El objetivo primero de este software es proporcionar una facilidad para la interconexión segura de subredes (contra indiscreciones, incluyendo el análisis de tráfico y la inyección de mensaje falsificado) a lo largo de una red insegura de paquetes tal como es Internet.
CIPE encripta los datos a nivel de red. Los paquetes que viajan entre hosts por la red están encriptados. El motor de encriptación se sitúa cerca del controlador que envía y recibe los paquetes.
Esto es distinto a SSH, que encripta los datos mediante conexión, al nivel de socket. Se encripta una conexión lógica entre programas que se ejecutan en diferentes hosts.
CIPE puede usarse para hacer túneles, con el fin de crear una Red Privada Virtual (VPN). La encriptación de nivel bajo tiene la ventaja de que puede hacerse funcionar de forma transparente entre las dos redes conectadas en la VPN, sin ningún cambio en el software de aplicación.
Resumido de la documentación de CIPE:
Los estándares IPSEC definen un conjunto de protocolos que pueden ser usados (entre otras cosas) para construir VPNs encriptadas. Sin embargo, IPSEC es más bien un conjunto de protocolos de peso pesado y complicado con un montón de opciones, las implementaciones del conjunto completo de protocolos se usan aún raramente y algunos problemas (tales como gestión de claves) no están todavía completamente resueltos. CIPE usa un enfoque más simple, en el cual muchas cosas que pueden ser parametrizadas (tal como la elección del algoritmo de encriptación real usado) son una elección que se fija en el momento de la instalación. Esto limita la flexibilidad, pero permite una implementación simple (y por tanto eficiente, fácil de depurar...).
Más información puede encontrarse en http://www.inka.de/~bigred/devel/cipe.html
Al igual que otras formas de criptografía, no es distribuída con el núcleo por defecto debido a restricciones a la exportación.
Kerberos
Kerberos es un sistema de autentificación desarrollado por el Proyecto Athena en el MIT. Cuando un usuario se conecta, Kerberos autentifica a este usuario (usando una contraseña) y proporciona al usuario una forma de probar su identidad a otros servidores y hosts esparcidos por toda de la red.
Después, esta autentificación se usa por programas como rlogin para permitir al usuario conectar con otros hosts sin una contraseña (en lugar del fichero .rhosts). Este método de autentificación también puede usarse por el sistema de correo para garantizar que el correo se entrega a la persona correcta, así como para garantizar que el remitente es quien dice ser.
Kerberos y los otros programas que vienen con él, impide a los usuarios "engañar" al sistema haciéndole creer que son otros distintos. Desafortunadamente, instalar Kerberos es muy intrusivo, al requerir la modificación o sustitución de numerosos programas estándar.
Puedes encontrar más información sobre kerberos mirando en el kerberos FAQ y el código puede encontrarse en http://nii.isi.edu/info/kerberos/.
[De: Stein, Jennifer G., Clifford Neuman, y Jeffrey L. Schiller. "Kerberos: An Authentication Service for Open Network Systems." USENIX Conference Proceedings, Dallas, Texas, Winter 1998.]
Kerberos no debería ser tu primer paso para mejorar la seguridad de tu host. Es bastante embrollado y no se usa tan ampliamente como, digamos, SSH.
Contraseñas Sombra.
Las contraseñas sombra son un medio de mantener secreta, para los usuarios normales, la información de tu contraseña cifrada. Normalmente, estas contraseñas encriptadas se almacenan en el fichero /etc/passwd de lectura para todos. Cualquiera puede ejecutar sobre ellas programas que averiguan contraseñas e intentar determinar lo que son. Las contraseñas sombra, por el contrario, se archivan en /etc/shadow, que sólo pueden leer los usuarios privilegiados. Para usar contraseñas sombra, necesitas asegurarte de que todas tus utilidades que necesiten acceso a la información de la contraseña sean recompiladas para soportarlas. PAM (ver más arriba) también te permite sólo enchufar un módulo de sombra; no requiere la re-compilación de los ejecutables. Puedes acudir al Contraseña-Sombra COMO para información adicional si es necesario. Está disponible en http://metalab.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html Su fecha es más bien reciente y no se necesita en las distribuciones que soporten PAM.
"Crack" y "John the Ripper"
Si por alguna razón tu programa passwd no impone contraseñas difíciles de averiguar, podrías querer ejecutar un programa rompedor de contraseñas y asegurarte de que las contraseñas de tus usuarios son seguras.
Los programas rompedores de contraseñas operan sobre una idea simple: prueban cada palabra del diccionario, y después las variaciones de estas palabras, encriptando cada una y comprobándola frente a tu contraseña encriptada. Si obtienen una que case, saben cuál es tu contraseña.
Hay muchos programas por ahí... los dos más notables son "Crack" y "John the Ripper" ( http://www.false.com/security/john/index.html). Te llevarán un montón de tiempo de cpu, pero solo sabrás si un atacante podría lograr usarlas si las ejecutas tú mismo primero y notificas a los usuarios con contraseñas débiles. Ten en cuenta que un atacante tendría que usar primero algún otro agujero para leer tu fichero /etc/passwd, pero tales agujeros son más comúnes de lo que podrías pensar.
Dado que la seguridad es sólo tan fuerte como el host más inseguro, vale la pena mencionar que si tienes algunos equipos Windows en tu red, deberías probar L0phtCrack, un programa de Crack para Windows. Está disponible en http://www.l0pht.com/
CFS - Sistema de Fichero Criptográfico y TCFS - Sistema de Fichero Criptográfico Transparente
CFS es una forma de encriptar árboles de directorios completos y permitir a los usuarios almacenar en ellos ficheros encriptados. Usa un servidor NFS que se ejecuta sobre una máquina local. Los RPMS están disponibles en http://www.replay.com/redhat/ y más información sobre cómo funcionan está en ftp://ftp.research.att.com/dist/mab/.
TCFS mejora a CFS añadiendo más integración con el sistema de ficheros, de modo que el sistema de ficheros que está encriptado es transparente para los usuarios. Más información en: http://edu-gw.dia.unisa.it/tcfs/.
Tampoco necesita usarse con sistemas de achivos completos. Funciona en árboles de directorios también.


X11, SVGA y seguridad de pantalla
X11
Es importante que asegures tu pantalla gráfica para impedir que los atacantes se apropien de tus contraseñas cuando las escribas, puedan leer los documentos o la información que estás leyendo en pantalla o, incluso, usar un agujero para lograr acceso de root. Ejecutar las aplicaciones X remotas sobre una red también puede ser peligroso, permitiendo a los reastreadores ver toda tu interacción con el sistema remoto.
X tiene varios mecanismos de control de acceso. El más simple de ellos está basado en el host: usas xhost para especificar a qué hosts se les permite acceder a tu pantalla. Esto no es seguro en absoluto, porque si alguien tiene acceso a tu máquina, puede hacer xhost + su máquina y obtenerlo fácilmente. Igualmente, si tienes que conceder acceso desde una máquina que no es de confianza, desde ahí cualquiera puede comprometer tu pantalla.
Cuando se usa xdm (Gestor X de Pantalla) para conectar, se obtiene un método de acceso mucho mejor: MIT-MAGIC-COOKIE-1. Se genera una "cookie" de 128-bit y se almacena en tu fichero .Xauthority. Si necesitas conceder acceso a tu pantalla a una máquina remota, puedes usar el comando xauth y la información en tu fichero .Xauthority para proporcionar acceso sólo a esa conexión. Ver el mini-cómo de Remote-X-Apps, disponible en http://metalab.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.html.
Puedes usar también ssh (ver ssh , arriba) para permitir conexiones X seguras. Esto tiene la ventaja de que también es transparente para el usuario final y significa que ningún dato no encriptado fluye a lo largo de la red.
Echa un vistazo a la página Xsecurity del manual para más información sobre seguridad X. La apuesta más segura es usar xdm para conectar tu consola y luego usar ssh para ir a sitios remotos sobre los que puedes ejecutar programas X.
SVGA
Los programas SVGAlib normalmente son SUID-root para acceder a todo el hardware de vídeo de tu Linux. Esto los hace muy peligrosos. Si fallan, lo normal es que necesites reiniciar tu equipo para tener de nuevo una consola usable. Asegúrate de que cualesquiera programas SVGA que ejecutes sean auténticos y pueda al menos haber algo de confianza. Aún mejor, no ejecutes ninguno para nada.
GGI (Proyecto de Interface Gráfico Genérico)
El proyecto GGI de Linux está intentando solucionar diversos problemas con los interfaces de vídeo en Linux. GGI cambiará una pequeña parte del código de vídeo en el núcleo de Linux y así controlará el acceso al sistema de vídeo. Esto significa que GGI será capaz en cualquier momento de restaurar en tu consola un estado deseable conocido. También permitirá una clave de atención segura, para que puedas estar seguro de que no hay ningún programa troyano de login ejecutándose en tu consola. http://synergy.caltech.edu/~ggi/

No hay comentarios: