Hogar Mapa Indice Busqueda Noticias Arca Enlaces Sobre LF
[Top bar]
[Bottom bar]
This article is available in: English  Castellano  Deutsch  Francais  Nederlands  Turkce  
convert to palmConvert to GutenPalm
or to PalmDoc


por

Sobre el autor:

Frédéric Raynal prepara su tesis en informática sobre tatuado de imágenes en el INRIA (Instituto Nacional de investigación en Informática y Automatización con sus siglas en francés). Asimismo participa en el desarrollo de la Bastille-Linux.


Contenidos:

Bastille-Linux o cómo mejorar la seguridad de nuestro sistema

[Illustration]

Resumen:

La versión 1.1 de Bastille-Linux, que apareció a principios de junio, no es una nueva distribución Linux sino un conjunto de guiones para proteger mejor nuestro sistema contra potenciales vulnerabilidades. El enfoque de los autores es muy pedagógico y se puede aprender mucho durante el proceso de su instalación.



 

Introducción

En cuanto a seguridad se refiere, Linux es mucho mejor que otros sistemas operativos. Sin embargo, no todas las distribuciones son iguales con respecto a este tema. Bastille-Linux propone un conjunto de medidas a tomar para proteger nuestro sistema. Incialmente fue escrito para RedHat pero la última versión funciona también para otras distribuciones.

El proyecto es dirigido por Jon Lasser (coordinador principal) y Jay Beale (desarrollador principal). No obstante, existen numerosos desarrolladores, diseñadores de software y beta-testers involucrados.

Ante todo dejemos bien en claro que Bastille-Linux NO es una nueva distribución de Linux. Es un conjunto de guiones escritos en perl destinados a mejorar la seguridad de Linux.

El término seguridad se limita aquí al aspecto informático: cómo evitar que personas indeseables accedan a nuestra máquina. Bastille-Linux binda parte de la respuesta modificando la instalación inicial de las diferentes distribuciones de Linux.

Una tarea básica de todo administrador es de conocer las necesidades de sus usuarios no sólo para satisfacerlos sino también para evitar que se ejecuten programas en la red que no se usan pero que pueden tener vulnerabilidades peligrosas para ésta. Uno de mis mentores solía decir: cuanto menos puedas hacer, mejor ;-]. Si bien hablaba sobre complejidad algorítmica lo mismo es aplicable a la administración de redes: demasiado privilegios causan daño y crean nuevos ángulos de ataque. Para reducir las vulnerabilidades de un sistema es necesario instalar sólo lo que realmente se necesita.

Bastille-Linux intenta reducir las posibilidades de un ataque a una máquina Linux. Para alcanzar este objetivo, los diseñadores del programa han optado por un enfoque muy pedagógico: sugieren paso a paso qué hacer y explican el por qué.

 

Presentación

Al momento de escribir este artículo la versión de Bastille-Linux es la 1.1.0 la cual fue liberada en la primera quincena del mes de junio.

Independientemente de su utilidad evidente, Bastille-Linux es estremadamente didáctico. Los guiones funcionan haciendo preguntas precisas. A menudo, en este tipo de enfoque las preguntas son tan incomprensibles como las respuestas y los usuarios no saben qué hacer. Aquí, en cambio, los desarrolladores tratan de educar al usuario. Explican no sólo el contexto de la pregunta, sino también las consecuencias de sus posibles respuestas. Esto hace de Bastille-Linux una herramienta fácil de usar.

Para usuarios más avanzados, el código fuente escrito en perl es un modelo de claridad (sí, es posible ;) : cada comentario describe en forma precisa las acciones que se toman.

A continuación se muestran las características de la versión 1.1.0 :

Bastille-Linux consta de diferentes módulos. Son cuatro módulos de propósito general y otros relacionados con propósitos más específicos (programas como sendmail, FTP, demonios de escaso uso, etc.)

Los módulos generales comprenden:

  1. Instalación de un cortafuegos (firewall)
  2. Actualización de los programas del sistema
  3. Auditoría de los programas SUID-root
  4. Desactivación y restricción de servicios inútiles
Los otros módulos están vinculados con aspectos más específicos. Algunos se dedican a los agujeros de seguridad creados por programas mal configurados (por ejemplo, sendmail o FTP), otros modifican la configuración de algunos servicios de una manera menos permisiva (PAM, syslog, ...)

