Seguridad en linux Páginas desarrolladas en colaboración con Pedro Pablo Fábrega Martínez En estas páginas nos centraremos en cómo aumentar la seguridad en sistemas basados en el sistema operativo Linux. Su gratuidad, flexibilidad, potencia, apertura, facilidad para obtención de herramientas y otras muchas virtudes hacen de Linux la elección cada vez más frecuente entre los administradores de sistemas a la hora de decidirse por una u otra plataforma. Aunque Linux es un sistema muy robusto e incorpora las características de seguridad comunes a todos los sistemas tipo Unix, a pesar de todo resulta fundamental dedicar cierto tiempo y recursos para conocer cuáles son sus debilidades y vías frecuentes de ataque y adoptar posteriorermente las medidas más eficaces para contrarrestarlas. A menudo un sistema operativo es tan seguro como la astucia y habilidad de su administrador. En estas páginas aprenderá todo lo necesario para configurar su red de manera segura, así como indicaciones y referencias donde profundizar en algunos aspectos de la administración, auditorías de seguridad, planes de contingencia, etc. Lo primero que tenemos que tener en mente es que no existe nada como un sistema completamente seguro. Todo lo que puede hacer es aumentar la dificultad para que alguien pueda comprometer su sistema. En el caso medio del usuario de Linux en casa, no se requiere demasiado para mantener alejado al cracker. Para usuarios con grandes requisitos (bancos, compañías de telecomunicaciones, etc.) se requiere mucho más trabajo. Otro factor a tener en cuenta es que cuanto más incremente la seguridad de su sistema, más intrusiva se vuelve la seguridad, en otras palabras, su sistema puede perder funcionalidad y resentirse la comodidad. Necesita decidir en qué medida su sistema es utilizable y en qué medida es seguro para sus propósitos. Por ejemplo, puede necesitar que cualquiera marque a su modem para que éste devuelva la llamada a su casa. Esto es más seguro, pero si alguien no está en casa hace más difícil que se pueda conectar. También puede configurar su sistema Linux sin conexión a Internet, pero esto dificulta que pueda navegar por las webs. Si tiene un sitio medio-grande, debería establecer una "Política de Seguridad" que indique qué niveles requiere su sitio y qué medidas de evaluación se realizan. Los dos puntos principales de los que se tiene que dar cuenta cuando lea estas páginas son: Tenga cuidado con su sistema. Verifique los registros (logs) del sistema, tales como /var/log/messages y no pierda de vista su sistema. Tenga su sistema actualizado, estando seguro de que ha instalado las versiones actuales de los programas y esté al tanto de las nuevas alertas de seguridad. Hacer esto le ayudará a conseguir que su sistema sea mucho más seguro. Nota: este documento está basado en parte, pero no es una traducción literal, del Linux Security HOWTO, de Kevin Fenzi y Dave Wreski. Seguridad física Las primeras medidas de seguridad que necesita tener en cuenta son las de seguridad física de sus sistemas. Hay que tomar en consideración quiénes tienen acceso físico a las máquinas y si realmente deberían acceder. El nivel de seguridad física que necesita en su sistema depende de su situación concreta. Un usuario doméstico no necesita preocuparse demasiado por la protección física, salvo proteger su máquina de un niño o algo así. En una oficina puede ser diferente. Linux proporciona los niveles exigibles de seguridad física para un sistema operativo: Un arranque seguro Posibilidad de bloquear las terminales Por supuesto, las capacidades de un sistema multiusuario real. Seguridad en el arranque Cuando alguien inicia el sistema operativo Linux se encuentra con una pantalla de login: el sistema está pidiendo que se identifique. Si es un usuario conocido, podrá iniciar una sesión y trabajar con el sistema. Si no lo es, no tendrá opción de hacer absolutamente nada. Además, el sistema registra todos los intentos de acceso (fallidos o no), por lo que no pasarán desapercibidos intentos repetidos de acceso no autorizado. LILO (Linux Loader) es el encargado de cargar el sistema operativo en memoria y pasarle información para su inicio. A su vez, Vd. puede pasarle parámetros a LILO para modificar su comportamiento. Por ejemplo, si alguien en el indicador de LILO añade init single, el sistema se inicia en modo monousuario y proporciona una shell de root sin contraseña. Si en su entorno de trabajo cree necesario evitar que alguien pueda iniciar el sistema de esta forma, debería utilizar el parámetro restricted en el fichero de configuración de LILO (habitualmente /etc/lilo.conf). Este parámetro le permite iniciar normalmente el sistema, salvo en el caso de que se hayan incluido argumentos en la llamada a LILO, que solicita una clave. Esto proporciona un nivel de seguridad razonable: permite iniciar el sistema, pero no manipular el arranque. Si tiene mayores necesidades de seguridad puede incluir la opción password. De esta forma necesitará una clave para iniciar el sistema. En estas condiciones, sólo podrá iniciar el sistema quien conozca la clave. Puede encontrar más detalles en las páginas del manual lilo y lilo.conf. Para ello, introduzca en la línea de comandos las siguientes órdenes: # man lilo # man lilo.conf Otros detalles que le podrían resultar útiles. Prepare un disco de arranque del sistema. Es muy fácil, simplemente tiene que copiar el núcleo del sistema operativo en el disco, sin sistema de ficheros, e indicarle cual es la partición raíz del sistema. # dd if=/boot/vmlinuz of=/dev/fd0 # rdev /dev/fd0 /dev/hdXY Suponiendo que estemos usando un disco duro IDE, X indica el disco (a,b,c, o d), Y indica la partición (1,2,...). Si tiene más de un sistema operativo en su máquina, le puede interesar hacer una copia de salvaguardia del MBR: # dd if=/dev/hda of=/boot/arranque.mbr count=1 Y ahora algunas consideraciones generales: Tenga en cuenta que ningún sistema es realmente seguro si alguien, con los conocimientos necesarios, puede usar su propio disco para arrancar. Si tiene una máquina servidora, y tiene una clave para el arranque, la máquina no se reiniciará sin suministrar la clave y tendrá que acudir a introducirla en el caso de una parada no prevista. Bloqueo de la consola En los entornos Unix es conocido el truco de ejecutar en una teminal, que alguien ha dejado inocentemente abierto, un guion que simule la pantalla de presentación al sistema. Entonces un usuario incauto introudcirá su nombre y clave, que quedarán a merced del autor del engaño. Si se aleja de su máquina de vez en cuando, estaría bien poder bloquear su consola para que nadie pueda manipularla o mirar su trabajo. Dos programas que hacen esto son xlock y vlock. xlock bloquea la pantalla cuando nos encontramos en modo gráfico. Está incluido en la mayoría de las distribuciones Linux que soportan X. En general puede ejecutar xlock desde cualquier xterm de su consola y bloqueará la pantalla de forma que necesitará su clave para desbloquearla. Mire la página de manual para ver más detalles, algunos curiosos. vlock es un simple programa que le permite cerrar alguna o todas las consolas virtuales de su máquina Linux. Puede bloquear sólo aquélla en la que está trabajando o todas. Si sólo cierra una, las otras se pueden abrir y utilizar la consola, pero no se podrá usar su vty hasta que no la desbloquee. Desde luego, bloquear una consola prevendrá que alguien manipule su trabajo, pero no previene de reinicios de la máquina u otras formas de deteriorar su trabajo. Introducción Linux es un sistema operativo multiusuario real: puede haber varios usuarios trabajando simultáneamente con él, cada uno en su terminal. Esto obliga a tener en cuenta medidas de seguridad adicionales. Además, según hablan las estadísticas, el mayor porcentaje de violaciones de un sistema son realizadas por usuarios locales. Pero no sólo hay que protegerse de las violaciones intencionadas, sino que el sistema debe protegernos de operaciones accidentales debidas a decuidos o ignorancia de los usuarios. En este aspecto de la seguridad, Linux dispone de todas las características de los sistemas Unix: un control de acceso a los usuarios verificando una pareja de usuario y clave; cada fichero y directorio tienen sus propietario y permisos. Por otro lado, la meta de la mayoría de los ataques es conseguir acceso como root, lo que garantiza un control total sobre el sistema. Primero se intentará conseguir acceso como usuario "normal" para posteriormente ir incrementando sus niveles de privilegio utilizando las posibles debilidades del sistema: programas con errores, configuraciones deficientes de los servicios o el descifrado de claves cifradas. Incluso se utilizan técnicas denominadas "ingeniería social", consistentes en convencer a ciertos usuarios para que suministren una información que debiera ser mantenida en secreto, como sus nombres de usuario y contraseñas. En este apartado de seguridad local pretendemos dar unas ideas generales de los riesgos existentes, mecanismos para su solución y unas directrices de actuación que deberían convertirse en hábitos cotidianos. Cuentas de usuario, grupos Cada usuario del sistema está definido por una línea en el fichero /etc/passwd y cada grupo por otra línea en el fichero /etc/group. Cada usuario pertenece a uno o varios grupos y cada recurso pertenece a un usuario y un grupo. Los permisos para un recurso se pueden asignar al propietario, al grupo y a otros (resto de los usuarios). Ahora bien, para mantener un sistema seguro, pero funcional, tendremos que realizar las combinaciones necesarias entre el propietario y grupo de un recurso con los permisos de los propietarios, grupos y otros. Por ejemplo, la unidad de disco flexible tiene las siguientes características: brw-rw-r-- 1 root floppy 2,0 may 5 1998 /dev/fd0 Propietario: root con permiso de lectura y escritura. Grupo: floppy con permiso de lectura y escritura. Otros: resto de los usuario con permiso de lectura. Cuando queramos que un usuario pueda escribir en la unidad de disco, sólo tendremos que incluirlo en el grupo floppy. Cualquier otro usuario que no pertenezca al grupo floppy (salvo root) sólo podrá leer el disquete. El administrador tiene que conocer las necesidades de cada uno de sus usuarios y asignarle los mínimos privilegios para que pueda realizar su trabajo sin resultar un peligro para otros usuarios o el sistema. Más abajo veremos otro mecanismo para poder utilizar un recurso sobre el cual no tenemos privilegios. No se asuste. Los valores que traen por defecto las distribuciones de Linux son suficiente para mantener el sistema seguro. Otro peligro potencial para el sistema es mantener cuentas abiertas que se han dejado de utilizar. Estas cuentas pueden constituir un buen refugio para un potencial atacante y pasar desapercibidas sus acciones. Seguridad de las claves La seguridad de una sola cuenta puede comprometer la seguridad de todo el sistema. Esto es una realidad ante la que debemos protegernos. Por un lado tenemos que asegurarnos de que nuestros usuarios utilizan claves sólidas: No deben ser una palabra conocida. Deberían contener letras, números y caracteres especiales. Deben ser fáciles de recordar y difíciles de adivinar. Para comprobar que este requisito se verifica en nuestro sistema, podemos usar los mismos mecanismos que utilizan los atacantes. Existen varios programas que van probando varias palabras de diccionario, claves habituales y combinaciones de caracteres, que son cifrados con el mismo algoritmo que usa el sistema para mantener sus claves; después son comparadas con el valor de la clave cifrada que quermos averiguar hasta que el valor obtenido de un cifrado coincide con una clave cifrada. Posteriormente notificaremos al usuario que su clave es débil y le solicitaremos que la modifique. Usando este mecanismo, al menos podemos garantizar que no estaremos en inferioridad de condiciones con respecto a los atacantes locales. Un conocido programa para realizar el descifrado de claves es John the Ripper. Por otro lado, las claves cifradas se almacenan en el fichero /etc/passwd. Cualquier usuario del sistema tiene permiso de lectura sobre este fichero. Lo que es peor, agujeros en los navegadores permiten que se puedan leer ficheros arbitrarios de una máquina (evidentemente, que el usuario de navegador tenga permiso para leer), de manera que lleguen hasta un hacker que cree páginas web que exploten estos agujeros. No te pierdas una demostración para Netscape 4.5. Entonces puede parecer a primera vista que nos encontramos con un grave agujero de seguridad. El atacante, una vez obtenido el fichero /etc/passwd no tiene más que ejecutar su programa revientaclaves favorito y sentarse a esperar hasta que empiecen a aparecer nombres de usuario con sus respectivas contraseñas, algo que suele pasar muy rápidamente. Con suerte, si el administrador es ingenuo o dejado, incluso dará con la clave del root, abriéndosele así las puertas a la máquina objetivo. Para solucionar esta vulnerabilidad, podemos recurrir a contraseñas en la sombra (shadow passwords), un mecanismo consistente en extraer las claves cifradas del fichero /etc/passwd y situarlas en otro fichero llamado /etc/shadow, que sólo puede leer el root y dejar el resto de la información en el original /etc/passwd. El fichero /etc/shadow sólo contiene el nombre de usuario y su clave, e información administrativa, como cuándo expira la cuenta, etc. El formato del fichero /etc/shadow es similar al siguiente: usuario : clave : ultimo : puede : debe : aviso : expira : desactiva : reservado usuario: El nombre del usario. clave: La clave cifrada ultimo: Días transcurridos del último cambio de clave desde el día 1/1/70 puede: Días transcurridos antes de que la clave se pueda modificar. tiene: Días transcurridos antes de que la clave tenga que ser modificada. aviso: Dias de aviso al usuario antes de que expire la clave. expira: Días que se desactiva la cuenta tras expirar la clave. desactiva: Días de duración de la cuenta desde el 1/1/70. reservado: sin comentarios. Un ejemplo podría ser: julia : gEvm4sbKnGRlg : 10627 : 0 : 99999 : 7 : -1 : -1 : 134529868 El paquete de Shadow Passwords se puede descargar desde cualquiera de los siguientes sitios, con instrucciones para su instalación: ftp://i17linuxb.ists.pwr.wroc.pl/pub/linux/shadow/shadow-current.tar.gz ftp://ftp.icm.edu.pl/pub/Linux/shadow/shadow-current.tar.gz ftp://iguana.hut.fi/pub/linux/shadow/shadow-current.tar.gz ftp://ftp.cin.net/usr/ggallag/shadow/shadow-current.tar.gz ftp://ftp.netural.com/pub/linux/shadow/shadow-current.tar.gz Para activar contraseñas en la sombra, tiene que ejecutar pwconv como root; acción que creará su fichero /etc/shadow. Si su distribución de Linux no incluye contraseñas en la sombra o encuentra alguna dificultad para incorporar esta característica, existe un documento HOWTO (CÓMO) titulado Shadow-Password-HOWTO que le puede resultar de gran utilidad. Aquí podrá encontrar también información adcional que le puede ayudar a mantener su seguridad local. Hasta ahora hemos visto diversas situaciones en las que podemos aumentar la seguridad usando una clave. Piense que tiene que recordar cada una de las claves que utiliza, piense que NO debe anotar NUNCA su clave en un papel (y menos pegarla a la pantalla). En alguna situación olvidar una clave puede ser un serio problema. El bit SUID/SGID En muchas ocasiones un proceso necesita ejecutarse con unos privilegios mayores (o menores) que el usuario que lo lanzó. Por ejemplo, un usuario puede modificar su propia clave con el mandato passwd, pero esto implica modificar el fichero /etc/passwd, y para esto un usuario "de a pie" no tiene permiso. ¿Cómo se soluciona? Pues activando el bit SUID del comando passwd (nótese que cuando esto sucede, la x de ejecutable pasa a ser una s): ls -la /usr/bin/passw* -r-sr-xr-x 1 root bin 15613 abr 27 1998 /usr/bin/passwd Esto quiere decir que cuando se ejecute, el proceso correspondiente va a tener los privilegios del propietario del comando (es decir, el root), no del usuario que lo lanzó. En otras palabras, el proceso generado por passwd pertenece a root. A primera vista, esto puede parecer una seria brecha de seguridad. Y lo es. Si el programa funciona correctamente, no tiene por qué dar problemas; pero pequeños defectos en el programa pueden ser utilizados por alguien para tratar de ejecutar otro código distinto con los privilegios de este proceso. El método suele ser el desbordamiento de la pila (buffer overflow). Cualquier atacante que haya entrado en un sistema de forma ilegítima intentará dejar una shell con el bit SUID para mantener ese nivel de privilegio cuando vuelva a entrar en el sistema. SGID es lo mismo que SUID, pero aplicado al grupo. Así pues, tenga cuidado con los programas con el bit SUID/SGIG. Puede encontrarlos con root# find / -type f \( -perm -04000 -o -perm -02000 \) -print Tenga en cuenta que algunos programas (como passwd) tienen que tener el bit SUID. Compruebe en los lugares habituales, (que indicamos en la sección correspondiente) que ninguno de los programas propiedad del root o SUID que utiliza en su sistema, tiene un fallo de seguridad conocido que pueda ser explotado. Nunca debe permitir que quede una shell SUID corriendo en el sistema. Si el root deja desatendida la consola durante unos instantes (recuerde, debe utilizar siempre xlock), un intruso podría escribir lo siguiente: # cp /bin/sh /tmp/cuenta-root # chmod 4755 /tmp/cuenta-root creándose una versión SUID de la shell sh. En el futuro, cuando el atacante ejecute ese programa, cuenta-root, ¡se convertirá en root! Si lo escondiera en un directorio oculto, la única forma de encontrarlo sería escaneando el sistema completo como se ha explicado antes. Y recuerde, nuca escriba guiones de shell SUID. Seguridad del root Los peores destrozos de un sistema es probable que no vengan de ningún cracker, o de un malévolo intruso. En muchísimas más ocasiones ha sido el propio administrador el que ha destrozado el sistema. Sí, el root. ¿Por qué? Por descuido, por exceso de confianza, por ignorancia. Evitar este problema no es difícil. Siguiendo unas fáciles normas, podrá protegerse de Vd. mismo: No use la cuenta de root por norma. Evítela. Intente primero cualquier acción como un usuario normal, y si ve que no tiene permiso, piense porqué y use el comando su si es necesario. Ejecute los comandos de forma segura verificando previamente la acción que va a realizar. Por ejemplo si quiere ejecutar rm borrar.*, ejecute primero ls borrar.* y si es lo que pretende modifique el mandato y ejecútelo. Ciertos mandatos admiten una opción (-i) para actuar de forma interactiva. Actívela, si no lo está ya añadiendo estas líneas a su fichero de recursos par la shell: alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' Siempre puede evitar estas preguntas, a veces incordiosas, con el mandato yes, cuando esté seguro de la operación que está realizando: $ yes s|rm borrar.* Como ya deben saber, el directorio actual no está, por defecto, en la ruta de búsqueda de ejecutables (PATH). Esto garantiza que no lanzaremos, sin darnos cuenta, un ejecutable que esté en el directorio actual llamado, por ejemplo ls. Evite que la clave del root viaje por una red sin cifrar. Utilice ssh u otro canal seguro. Limite los terminales desde los que se puede conectar root. Es preferible limitarlo a la consola del sistema. Esto se puede decidir en /etc/securetty. Si necesita una sesión remota como root, entre como usuario normal y luego use su. Actúe de forma lenta y meditada cuando sea root. Sus acciones podrían afectar a un montón de cosas. ¡Piénselo antes de teclear! Hay herramientas como sudo que permiten a ciertos usuarios utilizar comandos privilegiados sin necesidad de ser root, como montar o desmontar dispositivos. Además registra las actividades que se realizan, lo que ayuda a determinar qué hace realmente este usuario. Introducción Una norma básica de seguridad radica en la asignación a cada usuario sólo de los permisos necesarios para poder cubrir las necesidades de su trabajo sin poner en riesgo el trabajo de los demás. ¿Como se puede poner en riesgo el correcto funcionamiento del sistema? Podemos apuntar algunas ideas: violando la privacidad de la información, obteniendo unos privilegios que no le correspoden a un usuario, haciendo un uso desmedido de los recursos o modificando información legítima contenida en una máquina, como pueden ser el contenido de una página web o una base de datos. ¿Cómo podemos mantener un almacenamiento seguro? La respuesta no puede ser concreta, pero sí que se pueden tomar ciertas medidas que garanticen un mínimo de seguridad y funcionalidad. Si Vd. va a administrar un sistema Linux para dar servicio a diversos usuarios, debería tener algunas nociones sobre sistemas de ficheros, que pasamos a explicar a continuación. El árbol de directorios Para quienes no estén familiarizados con las características del sistema de almacenamiento de información en sistemas Unix, hay que indicar que se organizan en un único árbol de directorios. Cada soporte, disco, partición, disquete o CD tiene su propia organización lógica, un sistema de ficheros. Para poder usar uno de estos soportes tenemos que "montarlo" en un directorio existente. El contenido de la partición nos aparecerá como el contenido del directorio. Un primer criterio para mantener un sistema seguro sería hacer una correcta distribución del espacio de almacenamiento. Esto limita el riesgo de que el deterioro de una partición afecte a todo el sistema. La pérdida se limitaría al contenido de esa partición. No hay unas normas generales aplicables; el uso al que vaya destinado el sistema y la experiencia son las bases de la decisión adecuada, aunque sí podemos dar algún consejo: Si el sistema va a dar servicio a múltiples usuarios que requieren almacenamiento para sus datos privados, sería conveniente que el directorio /home tuviera su propia partición. Si el equipo va a ser un servidor de correo, impresión, etc., el directorio /var o incluso /var/spool podrían tener su propia partición. Algunos directorios son necesarios en la partición raíz. Contienen datos que son necesarios durante el proceso de arranque del sistema. Son /dev/, /etc, /bin, /sbin, /lib, /boot. El directorio /usr/local contiene los programas compilados e instalados por el administrador. Resulta conveniente usar una partición propia para proteger estos programas personalizados de futuras actualizaciones del sistema. Este criterio también se puede aplicar al directorio /opt. Permisos Linux, como sistema multiusuario, asigna un propietario y un grupo a cada fichero (y directorio) y unos permisos al propietario, al grupo y al resto de los usuarios. La forma más rápida de comprobar esta característica es usar el comando ls -la. Así nos aparece el tipo de fichero, el propietario, el grupo, los permisos e información adicional. Por supuesto, el sistema de ficheros tiene que admitir esta característica, como es el caso del sistema de ficheros ext2 (Linux nativo). En los sistemas de ficheros pensados para entornos monousario, como msdos o vfat, no tenemos esta característica, por lo que son inseguros y su uso no es aconsejable bajo Linux. Es conveniente tener claros los permisos que se pueden asignar a un fichero o directorio. Puede que algunas aplicaciones no funcionen bien si algún fichero no tiene el permiso o el propietario correctos, bien por falta de permisos o bien por exceso. Algunas aplicaciones son un poco quisquillosas en este aspecto. Por ejemplo, fetchmail es un programa que podemos usar para recoger el correo de un servidor pop (por ejemplo). Este programa se configura en el fichero .fetchmailrc, donde tendremos que indicar la clave que usamos en el servidor; pues bien, si este fichero tiene permiso de lectura para otro usuario que no sea el propietario, fetchmail no funcionará. Otras aplicaciones, como por ejemplo inn (un servidor de noticias de Internet) tampoco funcionará si el propietario de sus ficheros es otro usuario distinto a news. Todo esto está perfectamente documentado en cada uno de los programas, por lo que es conveniente leer la documentación que aporta y las páginas del manual. Permisos de ficheros y directorios Como decíamos anteriormente, tenemos que asegurarnos de que los ficheros del sistema y los de cada usuario sólo son accesibles por quienes tienen que hacerlo y de la forma que deben. No sólo hay que protegerse de ataques o miradas indiscretas, también hay que protegerse de acciones accidentales. En general, cualquier sistema UNIX divide el control de acceso a ficheros y directorios en tres elementos: propietario, grupo y otros. Tanto el propietario como el grupo són únicos para cada fichero o directorio. Eso sí, a un grupo pueden pertenecer múltiples usuarios. Otros hace referencia a los usuarios que ni son el propietario ni pertenecen al grupo. Todas estas características se almacenan en el sistema de ficheros, en particular en un i-nodo, que es un elemento que describe las características de un fichero en disco (salvo su nombre). Una rápida explicación de los permisos Unix: Propiedad: Qué usuario y grupo posee el control de los permisos del i-nodo. Se almacenan como dos valores numéricos, el uid (user id) y gid (group id). Permisos: Bits individuales que definen el acceso a un fichero o directorio. Los permisos para directorio tienen un sentido diferente a los permisos para ficheros. Más abajo se explican algunas diferencias. Lectura (r): Fichero: Poder acceder a los contenidos de un fichero Directorio: Poder leer un directorio, ver qué ficheros contiene Escritura (w): Fichero: Poder modificar o añadir contenido a un fichero Directorio: Poder borrar o mover ficheros en un directorio Ejecución(x): Fichero: Poder ejecutar un programa binario o guion de shell Directorio: Poder entrar en un directorio Estos permisos se pueden aplicar a: usuario (u): El propietario del fichero grupo (g): El grupo al que pertenece el fichero otros (o): El resto de los usuarios del sistema Nota: Tenga mucho cuidado con aquellos directorios que tengan permiso de escritura. Cualquiera podría borrar un fichero, aunque no sea de su propiedad y esto puede ser un riesgo, tanto para el sistema como para los datos de los usuarios. Además tenemos otros bits de permisos que no podemos pasar por alto cuando estamos tratando de temas de seguridad. Sticky bit: El sticky bit tiene su significado propio cuando se aplica a directorios. Si el sticky bit está activo en un directorio, entonces un usuario sólo puede borrar ficheros que son de su propiedad o para los que tiene permiso explícito de escritura, incluso cuando tiene acceso de escritura al directorio. Esto está pensado para directorios como /tmp, que tienen permiso de escritura global, pero no es deseable permitir a cualquier usuario borrar los ficheros que quiera. El sticky bit aparece como 't' en los listados largos de directorios. drwxrwxrwt 19 root root 8192 Jun 24 14:40 tmp Attributo SUID: (Para Ficheros) Este bit describe permisos al identificador de usuario del fichero. Cuando el modo de acceso de ID de usuario está activo en los permisos del propietario, y ese fichero es ejecutable, los procesos que lo ejecutan obtienen acceso a los recursos del sistema basados en el usuario que crea el proceso (no el usuario que lo lanza). Por ejemplo /usr/bin/passwd es un ejecutable propiedad de root y con el bit SUID activo. ¿Por qué? Este programa lo puede usar cualquier usuario para modificar su clave de acceso, que se almacena en -rw-r--r-- 1 root root 1265 Jun 22 17:35 /etc/passwd pero según los permisos que observamos en este fichero, sólo root puede escribir y modificar en él. Entonces sería imposible que un usuario pudiera cambiar su clave si no puede modificar este fichero. La solución para este problema consiste en activar el bit SUID para este fichero: -r-s--x--x 1 root root 10704 Apr 14 23:21 /usr/bin/passwd de forma que cuando se ejecute, el proceso generado por él es un proceso propiedad de root con todos los privilegios que ello acarrea. ¿Piensa que esto puede ser un riesgo para la seguridad? Efectivamente lo podría ser si no mantenemos un mínimo de atención, ya que en este tipo de programas se pueden producir desbordamientos de búfer que comprometan su sistema. Recuerde siempre lo siguiente: No asignar el bit SUID salvo cuando sea estrictamente necesario. Comprobar que cualquier programa con est bit activo no tiene ningún desbordamiento de buffer (conocido). No asignarlo jamás si el programa permite salir a la shell. Atributo SGID: (Para ficheros) Si está activo en los permisos de grupo, este bit controla el estado de "poner id de grupo" de un fichero. Actúa de la misma forma que SUID, salvo que afecta al grupo. El fichero tiene que ser ejecutable para que esto tenga algún efecto. Atributo SGID: (Para directorios) Si activa el bit SGID en un directorio ( con "chmod g+s directorio"), los ficheros creados en ese directorio tendrán puesto su grupo como el grupo del directorio. A continuación se describen los significados de los permisos de acceso individuales para un fichero. Normalmente un fichero tendrá una combinación de los siguientes permisos: -r-------- Permite acceso de lectura al propietario --w------- Permite modificar o borrar el fichero al propietario ---x------ Permite ejecutar este programa al propietario, (los guiones de shell también requieren permisos de lectura al propietario) ---s------ Se ejecutará con usuario efectivo ID = propietario -------s-- Se ejecutará con usuario efectivo ID = grupo -rw------T No actualiza "instante de última modificación". Normalmente usado para ficheros de intercambio (swap) ---t------ No tiene efecto. (antes sticky bit) A continuación se describen los significados de los permisos de acceso individuales para un directorio. Normalmente un directorio tendrá una combinación de los siguientes permisos: dr-------- Permite listar el contenido pero no se pueden leer los atributos. d--x------ Permite entrar en el directorio y usar en las rutas de ejecución completas. dr-x------ Permite leer los atributos del fichero por el propietario. d-wx------ Permite crear/borra ficheros. d------x-t Previene el borrado de ficheros por otros con acceso de escritura. Usado en /tmp d---s--s-- No tiene efecto Los ficheros de configuración del sistema (normalmente en /etc) es habitual que tengan el modo 640 (-rw-r-----), y que sean propiedad del root. Dependiendo de los requisitos de seguridad del sistema, esto se puede modificar. Nunca deje un fichero del sistema con permiso de escritura para un grupo o para otros. Algunos ficheros de configuración, incluyendo /etc/shadow, sólo deberían tener permiso de lectura por root, y los directorios de /etc no deberían ser accesibles, al menos por otros. SUID Shell Scripts Los scripts de shell SUID son un serio riesgo de seguridad, y por esta razón el núcleo no los acepta. Sin importar lo seguro que piense que es su script de shell, puede ser utilizado para que un cracker pueda obtener acceso a una shell de root. Enlaces Los sistemas de ficheros de tipo Unix permiten crear enlaces entre ficheros. Los enlaces pueden ser duros o simbólicos. El primer caso consiste en asignar más de un nombre a los mismos datos en disco. Un enlace duro no consume más espacio adicional que el que pueda representar el nuevo nombre que le damos a unos datos y sólo es válido para ficheros que estén en el mismo sistema de ficheros, es decir, la misma partición. Los enlaces simbólicos son ficheros que apuntan a otro fichero o directorio. Crean un nuevo fichero pequeño que contiene la ruta del fichero destino. Verificar la integridad con Tripwire Una forma cómoda de detectar ataques locales (y también de red) en su sistema es ejecutar un programa que verifique la integridad de la información almacenada en los ficheros, tal como Tripwire. El programa Tripwire ejecuta varios cheksums de todos los binarios importantes y ficheros de configuración y los compara con una base de datos con valores de referencia aceptados como buenos. Así se detecta cualquier cambio en los ficheros. Es buena idea instalar tripwire en un disquete y protegerlo físicamente. De esta forma no se puede alterar tripwire o modificar su base de datos. Una vez que tripwire se ha configurado, es buena idea ejecutarlo como parte de de los deberes habituales de administración para ver si algo ha cambiado. Incluso puede añadir una entrada a crontab para ejecutar tripwire desde su disquete todas las noches y enviar por correo los resultados y verlos por la mañana, algo como esto: MAILTO=gonzalo 15 05 * * * root /usr/local/bin/tripwire que le enviará por correo un informe cada mañana a las 5:15 am. Tripwire puede ser una de la mejores herramientas para detectar intrusos antes de que tenga otro tipo de noticias de ellos. Como son muchos los ficheros que se modifican en su sistema, debería tener cuidado para discernir lo que es la actividad de un cracker y lo que es la activiadad normal del sistema. Limitar el espacio asignado a los usuarios Una ataque posible a cualquier sistema es intentar consumir todo el espacio del disco duro. Una primera protección contra este ataque es separar el árbol de directorios en diversos discos y particiones. Pero esto puede no ser suficiente y por eso el núcleo del sistema proporciona la posibilidad de controlar el espacio de almacenamiento por usuario o grupo. Lo primero que tendríamos que hacer es asegurarnos de que nuestro núcleo tiene soporte para las cuotas de usuarios. # dmesg | grep quotas VFS: Diskquotas version dquot_6.4.0 initialized En caso contrario, el núcleo no ha sido compilado con soporte para el sistema de cuotas para usuarios. En este caso será necesario compilar un nuevo núcleo Linux. El resto del procedimiento de instalación se puede realizar utilizando la documentación existente. Ahora es necesario editar el fichero /etc/fstab y añadir usrquota o grpquota en la partición o particiones en las que nos interese limitar el espacio de almacenamiento. El siguiente ejemplo establece el sistema de cuotas para el uso del directorio /home montado en la partición /dev/hda3: /dev/hda3 /home ext2 defaults,usrquota 1 2 Ahora podemos recopilar la información de las particiones donde se haya definido el sistema de cuotas. Podemos usar el comando: /sbin/quotachek -av Scanning /dev/hda3 [/home] done Checked 215 directories and 2056 files Using quotafile /home/quota.user Updating in-core user quotas Al ejecutar este comando también se crea un fichero llamado quota.user o quota.grp en la partición o particiones afectada(s). # ls -la /home/quota.user -rw------- 1 root root 16224 Feb 04 14:47 quota.user Ya está activo el sistema de cuotas y la próxima vez que se inicie el sistema, se activarán automáticamente en todas las particiones que se hayan definido. Ya no será necesario volver a ejecutar manualmente este comando, ya que el sistema lo hara de forma automática al comprobar y montar cada uno de los sistemas de ficheros desde el fichero /etc/rc.d/rc.sysinit. El siguiente paso es definir la cuotas para cada usuario. Para ello existen dos métodos. El primero consiste en editar la quota de cada usuario. Por ejemplo, para editar la cuota del usuario antonio, se ejecuta desde el usuario root el comando: # edquota -u antonio Quotas for user antonio: /dev/hda3: blocks in use:15542,limits (soft=0,hard=0) inodes in use: 2139, limits (soft = 0, hard = 0) El sistema de cuotas de Linux permite limitar el número de bloques y el número de i-nodos que un usuario puede tener. Los valores a modificar son los límites que están puestos entre paréntesis (que ahora valen 0). Ahí se puede especificar cualquier cantidad (en Kbytes). Por ejemplo, para limitar la cuota de disco del usuario antonio a 1 Mb, se pondría lo siguiente: Quotas for user antonio: /dev/hda7:blocks in use:18542,limits (soft=1024,hard=1024) inodes in use: 1139, limits (soft = 0, hard = 0) El límite soft es un límite de aviso y el límite hard es un límite insalvable, es decir, el sistema ya no le asigna más espacio. De una forma análoga, podríamos modificar la cuota de espacio asignada al grupo users con: # edquota -g users Normas prácticas para aumentar la seguridad Aunque sea necesario tener claros los conceptos y dedicarle algo de tiempo a una correcta planificación, tampoco los pelligros expuestos tienen por qué asustar a nadie. Todas las distribuciones de Linux traen unos valores por defecto que son más que razonables para cubrir unas necesidades normales. nosuid, nodev, noexec. Salvo casos excepcionales, no debería haber ninguna razón para que se permita la ejecución de programas SUID/SGID en los directorios home de los usuarios. Esto lo podemos evitar usando la opción `nosuid' en el fichero /etc/fstab para las particiones que tengan permiso de escritura por alguien que no sea el root. También puede ser útil usar `nodev' y `noexec' en las particiones de los directorios personales de los usuarios y en /var, lo que prohíbe la creación dispositivos de bloque o carácter y la ejecución de programas. Sistemas de ficheros en red Si exporta sistemas de archivos vía NFS, esté seguro de configurar /etc/exports con los accesos lo más restrictivos posibles. Esto significa no usar plantillas, no permitir acceso de escritura a root y montar como sólo lectura siempre que sea posible. umask Configure la máscara de creación de ficheros para que sea lo más restrictiva posible. Son habituales 022, 033, y la más restictiva 077, y añadirla a /etc/profile. El comando umask se puede usar para determinar el modo de creación de ficheros por defecto en su sistema. Es el complemento octal a los modos de fichero deseado. Si los ficheros se crean sin ningún miramiento de estado de permisos, el usuario, de forma inadvertida, podrá asignar permisos de lectura o escritura a alguien que no debería tenerlos. De forma típica, el estado de umask incluye 022, 027 y 077, que es lo más restrictivo. Normalmente umask se pone en /etc/profile y por tanto se aplica a todos los usuarios del sistema. Por ejemplo, puede tener una línea parecida a la siguiente: # Pone el valor por defecto de umask del usuario umask 033 Esté seguro de que el valor umask de root es 077, lo cual desactiva los permisos de lectura, escritura y ejecución para otros usuarios, salvo que explícitamente use chmod(1). Si está usando , y utiliza su esquema de creación de idetificador de grupos y usuarios (User Private Groups), sólo es necesario usar 002 para umask. Esto se debe a que al crear un usuario se crea un grupo exclusivo para ese usuario. Limitar recursos Ponga el límites al sistema de ficheros en lugar de 'ilimitado' como está por defecto. Puede controlar el límite por usuario utilizando el módulo PAM de límite de recursos y /etc/pam.d/limits.conf. Por ejemplo, los límites para un grupo `users' podría parecer a esto: @users hard core 0 @users hard nproc 50 @users hard rss 5000 Esto dice que se prohiba la creación de ficheros core, restringe el número de procesos a 50, y restringe el uso de memoria por usuario a 5M. wtmp, utmp Los ficheros /var/log/wtmp y /var/run/utmp contienen los registros de conexión de todos los usuarios de su sistema. Se debe mantener su integridad, ya que determinan cuándo y desde dónde entró en su sistema un usuario o un potencial intruso. Los ficheros deberían tener los permisos 644, sin afectar a la normal operación del sistema. Sticky bit El sticky bit se puede usar para prevenir borrados accidentales o proteger un fichero para sobreescritura. También previene que alguien cree enlaces simbólicos a un fichero, que ha sido el origen de ataques basados en el borrado de los ficheros /etc/passwd o /etc/shadow. Vea la página del manual de chattr(1) para tener más información. SUID y SGID Los ficheros SUID y SGID de su sistema son potenciales riesgos de seguridad y deberían ser controlados. Como estos programas garantizan privilegios especiales al usuario que los ejecuta, es necesario estar seguro que no hay instalados programas inseguros. Un truco favorito de los crackers es explotar programas con el bit SUID, y entonces dejar un programa SUID como puerta trasera para entrar la próxima vez, incluso aunque el agujero original ya esté tapado. Encuentre todos los programas SUID/SGID de su sistema y mantener la pista de lo que son, para que esté prevenido de cualquier cambio que podría indicar un potencial intruso. Use el siguiente comando para localizar todos los progrmas SUID/SGID en su sistema: root# find / -type f \( -perm -04000 -o -perm -02000 \) Incluso podría crear una base de datos de progrmas SUID con root# find / -type f \( -perm -04000 -o -perm -02000 \)>/var/suid y posteriormente verificar si ha aparecido alguno nuevo con el siguiente guión: for fich in `find / -type f \( -perm -04000 -o -perm -02000 \)` do if ! grep $fich /var/suid then echo "$fich es un nuevo fichero con SUID" fi done echo "Actualiza la base de datos si es necesario" Puede eliminar los permisos SUID o SGIG de un programa con chmod(1), y siempre puede devolverlo a su estado original si piensa que es absolutamente necesario. Permisos de escritura Los ficheros con permiso de escritura global, particularmente los del sistema, pueden ser un agujero de seguridad si un cracker obtiene acceso a su sistema y los modifica. Además, los directorios con permiso de escritura global son peligrosos, ya que permiten a un cracker añadir y borrar los ficheros que quiera. Para localizar los ficheros con permiso de escritura global, use el siguiente comando: root# find / -perm -2 -print y esté seguro de saber por qué tienen esos permisos de escritura. En el curso normal de una operación los ficheros tendrán permisos de escritura, incluidos algunos de /dev y enlaces simbólicos. Ficheros extraños Los ficheros sin propietario también pueden ser un indicio de que un intruso ha accedido a su sistema. Puede localizar los ficheros de su sistema que no tienen propietario o que no pertenecen a un grupo con el comando: root# find / -nouser -o -nogroup -print Ficheros peligrosos La localización de ficheros .rhosts debería ser uno de los deberes regulares de la administración de su sistema, ya que estos ficheros no se deberían permitir en sus sistema. Recuerde que un cracker sólo necesita una cuenta insegura para potencialmente obtener acceso a toda su red. Puede localizar todos los ficheros .rhosts de su sistema con el siguiente comando: root# find /home -name .rhosts -print Permisos Finalmente, antes de cambiar permisos en cualquier sistema de ficheros, esté seguro de que entiende lo que hace. Nunca cambie permisos de un fichero simplemente porque parezca la forma fácil de hacer que algo funcione. Siempre debe determinar porqué el fichero tiene esos permisos y propietario antes de modificarlos. ntroducción Linux tiene la gran ventaja de tener disponible el código fuente del núcleo; en realidad Linux propiamente dicho es sólo el núcleo. Esto nos permite la posibilidad de crear núcleos a medida de nuestras necesidades. Y parte de nuestras necesidades será la mejora de la seguridad. Para compilar el núcleo primero tendremos que configurar las opciones que nos interesen. Los fuentes del núcleo se guardan habitualmente en el directorio /usr/src/linux, y una vez situados en él, tendremos que ejecutar «make menuconfig» (o «make xconfig» si estamos en modo gráfico). Así nos aparecen todas las opciones de configuración. Dentro de ellas nos vamos a fijar en las que están relacionadas con la seguridad, viendo una breve explicación de lo que hacen y cómo se usan. Como el núcleo controla las características de red de su sistema, es importante que el núcleo tenga las opciones que garanticen la seguridad y que el propio núcleo no pueda ser comprometido. Para prevenir algunos de los últimos ataques de red, debe intentar mantener una versión del núcleo actualizada. Puede encontrar las nuevas versiones del núcleo en The Linux Kernel Archives. Una de las características más interesantes del núcleo Linux es la posibilidad de realizar enmascaramiento de direcciones. Con esta técnica podremos dar acceso a Internet a una red local con direcciones privadas de forma transparente, es decir, sin ningún tipo de modificación en la configuración de las aplicaciones clientes, a diferencia de los proxies clásicos. Consiste en que el sistema Linux que posee la conexión hacia el exterior recibe las peticiones de conexión desde los equipos de la red local que tienen direcciones no válidas para Internet. El equipo Linux rehace la petición poniendo su propia dirección IP y modificando el puerto al que tiene que responder el equipo remoto. Cuando Linux recibe la respuesta del equipo remoto, mira el puerto al que va destinado y vuelve a rehacer el paquete para enviarlo al equipo concreto de la red local que solicitó la conexión. De esta forma podemos mantener un nivel aceptable de protección para los equipos de la red local, ya que sólo podrán recibir respuestas a peticiones que ellos mismos originaron. Opciones de compilación del núcleo IP: Drop source routed frames (CONFIG_IP_NOSR) Esta opción debería estar activada. Source routed frames contienen la ruta completa de sus destinos dentro del paquete. Esto significa que los enrutadores a través de los que circula el paquete no necesitan inspeccionarlo, y sólo lo reenvían. Esto podría ocasionar que los datos que entran a su sistema puedan ser un exploit potencial. IP: Firewalling (CONFIG_IP_FIREWALL) Esta opción es necesaria si va a configurar su máquina como un cortafuegos, hacer enmascaramiento o desea proteger su estación de trabajo con línea telefónica de que alguien entre a través de su interfaz PPP. Con esta opción activa podremos usar el filtrado de paquetes en el propio núcleo del sistema, decidiendo el tráfico que llega o sale de nuestro equipo. IP: forwarding/gatewaying (CONFIG_IP_FORWARD) Si activa reenvío IP (IP forwarding), su Linux esencialmente se convierte en un encaminador (router). Si su máquina está en una red, podría estar enviando datos de una red a otra, y quizás saltándose un cortafuegos que esté puesto allí para evitar que esto suceda. A los usuarios con un puesto aislado y conexión telefónica les interesará desactivar esta característica. Otros usuarios deberían pensar en las implicaciones de seguridad de hacer esto en su caso concreto. Las máquinas que actúen como cortafuegos tendrán que activar esta característica y usarla junto al software cortafuegos. Puede activar y desactivar el reenvío IP (IP forwarding) dinámicamente usando el siguiente comando: root# echo 1 > /proc/sys/net/ipv4/ip_forward y desactivarlo con el comando: root# echo 0 > /proc/sys/net/ipv4/ip_forward Ese fichero (y muchos otros ficheros de /proc) aparecerá con longitud cero, pero en realidad no es un fichero en el sentido clásico, sino que son datos guardados en memoria. IP: firewall packet logging (CONFIG_IP_FIREWALL_VERBOSE) Esta opción le suministra información sobre los paquetes que su cortafuegos recibe, como remitente, destinatario, puerto, etc. Así podremos rastrear los orígenes de los posibles intentos de ataque. IP: always defragment (CONFIG_IP_ALWAYS_DEFRAG) Generalmente esta opción está desactivada, pero si está construyendo un host cortafuegos o para enmascaramiento, deberá activarla. Cuando se envían paquetes de un host a otro, no siempre se envían como simples paquetes de datos, sino que se fragmentan en varios trozos. El problema es que los números de puerto sólo se almacenan en el primer fragmento. Esto significa que alguien puede insertar información en el resto de los paquetes para su conexión que se supone que no deberían estar allí. IP: syn cookies (CONFIG_SYN_COOKIES) El ataque SYN es un ataque de denegación de servicio (denial of service, DoS) que consume todos los recursos de su máquina forzando un reinicio. No podemos encontrar ninguna razón por la que no debiera activar esto. Dispositivos del núcleo Hay algunos dispositivos de bloque y carácter disponibles en Linux que también le resultarán utiles para mantener la seguridad de sus sistema. Los dos dispositivos /dev/random y /dev/urandom los proporciona el núcleo para generar datos aleatorios en cualquier instante. Por ejemplo, se utilizan para iniciar un número de secuencia para conexiones TCP/IP. Ambos, /dev/random y /dev/urandom, deberían ser suficientemente seguros como para generar claves PGP, SSH y otras aplicaciones donde son un requisito números aleatorios seguros para generar claves válidas para una sesión. Los atacantes no deberían ser capaces de determinar el siguiente número dada cualquier secuencia de números con este origen. Se han dedicado muchos esfuerzos para garantizar que los números que se obtienen de esta fuente son pseudoaleatorios en todos los sentidos de la palabra pseudoaleatorio. La única diferencia es que /dev/random suministra bytes aleatorios y le hace esperar para que se acumulen más. Observe que en algunos sistemas puede bloquear durante un rato a la espera de que se genere una nueva entrada de usuario al sistema. Por tanto debe tener cuidado al usar /dev/random. (Quizás lo mejor que puede hacer es usarlo cuando esté generando información sensible de claves e indicarle al usuario que pulse una tecla repetidas veces hasta que indique por la pantalla "Ya es suficiente"). /dev/random tiene gran calidad de entropía, midiendo tiempos entre interrupciones, etc. Bloquea hasta que hay disponibles suficientes bits de datos aleatorios. /dev/urandom es parecido, no es tan seguro, pero suficiente para la mayoría de las aplicaciones. Puede leer los dispositivos usando algo parecido a lo siguiente: root# head -c 6 /dev/urandom | uuencode - Esto imprimirá seis caracteres aleatorios en la consola, válidos para la generación de una clave. SEGURIDAD EN RED Introducción La seguridad de las conexiones en red merecen en la actualidad una atención especial, incluso por medios de comunicación no especializados, por el impacto que representan los fallos ante la opinión pública. El propio desarrollo tanto de Linux, como de la mayoría del software que lo acompaña, es de fuentes abiertas. Podemos ver y estudiar el código. Esto tiene la ventaja de que la seguridad en Linux no sea una mera apariencia, sino que el código está siendo escrutado por muchas personas distintas que rápidamente detectan los fallos y los corrigen con una velocidad asombrosa. Si además comprendemos los mecanismos que se siguen en las conexiones en red, y mantenemos actualizados nuestros programas, podemos tener un nivel de seguridad y una funcionalidad aceptables. Tampoco tienen las mismas necesidades de seguridad un equipo doméstico, con conexiones esporádicas a Internet, que un servidor conectado permanentemente y que actúe como pasarela entre una intranet e Internet. Para describir las pautas de actuación seguras iremos examinando cómo actúan las conexiones y cómo podemos protegerlas. inetd Para atender las solicitudes de conexión que llegan a nuestro equipo existe un demonio llamado inetd que está a la escucha de todos los intentos de conexión que se realicen a su máquina. Cuando le llega una solicitud de conexión irá dirigida a un puerto (número de servicio, quizás sea más claro que puerto), por ejemplo, el 80 sería una solicitud al servidor de páginas web, 23 para telnet, 25 para smtp, etc. Los servicios de red que presta su máquina están descritos en /etc/inetd.conf (y en /etc/services los números de puertos). Por ejemplo, en /etc/inetd.conf podemos encontrar las siguientes líneas: (...) pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d # imap stream tcp nowait root /usr/sbin/tcpd imapd (...) Esto quiere decir que, cuando llegue una solicitud de conexión al puerto 110 (pop3) se ejecutará el programa /usr/sbin/tcpd ipop3d. Sin embargo, el servicio imap está deshabilitado (está comentado con un # delante), por lo que el sistema no le responde. TCP Wrapper El siguiente paso es /usr/sbin/tcpd, que es el tcp_wrapper: un servicio que verifica el origen de las conexiones con su base de datos /etc/hosts.allow (equipos autorizados) y /etc/hosts.deny (equipos a los que se les deniega la conexión). tcpd anota todos los intentos de conexión que le llegan en /var/log/secure para que tenga la posibilidad de saber quién intenta conectarse a su máquina y si lo consigue. Si tcpd autoriza la conexión, ejecuta ipop3d que es el programa que realmente atiende la conexión, ante el cual se tiene que validar el usuario mediante una clave. Observe que ya llevamos tres niveles de seguridad: prestar un servicio, autorizar un conexión y validar un usuario. Un consejo que es conveniente seguir: No tenga abiertos los servicios que no necesita; esto supone asumir un riesgo a cambio de nada. Tampoco limite la funcionalidad del sistema, si tiene que usar un servicio, hágalo sabiendo lo que hace. También hay que asegurarse de que el programa ipop3d no tenga ninguna vulnerablidad, es decir, que esté actualizado. Existen numerosos medios para estar al día de las vulnerabilidades que aparecen. Una buena lista de correo o una revista electrónica tal vez sean la forma más rápida de conocer los incidentes, las causas y las soluciones. Posiblemente la mejor lista de correo para el mundo Unix sea Bugtraq (busque en forums). Pero esto no es todo, además puede filtrar las conexiones que le lleguen desde el exterior para que ni siquiera alcancen a los tcp_wrappers. Por ejemplo, en el caso de conexiones a Internet por módem: ipchains -A input -j DENY -s 0/0 -d $4/32 23 -p tcp -i ppp0 -l poniendo la anterior línea en el fichero /etc/ppp/ip-up (y ipchains -F input en ip-down) estaríamos añadiendo (-A) un filtro de entrada (input), que deniega (-j DENY) desde cualquier sitio de internet (-s 0/0) dirigidas a nuestro equipo (-d $4/32) al puerto telnet (23) por tcp (-p tcp) que lleguen desde internet (en este caso -i ppp0) y que además las anote en el registro de incidencias (-l) ($4 es la dirección IP que obtenemos dinámicamente). El mecanismo de filtrado de conexiones se realiza en el núcleo del sistema operativo y si ha sido compilado con estas opciones. Normalmente lo está. Este filtrado se realiza a nivel de red y transporte: cuando llega un paquete por un interfaz de red se analiza siguiendo los filtros de entrada. Este paquete puede ser aceptado, denegado o rechazado, en este último caso se avisa al remitente. Si los filtros de entrada aceptan el paquete, pasa al sistema si era su destino final o pasa por los filtros de reenvío o enmascaramiento, donde se vuelve a repetir una de las acciones. Por último, los paquetes que proceden del propio sistema o los que han sido aceptados por los filtros de reenvío o enmascaramiento pasan al filtro de salida. En cualesquiera de estos filtros se puede indicar que lo anote en el registro de incidencias. Registro y conocimiento de incidencias A parte de todo esto, puede conocer las incidencias que ocurren durante el funcionamiento del sistema. Por un lado conviene familiarizarse con los procesos que se ejecutan habitualmente en una máquina. Es una buena costumbre ejecutar periódicamente ps axu. Cualquier cosa extraña debiéramos aclararla. Puede matar cualquier proceso con la orden kill -9 pid (o killall -9 nombre_proceso). Pero en caso de ataque activo, lo mejor es desconectar de la red inmediatamente, si es posible, claro está. Después tenemos los registros de incidencias (las ubicaciones pueden ser diferentes dependiendo del sistema, pero no radicalmente distintas) de /var/log. Trabajando en modo texto se puede hacer en una consola virtual (como root) tail -f /var/log/messages y tail -f /var/log/secure y de esta forma podemos ir viendo las incidencias del sistema. Conviene también familiarizarse con las anotaciones que aparecen habitualmente para diferenciarlas de las que puedan presentar un problema. En modo gráfico hay un programa llamado ktail que le muestra las incidencias de una forma similar a la anterior. Comunicaciones seguras Por último, nos interesará mantener unas comunicaciones seguras para garantizar la privacidad e integridad de la información. Actualmente existen las herramientas necesarias para cada necesidad. Podemos usar cifrados simétricos como pgp y gpg para documentos, correo electrónico y comunicaciones sobre canales inseguros Podemos crear canales de comunicación seguros de distinto tipo: SSH (Secure Shell), stelnet: SSH y stelnet son programas que le permiten efectuar conexiones con sistemas remotos y mantener una conexión cifrada. Con esto evitamos, entre otras cosas, que las claves circulen por la red sin cifrar. Cryptographic IP Encapsulation (CIPE): CIPE cifra los datos a nivel de red. El viaje de los paquetes entre hosts se hace cifrado. A diferencia de SSH que cifra los datos por conexión, lo hace a nivel de socket. Así un conexión lógica entre programas que se ejecutan en hosts diferentes está cifrada. CIPE se puede usar en tunnelling para crear una Red Virtual Privada. El cifrado a bajo nivel tiene la ventaja de poder hacer trabajar la red de forma transparente entre las dos redes conectadas en la RVP sin ningún cambio en el software de aplicación. SSL: o Secure Sockets Layer, fue diseñado y propuesto en 1994 por Netscape Communications Corporation junto con su primera versión del Navigator como un protocolo para dotar de seguridad a las sesiones de navegación a través de Internet. Sin embargo, no fue hasta su tercera versión, conocida como SSL v3.0 que alcanzó su madurez, superando los problemas de seguridad y las limitaciones de sus predecesores. En su estado actual proporciona los siguientes servicios: Cifrado de datos: la información transferida, aunque caiga en manos de un atacante, será indescifrable, garantizando así la confidencialidad. Autenticación de servidores: el usuario puede asegurarse de la identidad del servidor al que se conecta y al que posiblemente envíe información personal confidencial. Integridad de mensajes: se impide que modificaciones intencionadas o accidentales en la información mientras viaja por Internet pasen inadvertidas. Opcionalmente, autenticación de cliente: permite al servidor conocer la identidad del usuario, con el fin de decidir si puede acceder a ciertas áreas protegidas. Consejos finales Limite las acciones que realice como root al mínimo imprescindible, y sobre todo no ejecute programas desconocidos. Por ejemplo, en un juego (el quake) que distribuía una revista había un programa llamado runme que enviaba por mail las características de la máquina a una dirección de correo. En este caso se trataba de un troyano inofensivo, pero ofrece una idea de lo que puede hacer un programa ejecutado sin saberse lo que hace. Linux también tiene la posibilidad de proporcionar acceso transparente a Internet a una red local mediante IP masquerade. En este caso, si usamos direcciones de red privadas, nos aseguramos que los equipos de la red interna no son accesibles desde Internet si no es a través del equipo Linux. También podemos instalar un servidor proxy con caché, que a la vez que actúa de filtro de conexiones a nivel de aplicación, puede acelerar el acceso a servicios desde la red local. SEGURIDAD DEL ROOT Introducción A menudo, el mayor enemigo del sistema es el propio administrador del sistema, sí, tiene todos los privilegios y cualquier acción puede ser irreversible y hacerle perder posteriormente mucho más tiempo que el que hubiera perdido por realizar las tareas de forma segura. Puede borrar cualquier fichero e incluso destruir el propio sistema, mientras que un usuario «normal» sólo puede perjudicarse a sí mismo. Por estos motivos, conseguir privilegios de root es la meta de cualquier ataque. Tampoco hay que alarmarse. Piense que en un sistema operativo monousuario cualquiera podría darle formato al disco duro y perder toda la información almacenada o borrar cuaquier fichero necesario para el funcionamiento del sistema. En un sistema estilo Unix, como Linux, esto sólo lo podría hacer el usuario root. Hábitos seguros La seguridad del administrador es simple, en mayor medida consiste en tener unos hábitos seguros y también en utilizar herramientas seguras. Una primera norma que siempre debería tener presente es usar la cuenta de root sólo para realizar tareas concretas y breves y el resto hacerlo como usuario normal. Es una costumbre muy peligrosa usar todo el tiempo la cuenta de root. Al principio, a los usuarios de Linux les gusta sentir todo el poder de la cuenta de root, les molesta que su propio sistema les deniegue el permiso para hacer algo, pero van cambiando de opinión poco a poco, conforme se van familiarizando con el sistema o cuando han realizado un destrozo de esos que nos hacen proferir insultos contra nosotros mismos acompañados de un desesperado puñetazo en la mesa (o en el teclado). Piense que cuando el sistema le deniega alguna operación es porque puede conllevar algún riesgo. El sistema le avisa para que piense dos veces lo que está haciendo. En los casos de tareas que necesiten privilegios de administrador para realizar una operación concreta, podemos usar la orden «su» (Super Usuario) o también «sudo». De esta forma podremos acceder a los privilegios de root sólo cuando nos interese. Consejos Asegúrese de que en los borrados de ficheros por parte del root se pide confirmación. Esto lo puede hacer poniendo «alias rm="rm -i"». Esto es lo habitual para el root. Si en alguna ocasión tiene que borrar muchos ficheros y no quiere confirmar cada uno de ellos, puede usar la opción «-f» para no pedir confirmación, deshacer el alias con «alias rm=rm» o bien usando la orden «yes», poniendo «yes|rm ficheros» para ir confirmando automáticamente cada una de las preguntas de la orden. Procure prever los resultados de una orden, sobre todo si usa comodines, intentándolo antes una forma no irreversible. Por ejemplo, si quiere borrar todos los ficheros terminados en «~» ejecute primero «ls -la *~» y una vez que haya verificado a qué va a afectar la orden, ejecute «rm *~». Vigile la variable de entorno «PATH». Limite la búsqueda automática de ejecutables a las ubicaciones estándar del sistema. De forma particular evite incluir el directorio actual, es decir «.», en esta búsqueda. Bastaría incluir un ejecutable llamado «ls» en un directorio para que usted mismo ejecute un código desconocido con privilegios de root, y cuando se dé cuenta de lo que ha hecho sea demasiado tarde. Además, no tenga directorios con permiso de escritura en su ruta de búsquedas, ya que esto puede permitir a un posible atacante modificar o poner nuevos binarios que se puedan ejecutar como root la próxima vez que ejecute una determinada orden. No utilice las herramientas rlogin/rsh/rexec como root. Pueden ser objeto de diversos tipos de ataques y es peligroso ejecutarlas como root. Nunca cree un fichero .rhosts para root. Evite que la clave del root circule por la red sin cifrar. Si tiene la necesidad de ofrecer servicios de shell o ejecución remotas sobre un canal inseguro utilice «ssh» en lugar de «telnet» u otra herramienta que no cifre los datos de las conexiones. Los servicios remotos como «rlogin», «rsh» y «rexec», como dijimos antes, no suelen ser seguros si se utilizan canales no seguros. Es mejor deshabilitarlos. Limite las ubicaciones desde donde alguien se puede conectar como root al sistema. En el fichero /etc/securetty puede especificar la lista de terminales desde las cuales se puede conectar el root. Las teminales predeterminadas para conectarse como root sólo incluyen las consolas virtuales (vtys). Si tuviera que conectarse como root desde una ubicación distinta a la consola, hágalo como usuario normal primero y luego utilice «su» para acceder a los privilegios de root. De esta forma un posible atacante tendría que conocer el nombre de un usuario del sistema, conocer su clave y también conocer la clave del root. Esto pone más dificultades para obtener privilegios remotos en su sistema. Evite siempre dar la clave de root, no lo haga bajo ningún concepto por mucha confianza que tenga con esa persona. Si tiene que otorgar privilegios a algún usuario para realizar alguna tarea de administración, como montar un CD u otro dispositivo similar, utilice «sudo» para permitirlo con la propia clave del usuario. Así puede decidir qué usuario tiene acceso a una determinada orden. No modifique los permisos de un fichero o directorio si no sabe realmente qué está haciendo. Los valores que trae la instalación de las distintas distribuciones suelen ser adecuados. Jamás, insistimos, jamás se conecte a un servicio IRC como usuario root. PREPARACION PARA LA SEGURIDAD La seguridad es un proceso continuo, que requiere tener previsto hasta lo imprevisible. Tener unos buenos hábitos y tomar unas pequeñas precauciones nos ayudarán mucho. Determinar los servicios activos Desactive todos los servicios que no vaya a prestar, en particular revise los ficheros /etc/inittab, /etc/inetd.conf y los demonios que se lanzan durante el arranque. Si no está realmente seguro de lo que hace, mejor no haga nada; las distribuciones más modernas incorporan unos mínimos de seguridad aceptables para un usuario medio. No tiene sentido tener abierto un servicio del que no va a hacer uso ningún usuario legal. Puede que esté consumiendo recursos de su sistema para ofrecer a algún atacante la posibilidad de violarlo. Puede usar un analizador de puertos para ver qué parte de su sistema es visible desde el exterior. Existen utilidades como SATAN, Nessus o nmap que realizan esta labor. Trinux es una minidistribución de Linux totalmente portable que se puede llevar en 2 ó 3 disquetes y se ejecuta por completo en RAM, puediéndose usar desde cualquier equipo para la red. Se arranca desde el disquete y no utiliza el disco duro para nada. Contiene las últimas versiones de algunas herramientas muy prácticas enfocadas a la seguridad en redes. Nos permitirá analizar el tráfico de la red, analizar puertos e incluso ver el contenido de los paquetes que circulan por la red. Proteger los ficheros importantes Existe un parche para el núcleo Linux que impide que ciertos ficheros puedan ser modificados, incluso por el propio root. El núcleo parcheado de esta forma puede garantizarnos la integridad de la información almacenada incluso en el caso de que alguien consiguiera privilegios de root en nuestro sistema. Este parche se puede obtener, junto con la información necesaria para su instalación, en LIDS. Si no queremos aplicar el parche, sí que deberíamos vigilar los permisos de ficheros y directorios. Software actualizado La gran mayoría del sofware que acompaña a Linux es de código fuente público, como el propio núcleo. Esto es una garantía de seguridad en sí. Cientos de expertos analizan minuciosamente el código para detectar alguna pega que poder publicar en las listas de correo sobre seguridad más prestigiosas, y se corrigen con gran rapidez. De esta forma nos garantizamos un software de calidad y no una mera seguridad aparente. Esto por otro lado nos obliga a ir sustituyendo las versiones defectuosas por otras corregidas y que mejoran las prestaciones. En cualquier sistema operativo, mantener un software que ha demostrado tener fallos supone asumir un riesgo innecesario. Para estar actualizado consulte los recursos de información sobre seguridad en Linux. Prevenir pérdidas de información Existen acontecimientos de los que nos puede resultar muy difícil protegernos como son los desastres naturales, únicamente podremos seguir una serie de pasos para evitar que su incidencia sea lo menor posible. La mejor solución es mantener un buen conjunto de copias de seguridad sobre toda la información necesaria del sistema. Hay que pensar que las copias de seguridad no sólo nos protegen de desastres naturales, también de los desastres que pueda ocasionar algún intruso en nuestro sistema, de cualquier ataque a la disponibilidad o integridad de la información del sistema. Si los datos tienen un tamaño inferior a 650Mb, puede ser una buena opción grabarlos en un CD, bien permanente (ya que es más difícil de falsificar con posterioridad, y si están almacenados de forma adecuada pueden durar mucho tiempo) o regrabable. Las cintas y otros medios sobre los que se puede escribir deberían protegerse tan pronto como se completa la copia y se verifica para evitar la falsificación. Tenga cuidado y almacene su copia de seguridad en un sitio seguro. Una buena copia de seguridad le asegura que tiene un buen punto desde el que restaurar su sistema. Hay que insistir en la seguridad de las copias de seguridad. Si las copias de seguridad no están almacenadas en un sitio seguro, puede que el posible intruso no tenga necesidad de idear métodos sofisticados para obtenerla, si le basta con copiar o sustraer un CD. Características de las copias de seguridad Cuando se realice una copia de seguridad es conveniente seleccionar un método que garantice la conservación de las características de la información como son derechos y permisos. Si realizamos una copia de seguridad de una forma o sobre un soporte que no contemple esta posibilidad, si tenemos que restaurar los datos sobre el sistema el resultado sobre la seguridad y funcionalidad globales puede ser impredecible. Secuencia de Copias Es necesario tener un política de copias de seguridad adecuada a las características de la entidad que estamos gestionando. Quizás el mejor método es el de rotación de cintas. Pasamos a verlo con un ejemplo. Un ciclo de seis cintas es fácil de mantener. Esto incluye cuatro cintas para la semana, una cinta para cada Viernes y una cinta para para los Viernes impares. Se realiza una copia incremental cada día, y una copia completa en la cinta adecuada de cada Viernes. Si hace algún cambio importante o añade datos importantes a su sistema también sería adecuado efectuar una copia. Copiar las Bases de Datos del Sistema Existe cierta información del sistema que es imprescindible para su correcto funcionamiento. Es conveniente tener una copia de estos ficheros en una ubicación segura. En particular resulta conveniente tener una copia del contenido del directorio /etc. También hay que mantenerla en lugar seguro, ya que tiene copias de los ficheros /etc/passwd y /etc/shadows, entre otros que puedan contener claves de usuarios que no están cifradas. También en cada sistema se puede tener una base de datos de las aplicaciones que hay instaladas en el servidor. Cada distribución dispone de alguna herramienta que nos realiza el mantenimiento de la base de datos a la mism vez que instala o desinstala aplicaciones. La pérdida de esta base de datos nos haría perder el control sobre qué aplicaciones tenemos instaladas. En muchas situaciones también será necesario tener copia de seguridad de los ficheros de registro de incidencias, para tener constancia de las distintas actividades del sistema. Consejos Suscribirse a las listas de correo de alertas de seguridad para estar actualizado. Prestar atención a los ficheros de registro. Actualizar el software inseguro. Verificar regularmente la integridad de los ficheros con algún software como tripwire. Tener unas copias de seguridad adecuadas. Utilizar PGP o GnuPG para garantizar la autenticidad y la privacidad. Verificar con periodicidad los puertos de los equipos. Revisar periódicamente las cuentas de usuario. Asignar cuotas de uso de recursos del sistema. Mantener los terminales seguros. Asegurarse de tener claves sólidas. Mantener el sistema de ficheros con propietarios y permisos adecuados. Instalar cortafuegos. En resumen Ahora, una vez vistas las características generales de seguridad, lo que queda es aplicar el sentido común. Tenemos que ver nuestra situación y respondernos a una serie de preguntas: ¿Qué queremos proteger? ¿Qué valor tiene lo que queremos proteger? ¿Qué coste tiene la seguridad? ¿De quién nos queremos proteger? ¿Cuáles son los puntos débiles de nuestro sistema? Las posibles respuestas a estas preguntas nos propocionan un abanico de posibilidades demasiado amplio como para poderlo tratar todo. Lo primero que tenemos que determinar es lo que queremos proteger. No será lo mismo una estación de trabajo personal aislada con conexiones a Internet esporádicas que un servidor web con conexión permanente o un cortafuegos. También tendremos que considerar el coste de lo que queremos proteger: posible coste económico, tiempo de restauración o instalación, prestigio, perdida de clientes, etc. También el coste de la seguridad en unos términos parecidos a los anteriores. Sería absurdo que invirtiéramos más en protección que el coste de lo protegido. También hay que considerar que existe una relación inversa entre seguridad y funcionalidad. Cuanto más seguro hacemos un sistema, menos funcional resulta, ofreciendo menos servicios y más limitaciones de acceso. Esto también constituye otro coste adicional: facilidad de uso. Después de saber qué y de qué tenemos que protegernos, de quiénes y cuáles son sus posibles objetivos, y viendo los servicios que necesariamente hay que prestar o usar, obtendremos un esquema elemental de nuestra situación y de las medidas que tenemos que tomar. QUE HACER EN CASO DE RUPTURA Ahora vamos a ver qué se puede hacer en caso de haber sufrido o estar sufriendo un ataque. No es una situación agradable, y aunque siempre sería preferible que no hubiera sucedido, conviene tener en mente una serie de normas que nos permitan una actuación rápida y certera que disminuya las consecuencias del incidente. Como norma general hay que conservar la calma. No conviene tomar medidas apresuradas que puedan aumentar el impacto del ataque. Vamos a distinguir una serie de situaciones posibles y cómo se debe actuar. Una vez visto esto nos queda aplicar el sentido común. Detección de un ataque activo Nos ponemos en situación: acabamos de detectar un ataque que está actualmente en curso. El ataque puede ser de diversa naturaleza. Dejaremos aparte los casos genéricos como detectar alguien manipulando físicamente el ordenador. Ataque local Cuando detectamos un ataque local tendremos que verificar la identidad del atacante. No conviene sacar conclusiones precipitadas y culpar a alguien de atacar el sistema cuando sólo puede que sea una negligencia a la hora de seleccionar una clave o abandonar abierta una consola. Hay que verificar el origen de la conexión, los registros del sistema y los procesos que tiene activos. Tendremos que comprobar si son los habituales y qué es lo que se sale de lo normal. Después nos dirigiremos a esa persona, por teléfono o personalmente, para preguntar qué está haciendo y pedir que cese en la actividad. Si no tiene una conexión activa y no tiene idea de lo que le estamos diciendo, habrá que profundizar en la investigación porque cabe la posibilidad de que alguien haya utilizado esa cuenta de forma ilegítima. Si reconoce el incidente, que le informe de los mecanismos que ha utilizado, las acciones que ha realizado y actúe en consecuencia. Nunca se precipite para hacer acusaciones. Recopile todas las pruebas que haya detectado en los registros, procesos, modificaciones de información, etc. Sea rápido, pero seguro. Está en juego su sistema y su prestigio. Ataque en red Si el ataque se produce a través de la red podemos tener distintas situaciones. En general puede ser conveniente espiar un poco al intruso para obtener más pruebas y después desconectar el interfaz de red si es posible. Si no fuera posible desconectar el interfaz, deberíamos usar algún filtro para las conexiones procedentes de la dirección del atacante. Programas como ipchains (o ipfwadm en su caso) pueden realizar esta labor. Si desconectamos el interfaz o denegamos (no rechazar) los paquetes procedentes de esa dirección el intruso lo podría interpretar como un error de red, más que una detección del ataque. Si no se pudiera limitar el acceso a las direcciones que usa el intruso, intente cerrar la cuenta del usuario. Observe que cerrar una cuenta no es una cosa simple. Tiene que tener en cuenta los ficheros .rhosts, el acceso FTP y otras posibles puertas traseras. En general no es aconsejable apagar el sistema. Por supuesto, nunca apagarlo en caliente; esto podría hacernos perder la información que tenemos en memoria. En Linux podemos ver la lista de procesos que hay en ejecución y matar aquellos que puedan estar dañando al sistema. ¿Somos el destino del ataque o somos un punto intermedio? Se puede dar la situación que nuestra máquina no sea el destino final del ataque. Puede que el intruso la haya utilizado como punto intermedio para atacar a otros sistemas e intentar dificultar el seguimiento de las pistas. En este caso, además de limitar las acciones del atacante deberíamos notificarlo al administrador del destino del ataque y conservar todas las pruebas existentes por si se pudieran reclamar judicialmente. En cualquier caso, si queremos dar validez legal a las pruebas obtenidas, sería conveniente la intervención judicial. Es habitual que durante los próximos minutos el atacante vuelva a intentar continuar con sus acciones, tal vez usando una cuenta diferente y/o una dirección de red distinta. El ataque ha concluido Ha detectado un compromiso que ya ha ocurrido o bien lo ha detectado mientras ocurría y ha echado al atacante fuera de su sistema. Ahora viene la parte más dura del incidente: tratar de dejar el sistema mejor que estaba antes de que ocurriera. Tapar el agujero Determine los medios que usó el atacante para acceder a su sistema. Deberá analizar cuidadosamente los ficheros de registro del sistema. En ellos debería haber una información valiosa para seguir la pista de las actividades del intruso en nuestra máquina. Las causas más habituales son una mala configuración de algún servicio, un programa defectuoso o la negligencia de algún usuario con respecto a su clave de acceso. Compruebe por los cauces más conocidos, que se pueden consultar en la página sobre recursos de seguridad bajo Linux, la existencia de algún nuevo «exploit» que pueda ser la causa u otros fallos que tenga que corregir. Si no elimina al atacante, probablemente volverá. No sólo a su máquina, sino a cualquiera otra de la red. Durante sus incursiones ha podido utilizar algún «sniffer», y disponer de información suficiente para tener acceso a otras máquinas locales. Si sospecha que el atacante ha obtenido copias de los ficheros /etc/passwd, /etc/shadow, /etc/ppp/pap-secrets, /etc/ppp/chap-secrets o cualquier otro fichero que contenga datos de usuarios y claves, sería conveniente modificarlas todas. Si tiene distintos usuarios en su máquína, oblígueles a cambir su clave. En general es preferible cambiar siempre las claves despues de un incidente, una vez que sepamos que lo hacemos de una forma segura. Verifique si se han modificado las limitaciones al acceso a distintas herramientas de administración remota como linuxconf. Puede que el atacante trate de abrir alguna puerta trasera para continuar aprovechándose de nuestras máquinas. En algunos casos puede interesar antes de nada, hacer alguna copia de todo el disco duro para seguir investigando el incidente en otra máquina distinta que no esté conectada a la red y no perder una información que puede ser valiosa. Evaluación de los efectos del ataque El siguiente paso que hay que realizar es la evaluación de los efectos que ha tenido el ataque. Tiene que tener en mente la naturaleza del ataque para evaluar los efectos. Si ha sido una denegación de servicio es probable que el atacante no haya tenido acceso a la información local. Si tenía instalado algún programa, estilo Tripwire, que verifica la integridad, su trabajo ahora sería más cómodo. En caso contrario tendrá que verificar todos sus datos importantes. Verifique las fechas de creación de los ficheros binarios y si detecta alguna incongruencia con la fecha de instalación puede empezar a sospechar. Si tiene la posibilidad, compare los tamaños de los ficheros con otro sistema «limpio» y por supuesto, no trate de verificar los programas ejecutándolos como root. Unas buena alternativa es volver a instalar el sistema. Guarde los ficheros de configuración para tener una funcionalidad idéntica a la previa al ataque. En Linux, los ficheros de configuración se almacenan en modo texto por lo que no son susceptibles de contener caballos de Troya. Eso sí, debería verificar que las configuraciones son las originales y no han sido manipuladas por el atacante. Reinstale el sistema y utilice las copias de seguridad para reponer los datos de los usuarios. Hay que tener especial cuidado con las copias de seguridad. Tiene que estar seguro de que las copias de seguridad que está utilizando son previas a cualquier ataque. No se arriesgue a restaurar unas copias de seguridad que pudieran tener algún caballo de Troya; tenga un cuidado especial con los ficheros binarios que restaura. Avisar Si cree que ha sido objeto de un ataque que no está documentado, debería notificarlo a alguna organización de seguridad como CERT o similar para que se pueda solucionar lo antes posible y evitar que otros sistemas lo puedan padecer. Y aunque sea un hecho documentado con anterioridad, no dude en pedir consulta a alguna de la múltiples lista de correo que tratan temas de seguridad en general y de Linux en particular. En España resulta especialmente recomendada la lista CERT-ES de RedIris. Si ha conseguido información sobre el atacante, se lo debería notificar al administrador del dominio del intruso. Puede buscar este contacto con whois, con la base de datos del Internic o en RedIris. Podría enviarles un mensaje de correo con todos los registros relacionados con el incidente, fechas y horas. Si conoce alguna otra información sobre su intruso, podría mencionarla también. En ciertas situaciones, tras enviar el correo podría llamar por teléfono al administrador del sistema que originó el incidente. Si el admininistrador localiza a su atacante, podría hacerle las cosas mucho más fáciles. Los buenos hackers con frecuencia usan sistemas intermedios. Algunos (o muchos) puede que ni sepan que han sido comprometidos. Intentar seguir la pista de un cracker hasta su origen puede ser difícil. Siendo educado con los administradores, le puede facilitar la obtención de la ayuda necesaria. De todas formas, esperamos que la lectura de este capítulo sea totalmente innecesaria, si ha seguido unas normas adecuadas de seguridad. RECURSOS Con esta lista de recursos perseguimos dos objetivos fundamentales, tener una buena guía para saber dónde consultar y obtener información, y por otro lado, obtener la información sobre las novedades que van ocurriendo, nuevos fallos descubiertos, los exploits que aparecen y los mecanismos para poderlos solucionar. En SeguriNet se puede encontrar una traducción en castellano de la Guía de Seguridad del Administrador de Linux. En ella tenemos una documentación valiosa donde completar aspectos más concretos, así como una buena lista de recursos. Por otro lado en CICA tenemos la mejor lista de correo sobre seguridad en castellano que hay sobre linux. No es un foro de discusión, no está pensada para realizar consultas, sino para recibir de forma rápida y clara todos los avisos sobre nuevas vulnerabilidades que se detectan en Linux, los efectos que pueden tener y cómo se pueden solucionar. No queremos desaprovechar la oportunidad de agradecerles el trabajo que realizan. Podéis suscribiros en su página de suscripción a sec-linux@ls.cica.es. CICA cuenta además con otra información interesante que merece la pena consultar. En las páginas del GLUB hay una buena recopilación de software y documentación de seguridad en Linux en castellano. RedIris es otro lugar que también dispone de información valiosa y listas sobre seguridad y Linux. Recursos Web y ftp Distribuciones Caldera OpenLinux RedHat Guía de errores de RedHat Lista de archivos de seguridad de RedHat SuSE Listas de correo de SuSE Debian Slackware Fórum Slackware TurboLinux Stampede GNU/Linux Mandrake LinuxPPC Linux Pro LinuxWare MKLinux Yggdrasil Connectiva DLD Pacific HiTech TurboLinux Errata Guide Eagle Linux M68K Eurielec Kheops Linux MNIS Linux Trinux (una minidistribución enfocada hacia la seguridad) Red / Análisis de Host / Intrusion nmap ftpcheck, relaycheck cheops nessus saint SBScan Samba scanner (funciona con windows) HUNT SATAN y otras herramientas Administración rpm Guiones de actualización RedHat RPM Logcheck bgcheck COAS Webmin Linuxconf super YaST Cortafuegos ipchains configuración más fácil Configuración de un cortafuegos mediante un CGI ipchains y otros Servicios de Red sendmail apache BIND/DHCPD/DHCPCD secure syslog openssl ncftp, ncdftp qmail postfix ProFTPD rsync PPP Servicios de internet versión libre de LDAP Lenguaje de programación para generar HTML dinámico Soluciones para Redes Virtuales Privadas CIPE ECLiPt Productos hardware RedCreek VPN (IPSec) Controladores de tarjetas RedCreek VPN para Linux Desarrollo PPTP para Linux FreeS/WAN, un desarrollo IPSec para Linux SSL SSLeay Desarrollo open SSL Aplicaciones para SSL Ftp oficial Desarrollo Apache SSL libre Servicios/Cifrado de datos Desarrollo libre de SSH Sustituto libre de PGP CFS Herramientas de Seguridad audit Varios paquetes de software de seguridad Kernel stackguard rule based access control Detección de intrusos port sentry host sentry Network Flight Recorder Grupos de respuestas sobre seguridad USA - CERT Información sobre seguridad en castellano INTERNATIONAL - HERT AUSTRALIA - AUSCERT SINGAPORE - SINGCERT Winn Schwartau's site L0pht Root Shell Infowar UK buenos documentos Programas comerciales para copias de seguridad BRU Quickstart Arkeia CTAR CTAR:NET Backup Professional Aplicaciones Página de actualización diaria y búsqueda Prácticamente todos los paquete RPM Un gran listado de aplicaciones Varios Security and Encryption: Probablemente la mejor lista de recursos sobre seguridad en internet. Aquí podrá encontrar casi todo y algo más. Replay tiene archivos de muchos programas de seguridad. Wietse's Ftp de ES-CERT The Hacker FA Bugtraq First Hacking CPSR Underground Defcon El archivo COAST tiene un gran número de programas de seguridad Unix e información. Reptile tiene montones de buena información sobre seguridad en sus páginas. Infilsec tiene un motor de vulnerabilidad que puede decirle cuales afectan a una plataforma específica. CIAC enviós periódicos de seguridad sobre exploits comunes. Un buen buen punto de inicio para Linux Pluggable Authentication Modules (PAM). Listas de correo Bugtraq: Para suscribirse a bugtraq, envíe un mail a listserv@netspace.org que contenga en el cuerpo del mensaje subscribe bugtraq. (ver el enlace anterior para los archivos). CIAC: Envíe un e-mail a: majordomo@tholia.llnl.gov En el cuerpo (no en el subject) del mensaje ponga: subscribe ciac-bulletin. NAVEGADORES Creías que tu navegador es seguro? Cada día se descubren más agujeros de seguridad en Internet Explorer. Anda que el Netscape no está mucho mejor. Supuestamente Java no puede abrir ventanas sin un aviso, ni puede escanear tu estructura de directorios, ni manipular threads, pero... ¿Sabías que se puede utilizar tu ordenador para realizar cálculos sin que tú lo sepas y enviar los resultados a través de la Internet? Aprende sobre el "Marcado de Datos" o Data Tainting, incorporado por Netscape a JavaScript para evitar el robo y posterior difusión de información. ¿Quieres ver cómo se puede colar uno a través de agujeros en CGI? De la forma más tonta se podría producir un desastre, a veces simplemente leyendo una base de datos. De todos los servicios que ofrece Internet, como correo electrónico, grupos de noticias, canales de charla, transferencia de ficheros, conexión remota a ordenadores, etc., sin duda alguna el que mayor crecimiento ha experimentado y mayor popularidad ha cobrado entre los usuarios ha sido la World Wide Web. Paralelamente y siguiendo el tirón del mercado, el software de navegación ha ido evolucionando a un ritmo espectacular, incorporando con cada nueva versión nuevas utilidades y posibilidades en una loca carrera en la que cada navegador intenta dejar atrás a sus competidores. El resultado es que los navegadores consumen cada vez más recursos y han terminado por transformarse en herramientas muy voluminosas, inflados con tantas sutilezas y detalles de funcionamiento que resulta difícil seguir la pista de los nuevos servicios añadidos. En su interior se ocultan opciones de configuración de nombres a menudo crípticos y no pocas veces de oscura finalidad. Por consiguiente, teniendo presente que la mayor parte del tiempo que un usuario va a emplear conectado a Internet será haciendo uso del navegador, nada mejor que conocer todos los detalles de cómo configurar de manera segura la gran cantidad de características que incorporan las últimas versiones. Obtener un navegador seguro Puede parecer trivial a primera vista, pero si se reflexiona un poco se comprenderá la necesidad de obtener una copia válida y segura del navegador preferido. No hay que olvidar que el navegador goza de acceso ilimitado a los recursos del sistema informático: memoria, disco, conexiones de red, tarjeta de sonido, impresora, vídeo, etc. En otras palabras, si el navegador decidiera comportarse maliciosamente, podría llegar a perpetrar cualquier fechoría en el ordenador, desde abrir conexiones con máquinas remotas y filtrar información del disco duro hasta infectarlo con otros virus o destruir ficheros valiosos. Por lo tanto, cualquier programa con un potencial dañino semejante no debería nunca considerarse a la ligera. Obtención de una copia segura de Netscape Communicator El 23 de enero de 1998 la compañía Netscape Communications realizó dos importantes anuncios públicos: primero, que su producto más conocido y extendido entre los usuarios de Internet, Netscape Communicator, sería gratuito y se podría descargar desde su web; y segundo, que el código fuente del Communicator sería también de dominio público y gratis, pudiéndose descargar desde la web de la Organización Mozilla. Desde que el código fuente se encuentra disponible libremente, de manera que cualquiera puede examinarlo y modificarlo, la posibilidad de alteraciones maliciosas se transforma en una amenaza muy real. Un individuo malintencionado podría cambiar secciones del código de manera que Communicator pirateado llevara a la práctica todos o alguno de los ataques citados antes u otros que se le podrían ocurrir. Ahora bien, una vez modificado, el pirata debería ingeniárselas para distribuir su copia entre los usuarios. Se pueden imaginar con facilidad una serie de alternativas que se le ofrecen, desde incluirlo en un CD de programas piratas de los que se venden en Internet, ponerlo en su página web para que lo descarguen navegantes ingenuos o incluso falsificar la web de Netscape o una porción de ella para hacer creer a los usuarios que se están conectando a la página oficial de descarga de Netscape Communicator en vez de a su falsificación. En definitiva, existe todo un abanico de posibilidades desplegado, cuya eficacia y potencialidad de llegar a más o menos usuarios dependerá en gran medida de la ingenuidad de éstos y del ingenio de aquél. Obtención de una copia segura de Internet Explorer En el caso de Internet Explorer, esta cuestión no reviste un grave problema, en la medida en que se instale una versión oficial de Windows, ya que el explorador viene incorporado en la distribución original junto con el sistema operativo. Sin embargo, con la proliferación de CD piratas que incluyen también versiones de Windows 95/98 o simplemente el navegador Internet Explorer, de nuevo se presenta el riesgo de obtener versiones modificadas. No obstante, en este caso, al no encontrarse libremente disponibles el código fuente del programa explorador, el peligro de modificación se minimiza prácticamente a cero. ¿Existe solución? La solución a este problema (que no se limita a los navegadores sino a cualquier software que se descarga comúnmente desde la Red, como por ejemplo los clientes de IRC, utilizados para charlar en Internet chatting) se encuentra en la firma digital del código. El código firmado digitalmente le proporciona al usuario la certeza de que procede de una compañía de confianza y de que no ha sido modificado maliciosamente en ningún momento desde que fue firmado por la casa que lo distribuye hasta que llegó a sus manos, dotando así a los productos de garantías similares a las que poseen los adquiridos dentro de su caja sellada en tiendas de informática. Mientras estas técnicas se extienden y su uso se vuelve más frecuente, conviene extremar las precauciones a la hora de instalar el navegador, desconfiando de sitios web sospechosos y de CD-ROM con software pirata. Se recomienda descargar estos programas desde los sitios oficiales, tanto el de Netscape para el Communicator como el de Microsoft para Internet Explorer. Configuración segura de Netscape Communicator Una vez que se ha instalado una versión fiable del navegador, conviene dedicar algunos minutos a su configuración en vez de lanzarse a navegar directamente con las opciones por defecto con las que arranca el programa recién instalado. El hecho de que exista en Netscape Communicator un menú con el nombre Información sobre seguridad puede confundir a los usuarios al inducirles a creer que basta con entender y configurar correctamente lo que aparece en dichos menús para garantizar la navegación segura. Como se verá a continuación, existen otras muchas opciones repartidas por diferentes menús que no deben dejarse al azar. Configuración segura de las Preferencias El recorrido por las opciones de seguridad de Netscape Communicator comenzará por la configuración de las preferencias. Para ello, se acude al menú de Edición y cuando se despliegue, se pulsa el comando Preferencias.... Las opciones seleccionadas se salvan en un archivo localizado en su directorio personal dentro de Netscape. Por ejemplo, una localización típica sería C:\Archivos de programa\Netscape\Users\gonzalo\prefs.js. Carpeta Navigator En la carpeta Navigator se ofrece la posibilidad de configurar el número de días que las páginas web visitadas aparecerán listadas en la ventana de historial. Esta ventana contiene el URL o dirección de todas las páginas que se han visitado durante el número de días especificado. En el caso de formularios, aparecerá incluso el contenido que se escribió en ellos. En otras palabras, cualquier persona que accediera a esta información sabría qué páginas han sido visitadas, cuándo y, en el caso de los formularios, qué datos se le proporcionaron. Desgraciadamente, errores de seguridad en este navegador, permiten a cualquier sitio de Internet obtener esta información de los usuarios que lo visiten. Si no quiere que caigan en otras manos, debe establecer a cero los días. Puede asimismo hacer la siguiente prueba: escriba about:global en la ventana de dirección y compruebe cómo aparece en la ventana del navegador la lista completa de los últimos sitios que ha visitado. Observe cómo si rellenó algún formulario, también aparecerán los datos suministrados (siempre y cuando el método de envío de datos del formulario fuera GET). En la versión 4.5 aparece además la opción de limpiar el contenido de la barra de dirección (los sitios que aparecen en una lista desplegable al pulsar la flecha de la derecha). Al igual que en el caso anterior, se muestran las direcciones de las páginas más recientemente visitadas, con la posibilidad de que cualquiera que se siente a continuación las vea, sabiendo qué sitios visitó recientemente. Bajo la opción de Aplicaciones se puede especificar qué aplicaciones de ayuda y plug-ins se lanzarán en respuesta a la carga de ficheros con una extensión determinada y un tipo MIME asociado que el navegador no puede visualizar directamente. Así, por ejemplo, si al navegar por una página web encuentra un enlace a un documento Word, cuya extensión es .doc, al seguir el enlace se arrancará Microsoft Word, si así aparece configurado en la ventana de aplicaciones. Esta característica permite que el navegador sea capaz de visualizar directamente documentos en PDF, archivos de sonido o de vídeo, etc. Tanto las aplicaciones de ayuda como los plug-ins son programas en código nativo con acceso total a los recursos del sistema, por lo que conviene instalarlos con precaución, ya que si alguno estuviera escrito con malas intenciones podría causar daños irreparables. De hecho, se han producido ataques gracias a plug-ins maliciosos (lea la escalofriante historia de las Estafas telefónicas a través de la pornografía en Internet). Otros plug-ins, sin estar específicamente diseñados para perjudicar al navegante, contenían agujeros de seguridad que permitían obtener información de su sistema, como ocurrió en 1997 con el plug-in de ShockWave de Macromedia, que permitía a un servidor web obtener ficheros del disco duro del visitante. Por otro lado, una página maliciosa podría también utilizar documentos que contuvieran virus de macro, como ha ocurrido en Word y Excel, para hacer que el usuario incauto los ejecutara en su ordenador. Como medida cautelar, se debe instalar el menor número posible de plug-ins y aplicaciones de ayuda y siempre de casas conocidas en las que se puede confiar. Para los tipos de archivo que se consideren potencialmente portadores de virus o con capacidad de interpretar comandos, se debe especificar que el navegador pida confirmación antes de abrirlos. Para ello, se selecciona el tipo de documento, por ejemplo "Microsoft Excel Worksheet" y se aprieta el botón de Editar... en la ventana que aparece. En la nueva ventana se selecciona la opción de avisar antes de abrir documentos de este tipo. Puede comprobar qué plug-ins tiene instalados escribiendo en la ventana de dirección: about:plugins Es muy probable que se sorprenda de la cantidad de plug-ins que posee, sin ser consciente de ello. ¿Quién los puso ahí? Usted, cuando instaló otros programas, que a lo mejor en algún momento de la instalación le interrogaron acerca de su deseo de añadir un programa para su integración con el navegador. Carpeta Correo y Grupos Existen ciertos aspectos con relación al correo que conviene tener en cuenta a la hora de proteger la intimidad. El primero de ellos y uno de los más importantes concierne a la identidad del usuario. En la opción Identidad se puede especificar el nombre y dirección de correo del usuario, entre otros datos. Si se utiliza Netscape como cliente de correo, evidentemente estos datos deben ser ciertos para poder enviar y recibir mensajes. Sin embargo, existen técnicas que permiten obligar al visitante de una página a enviar un correo sin que se dé cuenta, por el mero hecho de pasar el ratón sobre una imagen o cargar una página (es interesante la visita a la página de envío de correo para un ilustrativo ejemplo de esta posibilidad). En este caso, se enviará el correo con la dirección y nombre introducido en esta ventana. En las versiones de Communicator 4.x, antes de enviar el correo se le pide confirmación al usuario, pero son muchos los usuarios que bien porque han adquirido el hábito de decir que sí a todo, bien porque no entienden o no leen el contenido de la ventana de confirmación, lo cierto es que envían su dirección indiscriminadamente. Siempre se debe leer atentamente cada ventana que aparece antes de emprender acciones que puedan comprometer la seguridad. Algunos usuarios introducen datos falsos, lo cual puede ser una buena idea para contrarrestar el problema anterior, si bien no lo es tanto para falsificar correos, ya que quedará un rastro debido a la dirección IP de la máquina desde la que se enviaron. No obstante, puede servir para engañar en un primer momento a un usuario poco observador. La opción Servidor de correo permite determinar el lugar del disco duro donde se almacenará todo el correo recibido, enviado, borrado, etc. Normalmente, existe un lugar por defecto que conviene cambiar, ya que existen muchos agujeros en los navegadores que facilitan a sitios web remotos el examen del contenido de archivos en el disco duro cuyo nombre y localización se conocen. Si uno no se molesta en cambiar el lugar donde se guarda todo el correo, cualquier servidor web que se interese en ello puede leerlo, tanto el enviado como el recibido. No cuesta nada cambiar la localización por defecto a otro lugar en el disco duro y añadirá seguridad. También se ofrece la posibilidad de guardar la contraseña de acceso al servidor de correo. Piense que si activa esta casilla, cualquier persona con acceso a su navegador podrá leer los futuros correos que reciba mientras usted no esté presente, mientras que en caso contrario, se le pedirá la contraseña cada vez que inicia una nueva sesión con el servidor. En la opción Mensajes en las versiones 4.0x y Copias y carpetas en 4.5, se ofrece la posibilidad de enviar a terceras personas copias de los correos mandados al exterior. Conviene tener presente que si se utiliza Netscape desde el trabajo, el jefe puede haber introducido ahí su dirección de correo para recibir una copia de cada mensaje enviado y asegurarse así del buen uso de Internet que hacen sus empleados en horas laborales. También existe la posibilidad de especificar dónde se almacenarán los correos enviados, si es que se quieren guardar en disco. Nunca hay que perder de vista el hecho de que en sistemas Windows, siempre que no se utilice alguna herramienta de cifrado, cualquiera puede acceder al contenido del disco duro, por lo que se podría leer el contenido de los correos. Si no se cambia el directorio por defecto donde se almacenan, como se ha explicado anteriormente, entonces no sólo las personas con acceso físico al ordenador, sino cualquier máquina conectada a Internet podría leerlos explotando algunos de los agujeros del navegador. Carpeta Avanzadas Por defecto, Java y JavaScript aparecen activados tras la instalación del programa. Si no ha modificado la configuración de su navegador, puede comprobar cómo las casillas se encuentran activadas. Java y JavaScript son lenguajes de programación que añaden inteligencia y realzan el contenido de las páginas web. Hoy en día, son pocas las páginas que no hacen uso de una u otra forma de programación. Por desgracia, la gran mayoría de agujeros de seguridad que se han descubierto en Netscape están directamente relacionados con la forma de implantarse estos lenguajes en el navegador. En espera de parches o nuevas versiones mejoradas, el consejo habitual para los navegantes es que se desactive Java y JavaScript como medida preventiva. Si alguien se siente amenazado, lo puede hacer desactivando las casillas anteriores. En la ventana aparece también la opción de enviar la dirección de correo como contraseña de FTP. El protocolo de transferencia de ficheros (FTP) se utiliza para transferir ficheros voluminosos a través de Internet. Normalmente se accede a servidores anónimos que piden como contraseña la dirección de correo del cliente. Los navegadores incorporan entre los protocolos que soportan el citado FTP, de manera que se encargan automáticamente de recuperar ficheros a través de este protocolo sin que el usuario tenga que hacer nada especial además de pulsar sobre un simple enlace. Aprovechándose de esta técnica, algunos sitios web insertan en sus páginas imágenes u otros elementos que se recuperan a través de FTP, en vez de utilizar el protocolo convencional HTTP, de manera que si la opción de suministrar la dirección de correo como contraseña estaba activada en el navegador, se harán con la dirección electrónica del usuario. Para prevenir este tipo de ataque encubierto, conviene desactivar la casilla. Las cookies son esos pequeños ficheros de texto que se almacenan en su disco duro con información que algunos servidores Web escriben ahí (vea el curso sobre cookies). Por defecto, está activada la opción de aceptar todas las cookies. Ahora bien, ¿resulta peligroso aceptar cookies? En principio, las cookies no revisten ninguna amenaza para la seguridad; sin embargo, utilizadas por ciertas compañías sin escrúpulos, pueden ayudar a la confección de perfiles de usuario y hábitos de navegación, básicamente con el fin de dirigirles propaganda personalizada. No obstante, seleccionar la opción de deshabilitar las cookies puede conducir a que muchos sitios web no se visualicen correctamente o con sus plenas capacidades, como ocurre por ejemplo con el uso de carritos de la compra o la configuración personalizada de servicios (por ejemplo, la web de venta de libros amazon.com). Por otro lado, debido al uso masivo de cookies que hacen algunos servidores web, seleccionar la casilla de avisar antes de aceptar cookies puede acabar inundando al navegante con ventanas de aviso de cookies. Por lo tanto, como solución intermedia, se recomienda aceptar todas las cookies en aquellos sitios de confianza, con una política de privacidad claramente establecida y deshabilitarlas en el resto. Los navegantes más intrépidos pueden instalar alguno de los programas recomendados en el boletín, que permiten un filtrado selectivo de cookies en función del servidor que las envía. Bajo la opción Cache se pueden configurar los aspectos relacionados con la cache donde se almacenan temporalmente las páginas e imágenes visitadas más recientemente. Si bien su función primaria es aumentar la velocidad de navegación, leyendo las páginas ya visitadas desde la cache en lugar de descargarlas de nuevo a través de la Red, en la práctica se puede explotar para conocer las idas y venidas de un navegante, ya que contiene cada página e imagen que vio, los archivos de audio que escuchó, etc. Por esta razón, conviene en primer lugar cambiar el directorio por defecto donde se almacena. En segundo lugar, para los usuarios más preocupados por su intimidad, se puede poner a cero de manera que nada se almacene en el disco. Puede hacer la siguiente prueba: escriba about:cache en la ventana de dirección y compruebe cómo aparece en la ventana del navegador la lista completa de los últimos sitios que ha visitado, imágenes cargadas, documentos Word o PDF leídos, presentaciones en PowerPoint visualizadas, etc. Para comprobar el cache de memoria, puede escribir en la ventana de dirección: about:memory-cache Bajo la opción Proxies encontrará todas las opciones para configurar el funcionamiento del proxy. La idea básica de un servidor proxy es actuar de pasarela (gateway) entre su máquina o su red e Internet. Normalmente se usan para llevar las peticiones del cliente a través de un cortafuegos (firewall): el proxy espera a una petición desde dentro del cortafuegos y la reexpide al servidor remoto en el exterior del mismo, lee la respuesta y la envía de vuelta al cliente. Dado que todas las peticiones pasan a través del proxy, si un atacante introdujera en su configuración sin que se diera usted cuenta la dirección de un servidor proxy correspondiente a una de sus máquinas, este servidor registraría todos los sitios que visita y los datos que introduce en los formularios. Por otro lado, siempre que navegue a través de un proxy, los servidores web verán la dirección del proxy y no la de su máquina, por lo que los proxies pueden ser utilizados para la navegación anónima. Para más información sobre los proxies consulte la sección sobre anonimato. Autoinstall/SmartUpdate. A partir de las versiones 4.x es posible instalar automáticamente los plug-in necesarios para visualizar ficheros especiales. Aunque representa una opción muy cómoda para el navegante, se recomienda desactivar la casilla de permitir la autoinstalación en las versiones 4.0x (en la carpeta de Avanzadas), mientras que se debe activar la casilla de solicitar confirmación manual para cada instalación en la versión 4.5. No le conviene que ningún tipo de software se instale en su ordenador sin su conocimiento. Información sobre seguridad Además de todas las opciones anteriores, que aunque no están directamente relacionadas con la seguridad sí que la afectan, Netscape incorpora toda una serie de opciones para ofrecer una seguridad robusta en la navegación y en el correo electrónico. La ventana Información sobre Seguridad se abre pulsando sobre el candado de la barra de herramientas o en el menú Communicator/Herramientas. Esta ventana proporciona información acerca del estado de seguridad actual de un elemento particular cuando se selecciona en una ventana. Cuando se navega o se leen mensajes de correo, si se pincha en el icono del candado que aparece a la parte inferior izquierda de la barra de estado, se invocará esta ventana con la información de seguridad de la página Web o del mensaje que se estaba viendo. En Contraseñas, puede establecer la contraseña para acceder a la base de datos personal con sus certificados y su clave privada. Se recomienda que la establezca para evitar que personas con acceso a su ordenador utilicen sus certificados sin su conocimiento. Si lo hace, tenga en cuenta que si olvida la contraseña ya no podrá acceder a sus certificados ni descifrar mensajes nuevos o antiguos. En Navigator se pueden configurar las opciones de advertencia que le alertan de posibles situaciones de riesgo, como se ve en la Figura. Resulta una buena idea activar todos los avisos, por las siguientes razones: Entrar en un sitio cifrado: dado que las páginas se descifran automáticamente sin su intervención, a lo mejor le interesa borrar o guardar en un lugar seguro algún fichero descargado al finalizar la sesión. Salir de un sitio cifrado: podría interesarle borrar los ficheros descifrados que hayan quedado en su disco, ya que las páginas web solamente están cifradas durante la transmisión, no al almacenarse en disco. Ver una página con una combinación de información cifrada/descifrada: esta advertencia aparecerá cuando una página contenga elementos cifrados y elementos sin cifrar, como por ejemplo imágenes o applets de Java. Si considera que su sistema no está protegido, podría desear no abrir esta página. Enviar información no cifrada al sitio: le recuerda que no debe transmitir formularios o información sin cifrar a través del correo. Esta es la advertencia más importante y que siempre debería estar activada, aunque aparezca cada vez que hacemos una búsqueda o firmamos en un libro de visitas. Una lista desplegable le permite elegir cómo quiere que se comporte Navigator cuando un sitio web le pide su certificado. Si visita múltiples sitios web que requieren distintos tipos de certificado, elija Preguntar cada vez. En caso contrario, elija Seleccionar automáticamente. La configuración de seguridad avanzada sólo debería ser modificada por expertos. En cualquier caso, si se le echa un vistazo, se comprobará que las versiones de exportación (como la que se distribuye en España) incorporan claves débiles. En consecuencia, en cuestión de horas se pueden descifrar mensajes cifrados con SSL utilizando varios ordenadores trabajando en paralelo. A título de ejemplo, en un concurso convocado por la Facultad de Informática de la Universidad Politécnica de Madrid, en diciembre de 1998 un grupo de estudiantes logró romper y descifrar en pocos días un mensaje RC2 de 40 bits, que es el que usa NetScape. En Messenger se puede configurar el envío cifrado y firmado de mensajes. Los usuarios españoles comprobarán que el método de cifrado S/MIME utilizado es RC2 con clave corta de 40 bits y por lo tanto fácil de romper. En Java/JavaScript se administran los permisos con los que las applets de Java y los programas en JavaScript que estén firmados correctamente accederán a su sistema. Resulta extremadamente peligroso que estos programas gocen de privilegios excesivos, como lectura/escritura en disco o posibilidad de conexiones a través de Internet. Por este motivo, resulta más seguro, aunque también más engorroso, eliminar de la lista los sitios web, los vendedores y los distribuidores que estén presentes, o cuando menos editar y verificar sus permisos, eliminando los que requieran privilegios de más alto riesgo, de manera que en el futuro se le pida autorización cada vez que se pretenda realizar una operación comprometida, en vez de concederla automáticamente. En Certificados se gestionan los certificados con los que opera Navigator, tanto los propios, para que usted se identifique ante otras personas o páginas web, como los ajenos, para que otros se identifiquen ante usted. Además aparecen los certificados que ha aceptado de sitios web, así como los de las entidades firmantes, que dan validez a todos los certificados anteriores. Conviene que los proteja con contraseña, como se describió más arriba. Además es muy recomendable que realice copias de sus certificados y los conserve en un sitio seguro, ya que si los pierde o borra accidentalmente, será incapaz de leer el correo cifrado recibido ni se podrá identificar ante los sitios web. Para más información, consulte la página Obtener un certificado. En Módulos Criptográficos se pueden añadir módulos criptográficos para realizar tareas especializadas como soporte de tarjetas inteligentes, esquemas de distribución de claves o compatibilidad FIPS. Netwatch NetWatch es la protección basada en restricciones por contenidos incorporada por Netscape Navigator 4.5, que le permitirá controlar qué clase de páginas web se pueden visualizar en su ordenador. NetWatch de Netscape utiliza el estándar de clasificación conocido como PICS. NetWatch reconoce dos sistemas de clasificación independientes compatibles con PICS: RSACi, y SafeSurf. Cada sistema emplea un método diferente para describir con el mayor detalle posible los niveles de contenido potencialmente ofensivo en las páginas web. Estos contenidos se agrupan en las siguientes categorías: violencia, desnudez, sexo y lenguaje. SafeSurf añade, además, otros contenidos, como profanidad, heterosexualidad, homosexualidad, intolerancia racial, sexual o religiosa, drogas, juego, etc. Una vez que la protección de NetWatch ha sido activada, cuando se accede a una página con Netscape Navigator, NetWatch compara la clasificación de la página con los niveles que han sido configurados como aceptables y si todos los niveles de la página son inferiores se permite su visualización. También se puede bloquear todas las páginas que carezcan de clasificación, si bien esta opción limitaría drásticamente la navegación por Internet, ya que son muy pocas las páginas que actualmente incorporan clasificación. Con el fin de evitar que otros usuarios vean o cambien su configuración, ésta se protege mediante una contraseña. A partir del momento en que se activa la protección de NetWatch, nadie que use su navegador podrá saltársela. Puede configurar NetWatch si lo desea, seleccionando el comando NetWatch del menú Ayuda. Configuración segura de Internet Explorer A continuación, se examinarán las opciones que deben configurarse para aumentar la seguridad en la navegación con Internet Explorer. Se dejarán de lado otras características que no afecten directa o indirectamente a la seguridad e intimidad en la navegación. En este navegador, estas opciones se encuentran agrupadas en el menú Ver, bajo el comando Opciones de Internet.... Nos iremos refiriendo a cada una de las seis pestañas que contiene la ventana desplegada, describiendo aquellas opciones relevantes para la navegación segura. Pestaña General En Archivos temporales de Internet se puede configurar el tamaño de cache de disco y su localización, pulsando el botón de Configuración. Se aplican los mismos comentarios y consejos que se vieron para Netscape. En Historial se puede configurar el número de días que Internet Explorer mantiene las páginas visitadas. Se aplican los mismos comentarios y consejos que se vieron para Netscape. Pestaña Seguridad Desde la versión 4.x de Internet Explorer, la seguridad al navegar se fundamenta en las zonas de seguridad, que constituyen un medio de reducir la complejidad de la seguridad del sistema al asignar políticas de seguridad a grupos enteros de sitios. Microsoft Internet Explorer 4.x divide el mundo de Internet en cuatro categorías o zonas, a cada una de las cuales se le puede asignar individualmente su propia configuración. De ahí en adelante, cada sitio web sería asignado a su zona correspondiente con el nivel de seguridad adecuado. El nombre de la zona de Internet en la que se está navegando aparece en la barra de estado en la parte inferior derecha. De esta forma, cada vez que intente abrir un sitio o descargar contenido de la web, Internet Explorer comprobará la configuración de seguridad. A la sazón, Internet Explorer suministra cuatro zonas de seguridad, como se muestra en la tabla Zonas de seguridad de Internet Explorer. Además, se supone que los archivos de su equipo local son completamente seguros, por lo que no se les aplica la configuración de seguridad. Esta característica le permite abrir y ejecutar archivos y programas de su equipo sin preguntas ni interrupciones. Para agregar sitios web a una zona de seguridad, en la lista Zona, seleccione Zona de sitios de confianza o Zona de sitios restringidos. Pulse en Agregar sitios y escriba la dirección URL del web y pulse en Agregar. Por su parte, a cada zona se le puede asignar su propio nivel de seguridad. Estos niveles de seguridad se aplicarán a todo código descargado desde sitios de la zona en particular. En la tabla Niveles de seguridad para las zonas se listan los distintos niveles de seguridad. En la Figura se muestra cómo se puede acceder al cuadro de configuración de las zonas de seguridad en Internet Explorer. En el menú desplegable Zona se puede elegir la zona que se desea configurar, con el nivel de seguridad Alto (el más seguro), Medio (seguro), Bajo (No recomendado normalmente) o Personalizar (sólo para usuarios expertos). Si se elige Personalizar, se activará el botón Configuración..., que una vez pulsado abre la ventana más críptica de todas cuantas presenta Internet Explorer. Desgraciadamente, la recomendación entre paréntesis (sólo para usuarios expertos) puede disuadir a muchos navegantes que no se consideran tales de configurar personalizadamente la seguridad. Si, a pesar de todo, decide entrar en la ventana de configuración, se encontrará con una jerga difícil, que puede terminar por confundirle. Se intentará arrojar luz sobre estas opciones, con el fin de que ningún usuario de Internet Explorer renuncie a la configuración personalizada de su seguridad por no entender las opciones que se le presentan. Controles y complementos para ActiveX: especifica cómo reaccionará el navegador ante controles ActiveX. En el contexto de Internet, un control ActiveX es un objeto ejecutable que se inserta dentro de una página web. Este control se comporta como cualquier otro programa convencional que tenga instalado en su ordenador, sin ningún tipo de restricciones a lo que puede hacer. Por su elevadísimo riesgo, se recomienda que en todos los casos se seleccione la opción de Pedir datos para que se solicite su aprobación antes de emprender acciones relacionadas con los controles ActiveX. Si no desea arriesgarse, desactive todos y si al navegar por Internet se encuentra con uno, le aparecerá una ventana informándole de que no lo puede ejecutar porque su configuración de seguridad lo impide. Sopese cuidadosamente si el sitio que lo envía es de fiar y si de verdad le merece la pena ejecutarlo, y en caso afirmativo, cambie la configuración activando los permisos. Recuerde que si lo ejecuta, le abre de par en par las puertas de su ordenador, permitiéndole hacer lo que quiera. Autenticación del usuario: especifica cómo desea administrar las solicitudes de servidores que necesitan información de inicio de sesión. Los servidores de redes internas (intranets), y en algunos casos sitios web de Internet, requieren frecuentemente un nombre de usuario y una contraseña para limitar el acceso únicamente a los usuarios autorizados. Se recomienda que seleccione Preguntar por el nombre de usuario y la contraseña para conectar a un servidor y proporcionar un nombre y una contraseña cuando lo solicite. Descargas: dado que al descargar archivos siempre se le pedirá confirmación, puede activar la descarga de archivos sin problemas. Eso sí, cuando le aparezca el cuadro preguntándole qué desea hacer con el archivo descargado, nunca responda que desea abrirlo directamente. En su lugar, guarde el archivo o programa en disco y ábralo o ejecútelo después de tomar precauciones como las siguientes: 1.Comprobar el archivo con un detector de virus. 2.Guardar su trabajo y cerrar los demás programas. 3.Desconectarse de Internet u otra conexión de red. Para mayor seguridad, asegúrese de que la casilla de verificación Preguntar siempre antes de abrir este tipo de archivo esté activada. Java: especifica el nivel de seguridad con que permitirá que se ejecuten las applets de Java sin pedirle antes confirmación de los permisos necesarios. Normalmente, las applets de Java carecen de acceso a archivos, carpetas y conexiones de red del equipo, puesto que se ejecutan en un recinto de seguridad sin ningún privilegio. Ahora bien, si una applet de Java requiere un acceso mayor del que se ha especificado, se le pedirá que otorgue más permisos a la applet. Se pueden especificar configuraciones individuales para cada tipo de acceso que puede requerir una applet, seleccionando la opción Personalizada y pulsando a continuación en el botón Configuración de Java personal... que aparecerá. Sin embargo, esta configuración requiere conocimientos sofisticados de Java, por lo que se recomienda la opción más conservadora de seleccionar Seguridad alta. También se le ofrece la oportunidad de desactivar Java si así lo desea, lo cual sólo se recomienda en el caso de utilizar para navegar un ordenador con datos altamente sensibles. Misceláneo: aquí se configuran una serie de rasgos diversos, como el nivel de seguridad que desea asignar a los canales de distribución de software de esa zona, que se recomienda sea Seguridad alta para permitir únicamente la notificación, pero no permitir la descarga e instalación automáticas. En todos los demás casos se recomienda la opción de Pedir datos para que se le pida aprobación antes de continuar. Automatización: muchos usuarios se han vuelto locos intentando desactivar JavaScript en Internet Explorer, sin llegar a encontrar por ningún sitio cómo hacerlo. Aquí se oculta la opción, en Automatización activa. Al igual que ha ocurrido con Netscape Communicator, la gran mayoría de agujeros de seguridad que se han descubierto en Internet Explorer están directamente relacionados con la forma de implantarse estos lenguajes en el navegador. Si, por precaución, selecciona la opción Pedir datos, cada vez que acceda a una página que albergue código de JavaScript se le presentará una ventana con la pregunta ¿Desea permitir la ejecución de los archivos de comandos?, que puede terminar resultando molesta si todas las páginas web de un sitio utilizan JavaScript. Dependiendo del riesgo que desee correr, puede activarlo o desactivarlo a su gusto. Pestaña Contenido En Restricciones, al igual que NetWatch en Netscape, Internet Explorer incorpora un Asesor de contenidos para ayudarle a controlar el tipo de contenidos de Internet a los que tiene acceso su equipo. Una vez activado el Asesor de contenido, sólo podrán mostrarse los contenidos restringidos que satisfagan o excedan los criterios que determine. Con el fin de evitar que otros usuarios vean o cambien su configuración, ésta se protege mediante una contraseña. A partir del momento en que se activa el Asesor de contenido, nadie que use su navegador podrá saltarse las restricciones. El inconveniente de utilizar el Asesor es que si no se activa la casilla Los usuarios pueden ver sitios no restringidos (en la pestaña General dentro de Asesor de contenido), al ser tan pocas las páginas actualmente clasificadas, la navegación se volvería prácticamente imposible. Esto empuja normalmente a activar dicha casilla, con lo cual se podrá navegar por la casi totalidad de sitios Internet, especialmente con contenidos violentos o sexuales, los cuales con toda seguridad no incluirán una clasificación. Este obstáculo vuelve este sistema inservible en la práctica. En Certificados se pueden examinar los certificados actuales. Vea la página sobre qué son los certificados y cómo obtenerlos. En Información personal puede editar su perfil con toda la información acerca de su persona: nombre, domicilio, negocios, dirección de correo electrónico, certificados, etc. Esta información se compartirá con páginas web que lo requieran, manteniendo su intimidad y seguridad. Mediante este método se le evita tener que escribir repetidamente la misma información, como su nombre o dirección de correo electrónico, cada vez que visite un nuevo sitio web. Al mismo tiempo, no se podrá ver esta información en su equipo ni se podrá compartir con otros sin su permiso. En la práctica, son tan pocos los sitios web que la solicitan que no merece la pena que rellene los datos. También dispone de la opción de pagos a través de Internet, que le permitirá trabajar con Microsoft Wallet. Pestaña Conexión Desde esta pestaña se puede configurar el servidor proxy de acceso a Internet. Se aplican los mismos comentarios y consejos que se vieron para Netscape. Pestaña Programas Ofrece la posibilidad de configurar qué programa de correo y lector de noticias desea utilizar integrado con Internet Explorer. Generalmente, al instalar la versión 4.x del navegador se instala asimismo el cliente de correo Outlook Express, que aparecerá como predeterminado, de manera que en el futuro, cada vez que envíe correo desde Internet Explorer se hará a través del programa que se haya especificado aquí. Si no desea que sitios web obtengan inadvertidamente su dirección de correo, como se discutió al hablar de la Identidad en Netscape, debería configurar Outlook Express (o su cliente preferido) con una cuenta falsa (en Outlook Express se hace en Herramientas/Cuentas.../Pestaña Correo/Botón Agregar/Correo...). Por supuesto, resulta menos complicado leer las ventanas de aviso que se le presentan mientras navega, ya que Internet Explorer (a diferencia de Netscape Navigator, que lo hace desde las versiones 4.x en adelante) siempre le avisará antes de enviar correo automáticamente, en vez de enviar correos sin ton ni son. Pestaña Opciones avanzadas Conviene activar todas las casillas que aparecen bajo Seguridad: Avisar si el envío de formularios cambia de dirección, es decir, si la información rellenada en el formulario se envía a un sitio web distinto del sitio que le presentó el formulario. SSL 2.0 y SSL 3.0, para especificar que desea enviar y recibir información segura a través de Secure Socket Layer, versiones 2.0 y 3.0 respectivamente. Conviene activar ambos. Advertir sobre los certificados de sitio no válidos, cuando la dirección URL de un certificado de seguridad de un sitio de Internet no sea válida. Advertir del cambio entre modalidad segura y no segura, cuando se está moviendo entre sitios de Internet que no son seguros. PCT 1.0, que especifica que desea enviar y recibir información segura a través de PCT (Private Communications Technology, Tecnología privada de comunicaciones), protocolo desarrollado por Microsoft y mucho más seguro que SSL 2.0. Puede activarse sin problemas. Al igual que en Netscape, por defecto las cookies se aceptan sin avisar. En esta opción se le ofrece la posibilidad de bloquearlas todas o avisar antes de aceptarlas. Se aplican los mismos comentarios y consejos que se vieron para Netscape al hablar de cookies. Buscar revocación de certificado, con el fin de que Internet Explorer compruebe el certificado de un sitio para ver si se ha revocado antes de aceptarlo como válido. No guardar las páginas a disco, que hace que la información segura no se guarde en el disco duro. Sólo se recomienda si está utilizando Internet Explorer desde un servidor compartido y no desea que otras personas vean su información segura. Eliminar las páginas guardadas cuando se cierre el explorador, que permite borrar el contenido de la carpeta Archivos temporales de Internet cuando cierra el explorador. Sólo se recomienda si le preocupa el problema del cache, como se discutió más arriba. Si desea que Internet Explorer cree un registro de toda la actividad de Java, active la casilla de verificación Consola Java activada. Esta opción le resultará muy útil en el caso de que una applet maliciosa ocasione algún desperfecto en su sistema, ya que le permitirá rastrear sus acciones. Las mismas reflexiones que se hicieron con respecto a los plug-in en Netscape, se pueden aplicar al caso de Internet Explorer. Trucos y consejos prácticos para aumentar la seguridad A menudo me escribís con consultas variopintas o pidiéndome consejo sobre tal o cual aspecto. Ha llegado un momento en que no puedo responder a todas vuestras peticiones, aunque sí que las leo todas, por lo que he decidido incluir en las ediciones del boletín del Criptonomicón una sección sobre consejos y trucos, donde cada semana proporcionaré alguna indicación que resulte de utilidad práctica a la hora de proteger nuestra intimidad o la seguridad de nuestros datos. En esta sección os ofrezco la recopilación de esos trucos y consejos prácticos clasificados por temas, para que tanto los usuarios de ordenadores conectados a Internet, como los administradores de sistemas, puedan proteger su intimidad y aumentar su seguridad. Consejos y trucos para los administradores Passwords Actualizar y configurar Escaneo de puertos Conservar las huellas de los intrusos Cómo controlar por dónde navegan los usuarios Dedos acusadores Cómo instalar SSL en un servidor Cómo vender en Internet de forma inteligente Cómo firmar applets de Java LINUX como cortafuegos gratuito Cómo evitar los volcados de memoria Limpie su servidor web de ejemplos inútiles Cómo no recordar contraseñas en Internet Explorer Cómo activar SSL en tu servidor web ¿HTTP_REFERER? No, gracias Proteja su servidor de correo Cómo configurar las contraseñas Passwords fuertes en NT Passwords de la BIOS Passwords en la sombra Passwords fuertes en NT Pregunta: ¿Cuál es el eslabón más débil de la cadena de seguridad en sistemas informáticos? Respuesta: El usuario final. Dale a un usuario la oportunidad de elegir libremente su password e inventará palabras de paso como juan98 (se llama Juan, claro) o leire93 (su mujer y el año de su boda). Con esa clase de passwords, las medidas de seguridad más extremas a menudo no sirven de nada. Windows NT 4.0 Service Pack 2 incluye una nueva DLL (Passfilt.dll) que permite obligar que los usuarios introduzcan passwords fuertes, al incorporar la siguiente política: 1. Los passwords deben tener una longitud mínima de 6 caracteres. 2. Los passwords deben contener caracteres de al menos tres de las siguientes cuatro clases: a) Letras mayúsculas b) Letras minúsculas c) Números d) Caracteres especiales no alfanuméricos, como signos de puntuación 3. Los passwords no podrán contener el nombre de usuario ni otra parte del nombre completo del usuario. Para más información e instrucciones de instalación se puede consultar la página de Microsoft. (Nota: para consultar esa página antes hay que registrarse en el servicio de soporte de Microsoft, gratuitamente) Passwords en la BIOS Normalmente, los ordenadores incorporan la capacidad de proteger mediante password el acceso a los datos de configuración de la BIOS. Esta utilidad resulta de extremado interés en entornos multiusuario como un laboratorio o el centro de cálculo de una universidad, donde pululan cientos de estudiantes, muchos de ellos malévolos, que por motivos difíciles de explicar sienten la necesidad de cambiar la configuración de la BIOS, a menudo con consecuencias desastrosas para el ordenador... y para el encargado de la sala. Sin embargo, no todo el monte es orégano. Los fabricantes de BIOS suelen utilizar puertas traseras, que aunque teóricamente sólo deberían conocer ellos, terminan saliendo a la luz, como AWARD BIOS, que se puede romper con AWARD_SW, AWARD_PW o j262. AMIBIOS y Phoenix también poseen los suyos. Más fácil puede ser resetear la memoria de la BIOS quitando la pila de la placa base y volviéndola a conectar. A veces basta con cambiar un simple jumper. Además, existen multitud de programas para saltarse estas barreras, que se pueden encontrar en las siguientes localizaciones: http://www.hedgie.com/passwords/bios.html http://hem.passagen.se/unaxor/cracking.html http://www.voicenet.com/~raze/files/textfaq/pchack.txt http://www.geocities.com/Area51/Zone/6430/cracking.html Por lo tanto, no hay que confiar en los passwords de la BIOS para proteger el sistema y se debe preparar un sistema de protección más seguro. Eso, claro está, queda a la discreción del administrador. (Elaborado a partir del mensaje de Paul L Schmehl(pauls@UTDALLAS.EDU) a la lista de NTBuqTraq) Passwords en la sombra ¿Qué puede ocurrir si el archivo más famoso de Unix, el celebérrimo /etc/passwd, cae en manos de un atacante? No tiene más que ejecutar su programa revientaclaves favorito y sentarse a esperar hasta que empiecen a aparecer nombres de usuario con sus respectivas contraseñas. Con suerte, si el administrador es ingenuo o dejado, incluso dará con la clave del root, abriéndosele así las puertas a la máquina objetivo. "Sí, pero es muy difícil que se hagan con el fichero /etc/passwd, lo tengo bien protegido", se dirán algunos administradores. ¿Eso crees? No tienes más que visitar mi página sobre agujeros en Netscape, donde encontrarás una demostración de un agujero en Netscape Communicator 4.5 que permite leer el fichero en cuestión. ¡Haz la prueba! Afortunadamente, este problema tiene fácil solución. Utiliza las contraseñas en la sombra, en otras palabras, un segundo fichero que contiene las contraseñas cifradas y sólo accesible por root, mientras que el /etc/passwd ya no contiene más que un * en el lugar donde deberían aparecer las contraseñas cifradas. Puedes descargar el paquete de Shadow Passwords desde cualquiera de los siguientes sitios, con instrucciones para su instalación: ftp://i17linuxb.ists.pwr.wroc.pl/pub/linux/shadow/shadow-current.tar.gz ftp://ftp.icm.edu.pl/pub/Linux/shadow/shadow-current.tar.gz ftp://iguana.hut.fi/pub/linux/shadow/shadow-current.tar.gz ftp://ftp.cin.net/usr/ggallag/shadow/shadow-current.tar.gz ftp://ftp.netural.com/pub/linux/shadow/shadow-current.tar.gz Actualizar y configurar ¿Sabías cuál es la causa principal de los ataques con éxito a los sistemas infomáticos? Versiones sin actualizar. Sí, la utilización de una versión del programa que sea que no ha sido actualizada en meses, a veces incluso en años. Me refiero a software tanto en pequeñas máquinas personales (¿cuántos de los que estáis leyendo esta página usáis una versión de Netscape o Explorer anterior a la 4.x?) hasta el software de red de grandes máquinas Unix o servidores NT, software al que no se la han aplicado los parches pertinentes, o bien que no se ha actualizado convenientemente con la última versión disponible por el fabricante. Por lo tanto, si deseas disminuir los riesgos a los que se expone tu sistema, ya sea un modesto PC en casa o un gran ordenador de la Administración, es muy importante que revises el software que utiliza, especialmente aquel que tenga que ver con la conectividad a Internet, administración de servicios de Red, etc., y lo actualices o parchees con las últimas actualizaciones disponibles. A menudo no resulta una buena idea utilizar la última versión, sino la anteúltima, ya que al ritmo trepidante al que se lanzan nuevas versiones de productos, la última y flamante versión, con posibles despliegues de nuevas funcionalidades e interfaces psicodélicos, con toda seguridad no habrá sido puesta a prueba en su fase de diseño ni ha sido suficientemente validada por la comunidad de usuarios. A veces más vale esperar, aunque eso sí, no con la primera versión del producto. Por último, no basta con instalar la versión más reciente. Es igualmente configurarla correctamente, de manera que se cierren los resquicios que puedan dejar las instalaciones por defecto. Esta correcta configuración es importante no sólo en los sistemas operativos, sino también en el software en general (por ejemplo, ya sabemos que los navegadores incorporan por defecto una política de seguridad muy débil). En definitiva, se trata de mucho trabajo añadido, en la medida en que exige mantenerse al día de la evolución de los productos, así como conocerlos a fondo para poder configurarlos correctamente. Nadie dijo que la seguridad fuera cosa de niños. Escaneo de puertos Los servicios TCP/IP, como la Web o Ftp, permanecen a la escucha de un puerto determinado. La función de un escaneador de puertos consiste en escanear un rango de direcciones IP en busca de servicios a la escucha en algún puerto. En una gran red puede ser posible que existan servicios ilegales escuchando en algún puerto poco frecuente, de manera que algún trabajador utilice la red corporativa para montar su propio servidor Web o servidor de ficheros, sin pagar a un proveedor de servicios. Para detectar este tipo de abusos, que pueden llegar a comprometer seriamente la seguridad o ser el resultado de un ataque previo, conviene correr de vez en cuando un escaneador de puertos como UltraScan o Saint. Conservar las huellas de los intrusos La mayoría de los sistemas mantienen una serie de registros de log, donde queda almacenada la actividad de los usuarios, procesos, conexiones, etc. Si un intruso penetrara en nuestro sistema, siempre dejará alguna huella en el mismo, que nos permitirá rastrear sus pasos. Por este motivo, los intrusos más sofisticados contarán con herramientas para borrar silenciosamente toda traza de su incursión. Si quieres que se vuelva imposible para un atacante borrar sus huellas, puedes redirigir la salida de los ficheros de log a otra máquina de tu sistema, de manera que se dificulte la labor de borrado de rastro de los atacantes. Para ello debes modificar adecuadamente el fichero syslog.conf o similar, indicando que debe reenviar a otra/s máquina/s los mensajes deseados. Para una mayor seguridad, se pueden redirigir a una impresora, de manera que queden registrados en papel. Si te asusta el volumen de papel que se podría generar, puedes adoptar otra solución igual de eficaz, como redirigir el fichero a un puerto serie y conectar ahí mediante un cable modem nulo alguna vieja máquina que ya nadie utilice, guardando en su disco los ficheros. Para cazar a un intruso, nada como conservar bien seguros todos sus pasos por nuestro sistema. Cómo controlar por dónde navegan los usuarios Si eres padre de algún niño, jefe de un grupo de empleados o educador con jóvenes bajo tu tutela, puede que te preocupe saber por dónde navegan las personas a tu cargo, qué contenidos ven y si son convenientes. Si quieres controlar el uso que esas personas hacen del navegador instalado en los ordenadores de tu sistema, puedes activar el asistente de contenidos. En Internet Explorer, debes acudir a: Ver --> Opciones de Internet... --> Contenido --> Restricciones --> Activar En Netscape Communicator 4.5, se hace pulsando el comando NetWatch del menú Ayuda. Una vez dentro, no tienes más que seguir las instrucciones para activar las restricciones que se impondrán sobre los contenidos que a partir de este momento se podrá visualizar en tu ordenador. Dedos acusadores Cuando se utiliza el servicio de finger para interrogar a un servidor, a menudo éste revela más información sobre sí mismo y sus usuarios de la que sería deseable: el shell que está utilizando cada usuario, su directorio base y grupo a que pertenece, su nombre de usuario, a menudo acompañado del nombre real y de su número de teléfono y dirección. Debido a que además suele proporcionar información sobre la hora del último login, un atacante podría confeccionar patrones de trabajo de los distintos usuarios. En definitiva, se trata de mucha información valiosa como para distribuirla alegremente. Piensa si realmente resulta útil que esa información esté disponible para cualquier usuario de Internet o si convendría mejor eliminar ese servicio de finger. Cómo instalar SSL en un servidor Lo primero que debes hacer si quieres instalar SSL en tu servidor es disponer de software de servidor web que lo soporte. Este aspecto no supone ningún problema, ya que en la actualidad la práctica totalidad de servidores lo hacen. Consulta el manual de tu servidor para saber si lo soporta. Si estás pensando en adquirir un servidor nuevo, puedes consultar la página de WebServer Compare para conocer las características de los servidores más importantes en el mercado. Si ya tienes tu servidor compatible SSL, el siguiente paso es hacerse con un certificado digital. Lo primero que necesita es decidir a qué autoridad de certificación (AC) deseas comprárselo. Si no sabes qué autoridades de certificación existen actualmente operativas, puedes echar un vistazo a las que vienen preinstaladas en los navegadores más comunes, Netscape Communicator (Botón de Seguridad --> Certificados --> Firmantes) e Internet Explorer (Ver --> Opciones de Internet --> Contenido --> Certificados --> Sitios), que de hecho son las que tus potenciales visitantes dispondrán a su alcance. Entre ellas se cuentan AT&T, GTE, MCI, Thawte (información sobre precios de certificados en www.thawte.com/pricing.html), VeriSign (información sobre precios de certificados en www.verisign.com/enroll.s/payment.html), etc. Por comodidad, puedes pedir un certificado de prueba gratuito, de 14 días de validez, a VeriSign. El proceso general a seguir es el siguiente, que en esta entrega de Consejos y trucos se particularizará para VeriSign: 1. Conéctate con la página web de VeriSign para solicitud de certificados, donde recibirás instrucciones paso a paso de lo que debes hacer, previo registro. 2. Genera una Solicitud de Firma de Certificado Una Solicitud de Firma de Certificado (CSR) es un fichero que debes enviar a la autoridad de certificación para que lo firme y te lo devuelva en la forma de un certificado. Básicamente, contiene tu clave pública que debe ser firmada por la AC una vez haya verificado la veracidad de tus datos. Si no sabes cómo se genera, no te preocupes, porque el proceso de registro de VeriSign te habrá pedido previamente para qué servidor deseas el certificado y te presentará consecuentemente las instrucciones detalladas para cada tipo de servidor. Si tu servidor no se encuentra entre los listados, entonces consulta el manual de software del servidor. Una vez que el software del servidor haya creado los dos ficheros (tus claves, pública y privada y el CSR, con la pública), se te recomienda que realices un copia de respaldo de ambos en un disquete, que deberás almacenar en un lugar físicamente seguro. Recuerda: si pierdes tu clave privada, VeriSign no podrá recuperarla. 3. Envía la Solicitud de Firma de Certificado a VeriSign Abre el fichero Solicitud de Firma de Certificado en un editor de texto sencillo como el bloc de notas (que no añada formato ni caracteres de control, como Word) y selecciona el texto de la Solicitud, incluyendo las líneas --BEGIN NEW CERTIFICATE REQUEST-- y --END NEW CERTIFICATE REQUEST--. Copia el texto seleccionado y pégalo en el formulario de solicitud de VeriSign. Pulsa el botón de Enviar. 4. Completa la solicitud Rellena el formulario de solicitud con la información requerida acerca de tu compañía y persona/s de contacto. El contacto técnico debe estar autorizado para administrar su servidor web y debe estar empleado por tu compañía u organización. Si accedes a través de un Proveedor de Servicio Internet (ISP), el ISP necesita completar el formulario de solicitud en línea por ti. Lee el Acuerdo de Servicio de Servidor Seguro y si estás de acuerdo con las condiciones, pulsa en el botón de Aceptar. 5. La autenticación tarda algunos días Mientras VeriSign comprueba los datos, se te enviará un correo incluyendo una dirección web donde podrás comprobar el estado de tu solicitud, así como un número de identificación personal (PIN) para ver el estado. Si toda la información que enviaste es correcta, recibirás tu Certificado de Servidor Seguro en unos pocos días. Para el caso de certificado de prueba, se obvian estos pasos. 6. Instala tu Certificado de Servidor Seguro Cuando recibas tu Certificado de Servidor Seguro por correo, salva el certificado a un fichero de texto (incluyendo -----BEGIN CERTIFICATE----- y -----END CERTIFICATE-----, haz una copia de seguridad y almacénalo en un disquete, anotando la fecha en que lo recibiste. Guarda el disquete en un lugar físicamente seguro. Para instalar el certificado en tu servidor, sigue las instrucciones que recibiste de VeriSign cuando te registraste, que te guiarán paso a paso a lo largo del proceso, para cada tipo de servidor. En caso de duda, consulta el manual de software del servidor. La próxima vez que arranques el servidor (dependiendo del software), ya podrás ofrecer comunicaciones seguras a tus visitantes en línea. Nota: Procesar páginas con SSL supone una sobrecarga para el servidor que puede reducir su rendimiento. Por este motivo, te recomiendo que apliques SSL de forma selectiva sólo a aquellas páginas que necesiten cifrado, como las páginas de pago. No lo apliques a páginas de información de productos. Cómo vender de forma inteligente en Internet Hoy en día los potenciales compradores están cada vez más concienciados con la seguridad. Si se duda en ofrecer SET a los clientes, entonces debe considerarse seriamente la posibilidad de instalar SSL en el servidor para proteger al menos el envío del número de tarjeta de crédito. Piensa que robusteciendo la seguridad de los pagos se minimizarán los riesgos y llegarás a un mercado mucho mayor: el 85% de los usuarios de Internet, que todavía dudan en hacer sus compras en línea por motivos de seguridad. Con SSL, podrás gestionar las compras en línea de forma segura, con autenticación, confidencialidad de los datos intercambiados e integridad en los mismos. Como consecuencia, reducirás el riesgo, aumentarás la confianza de los clientes y, en última instancia, ganarás competitividad. Si aún no sabes qué debes hacer para empezar, lee el consejo anterior Cómo instalar SSL en el servidor. Después, pon en práctica los siguientes consejos: Cuida la seguridad de tu servidor, tanto física como lógica, ya que es tu escaparate en el mundo: utiliza servidores redundantes para ofrecer servicio 24 horas al día durante 365 días al año y crea una política de seguridad como primer paso hacia la seguridad de tu sistema. Contrata los servicios de una consultora si es necesario. Instala SET, o como mínimo SSL, en tu servidor. Los usuarios desconfían de los sitios inseguros. No debes perder clientes potenciales por este motivo. Pon a disposición de tus clientes una página sobre tu política de privacidad, explicando qué haces con los datos privados que recabas. Sé claro en la especificación de tus productos, añade imágenes y proporciona siempre información detallada acerca de precios, condiciones de garantía, forma de envío y otras cuestiones técnicas que tus potenciales compradores valorarán. Ofrece distintas formas para pagar, como tarjeta de crédito, contra reembolso, etc. Deja que tus clientes decidan. No elijas por ellos, a todos no les gustan los mismos métodos. Cómo firmar applets de Java En vista de las restricciones impuestas por el modelo de seguridad de Java, muchos desarrolladores de software se encuentran ante la impotencia de escribir aplicaciones realmente útiles, puesto que se les niega la capacidad de leer/escribir en disco o de abrir conexiones a otras máquinas. Si se quiere que las applets sean algo más que dibujos animados para realzar el impacto visual de una página y lleguen a convertirse en verdaderas aplicaciones productivas y realmente útiles, los usuarios de la aplicación Java necesitan garantizarle el acceso a los recursos, y antes de concederle estos privilegios, necesitan de un mecanismo que les permita saber de dónde (de quién) proviene la applet a la que le van a permitir acceso a su sistema. En esta sección se explicará la forma práctica de firmar applets, para que se puedan ejecutar sin restricciones en el sistema del usuario, siempre y cuando éste confíe en el autor que firma la applet. LINUX como cortafuegos gratuito Alfonso Lázaro Téllez, consultor de IP6Seguridad, nos ofrece sus consejos para configurar Linux como cortafuegos gratuito y eficaz. El boom de Internet ha llegado y muchas PYMES se quieren apuntar a lo que parece (y todos pensamos es) una gran oportunidad de negocio. El inconveniente principal que se encuentran estas empresas reside en las inversiones iniciales que deben afrontar: nuevos equipos informáticos, nuevo software, una conexión frame relay, ... y en cuanto están enganchados a Internet se plantean añadir seguridad a toda esa inversión que han tenido que hacer. En algunos casos estas empresas se encuentran con que las inversiones en seguridad son a veces tan importantes como las de las máquinas que quieren proteger, sintiéndose como expresa el refrán español que "están pagando más por el collar que por el perro". La solución que aquí planteo es gratuita. Consiste en configurar un Linux como cortafuegos. Las ventajas que nos ofrece esta solución son obvias: Linux es un sistema operativo gratuito. La máquina donde correrá el cortafuegos no es necesario que sea una gran máquina: con un Pentium 133 con 32 megas de RAM sería posible. Incluso con menos. Fiabilidad bastante alta: muchas empresas están eligiendo una opción de este tipo. El único inconveniente de esta opción es que la administración y configuración de un cortafuegos con Linux precisa a alguien con conocimientos del sistema operativo. Para ilustrar la configuración del cortafuegos voy a poner un ejemplo que coincide con una gran cantidad de redes que poseen las PYMES. En este esquema necesitaremos una máquina no de última generación, por ejemplo un Pentium 133 o parecido, con 32 megas de RAM y 3 tarjetas de red. Instalamos el sistema operativo en la maquina y lo fortificamos. Para ello básicamente quitamos todos los servicios que ofrece Linux. Nuestro cortafuegos no debe ofrecer ningún servicio hacia el exterior. Eliminaremos la mayoría de los programas setuids que no sean fundamentales en el sistema. Recompilaremos el núcleo para que pueda aceptar nuestras tarjetas de red. Y lo más importante: pensaremos una política de seguridad para nuestra empresa. Aquí incluyo un programa que configurará básicamente nuestro cortafuegos. #!/bin/sh # Definimos las variables export ROUTER=194.100.xxx.1 export WEBSERVER=194.100.xxx.66 export DNS=194.100.xxx.67 export CORREO=194.100.xxx.68 export FTP=194.100.xxx.69 export PROXY=192.168.xxx.2 export MIRED=192.168.xxx.0/255.255.255.0 export ALL=0/0 # levantamos las interfaces ifconfig eth0 194.100.xxx.2 netmask 255.255.255.192 ifconfig eth1 194.100.xxx.65 netmask 255.255.255.192 ifconfig eth2 192.168.xxx.1 netmask 255.255.255.0 # añadimos las rutas route add -net 194.100.xxx.64 netmask 255.255.255.192 dev eth1 route add -net 192.168.xxx.0 netmask 255.255.255.0 dev eth2 route add -host $ROUTER dev eth0 route add default gw $ROUTER # Empezamos con la política # Denegamos el forwarding por defecto # ipfwadm --> comando de firewall, -F forwarding , -p politica ipfwadm -F -p rej # aceptamos entrada y salida de correo ipfwadm -F -a acc -S $ALL -D $CORREO 25 -P tcp ipfwadm -F -a acc -D $ALL -S $CORREO 25 -P tcp -k ipfwadm -F -a acc -S $CORREO -D $ALL 25 -P tcp ipfwadm -F -a acc -D $CORREO -S $ALL 25 -P tcp -k # aceptamos la recogida de correo desde la red interna ipfwadm -F -a acc -S $MIRED -D $CORREO 110 -P tcp ipfwadm -F -a acc -D $MIRED -S $CORREO 110 -P tcp -k # aceptamos petición y consultas de DNS ipfwadm -F -a acc -S $ALL -D $DNS 53 -P tcp -b ipfwadm -F -a acc -S $ALL -D $DNS 53 -P udp -b # aceptamos peticiones de FTP ipfwadm -F -a acc -S $ALL -D $FTP 21 -P tcp ipfwadm -F -a acc -D $ALL -S $FTP 21 -P tcp -k ipfwadm -F -a acc -S $FTP -D $ALL 20 -P tcp ipfwadm -F -a acc -D $FTP -S $ALL 20 -P tcp -k # aceptamos hacer masquerade desde el proxy ipfwadm -F -a acc -S $PROXY -D $ALL -m # Para loguear el resto de peticiones. Los logs se guardan en /var/log/messages # Si no se desea loguear comentar la siguiente línea. ipfwadm -F -a rej $ALL -D $ALL -o # Fin del fichero de configuración. Este cortafuegos es muy básico, no es perfecto ni mucho menos, no tiene reglas antispoof y alguna que otra pequeña limitación, pero a grandes rasgos es un cortafuegos utilizable por una empresa. De todas maneras siempre se aconseja que la configuración y administración del cortafuegos la lleve un especialista. Pero tampoco deje que le digan que todos los cortafuegos son caros y hay que pagar grandes cantidades de dinero por sus licencias y el software. Cómo evitar los volcados de memoria Todos los programadores en sistemas tipo Unix están acostumbrados a los volcados de memoria, los "core dumps", cuando falla la ejecución del programa en C sobre el que están trabajando, generalmente por problemas de punteros y errores de acceso a memoria. Esta característica resulta muy útil, ya que el fichero "core" generado contiene información valiosa sobre el estado de la memoria cuando se produjo el error fatal. Ahora bien, dado que la memoria puede contener en un momento dado información valiosa sobre ficheros o procesos en los que se esté trabajando en ese momento, esta información volcada en el fichero core también puede contener datos confidenciales, especialmente si el programa que se "colgó" y generó el fichero core corrían con privilegios de root, como por ejemplo datos del fichero de contraseñas en la sombra (v. boletín #46, art. 6). Para evitar estos volcados, se puede editar el fichero /etc/security/limits.conf, añadiendo la línea: * hard core 0 donde el primer argumento indica el dominio de aplicación, que puede ser un usuario, un grupo, o general (*); el segundo argumento indica el tipo de restricción, dura (hard) o blanda (soft); el tercero, lo que se quiere restrinir, en este caso, los volcados (core); el último argumento especifica el valor del argumento anterior, en este caso, 0 Kbytes. El propio fichero /etc/security/limits.conf contiene instrucciones y ejemplos sobre su manejo. Limpie su servidor web de ejemplos inútiles Cuando se instala el software de servidor web, por defecto se crean una serie de directorios en los que éste a menudo almacena ejemplos de programas en cgi, server side includes o php (por ejemplo, para máquinas Linux con servidores tipo NCSA), o ejemplos en ISAPI o ASP (en servidores Windows NT con IIS), módulos en perl, etc. Estos ejemplos sirven básicamente a dos propósitos: Comprobar que la instalación del servidor se ha completado con éxito y que se pueden ejecutar programas para creación dinámica de páginas web. Servir de guía de referencia al programador, que puede usar los ejemplos suministrados por defecto con el servidor para desarrollar a partir de ellos sus propias aplicaciones o simplemente aprender cómo se realiza alguna acción concreta. Ahora bien, en contra de lo que pudiera pensarse a primera vista, resulta muy peligroso conservar esos ejemplos en el servidor en el directorio asignado por defecto, ya que pueden ser explotados por un atacante para entrar en el servidor. No olvide que: Cualquier otra persona conoce la localización exacta en su servidor de los programas de demostración. Los códigos fuente suelen acompañar a los programas de ejemplo, por lo que pueden ser examinados a fondo por cualquiera en busca de agujeros. Si se descubriera una vulnerabilidad en alguno de ellos, podría ser víctima fácil de un ataque. Por lo tanto, si no pretende desarrollar aplicaciones o no piensa aprender con esos ejemplos, lo mejor que puede hacer es borrarlos de su servidor en cuanto haya comprobado que todos los servicios funcionan correctamente. En el caso de que le sirvan como referencia de trabajo, muévalos de sitio, de manera que no estén disponibles a través de Internet. Si no desea borrarlos ni trasladarlos de ubicación, cámbieles al menos los permisos, de manera que no pueda ejecutarlos ningún usuario que no sea Ud. o algún otro perteneciente a un grupo reducido de confianza. Recuerde, cuantos más programas inútiles cuelguen de su servidor, mayores oportunidades ofrecerá a atacantes potenciales. Cómo no recordar contraseñas en Internet Explorer Internet Explorer 5.0 incorpora la posibilidad de recordar los campos que se rellenan en un formulario, incluidas las contraseñas. Esta característica, que puede resultar muy cómoda para una persona que es la única usuaria de un ordenador, abre un importante problema de seguridad cuando son varios los usuarios que navegan desde la misma cuenta en el ordenador. Cuando un usuario visita una página en la que se le pide login y password, tras haberlos introducido, le aparecerá una ventana en la que se le pregunta si desea que Windows recuerde la contraseña para no tener que escribirla la próxima vez que visite esa página. En caso afirmativo, quedará almacenada de forma codificada en el registro de configuraciones de Windows, de manera, que en el futuro, cada vez que se acceda a la misma página, se rellenerá la contraseña automáticamente. Para usuarios que se conectan a multitud de servicios de Internet, esta funcionalidad adicional puede simplificarles terriblemente la vida, en la medida en que no necesitan recordar docenas de contraseñas distintas. Sin embargo, si otro usuario navegando desde su misma cuenta accediera a esa página, automáticamente recibiría permiso para acceder a ella. Qué puede hacer el usuario En primer lugar, en la ventana que se le presenta debe contestar que no lo desea y activar la casilla "No volver a ofrecer recordar contraseñas". Si esta funcionalidad ya está activada, puede borrar todas las contraseñas y desactivar la característica en Herramientas --> Opciones de Internet... --> Contenido --> Autocompletar... . Qué puede hacer el administrador Como un creador de páginas web no puede prever lo que harán los potenciales visitantes, más vale asegurarse de que no ocurrirán sorpresas. Puede desactivar la posibilidad de Autocompletar añadiendo el atributo AUTOCOMPLETE="OFF" a la etiqueta