Preguntas Frecuentes en Seguridad en Cómputo El propósito de este documento es contestar algunas preguntas que con frecuencia aparecen en los grupos de noticias, así como proporcionar una introducción de esta materia a los recién llegados a estos grupos. • ¿Cuál es el propósito de este FAQ? • ¿Cuál es la diferencia entre hacker y cracker? • ¿Qué es la "Seguridad por obscuridad"? • ¿Qué hace a un sistema inseguro? • ¿Qué herramientas existen para la implementación de la seguridad? • ¿Dónde consigo estas herramientas? • ¿Es peligroso dar herramientas de cracking a todos? • ¿Por qué y cómo se rompe la seguridad de un sistema? • ¿A quién puedo contactar si alguien irrumpe en mi sistema? • Introducción a la SSI • ¿Qué es un firewall? • ¿Por qué no debo utilizar scripts con setuid? • ¿Por qué no debo dejar una sesión de root permanentemente en consola? • ¿Por qué no debo crear cuentas de UNIX sin contraseñas? • ¿Qué agujeros de seguridad están asociados con X-Windows (y otros Administradores de Ventanas)? • ¿Qué agujeros de seguridad hay asociados con NFS? • ¿Cómo puedo generar contraseñas seguras? • ¿Por qué las contraseñas son tan importantes? • ¿Qué cantidad de contraseñas posibles hay? • ¿Qué tan floja puede ser la gente? • ¿Qué es SPAM? • ¿Qué es un Sistema de Detección de Intrusos(IDS)? • Revisión histórica Las fuentes de este FAQ son los grupos de noticias de GASU, MX-seguridad, Lassi, SPAM y USENET. Nota: Se realizaron todos los esfuerzos para asegurar que la información que contiene este FAQ esté al día y sea veraz, pero no se asume la responsabilidad por las acciones realizadas con el conocimiento adquirido aquí. ¿Cuál es el propósito de este FAQ? Este FAQ está enfocado totalmente en temas de seguridad para computadoras. Los temas tratados aquí intentan contestar preguntas desde: "¿Cuál es el mejor software que puedo utilizar para hacer tal cosa?" hasta "¿Cómo puedo arreglar este hueco de seguridad en particular? Las hostilidades más comunes empiezan cuando un aparente novato en seguridad envía un mensaje a alguna lista diciendo: ¿Me puede explicar alguien cómo funciona un hueco de seguridad en específico?, inmediatamente se le van encima intentando lincharlo por preguntar tales cosas en lugares públicos, y lo tachan de ser hacker/cracker. Por favor, recuerden que interrogar a alguien, teniendo en mente que es un posible cr/hacker, no crea más que un ambiente hostil. Los temas de seguridad deben tratarse de una manera efectiva. Implementar seguridad en cómputo, puede volver a una persona ordinaria en un paranoico, el cual no se comportará de una manera razonable si se presenta una situación inesperada. Este tipo de gente trata al resto de la humanidad con una actitud desafiante, y si una persona así está a cargo del sistema, los usuarios rápidamente encontraran su máquina más restrictiva y menos amigable (¿divertido?) al utilizarla. Esto puede llevarte a situaciones desconcertantes, como por ejemplo: (en una universidad) prohibir al jefe de departamento, utilizar un servicio de red que él no esperaba. Esto aparentemente requiere una explicación bien preparada a un comité nada amigable para poder solucionar la situación. Un mejor enfoque a la situación es asegurar el sistema de acuerdo a sus necesidades, y si éstas son demasiadas, se puede aislar completamente al sistema. Pero por favor, no pierda los estribos con tal de asegurar el sistema. ¿Cuál es la diferencia entre hacker y cracker? Resolvamos esta cuestión de una vez. Se denomina "cracker" a una persona que persistentemente irrumpe en los sistemas computacionales de una o más personas, por diversas razones. Tal vez tenga justificaciones débiles para hacer esto, normalmente diciendo "porque es posible", pero es más probable que lo haga por "hacer algo ilegal", y por "ganar respeto en su grupo". En particular, los crackers antisociales, tienen rasgos de vandalismo, y borran los Sistemas de Archivos, tiran sistemas, y matan procesos que estén corriendo. Este término también es muy utilizado para describir a una persona que rompe la protección de software con el propósito de distribuir copias gratis. Regularmente, la palabra "hacker" se utiliza para describir a una persona que tiene gran experiencia y conocimiento en el ramo de la computación, y es capaz de demostrarlo con fineza. Para una definición profunda, se recomienda leer: "Jargon File". En el mundo real, mucha gente refiere al "hacker" como si describiera a un "cracker", esto ocasionalmente aparece en USENET, con resultados desastrosos y confusos. Cuando envíe un mensaje a la lista debe tomar en cuenta que corre el riesgo de involucrarse en una controversia si utiliza la palabra "hacker" en lugar de la de "cracker" en sus artículos. Nota: Nunca se menciona que los crackers no pueden ser hackers. Sólo se específico que por concepto no lo son. ¿Qué es la "Seguridad por obscuridad"? La seguridad por obscuridad es la creencia de que cualquier sistema puede ser seguro mientras que a nadie fuera de su grupo de implementación se le permita conocer nada de sus mecanismos internos. Ocultando contraseñas en archivos binarios o esconder scripts suponiendo que "nadie lo va a encontrar nunca" es un buen ejemplo de Seguridad por obscuridad. La seguridad por obscuridad es la principal filosofía de las agencias burocráticas, y es el método más utilizado para proveer "pseudoseguridad" en sistemas de cómputo. Esta filosofía ha ido decreciendo en el mundo de la computación con el aumento de los sistemas abiertos, Internet, mayor comprensión de técnicas de programación y también por el crecimiento del conocimiento computacional en una persona promedio. Las bases de la seguridad por obscuridad es que si una persona no sabe cómo hacer algo para tener un impacto en la seguridad del sistema, entonces esa persona no es peligrosa. Sin duda, esto es en teoría, ya que se conforma con confiar en un pequeño grupo de personas, tanto tiempo, como el que vivan. Si sus empleados tienen una mejor oferta o les pagan mejor en otro lugar, sus conocimientos se van con ellos, ya sea que ese conocimiento sea reemplazable o no. Una vez que los secretos están fuera, ahí está el fin de nuestra seguridad. Actualmente hay una gran necesidad como nunca de los usuarios ordinarios por conocer detalles de cómo funciona su sistema, y por consecuencia el resultado la Seguridad por obscuridad falla. Hoy, muchos usuarios tienen conocimientos avanzados de cómo funcionan sus sistemas operativos, y sus experiencias les permiten obtener todo el conocimiento que ellos "necesiten obtener". Esto esquiva todas las bases de la seguridad por obscuridad, y la hace inútil. Por lo tanto actualmente existe la necesidad de crear sistemas que intenten ser algorítmicamente seguros (Kerberos, Secure RPC), que es mejor que ser filosóficamente seguro. En muchas ocasiones, el sistema "Shadow" para contraseñas se incluye en el grupo de la seguridad por obscuridad, pero esto es incorrecto, ya que la seguridad por obscuridad depende de restringir el acceso a algún algoritmo o técnica, mientras que las contraseñas Shadow proveen seguridad restringiendo el acceso a datos vitales. ¿Qué hace a un sistema inseguro? Un sistema se vuelve inseguro al encenderlo. Se cita el siguiente refrán: "El único sistema seguro es aquel que está apagado y desconectado, enterrado en un refugio de concreto, rodeado por gas venenoso y custodiado por guardianes bien pagados y muy bien armados. Aun así, yo no apostaría mi vida por él". (La versión original se le atribuye a Gene Spafford) Un sistema es seguro tanto como se quiere que sea. Puede ser totalmente seguro sin ninguna protección, pero sí es muy importante que todos los que tengan acceso a él lo operen correctamente con responsabilidad, y realicen respaldos regularmente, pues estos se utilizan en caso de que haya algún problema con el hardware. Muchos laboratorios de PC's están muy alejados de esto. Los problemas empiezan cuando una necesidad tiene que ser satisfecha (como la confidencialidad). Una vez iniciado el proceso de cerraduras en el sistema, ya no se podrá detener. Los huecos de seguridad se manifiestan (en general) de cuatro maneras: 1. Huecos de seguridad físicos. El problema sucede cuando se da acceso físico a la máquina a personas sin autorización, lo cual le permitiría realizar cosas que normalmente no sería capaz de hacer. Un buen ejemplo es una sala de cómputo pública con estaciones de trabajo, donde resultaría trivial para un usuario reinicializar la máquina en modo mono-usuario y jugar con el sistema de almacenamiento de archivos, si no se toman las precauciones necesarias. Otro ejemplo de esto es cuando se necesita restringir el acceso a cintas de respaldo confidenciales, las cuales pueden ser leídas por cualquier usuario con acceso a éstas y la unidad de cinta, lo cual significa que pueden haber teniendo o no permisos. 2. Huecos de Seguridad en el Software. Aquí el problema es causado por puntos escritos incorrectamente en software "privilegiado" (demonios, cronjobs), los cuales pueden ser utilizados para hacer cosas indebidas. El ejemplo más famoso es el hueco de "sendmail" (ver bibliografía), el cual le permitiría a un cracker obtener un shell de root. Éste se podría utilizar para borrar archivos, crear cuentas nuevas, copiar archivo de contraseñas, y hacer lo que quiera. Nuevos huecos aparecen todo el tiempo, y lo mejor por hacer es: a. Establecer una estructura en el sistema, de tal manera que se ejecute el mínimo de software con privilegios de root/daemon/bin, esto permitirá tener un sistema más robusto. b. Suscribirse a una lista de correos de la cual se reciban detalles de los problemas y/o soluciones lo más pronto posible, para así actuar rápidamente. "esbugtraq" es una lista altamente recomendable. c. Cuando se instale o actualice su sistema, trate de emplazar sólo los paquetes de necesidad inmediata. Muchos de ellos incluyen demonios o utilidades que revelan información al exterior. Por ejemplo, en el 'System V' de AT&T, los paquetes de contabilidad incluyen acctcom, el cual (por default) permite a cualquier usuario revisar los datos de contabilidad diarios. Muchos paquetes TCP/IP automáticamente instalan o corren programas como rwhod, fingerd, y (ocasionalmente) tftpd, los cuales pueden presentar problemas de seguridad. La solución es ser un administrador de sistema cuidadoso. La mayoría de estos programas comienzan al encender la máquina, si desea puede editar los scripts de inicio (comúnmente están dentro de los directorios /etc, /etc/rc y /etc/rcX.d) para prevenir su ejecución. También se pueden eliminar algunas utilidades completamente y para algunas sólo bastará utilizar chmod para restringir su acceso. En resumen, NO CONFIE EN LOS PROGRAMAS/SCRIPTS DE INSTALACIÓN. Los paquetes tienden a instalar y correr cualquier cantidad de cosas sin preguntar al usuario. En la mayoría de estos se incluye documentación que lista "los programas incluidos en el paquete", asegúrese de revisarla. 3. Donde hay falta de experiencia, el Administrador de Sistema ensambla uno con una combinación de hardware y software que en muchas ocasiones es incompatible, el cual al utilizarse resulta muy defectuoso desde el punto de vista de seguridad. Estos problemas son un dolor de cabeza, y son muy comunes cuando se levanta una máquina , aunque es mejor montarlo teniendo esto en mente. Recuerde que nunca es tarde para reconsiderar las cosas. 4. Escoger una filosofía de seguridad y mantenerla. El cuarto tipo de problema de seguridad es el de percepción y entendimiento. El software perfecto, hardware protegido y componentes compatibles no trabajan hasta que se haya seleccionado las políticas de seguridad y que las apoyen los directivos, para que se obliguen a cumplirlas. El tener el mejor mecanismo de contraseñas en el mundo, no vale de nada si los usuarios piensan que su nombre es una buena contraseña. La seguridad es relativa a las políticas, y a la operación del sistema en conformidad con las ellas. ¿Qué herramientas existen para la implementación de la seguridad? Y ¿Dónde las consigo? COPS Dan Farmer. Escrita principalmente por Dan Farmer, COPS es un juego de scripts de shell, los cuales forman un procedimiento extenso para probar el sistema; hay un programa que descifra contraseñas (rudimentario), rutinas que verifican los archivos buscando cambios sospechosos en programas con setuid, otros verifican los permisos de los archivos esenciales de sistema y de usuario, y algunos otros revisan el comportamiento del software del sistema para que no cause problemas. El software viene en dos versiones - Una escrita en Perl y la otra en scripts de shell. COPS V1.04 está disponible en el ftp de purdue: coast.cs.purdue.edu/pub/tools/unix/cops/ y en ftp.asc.unam.mx. Crack Alec Muffett UFC Michael Glad Crack es un programa desarrollado con el propósito de romper contraseñas inseguras. Es probablemente el más eficiente y más amistoso programa descifrador de contraseñas disponible, cuenta con la capacidad de permitir al usuario especificar con precisión cómo formar las palabras que usará para adivinar las contraseñas de los otros usuarios. También tiene una capacidad inherente de red de permitir cargar Crack desde cualquier máquina disponible en ésta, y se distribuye con una versión del algoritmo crypt() optimizado. Hay una versión del algoritmo crypt() más rápida, el cual es "UFC" realizado por Michail Glad, y está disponible gratuitamente en la red, además las últimas versiones de UFC y Crack son compatibles y pueden conjuntarse fácilmente. Crack v4.1f y UFC están disponibles desde: ftp.uu.net (137.39.1.9) En el directorio: /usenet/comp.sources.misc/volume28 Como: crack/part01.Z hasta part05.Z (5 archivos) Y: ufc-crypt/part01.Z & part02.Z (2 archivos) También disponible en ftp.asc.unam.mx En el directorio: /pub/tools/Crack Como: crack.tar.gz Cracklib Alec Muffett Cracklib es una librería de C, la cual contiene rutinas que se agregan a todo tipo de programas parecidos a "passwd"; y no sólo en UNIX, con un poco de esfuerzo se puede migrar a VMS (se está trabajando en esto), o muchos otros sistemas. El utilizar "Cracklib" permite agregar una verificación de contraseñas a las aplicaciones, esto es un retoño de la versión 5 del Software "Crack", y contiene un número considerable de ideas nuevas. Cracklib está disponible de cualquier archivo usenet. Una copia de referencia (con un diccionario más grande) se puede obtener de: ftp://coast.cs.purdue.edu/pub/tools/unix/cracklib/ NPasswd Clyde Hoover Passwd+ Matt Bishop Shadow John F. Haugh II Passwd+ & NPasswd: estos programas equilibran la balanza en la guerra de contraseñas descifradas, proveen una substitución para el comando "passwd", pero a diferencia de passwd, previene de escoger contraseñas que sean fácilmente comprometidas por programas como Crack. El término para describir este tipo de programas es el de: programa 'fascista' de contraseñas. NPasswd: Actualmente sufre el ataque de diversas personas por proveer compatibilidad para sistemas basados en "System V", NIS/YP, esquemas de contraseñas passwd, etc. Está libre la versión 2.0, pero existen muchas otras para varios tipos de configuraciones. NPasswd: Está disponible en: coast.cs.purdue.edu/pub/tools/unix/password/ Shadow: Es un grupo de programas y funciones de sustitución, los cuales implementan contraseñas sombra, es decir: es un sistema donde el archivo de contraseñas en claro se esconde de todos los usuarios excepto de root, con la esperanza de parar de tajo todos los intentos de descifrar las contraseñas. En combinación con un programa 'fascista' de contraseñas, nos deberá de dar un buen grado de seguridad en lo que se refiere a contraseñas. Pero Shadow hace más que esconder las contraseñas, éste da control de acceso a las terminales, administración de usuarios y grupos, etc. Hay una docena o más comandos, además de una gama de funciones de librerías. Shadow se encuentra en los archivos de USENET, los relevantes están en: ftp.uu.net/usenet/comp.sources.misc/volume39/shadow Los contenidos de ambos necesitan tener todo el grupo de parches. En la última versión de Shadow se tiene soporte a "Cracklib", el cual se clasifica como un programa de contraseñas 'fascista', además de todas las demás funciones. TCP Wrappers Wietse Venema Son programas que proporcionan filtros a la mayoría de los servicios de red que UNIX proporciona por default. Si se instala, hay control restringido, de lo contrario existe acceso sin restricciones a servicios como FTP/TFTP, Telnet, etc., por consiguiente se corren riesgos, además si se instala proporciona mayor información en las bitácoras lo cual ayuda a reconocer si alguien está intentando hacer algo indebido en el equipo. Con estos programas se puede monitorear y controlar a quien se conecte a servicios de red como FTP, TFTP, EXEC, RSH, TELNET, RLOGIN, FINGER, y SYSTAT, y muchos otros. Estos programas pueden ser instalados sin ningún cambio al software implementado y a los archivos de configuración. Por default, sólo se guarda el nombre del host remoto y también verifica el origen de la petición. Ninguna información se intercambia con el cliente remoto. Algunos cambios significativos con respecto a la última versión son: • Fácil de instalar: procedimientos de implementación listos para utilizarse en muchas plataformas (sun, ultrix, hp-ux, irix, aix, ...). • Soporta la interfaz de programación de red TLI para System V.4 (Solaris, DG/UX, etc.). • Una herramienta más segura para finger, ayuda a hacer pruebas reversibles automáticas a éste. • Nuevas extensiones en el lenguaje de palabras claves: "severity", para ajustar el nivel de ruido en lo que se guarda en las bitácoras; "allow" y "deny", para mantener todos los controles de acceso en un sólo archivo. TCP Wrappers está habilitado en: ftp.porcupine.org/pub/security/index.html ftp.asc.unam.mx:pub/tools SecureLib William LeFebvre SecureLib contiene rutinas de reemplazo para tres llamadas de kernel: accept(), recvfrom(), recvmesg(). Estos relevos son compatibles con los originales, cuentan con funciones adicionales para verificar la dirección de Internet de la máquina que inicializa la conexión, esto es para asegurarse de que esté "permitida" para conectarse. El archivo de configuración define qué hosts tienen permisos de conectarse a un programa dado. Una vez que estas rutinas de reemplazo están compiladas, pueden utilizarse cuando se construya una nueva librería libc. El archivo resultante libc.so puede ponerse en algún lugar en especial. Cualquier programa que deba protegerse, puede iniciar con otra ruta de librería (LD_LIBRARY_PATH). La última versión de securelib está disponible en: coast.cs.purdue.edu/pub/tools/unix/securelib/ ISS Chris Klaus YPX Rob Nautav Internet Security Scanner (ISS) es uno de los primeros rastreadores de seguridad multi nivel disponibles al público en general. Fue diseñado para ser flexible y fácil de portar a muchas plataformas UNIX, también hace su trabajo en una cantidad razonable de tiempo. Proporciona información al administrador que le permite arreglar varios procesos mal configurados. ISS hace un rastreo multi nivel de la seguridad del sistema, no sólo busca una sola debilidad. Informar sobre esto al público en general o por lo menos a los que tienen conciencia de la seguridad de su sistema, puede causar que la gente piense que es demasiado peligroso, pero es necesario pensar que los (cr/h)ackers están consientes de los huecos de seguridad y saben cómo explotarlos. Una descripción simple de ISS podría ser que ISS es para los servicios de Red de Unix lo que COPS para el sistema de archivos; es decir: es una herramienta que permite a los administradores del sistema encontrar huecos de seguridad potenciales, dándole la oportunidad de resolverlo antes de que un ataque ocurra. ISS está disponible en: www.iss.net Tripware Gene Kim, Gene Spafford Tripware es un monitor de integridad para Sistemas UNIX, utiliza muchas rutinas para detectar cambios en los archivos, además de monitorear la información seleccionada de mantenimiento del sistema. También monitorea cambios en los permisos, ligas y tamaños de archivos y directorios. Se puede configurar para detectar cuando agrega o borra un archivo en un directorio vigilado. La configuración de Tripware es sencilla, sólo se le tiene que decir qué archivos y directorios se van a monitorear, o bien decirle cuáles quedan fuera del monitoreo, incluso se puede especificar a qué archivos tienen permisos de cambios sin generar ninguna advertencia. Tripware puede configurarse con rutinas personalizadas para verificar sitios específicos. Una vez que se ha instalado en un sistema limpio Tripwire, puede detectar cambios provenientes de actividad anómala, modificación a archivos sin autorización para introducir puertas traseras, código lógico-bomba, (y si llegará a existir) actividad de virus en el ambiente UNIX. SOCKS Ying-Da Lee/David Koblas SOCKS es un paquete que permite a los hosts detrás del firewall utilizar finger, ftp, telnet, xgopher y xmosaic, éstos pueden acceder a los recursos que están fuera del firewall sin comprometer la seguridad del sistema. La nueva versión de SOCKS está disponible en el ftp anónimo: ftp://coast.cs.purdue.edu/pub/tools/unix/socks Es muy recomendable leer el archivo README.1st, el cual describe las nuevas características. Esta nueva versión no sólo es para SunOS 4.1.x, sino también se ha llevado y probado para ULTRIX 4.2, IRIX 4.0.1 y parcialmente a HP-UX. SOCKS cuenta con un servidor proxy (sockd) y programas clientes para: finger, whois, ftp, telnet, xgopher y xmosaic, además de librerías que se adaptan a otras aplicaciones y las convierte en nuevos programas clientes. El protocolo SOCKS ha cambiado con esta versión, prueba de ello es que el servidor y el cliente deben usar el mismo protocolo SOCKS, es decir ni el servidor, ni los clientes trabajan con versiones anteriores versiones. El mecanismo de control de acceso se ha expandido: • Una lista de usuarios puede ser incluida junto con otros campos (dirección fuente, dirección destino, servicio/puerto) para permiso o negación de acceso. • Identd es utilizado (con la opción -i y -I) en el servidor SOCKS para intentar verificar el actual ID del usuario. • Un comando de shell puede ser especificado opcionalmente en cada línea. El comando se ejecutará si las condiciones de esa línea son satisfechas. • Se pueden incluir entradas especiales (#NO_IDENTD: y #BAD_ID) para especificar los comandos de shell a ser ejecutados cuando el host cliente no corra identd y cuando el reporte de identd no esté de acuerdo con lo que el programa cliente diga. ¿Es peligroso dar herramientas de cracking a todos? Eso depende de su punto de vista. Algunas personas tienen quejas respecto al acceso sin restricciones a programas como COPS y Crack, lo consideran irresponsable porque los "chicos malos" pueden conseguirlas fácilmente. Por otro lado, puede estar seguro de que los "chicos malos" han tenido programas como esos por años, y por eso es una estupenda idea dar estos programas a los "chicos buenos" también, para que ellos puedan verificar la integridad de su sistema antes de que los "chicos malos" lo hagan. Entonces, ¿Quién gana más con tener estos programas libremente?, ¿Los malos o los buenos?, Esa es su decisión, pero recuerde, que hay pocas herramientas honestas como COPS y Crack, están ahí afuera, y para la mayoría de los "chicos buenos" es la única ayuda que tienen. ¿Por qué y cómo se rompe la seguridad de un sistema? Esto definitivamente es muy difícil de contestar. Muchos de los sistemas en los cuales los crackers entran son sólo utilizados para entrar a más sistemas; estos se condensan en muchas máquinas antes de volver a irrumpir en otra nueva, el cracker espera confundir a sus perseguidores y ponerlos fuera de escena. Esa es una ventaja que se gana al irrumpir en muchas máquinas, tantas como puedan, de tal manera que puedan borrar sus conexiones. Otra razón por la que irrumpen en los sistemas, puede ser el psicológico: algunas personas disfrutan el jugar con las computadoras de otros y llevarlos al límite de sus capacidades. Algunos crackers podrían pensar que es realmente habilidoso saltar sobre 6 máquinas en Internet, 2 gateways y un red X.25 antes de tocar las puertas de una compañía o institución realmente famosa(p. ej. NASA, CERN, AT&T, UCB). Piensan en esto como un recorrido turístico electrónico. Y la pregunta ahora es, ¿Cómo lo hacen?, esta es también una pregunta difícil de contestar. En las Universidades, es muy común que las cuentas de las máquinas se pasen entre los estudiantes: ¿Cómo entran a mi sistema? Las principales formas en que un intruso entra al sistema son: 1. Intrusión Física. Si los intrusos tienen acceso físico a la máquina (p. ej. que ellos pueden usar el teclado), pueden irrumpir en el sistema. Hay muchas técnicas para obtener privilegios especiales, si toman parte del sistema físico y quitan el disco duro ( para leerlo y escribirlo en otra máquina). Aún la protección del BIOS es fácil de traspasar: virtualmente todos los BIOS tienen contraseñas como puertas traseras para entrar al sistema. 2. Intrusión por Sistema. Este tipo de intrusión asume que el intruso tiene privilegios de usuario normal. Si el sistema no tiene los últimos parches de seguridad, es una gran oportunidad para el cracker, ya que él puede utilizar un exploit conocido para obtener privilegios de administrador. 3. Intrusión Remota. Este tipo de intrusión involucra al cracker que intenta penetrar el sistema remotamente a través de la red. Al inicio no tiene privilegios especiales, sin embargo hay muchas técnicas con las cuales un cracker puede entrar al sistema. Para evitarlo es necesario robustecer más el sistema, de modo que sea más difícil de penetrar al cracker, por ejemplo si se pone un firewall entre él y la máquina víctima, le va a costar mucho trabajo introducirse en el sistema. Ahora si se toma en cuenta lo que pasa en las Universidades, es muy común que las cuentas de las máquinas se pasen entre los estudiantes: "Lupita le da la contraseña de su cuenta a su novio Carlos en otra máquina, Carlos tiene un amigo llamado Juan al cual le gusta "jugar en las redes". Juan encuentra otras cuentas con contraseñas débiles en el equipo de Lupita, y se las pasa a sus amigos, ...." muy pronto, toda una sociedad de crackers está jugando en las máquinas que Lupita y sus compañeros utilizan. Esto pasa todo el tiempo, y no sólo en las Universidades. Una solución es la educación. No deje que sus usuarios desarrollen actitudes como esta: "No importa la contraseña de mi cuenta, después de todo, sólo la utilizo para imprimir" Enséñeles que usar una computadora conlleva responsabilidades. Asegúrese de que entiendan que una cadena es tan fuerte como lo sean los eslabones. Finalmente, cuando esté seguro de la asimilación del problema de la administración de un sistema, y la empatía con usted, configure su sistema de tal manera que no les sea posible darle mal uso. Crea en la educación del usuario, pero no solamente confíe en ella. ¿A quién puedo contactar si alguien irrumpe en mi sistema? Si estás conectado a Internet, debe contactar al CERT (Computer Emergency Response Team). Introducción al CERT El CERT fue formado por DARPA (Defense Advenced Research Projects Agency) en 1988 para servir como punto central de la seguridad en cómputo concerniente al uso de Internet. El Centro de Coordinación del CERT se localiza en el Instituto de Ingeniería del Software en la Universidad de Carnegie Mellon en Pittsburg. URL: http://www.cert.org Correo Electrónico: [email protected] Teléfono: 412-268-7090 las 24 horas del día. El Centro de Coordinación del CERT contesta de 7:30 am a 6:00 pm, EST (GMT-5)/EDT(GMT-4), y sólo es para llamadas de emergencia durante otras horas. En México, se puede contactar a la Subdirección de Seguridad de la Información (SSI) de la UNAM. Introducción a la SSI La SSI (Subdirección de Seguridad de la Información) de la DGCTIC-UNAM, es un punto de encuentro al cual puede acudir la comunidad de cómputo para obtener información, asesorías y servicios de seguridad; así como para intercambiar experiencias y puntos de vista, logrando con ello, establecer políticas (y quizá algún día leyes) de seguridad adecuadas, disminuir la cantidad y gravedad de los problemas de seguridad y difundir la cultura de la seguridad en cómputo. URL: http://www.seguridad.unam.mx Correo electrónico: [email protected] Teléfono: 5622-8169 Fax: 5622-8043 Dirección: Circuito Exterior S/N, Ciudad Universitaria frente a la Facultad de Contaduría y Administración. También está FIRST, el cual es un intermediario entre los equipos de respuesta a incidentes. FIRST actualmente es una organización bastante viable y en crecimiento, del cual CERT es miembro. Es un error pensar que si se está conectado a Internet sólo debe llamarse al CERT, pues esto sería injusto para el resto de grupos de respuesta que están surgiendo. El Instituto Nacional de Estándares y Tecnología (NIST) actualmente es el secretario del FIRST, NIST mantiene un ftp anónimo con un directorio con la informacion de FIRST (csrc.ncs1.nist.gov:~/pub/first). Este directorio contiene un archivo de contacto, el cual lista a todos sus miembros y su circunscripción y la informacion de contacto (nombre del archivo "first-contacts"). El archivo mencionado es una lista de puntos de contacto para incidentes de seguridad. Es demasiado larga para reproducirla aquí, de tal manera que se sugiere obtener una copia personal. ¿Qué es un firewall? Un cortafuegos es una aplicación que se implementa entre sus máquinas y una red de banda ancha. Éste proporciona filtración controlable al tráfico de la red, permitiendo el acceso restringido a ciertos números de puertos de Internet y bloqueando el acceso a todo lo demás bastante bien. Firewalls similares están disponibles para otro tipo de red. Los Cortafuegos son una propuesta muy interesante para tratar con la seguridad del acceso externo, y está aumentando su popularidad junto con el crecimiento de la conectividad de Internet. Para más información ver más abajo el documento de Gateway de Cheswick. ¿Por qué no debo utilizar scripts con setuid? Son varias las razones, la mayoría es por que envuelve huecos de seguridad en el kernel de UNIX. Aquí se muestran algunos de los más conocidos, la mayoría ya tiene los parches necesarios para arreglarlos. 1. Si el script empieza con "#!/bin/sh" y hay una liga (simbólica u otro distinto), la cual se puede hacer con la opción "-i", se obtiene inmediatamente un shell con setuid, porque el script será invocado: "#!/bin/sh -i", es decir un shell interactivo. 2. Muchos kernels sufren de cierta condición, la cual puede permitir cambiar el shell, por otro ejecutable de su preferencia, esto ocurre cuando en el proceso exec( ) corre el setuid, y cuando el interpretador de comandos se inicializa. Si se es lo suficientemente persistente, podrá obtener el kernel, y correr cualquier programa. Si después de ver esto, aun necesita scripts con setuid: 1. Debería poner un wrapper en "C" para cuidar el script, debe ser cuidadoso al reinicializar IFS y PATH antes de ejecutar el script, ya que son muy sensibles. Si su sistema tiene librerías ligadas, también considere los valores de LD_LIBRARY_PATH. 2. Utilice un lenguaje como Perl, el cual es más seguro, y es fanático de la seguridad. Pero realmente, es mucho más seguro no usar scripts con setuid. ¿Por qué no debo dejar una sesión de root permanentemente en consola? Al utilizar terminales 'inteligentes' en la consola y dejar "/dev/console" con permisos de escribible para todo el mundo mientras "root" está en el sistema, es un hueco de seguridad potencial. La terminal es vulnerable a un control remoto utilizando secuencias de escape, e incluso puede utilizarse para 'escribir' cosas en el shell de root. La terminal comúnmente se obtiene con el comando "ps". Hay varias soluciones a este problema, el más viable es dar permiso de acceso a la consola a su propietario y dé escritura al grupo únicamente, entonces utilizar el mecanismo setgid en cualquier programa que tenga necesidad de dar salida a la consola (p. Ej. "write"). ¿Por qué no debo crear cuentas de UNIX sin contraseñas? Crear cuentas sin contraseñas para cualquier propósito es potencialmente peligroso, no por alguna razón directa, sino porque puede dar un punto de apoyo al cracker. Por ejemplo, en muchos sistemas encontrará a un usuario "sync", el cual permite al administrador del sistema sincronizar los discos sin estar en él . Esto parece ser seguro pero a la vez inocuo. El problema con esto surge si su sistema es uno de los que no verifican a un usuario antes de autorizarlo para usar FTP. Un cracker puede entrar a su máquina con una variedad de métodos FTP, pretenderá ser el usuario "sync" sin contraseña, y entonces copiará su tabla de contraseñas, lo llevará a un lugar remoto y correrá Crack o alguna otra herramienta parecida. A pesar de que existen mecanismos para prevenir estos tipos de cosas en los sistemas UNIX modernos, para estar completamente seguro se requiere conocer a fondo todos los paquetes que se encuentren en el sistema, y cómo hacen la verificación de los usuarios. Si no está seguro de todo esto, es mejor no dejar huecos. También cada servicio de red debe de revisarse para ver si tiene algún problema de seguridad. No todos los servicios utilizan una entrada de shell. Por lo tanto al tener una cuenta sin contraseña permite a otros servicios irrumpir en la cuenta. Por ejemplo, algunos sistemas proporcionan acceso remoto a los archivos y manejan el nombre de usuario y contraseña para verificar el acceso. Ninguna entrada en el shell es utilizada. Por consiguiente, es posible que alguien use la cuenta "sync" para montar un sistema de archivos UNIX, obteniendo acceso a la cuenta sin utilizar el shell. ¿Qué agujeros de seguridad están asociados con X-windows (y otros Administradores de Ventanas)? Hay muchos, algunos sólo afectan a X-windows, y otros tienen impacto en todo el sistema. Existe mucha información sobre esto, y en este FAQ no se entrará mucho en detalle, pero se darán algunas referencias para que cualquier lector pueda obtener información más detallada acerca de este tema. X-windows es uno de esos paquetes que con frecuencia genera problema de seguridad por "incompatibilidad de uso", por ejemplo la posibilidad de que los crackers puedan correr sesiones de X-windows en otras máquinas o en cuentas sin contraseñas (p. Ej. sync), si éstas no están correctamente configuradas. Por favor lea la pregunta acerca de cuentas sin contraseñas en este FAQ. ¿Qué agujeros de seguridad hay asociados con NFS? Hay muchos, la mayoría es respecto a quién se le exportan los discos y de qué manera se hace. La seguridad de NFS permite especificar quién tiene permitido montar archivos y si son exportados como sólo de lectura o no. El formato exacto para especificar qué hosts pueden montar un directorio varía entre las implementaciones de UNIX, pero generalmente esa información se encuentra en el archivo "/etc/exports". Este archivo contiene una lista de directorios y para cada uno tiene una serie, sea para especificar "hosts" o "netgroups" los cuales permiten a NFS montar ese directorio. A esta lista se le llama "lista de acceso". Los "hosts" son máquinas individuales, y "netgroups" son una combinación de hosts y nombres de usuarios, los cuales se especifican en "/etc/netgroup". Lo que hace es proporcionar un método de acceso refinado. Lea las páginas del manual para mayor información de netgroups. El archivo de exportación también contiene información acerca de que si el directorio va a ser exportado como de sólo lectura, lectura - escritura y si se permitirá el acceso al súper usuario de la máquina cliente, el cual está montando ese directorio. Hay un punto muy importante a recordar, y es que si la lista de acceso, para un directorio en particular en /etc/exports contiene: 1. Su directorio puede ser montado por cualquiera, desde cualquier lugar. 2. Su directorio puede ser montado por alguien autorizado y correr el comando mount en ese host. Esto no da mucha confianza; por ejemplo, si una máquina es una PC corriendo NFS, este podría ser cualquiera. 3. Si el grupo de red: a. Está vacío, cualquiera puede montar su directorio, desde cualquier lugar b. Contiene "(,,)",cualquiera puede montar su directorio, desde cualquier lugar c. Contiene el nombre de un grupo de red, el cual está vacío o contiene "(,,)", cualquiera puede montar su directorio, desde cualquier lugar. d. Contiene "(un host, ,)", cualquiera en el host mencionado con permisos de montar archivos puede montar su directorio. e. Contiene "(, nombre de usuario,)" el usuario mencionado puede montar su directorio, de cualquier lugar. 4. Si desea exportar un directorio al host "athena" pero escribe "ahtena", la palabra "ahtena" se tomará como un nombre de grupo de red, y si este grupo de red está vacío, entonces el directorio puede ser montado por cualquiera, desde cualquier lugar. Entonces, si no es cuidadoso en lo que pone en /etc/export y /etc/netgroup se dará cuenta de que un usuario con una PC puede: 1. Montar su sistema de archivos como un disco de red. 2. Editar el archivo /etc/passwd o .rhosts o /etc/hosts.equiv 3. Entrar en otra máquina como otro usuario, tal vez "root". Nota: La información antes mencionada no puede funcionar en todas las plataformas que proporcionan el servicio NFS. Se debe notar que una entrada segura para crear un grupo de red vacío es: noname(-,-,-) Lo cual significa que no se permitirá nada a nadie en ningún host en ningún dominio NIS. Pero NFS es más inseguro que todo esto, ya que no se necesita siquiera un descuido en los archivos de exportación, lo único que se tiene que hacer es ayudar a que se revele la clave para desbloquear el sistema. Esto significa que se tratará de adivinar la clave. Es muy prudente, configurar sus ruteadores para negar el tráfico de fuera de su organización. ¿Cómo puedo generar contraseñas seguras? No se puede. La palabra clave aquí es GENERAR. Una vez que se tiene un algoritmo pare crear contraseñas, el cual utiliza un método sistemático, simplemente es asunto de analizar el algoritmo para encontrar cualquier contraseña al sistema. A menos que el algoritmo sea demasiado bueno, éste tendrá un periodo corto de generación ( es decir: pronto empezará a repetir las mismas contraseñas) entonces considere estas opciones: a) Un cracker puede intentar cualquier posible salida del generador de contraseñas en cada usuario del sistema, o b) El cracker puede analizar la salida del programa de contraseñas, determinar qué algoritmo está siendo utilizado, y aplicar el algoritmo a otros usuarios para determinar sus contraseñas. Un ejemplo ilustrativo de esto (donde se asumió desastrosamente que el generador de números aleatorios podría generar un número infinito de contraseñas aleatorias) se muestra en [Morris & Thompson]. La única manera de obtener una cantidad razonable de contraseñas variadas (sin poder asegurarlo) es componerlas. Trabaje en un método flexible propio, el cual no esté basado en: Modificar cualquier parte de su nombre o iniciales. Modificar palabras del diccionario. Acrónimos Ningún algoritmo sistemático Por ejemplo, NUNCA utilices contraseñas como: alex7 - Está basado en un nombre de usuario (y es demasiado corto de cualquier manera) tteffum - Basado también en un nombre de usuario marlene - El nombre de tu novia (En el diccionario) enelram - Lo mismo, pero hacia atrás PORSCHE911 - Está en el diccionario 12345678 - Está en el diccionario (y se puede ver como lo escribes fácilmente) qwertyui - Lo mismo abcxyz - Lo mismo Oooooooo - Lo mismo Computadora - El ponerlo con mayúscula no lo hace seguro wombat6 - Lo mismo, sólo se le agrega un carácter aleatoriamente merde3 - Una palabra en un diccionario en francés mr.spock - Esta en un diccionario de ciencia ficción zeolite - Esta en un diccionario geológico ze0lite - Una versión corrupta de un diccionario geológico ze0l1te - Lo mismo Z30L1T3 - Lo mismo Se espera estos ejemplos enfaticen que cualquier contraseña derivada de cualquier palabra de un diccionario ( o información personal), modificada de cualquier manera, constituye una contraseña adivinable. Para información más detallada acerca de esto, deberás leer el Apéndice que acompaña a Crack. ¿Por qué las contraseñas son tan importantes? Porque son la primera línea de defensa contra los ataques interactivos en el sistema. Es simple: Si un cracker no puede interactuar con nuestro sistema, y no tiene acceso para leer o escribir información del archivo de contraseñas, entonces no tendrá el camino abierto para atacarlo. Además si el cracker puede leer su archivo de contraseña (si tiene un sabor moderno de UNIX debes asumir esto) es muy importante que no pueda adivinar las contraseñas contenidas en él. Si puede, sólo debe asumir que él puede introducirse en el sistema y en poco tiempo entrar como root por medio de un hueco del sistema operativo. ¿Qué cantidad de contraseñas posibles hay? Mucha gente pregunta esto una y otra vez, preocupada porque programas como Crack eventualmente aumentaran su poder, hasta lograr hacer una búsqueda exhaustiva para todos las contraseñas posibles, así cuando tengan la cuenta de un usuario, la irrumpen , usualmente root. Si se asume que (simplemente matemáticas): 1. Las contraseñas válidas se crean con un grupo de 62 caracteres [A-Za-z0-9] 2. Las contraseñas válidas tienen una longitud entre 5 a 8 caracteres Entonces el tamaño de contraseñas válidas es: (base 62) 100000b62 + 1000000b62 + 10000000b62 + 100000000b62 = -----------111100000b62 = 222000000000000 (decimal) Este es un número demasiado grande para emprender una búsqueda exhaustiva con tecnología de punta, Sin embargo, no olvide, que las contraseñas se pueden componer con caracteres diferentes a estos; puede usar todos los caracteres de puntuación, y también los símbolos (~<>|@#!"·$%&/). Si utiliza algunos de estos 35 caracteres en sus contraseñas, se incrementará el espacio de búsqueda. Sin embargo, es mucho más eficiente para un cracker obtener una copia de "Crack", irrumpir en cualquier cuenta del sistema (Solo se necesita una), entrar en la máquina, y conseguir privilegios de super usuario por medio de un hueco en el sistema operativo. De una cosa puede estar seguro. Si cierra la puerta de golpe a un cracker en su cara con un archivo de contraseñas robusto, habrá cerrado una de las más grandes vías de ataque inmediato. ¿Dónde puedo obtener más información? ¿Qué tan floja puede ser la gente? Esta sección (que esperamos que crezca) es un foro para aprender de la experiencia de los demás; si las personas tienen tiempo de leer algunos incidentes de seguridad, esto tal vez les infunda un poco de conciencia respecto a la seguridad en cómputo sin tener que pasar por eso. Si tiene alguna experiencia que desee compartir con nosotros, por favor envíela al editor de este FAQ. Se agradecerá mucho. Estas historias se han encontrado en incidentes de seguridad o visto en grupos de noticias en cuanto al mismo tema. Esta historia la enviaron a comp.security.misc. De: [email protected] "La mejor historia que tengo es de un estudiante, amigo mío (llamado Bob) él estuvo su año industrial en una compañía de manufactura de computadoras. En sus días libres, él venia a la escuela a jugar AberMUD en mi máquina. Una parte del trabajo de él implicaba la administración de sistemas, y su compañía era muy estricta en lo referente a la seguridad, de tal manera que todas las contraseñas eran cadenas de letras aleatorias, sin ningún orden. Es imperativo mencionar que las contraseñas eran seguras (Esto involucraba escribir las contraseñas y guardarlas en un lugar sumamente seguro). Un día que yo no tenía nada que hacer, corrí Crack en el archivo de contraseñas de MUD (las contraseñas están en texto) y después corrí Crack en nuestros archivos de contraseñas. Algunas cuentas de algunos estudiantes salieron a la luz, pero nada especial. Le dije a los estudiantes que cambiaran sus contraseñas y ahí terminaba el asunto. Tan flojo como soy, olvide quitar las contraseñas del diccionario de Crack, y cuando envíe la siguiente versión a USENET, las contraseñas fueron enviadas también. Este correo llego al moderador de comp.sources.misc, éste atravesó todo USENET y finalmente terminó en la compañía de Bob. Siendo él administrador responsable que es Bob, cuando la nueva versión de Crack le llegó, la corrió en sus sistemas. Inmediatamente salió la contraseña de root y el quedo sorprendido. La moraleja de esto es: nunca utilices la misma contraseña en dos diferentes lugares, y especialmente en sistemas no confiables (como MUD)". ¿Qué es SPAM? Mensaje de correo electrónico no solicitado por el receptor, usualmente distribuido a una lista de direcciones y cuyo contenido es publicidad en general de productos o servicios. Diferentes tipos de SPAM Hay diferentes tipos de mensajes no solicitados actualmente en Internet. A continuación se presentará una breve explicación sobre cada uno de estos con el propósito de diferenciarlos. UCE (Unsolicited Commercial Email). También llamado Junk email. Correo electrónico no solicitado de tipo comercial, su contenido publicita algún producto o servicio. UBE (Unsolicited Bulk Email). Correo electrónico no solicitado enviado de forma masiva. Este correo se envía a miles o millones de cuentas de correo. El UBE puede ser de tipo comercial, en este caso también sería UCE. Sin embargo su contenido puede tener otros propósitos como políticos, religiosos, de hostigamiento, etc. MMF (Make Money Fast). La mayoría de las veces se presenta en forma de cartas cadena o sistemas piramidales, cuyo contenido dice algo como "¡Tú puedes ganar mucho dinero!, sólo envía dinero a la primera persona de la lista, borra el nombre y pon el tuyo en su lugar y da un forward de este mensaje a otras personas". Usurpación de Identidades. Estos son correos electrónicos que se reciben aparentemente de una persona u organización, pero no es así. El propósito de estos mensajes generalmente no es enviar información sobre algún producto o servicio (aunque podría darse el caso)sino hacerse pasar por otra persona u otra organización, provocando enojo en las personas que los reciben, quienes reclaman a la supuesta persona que los envió, quienes en realidad son víctimas y no atacantes. La usurpación de identidad puede considerarse como un ataque a la reputación. ¿Qué es un Sistema de Detección de Intrusos(IDS)? IDS es la abreviatura de Sistema de Detección de Intrusos (por sus siglas en inglés), que es el arte de detectar actividad inapropiada, incorrecta o anónima. Los sistemas de Detección de Intrusos que operan en un host para detectar actividad maliciosa, se les conoce como Sistemas de Detección de Intrusos para host y a los sistemas DI que operan en el flujo de datos de una red se les conoce como sistemas de Detección de Intrusos para red. En algunas ocasiones, hay una diferencia entre la detección de una intrusión y un mal uso del sistema. El término intrusión se utiliza para describir ataques de fuera, mientras que se recurre a mal uso del sistema para describir ataques que se originan en la red interna. No obstante, la mayoría de la gente no conoce estas diferencias. Las formas más comunes para aproximarse a la Detección de Intrusos es la localización de anomalías y descubrimiento de comportamientos extraños Revisión histórica • Liberación original: 15-Ago-2005 • Última revisión: 7 de octubre de 2010 La Subdirección de Seguridad de la Información/UNAM-CERT agradece el apoyo en la elaboración y revisión de este documento a: • Galvy Cruz Valencia • Andrés Leonardo Hernández Bermúdez Para mayor información acerca de éste documento de seguridad contactar a: UNAM-CERT Equipo de Respuesta a Incidentes UNAM Subdirección de Seguridad de la Información Dirección General de Cómputo y de Tecnologías de Información y Comunicación Universidad Naciónal Autónoma de México E-Mail:[email protected] http://www.cert.org.mx http://www.seguridad.unam.mx ftp://ftp.seguridad.unam.mx Tel:56 22 81 69 Fax:56 22 80 43