Algunas medidas de seguridad se superponen ofreciendo diferentes niveles de protección (esto es contrario a los principios de mi mentor pero alguna vez hay que emanciparse ;-) Hay que proteger cada servicio o cada vulnerabilidad potencial por intermedio de todos los medios posibles. De esta manera, si uno fracasa los restantes siguen protegiendo a nuestro sistema.


 
 


 

Instalación o "juguemos con los guiones mientras el lobo no está"

Las versiones previas de Bastille-Linux sólo funcionaban en sistemas nuevos lo cual no sigue siendo así. Sin embargo, cabe destacar que Bastille carece (casi) de utilidad en sistemas ya usados. De esta manera, se recomienda por cuestiones de seguridad instalar Bastille-Linux en sistemas recién instalados. Habiendo aclarado este punto podemos pasar a cuestiones más importantes: ¡la instalación!

Bastille-Linux está disponible como tarball .tgz en bastille-linux.sourceforge.net. Este archivo es de sólo 134 Kb. Una vez descargado se lo descomprime haciendo (tar xzf Bastille-1.1.0.tgz).

Cuatro guiones administran Bastille-Linux:

Para instalar Bastille-Linux hay que ser superusuario ya que los guiones modificarán los archivos de configuración. La instalación más habitual consiste en ejecutar primero el InteractiveBastille.pl. A continuación el usuario deberá responder una serie de preguntas (que serán analizadas en detalle más adelante). Por último se debe ejecutar el BackEnd.pl y ¡listo!. Un seguimiento de todos los cambios introducidos se puede encontrar en el directorio /root/Bastille/undo.

Algunas observaciones antes de comenzar.

  1. Se supone que el guión, por defecto, se ejecuta en el directorio /root/Bastille ... esto se modificará en una futura versión y será posible ejecutarlo desde cualquier lugar (de hecho, quizás ya sea así en el momento de leer estas líneas)

  2. Dos módulos proponen la creación de cuentas y presuponen que en el sistema se usan contraseñas ocultas. Esto ocurre en la instalación por defecto y es conveniente verificar que el directorio /etc/passwd no contenga contraseñas, que al directorio /etc/shadow sólo tenga acceso el superusuario y que sea este directorio el que contiene las contraseñas.

  3. Bastille-Linux aún no administra enlaces entre módulos como los que aparecen en la configuración del núcleo (esta característica estará disponible en una próxima versión). Se debe prestar atención a las respuestas dadas en cada módulo y a las consecuencias que pueden originar. Así, por ejemplo, es posible decirle al módulo IPChains bloquear el puerto 2049 y mantener el NFS en la lista de demonios activos del módulo MiscellaneousDaemons (NFS usa este puerto).
 

Los módulos paso a paso

Para comprender las etapas paso a paso, conservaré las preguntas planteadas por Bastille-Linux en inglés acompañándolas de su correspondiente traducción al castellano. Las letras entre [ ] muestra la respuesta por defecto (N -> No, Y -> Yes -Sí-).  

IPChains

Este módulo sirve para configurar un cortafuegos. Si bien no es indispensable para proteger el sistema, permite controlar el tráfico de red desde y hacia nuestra máquina. Sin embargo, no basta con bloquear el tráfico con un cortafuegos. Hay que reconfigurar los demonios (recordar que no son inútiles diferentes niveles de seguridad).

El principio en que se basa este guión es excelente. Considera 2 interfaces de red: la que se comunica con el exterior y la que se comunica con la red local. El objetivo es determinar los servicios disponibles en cada máquina y y bloquear el resto. Por defecto, se rechaza todo lo que proviene del exterior. A continuación el guión establecer las reglas para autorizar determinados servicios.

El guión simultáneamente se hace cargo de los protocolos TCP, UDP, ICMP y propone una lista de servicios que se deben vigilar para cada uno de ellos. Sería demasiado extenso detallar el enfoque que sigue Bastille-Linux para instalar un cortafuegos pero la lectura del guión con sus comentarios ayuda muchísimo. Sin embargo, se necesita de un mínimo de conocimiento para entender este módulo.

 

PatchDownload - Obteniendo los parches

Las actualizaciones son importantes para mantener la integridad del sistema. En los últimos meses, bind y piranha, (por citar algunos) han provocado graves problemas de seguridad. Fueron rápidamente solucionados: al ser el código fuente público, algunas personas inmediatamente escribieron los parches.

Desafortunadamente, este guión aún no funciona del todo bien. Es bastante complejo puesto que se deben determinar los paquetes instalados y, entre ellos, los que se necesitan actualizar. A continuación, se debe descargar el parche, verificar que no ha sido modificado (por algún hacker o durante el proceso de transferencia) antes de instalarlo. La verdadera dificultad radica en que esta etapa depende de la distribución empleada.

Por el momento, Jay Beale recomienda realizar esta etapa en forma manual sin descuidarla. Una versión más funcional de este módulo está en vís de desarrollo y estará disponible muy pronto.

 

FilePermissions - Los permisos de los archivos

Este módulo está inspirado en el documento del grupo SANS. Su finalidad es determinar los programas que deben ser accesibles únicamente al superusuario (o a un miembro del grupo root), los que necesitan conservar el bit SUID, etc ...  

AccountSecurity - La seguridad de las cuentas

Un hacker a menudo comienza con el robo de la cuenta de un usuario (o una cuenta del sistema).   Algunas precauciones sencillas dificultan la tarea y permiten detectar eventuales intrusiones.  

BootSecurity - Seguridad en el arranque

La opciones propuestas por este módulo abarcan la seguridad física de una máquina. Este módulo corrige los agujeros de seguridad de versiones previas que permitían a cualquier persona acceder físicamente a la consola y adquirir privilegios de (i.e. superusuario). En efecto, era suficiente ejecutar LILO en modo monousuario, (LILO: linux single) para encontrarse con un gentil intérprete de comandos perteneciente al root ;-P

Obviamente esto no basta. Para proteger físicamente a una computadora se debe proteger la BIOS con una contraseña, el disco duro debe ser el único dispositivo de arranque, el gabinete debe estar asegurado para evitar que alguien agregue su propio disco duro... Este es por supuesto un comportamiento paranoico que no necesita aplicarse sin que exista una muy buena razón.

Desde el punto de vista del programa, algunas medidas elementales brindan un compromiso razonable con las mencionadas anteriormente:

 

SecureInetd - Seguridad Inetd

El propósito de este módulo es restringir y desactivar servicios superfluos. Los hackers fácilmente pueden encontrar agujeros de seguridad en cualquier servicio privilegiado, por lo tanto se deben restringir tanto los servicios como sus privilegios.

Por ejemplo, un error en el DNS de RedHat 6.0 permite adquirir privilegios de superusuario en forma remota. Desactivando este servicio o reduciendo sus privilegios nos protegerá de este inconveniente.

Algunos protocolos, como los comandos r ya mencionados pero también el ftp o el telnet resultan ser muy vulnerables. Otros permiten al atacante obtener información (finger o identd por ejemplo) de las cuentas de una máquina, etc. Muchos de estos servicios están administrados por tcp_wrapper  que permite controlar al que accede a un determinado servicio (por intermedio del archivo /etc/hosts.{allow, deny}). Una vez que el wrapper decide si el cliente puede acceder al servicio solicitado, envía la solicitud al correspondiente servidor.

Esta parte continúa siendo un tanto rígida y debería reveerse completamente en futuras versiones.

Antes de proseguir, recordemos que una red se basa en un modelo cliente-servidor. Por lo tanto, para cada servicio hay que saber si se está del lado del cliente o del lado del servidor. Por ejemplo, el no hacer funcionar el servidor web no nos impide navegar por Internet ya que el navegador juega el rol del cliente.
   

DisableUserTools - Deshabilitar las herramientas de los usuarios

Este módulo es breve pero absolutamente indispensable para un servidor. En general, un hacker ingresa a una máquina mediante una cuenta de usuario normal. A continuación recompila algunos programas del sistema a fin de poder explotar sus puntos débiles. Este módulo desactiva al compilador C para todos los usuarios salvo para el superusuario.

Por lo tanto, si una máquina es únicamente un servidor donde nadie necesita compilar hay que eliminar el compilador.  

ConfigureMiscPAM - Configuración de PAM

La finalidad de este módulo consiste en disminuir los riesgos de ataques tipo 'Denegación de servicios' estos ataques cuelgan al sistema sobrecargándolo (por ejemplo: llenando una partición con archivos core, ejecutando pings mortales, etc)

PAM significa "Pluggable Authentification Module". Se trata de una biblioteca que permite al administrador del sistema elegir el modo en que autentica cada aplicación a sus usuarios, los permisos que tienen, los recursos a los que pueden acceder, etc.

 

Logging - Acceso al sistema

syslog es uno de los servicios más importantes para detectar si una máquina ha sido intervenida. Este demonio registra ciertos sucesos que tienen lugar en el sistema. Se puede optar por limitar la cantidad de información almacenada.

Cabe destacar que si se elige un número mínimo de servicios, cualquier anomalía en los archivos /var/log se puede detectar fácilmente debido al pequeño volumen de información guardada. En cambio, si el sistema posee muchos servicios inútiles los archivos /var/log se vuelven inmensos y por lo tanto difíciles de analizar (en este caso es necesario recurrir a guiones dedicados).

Este módulo agrega nuevos controles al archivo /etc/syslog.conf.

 

MiscellaneousDaemons - Otros demonios

Siempre preocupados por la minimización, este módulo sólo activa los servidores que realmente se necesitan al iniciar el sistema. Por defecto, se desactivan casi todos los servicios inútiles. Se puede volver a activar un servicio mediante el comando chkconfig.
 
Servicios  Descripción
apmd Se usa para controlar las baterias de las computadoras portátiles.
NFS y samba Para administrar sistemas de archivos compartidos ... si bien son muy útiles en redes heterogéneas son origen de enormes agujeros de seguridad.
atd Todo lo que se puede hacer por intermedio de atd se puede hacer mediante cron.
servicios PCMCIA Si se tiene un dispositivo PCMCIA, lo que es frecuente en portátiles pero mucho más raro en estaciones de trabajo.
dhcpd Servidor para proporcionar direcciones IP temporales. Este tipo de servicio lo proporciona un Proveedor de Servicios de Internet (ISP) o se usa en una red local.
gpm Se usa en modo consola (texto) para manejar el ratón. A menos que se trabaje a menudo en modo consola este servicio no sirve para nada.
servidor de noticias Pocas personas necesitan de un servidor de noticias en sus máquinas. En general, es tarea del ISP.
routed Así como el servidor de noticias es tarea del ISP, él es tarea de su DNS. 
NIS Servicio muy práctico en una red local...¡pero origen de muchos problemas desde el punto de vista de la seguridad!
snmpd Servidor destinado a la administración de una red (estadísticas, gestión de usuarios,...)
sendmail No es necesario ejecutarlo como demonio para permitir el envío y recepción de correo. Además, si recibe su correo de su ISP por POP o IMAP, sendmail carece de utilidad y como programa posee un gran historial de fallos...

   

Sendmail

Como hemos mencionado previamente, sendmail es un servicio que gestiona correo. Su historia esta plagada de agujeros de seguridad provocados por la diversidad de tareas que tiene un servidor de correo y los privilegios necesarios para llevarlas a cabo (resolución de nombres, información para syslog, etc...). Además de sus vulnerabilidades, sendmail permite obtener información de un usuario específico de un servidor determinado. Por ejemplo, el comando sendmail EXPN y VRFY permiten saber a una persona si existe una cuenta de usuario concreta.

Como hemos dicho, no es necesario ejecutar sendmail como demonio para enviar y recibir correo. Para un uso individual sendmail no sirve verdaderamente para nada ya que es suficiente con utilizar un cliente de correo cualquiera (netscape, rmail, pine, mutt, etc...) para enviar correo. Para recibirlo, bastará con activar sendmail a intervalos regulares para poder verificar el contenido de nuestra casilla de correos.
 

 

RemoteAcces - Acceso remoto

A menudo resulta útil poder conectarse a una máquina sin estar físicamente próxima a ella. Hemos visto que los comandos r permiten hacer esto de una manera insegura. Bastille-Linux sugiere descargar ssh. Se trata de un programa que cifra los datos (y por lo tanto las contraseñas) que circulan a través de una conexión.

Se puede usar un programa donde el tamaño de la clave de sesión no supere los 128 bits (N.T: este límite varía de acuerdo a las leyes propias de cada país). Expliquemos qué es una clave de sesión. Se trata de la clave que servirá para cifrar los datos. Esta clave se construye paso a paso por el cliente y el servidor y resulta de un protocolo de intercambio de claves (Diffie-Hellman en la mayoría de los casos).  El principio consiste en construir una clave con una parte de la clave de cada uno de los participantes. Esta clave de sesión se usa para cifrar los datos en base a un algoritmo simétrico (es decir, se usa la misma clave tanto para cifrar como para descifrar datos). Así DES, que sirve para cifrar las contraseñas en Unix, es un algoritmo simétrico que posee una clave de 56 bits.

Ahora bien, una clave de 128 bits ¿es suficiente para garantizar la confidencialidad y seguridad de una transacción?: ¡SÍ!. Aún cuando actualmente DES no se considere "muy segura", los mejores ataques no están al alcance de todo el mundo. Por otra parte, es un error común creer que una clave de tamaño 2k es dos veces más difícil de romper que otra de tamaño k. De hecho, la dificultad se incrementa mucho más rápido que el tamaño de la clave. Para una clave de tamaño k, existen 2^k claves posibles (y por lo tanto 2^2k para una clave de tamaño 2k). Por lo tanto, al duplicar el tamaño de una clave estamos agregando¡  claves posibles! Cuando uno comprueba la verdadera dificultad que implica romper a DES (56 bits) uno espera que las claves de sesión de 128 bits ofrezcan una seguridad inviolable (suponiendo que el algoritmo de cifrado/descifrado no contenga agujeros de seguridad).  Desde el punto de vista de un atacante, el aumentar este límite hace que la dificultad pase de un nivel imposible a otro "aún más imposible".

Cuatro programas diferentes que proporcionan servicios parecidos:

Los restantes módulos están relacionados con servicios. La política que se toma para ellos puede parecer sorprendente: se empieza por restringir los privilegios y se termina por detenerlos. Contrariamente a lo que podría pensarse, estas dos medidas no son contradictorias. En efecto, estos servicios se pueden reactivar en cualquier momento, ya sea accidentalmente o por algún intruso...con lo cual resulta conveniente restringir sus privilegios.  

DNS

Un DNS (Domain Name Server) pemite vincular una dirección IP con el nombre de una máquina y viceversa. Por ejemplo, la dirección 198.186.203.36 corresponde a www.bastille-linux.org. La función principal de este servidor se denomina BIND (to bind significa, entre otras cosas, vincular). Últimamente, se ha descubierto un ataque de tipo DoS contra BIND. Se lo puede evitar, dando acceso DNS a un grupo reducido de directorios (antes de ejecutar un comando o guión , se puede cambiar el directorio raíz - por defecto / - mediante el comando chroot).

Agreguemos algunas observaciones técnicas antes de detallar el comportamiento de Bastille-Linux. El demonio asociado a este servicio se denomina named. Su configuración proviene del archivo   /etc/named.conf.
 

 

Apache

Apache es el servidor web más utilizado de Internet. Un servidor de este tipo es útil en dos casos:
  1. para albergar un sitio web: en este caso es necesaria una dirección IP fija. Los ISP (Proveedores de Servicios de Internet) tienen esta clase de direcciones lo cual no es el caso de sus clientes.
  2. para probar nuestras propias páginas web: en este caso bastará con activar el servidor (/etc/rc.d/init.d/httpd start) en el momento apropiado.
El archivo para configurar este demonio se encuentra en /etc/httpd/conf. Un servidor, como cualquier otro servidor, puede ser una invitación a visitar nuestra máquina y, quizás, a dañarla si encuentra incorrectamente configurada. Esto puede resultar bastante molesto en algunos casos. Supongamos por ejemplo, el caso de un banco, si se pueden leer los nombres de sus clientes (y quizás sus contraseñas)...visiten la página www.kitetoa.com, que no se van a arrepentir ;-) (N.T: desgraciadamente está solamente en francés)  

Printing - Imprimir

Una única pregunta: ¿imprimirá con su máquina?. Si la respuesta es negativa Bastille-Linux desactiva el demonio lpd y elimina el bit SUID de lpr y lprm. =============  

FTP

Desde el punto de vista de la seguridad, FTP puede ser el origen de diversos problemas . Por ejemplo, al iniciar una conexión las contraseñas circulan en texto plano. Lo mismo sucede con los datos, lo cual es peligroso si los datos son confidenciales (datos médicos, financieros...)

Por otra parte, últimamente se han encontrado algunos agujeros de seguridad en wu-ftpd. Recordemos, que no es en absoluto necesario tener el servidor ejecutándose para hacer transferencias via FTP.

El archivo que controla el acceso al servidor FTP es /etc/ftpacces.

 

Últimos trucos y consejos

Como lo he subrayado anteriormente, Bastille-Linux constituye una formidable herramienta pedagógica. Tanto las propias preguntas como los comentarios son bien precisos. Cuando las cosas no son lo suficientemente claras, se dispone de una gran diversidad de recursos para encontrar la respuesta correcta. La mejor manera de aprender sobre un determinado tema, consiste en usar únicamente el módulo deseado.

Para ello bastará con hacer una copia de respaldo del archivo que contiene las preguntas y editar el archivo Questions.txt. Cada módulo empieza con la palabra clave FILE... sólo resta conservar lo que deseamos realmente nos interesa.

/root/Bastille >> cp Questions.txt Questions.txt-orig
/root/Bastille >> emacs Questions.txt BackEnd.pl &
/root/Bastille >> ./InteractiveBastille

Obviamente las medidas tomadas por astille-Linux no son suficientes para garantizar la seguridad de nuestro sistema:

  1. ningún sistema es 100% seguro;
  2. son indispensables otras medidas para completar las sugeridas por la Bastille-Linux.
Entre las medidas indispensables que se pueden agregar podemos pensar inmediatamente en un analizador de archivos log (portsentry, snort, snplog, etc ...), en un parche de www.openwall.com para el kernel (pila no ejecutable, restriciones sobre los directorios /tmp y /proc, etc...).

El camino para proteger un sistema es arduo e interminable. Se debe estar continuamente al tanto sobre los agujeros de seguridad (a través de listas de correos como la bugtraq del sitio securityfocus, por ejemplo).

 

Conclusión

Bastille-Linux ayuda a proteger una distribución Linux con mala reputación en el ámbito de la seguridad. Puede que digas: ¿por qué entonces no elegir otra?. Es verdad, pero Red Hat (o Mandrake ya que las diferencias son mínimas) posee ciertas características agradables. El objetivo del presente artículo no es el promover (o denigrar) a una determinada distribución. Después de todo, la libertad de elección es una de las fortalezas del software libre. De hecho, este artículo posee diversos cometidos. Ante todo, mostrar la preocupación permanente de un administrador de sistemas que vive con el temor de ver su red destruida por algunos hackers inescrupulosos. Por otra parte, esta herramienta les permitirá hacer una profunda visita a la configuración del sistema. Bajo esta óptica, resulta ser un medio excelente, tanto para los neófitos como para los usuarios avanzados, para explorar y descubrir los rincones ocultos de la configuración de un sistema Linux.

Las dos premisas fundamentales son el minimalismo y la profundidad. Cuanto menos servicios existan en nuestra máquina menor serán los agujeros de seguridad. Para cada uno de estos servicios, muchas protecciones valen más que una sola...pero esto es un arma de doble filo pues una protección mal configurada (or la conjunción de muchas de ellas) se pueden volver en nuestra contra.

Por último, señalemos que la próxima versión de este programa se llamará BUS (Bastille Unix Security). Se tratará de una juiciosa combinación entre Bastille-Linux y Msec (Mandrake Security Proyect) el cual se denominará pronto Usec (Unix Security Project).


 

Referencias



Last modified: Mon Jun 12 16:40:50 CEST 2000  

Formulario de "talkback" para este artículo

Cada artículo tiene su propia página de "talkback". A través de esa página puedes enviar un comentario o consultar los comentarios de otros lectores
 Ir a la página de "talkback" 

Contactar con el equipo de LinuFocus
© Frédéric Raynal, FDL
LinuxFocus.org

Pinchar aquí para informar de algún problema o enviar comentarios a LinuxFocus
Información sobre la traducción:
fr -> --
fr -> en
en -> es

2001-06-15, generated by lfparser version 2.9