por Frédéric Raynal
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
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 :
-
Los guiones ahora funcionan en sistemas usados.
-
Existe una función undo:
se hace una copia de respaldo de cada archivo modificado por Bastille-Linux
de manera de poder restaurar las configuraciones inciales si fuese necesario
-
Al principio, Bastille-Linux estaba reservado para RedHat y Mandrake. Esto ya no
continua siendo así. Actualmente, un módulo contiene las rutas de los archivos necesarios
en función de la distribución sobre la que se ejecutan los guiones.
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:
-
Instalación de un cortafuegos (firewall)
-
Actualización de los programas del sistema
-
Auditoría de los programas SUID-root
-
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:
-
InteractiveBastille.pl: este guión
formula al usuario diversas preguntas para definir las operaciones que se van a efectuar
en el sistema. Al finalizar, crea un archivo config
teniendo en cuenta las respuestas dadas.
-
AutomatedBastille.pl: instala la configuración
por defecto dando la posibilidad de usar un cortafuegos a partir de un archivo de
configuración suministrado. Cabe destacar que este guión ya no se sigue manteniendo.
-
BackEnd.pl: es el responsable de los cambios
introducidos al sistema. Toma como parámetros las respuestas incialmente dadas
-
Undo.pl : cuando se ejecuta
BackEnd.pl algunos archivos del sistema
(/etc/syslog.conf,/etc/inetd.conf,
/etc/hosts.*,
...) sufren modificaciones. Para permitir la recuperación del sistema inicial,
las copias de respaldo se ubican en el directorio
/root/Bastille/undo.
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.
-
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)
-
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.
-
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 ...
-
Would you like to set more restrictive permissions on the administration
utilities? - ¿Desea imponer permisos más restringidos sobre las utilidades de
administración? [N]
Ciertos programas no deben ser accesibles a todo el mundo.
Bastille-Linux proporciona una inmensa lista de programas que se encuentran
con los permisos 0750.
-
Está a continuación el tema del bit SUID. Este bit permite a un programa
ser ejecutado por un usuario con los permisos de superusuario
(la 's' en la posción 4, 7 y 10)
>>ls -l /bin/ping
-rwsr-xr-x 1 root root 17968 Mar 6
15:57 /bin/ping
Este bit si bien mejora la facilidad de uso, reduce la seguridad.
En efecto, si alguien descubre una vulnerabilidad (por ejemplo, el desbordamiento
de un búfer), podrá adquirir los derechos de superusuario sin estar autorizado.
Bastille-Linux sugiere eliminar este bit de algunos programas entre los
que se encuentran
mount/umount,
ping,
dump/restore,
cardctl,
... Esta lista comprende entre otros a las utilidades de red ping
y traceroute que permiten verificar el
estado de un servidor.
El quitar el bit SUID es actuar en forma paranoica pero no impide el uso estándar de la máquina.
Asimismo, es posible encontrar en esta lista de programas SUID-root los
(comandos r). Tales como los programas
rcp, rlogin
o rsh. Estas utilidades no encriptan los datos
que envían a través de la red. Además, usan únicamente la dirección IP como medio de
autenticación lo cual es inadecuado (posibilidad de engaños o 'spoofing').
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.
-
Would you like to set up a second UID 0 account - ¿Desea configurar una segunda cuenta con
UID 0? [N]
Al responder afirmativamente a esta pregunta se crea otra cuenta root en el
sistema. En este caso, no se debería seguir usando la cuenta original de root
sino la recién creada. Esto incrementa en un factor de dos la posibilidad de que un hacker
pueda romper la clave de superusuario pero permite conocer quién utiliza la identidad
de superusuario analizando los archivos situados en
/var/log.
-
May we take strong steps to disallow the dangerous r-protocols? - ¿Se pueden tomar
medidas drásticas para los comandos r? [Y]
Como hemos mencionado anteriormente los comandos r
son fuentes potenciales para obtener una nueva cuenta en una máquina: ¡las contraseñas se
transfieren sin cifrar! En una red de este tipo un 'sniffer' (rastreador) ofrece interesantes posibilidades...
Bastille-Linux prohibe el uso de los
comandos r
via PAM (Pluggable Authentication
Modules), elimina los permisos de ejecución y bloquea los servidores que están en
tcp_wrapper
(rlogind, rexecd y rshd). Están configurados en
/etc/inetd.conf
donde es suficiente colocarlos como comentarios.
-
Would you like to enforce password aging? - ¿Desea imponer un límite de caducidad
a las contraseñas? [Y]
Las contraseñas se deberán cambiar cada 180 días. Se desactivan las cuentas cuyas contraseñas
no se cambian.
-
Would you like to create a non-root user account? - ¿Desea crear una cuenta para
un usuario estándar? [N]
Hay que usar lo mínimo posible la cuenta de superusuario. De hecho, un simple
comando como rm -rf ejecutado por el superusuario
puede provocar un desastre cosa que no sucede en el caso de un usuario sin
dichos privilegios. Únicamente las tareas de administración se deben hacer
usando la cuenta de superusuario.
-
Would you like to restrict the use of cron to administrative accounts? -
¿Desea restringir el uso de cron para tareas administrativas? [Y]
cron permite ejecutar tareas en forma
automática. Por ejemplo, un administrador puede usarlo para verificar regularmente la
integridad de archivos o para hacer búsquedas en
/var/log.
Por otra parte, permitir su uso a todos los usuarios es brindar demasiados priviliegios.
Para evitar esta situación, Bastille-Linux crea un archivo
/etc/cron.allow
que contiene los usuarios autorizados a usar este servicio.
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:
-
Would you like to password-protect the LILO prompt? - ¿Desea proteger a LILO
mediante una contraseña? [N]
Al contestar "Yes" (SÍ) evita que gente desautorizada acceda al sistema tras el
arranque.
-
Would you like to reduce the LILO delay time to zero? - ¿Desea reducir a
cero el tiempo de espera de LILO? [N]
De esta manera nadie puede ingresar parámetros en tiempo de arranque.
Si nuestra computadora posee diversos sistemas operativos no debe responderse
en forma afirmativa pues el único SO que arrancará será el elegido por defecto.
-
Do you ever boot Linux from the hard drive? - ¿Siempre arranca Linux desde
el disco duro? [Y]
Si respondió YES (SÍ) a algunas de las preguntas previas y tiene instalado
LILO en su sistema, debe responder también aquí YES (SÍ) para que se graben
las modificaciones al disco.
-
Would you like to write the LILO changes to a boot floppy? - ¿Desea guardar
los cambios hechos a LILO en un disquete de arranque? [N]
Debe responder afirmativamente si dispone de un disquete de arranque para
emergencias o bien si es el modo elegido para arrancar Linux.
-
Would you like to disable CTRL-ALT-DELETE rebooting? - ¿Desea desactivar
la secuencia CTRL-ALT-DELETE para reiniciar el sistema? [N]
El objetivo es evitar que alguien reinicie la máquina.
Sin embargo, esto es inútil a menos que también se encuentre protegido el
suministro de energía eléctrica ;-)
-
Would you like to password protect single-user mode? - ¿Desea proteger el
modo monousuario mediante una contraseña? [Y]
Como hemos visto al principio de este módulo, resulta ser una muy buena idea
evitar que cualquier persona adquiera privilegios de superusuario.
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.
-
Would you like to modify inetd.conf and /etc/hosts.allow to optimize
use of Wrappers? - ¿Desea modificar inetd.conf y /etc/hosts.allow para
optimizar el uso de Wrappers? [Y]
Bastille-Linux instala estos dos archivos.
Puede resultar interesante hecharles un vistazo para pasarles parámetros más precisos
en función a nuestras necesidades.
-
Would you like to set sshd to accept connections only from a small list
of IP addresses? - ¿Desea autorizar el acceso a sshd solamente a un número limitado
de direcciones IP? [N]
sshd es un demonio que permite
conectarse de modo seguro (intercambio de claves, cifrado de contraseñas y datos,...)
Permite reemplazar totalmente a
telnet,
rlogin,
rsh,
rcp
y ftp. Cabe destacar un versión equivalente
de ssh
bajo la licencia BSD: OpenSSH.
Volveremos sobre este asunto posteriormente.
-
Would you like to make "Authorized Use" banners? - ¿Desea instalar mensajes con
la leyenda "Uso autorizado"? [Y]
Toda persona que intente conectarse a nuestra máquina verá un mensaje de advertencia
que le preguntará si está autorizado para conectarse a través de este servicio.
Este mensaje se encuentra en el archivo /etc/motd.
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.
-
Would you like to put limits on system resource usage? - ¿Desea imponer limitaciones al
uso de recursos del sistema? [Y]
El archivo /etc/security/limits.conf
contiene los límites impuestos al sistema. Bastille-Linux los modifica de la siguiente
manera:
-
a la cantidad de archivos core la acota a 0 ;
-
cada usuario puede ejecutar a los sumo 150 procesos ;
-
el máximo tamaño de un archivo se limita a 40 Mb.
Se pueden modificar cada uno de estos valores directamente desde el archivo de configuración.
-
Should we restrict console access to a small group of user accounts? - ¿Se debe
restringir el acceso a la consola a un pequeño grupo de cuentas de usuario? [N]
En RedHat 6.0/6.1, los usuarios que se conectan inicialmente desde la consola se benefician
con ciertos privilegios como el poder montar el CD-ROM. Es posible restringir el acceso a la
consola a un grupo de usuario de confianza. Esta pregunta permite precisar dichos
usuarios si se opta por este tipo de política.
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.
-
Would you like to add additional logging? - ¿Desea añadir un acceso adicional
al sistema? [Y]
Bastille-Linux crea un archivo /var/log/kernel para almacenar los mensajes del kernel
y los errores graves (los mensajes provenientes del cortafuegos pertenecen a la
primera categoría). Determinadas informaciones se envían a 2 terminales
(TTY 7 y TTY8). Un nuevo archivo
/var/log/loginlog
registra los usuarios que se conectan al sistema.
-
Do you have a remote logging host? - ¿Dispone de acceso a un host remoto? [N]
Salvo que posea otra máquina hacia la que envía sus mensajes, la respuesta
debe ser negativa.
-
Would you like to set up process accounting? - ¿Desea activar la contabilidad
de procesos? [N]
En Linux, es posible registrar los comandos que han sido ejecutados, cuándo y por
quién. Si bien es útil para seguir de cerca las actividades de un hacker hace que
el archivo log rápidamente se vuelva enorme. En pocas palabras, su uso consume espacio de
disco y tiempo de CPU. Conviene desactivar esta opción a menos que realmente
resulte necesario.
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.
-
Do you want to leave sendmail running in daemon mode? - ¿Desea que sendmail
permanezca ejectuándose como demonio? [Y]
Como hemos visto en la mayoría de los casos carece de utilidad y es sumamente peligroso
por lo tanto es conveniente desactivarlo.
-
Would you like to run sendmail via cron to process the queue? - ¿Desea que sendmail
gestione a través de cron la cola de espera de los mensajes? [N]
Si se contesta afirmativamente, sendmail
verificará la cola de mensajes cada 15 minutos.
Es posible modificar este parámetro desde el archivo
/etc/sysconfig/sendmail.
-
Would you like to disable the VRFY and EXPN sendmail commands? - ¿Desea
desactivar los comandos VRFY y EXPN de sendmail? [Y]
Estos comandos proporcionan información útiles tanto a hackers como spammers.
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:
ssh 1.2.x : un sistema cliente-servidor
para establecer conexiones cifradas;
ssh 2.x : idéntico al anterior pero con
menos fallos y más posibilidades;
OpenSSH : una versión similar a la anterior
pero bajo licencia BSD;
ssf : como ssh,
pero adaptado a la legislación francesa
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.
-
Would you like to chroot named and
set it to run as a non-root user? - ¿Desea cambiar el directorio raíz de
named y ejecutarlo como un usuario normal? [N]
Para hacer todo esto, Bastille-Linux crea un nuevo usuario denominado
dns que no posee intérprete de comandos sino únicamente
su propio directorio /home/dns.
En el interior se reconstruye la arquitectura de un sistema clásico agregando los
directorios usuales (/usr,
/etc,
/var,
etc ...). A continuación, se copian los archivos de configuración y bibliotecas
que necesita el demonio. Son necesarias otras pequeñas modificaciones
(para syslog
por ejemplo ver el guión DNS.pm).
Ahora el DNS tiene su propio entorno :)
-
Would you like to deactivate named, at least for now? - ¿Desea desactivar
momentáneamente a named? [Y]
La mayoría de las personas no necesitan poseer un servidor de nombre
en sus máquinas ya que el ISP les brinda dicho servicio. El COMO-DNS
describe la instalación de un caché para la resolución de nombres pero
aún así puede ser origen de problemas.
Apache
Apache es el servidor web más utilizado
de Internet. Un servidor de este tipo es útil en dos casos:
-
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.
-
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.
-
Would you like to deactivate the Apache web server? - ¿Desea desactivar el
servidor web Apache? [Y]
Puesto que no siempre se lo necesita y en aras de la minimización lo desactivamos.
-
Would you like to bind the web server to listen only to the localhost? - ¿Desea
vincular al servidor web para que "escuche" solamente al localhost? [N]
Es posible vincular al demonio httpd
a una dirección específica. Aquí, Bastille-Linux propone conectarlo a la dirección
del localhost
127.0.0.1. Esto permite tener en ejecución un servidor en una máquina para probar
nuestras propias páginas web.
Se podrán acceder a ellas desde la dirección:
http://localhost/
(o http://localhost/raynal
para acceder a nuestras páginas web personales)
Es decir Apache usa la interfaz
loopback
(lo) para funcionar.
-
Would you like to bind the web server to a particular interface? - ¿Desea
vincular al servidor web con una interfaz particular? [N]
Al responder aquí afirmativamente anula la respuesta precedente.
Hemos dicho que queríamos usar el servidor web con el
loopback
... y esta pregunta permite precisar otra interfaz (Ethernet, por ejemplo)
mediante una dirección IP que le es asociada.
-
Would you like to deactivate the following of symbolic links? - ¿Desea
desactivar el seguimiento de enlaces simbólicos? [Y]
Es imperativo responder afirmativamente. De la misma manera que el DNS
funciona en un espacio restringido, no se debe permitir a
Apache salir de su universo
(es decir, /home/httpd). Por ejemplo,
si uno de los usuarios posee, en su directorio para el servidor web, un enlace
al directorio raíz /, todo el mundo
puede acceder a todos los archivos...en particular a los archivos de configuración
del tipo passwd entre otros.
-
Would you like to deactivate server-side includes? - ¿Desea desactivar
los "server-side includes"? [Y]
Como dice Jay Beale: si no sabe de qué se trata es porque no lo necesita.
Baste con saber que se puede configurar para que los usuarios puedan ejecutar
cualquier programa en el servidor (y sí...tiemblen amigos administradores
...sería un pesadilla para ustedes ;-)
-
Would you like to disable CGI scripts, at least for now? - ¿Desea
momentáneamente desactivar los guiones CGI? [Y]
Escribir un guión CGI (Common Gateway Interface) no es extremadamente
difícil pero se necesitan tomar ciertas precauciones (sobrecargar la pila,
por ejemplo, genera archivos core en el servidor). Gran cantidad de métodos
actuales para atacar a un sistema explotan los errores cometidos en estos
guiones.
-
Would you like to disable indexes? - ¿Desea deshabilitar los archivos
índex¿ [N]
Ante la ausencia de un archivo index.html en un directorio, Apache lista todos
los archivos que contiene. Esto es menos grave que permitir la lectura de
los enlaces simbólicos. No obstante imaginen que un determinado
directorio contenga datos importantes.
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.
-
Would you like to disable user privileges on the FTP daemon? - ¿Desea
eliminar los privilegios de los usuarios para el demonio FTP? [N]
Uno de los inconvenientes del FTP es que permite conexiones anónimas.
Otro, es que permite "subir" archivos (es decir, enviar archivos al servidor). Numerosos ataques
se aprovechan de estas vulnerabilidades.
Por otra parte algunos problemas provienen del hecho de que las transacciones no
son seguras (es decir, los datos no son cifrados).
-
Would you like to disable anonymous download? - ¿Desea anular las descargas
anónimas? [N]
Esto impide las conexiones al servidor del tipo
anonymous.
Ú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:
- ningún sistema es 100% seguro;
- 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
-
http://bastille-linux.sourceforge.net
: Sitio oficial de Bastille-Linux
-
Bastille-Linux: A Walkthrough : en el sitio www.SecurityFocus.com.
Este artículo está en inglés y fue escrito por Jay Beale, autor principal de la Bastille-Linux.
Presenta al programa y su instalación. Me resultó de suma ayuda al escribir el presente artículo
;-)
-
http://www.sans.org : el sitio del grupo
SANS (Jay Beale colabora con ellos). Fuente inagotable de información sobre seguridad
computacional.
-
http://www.securityfocus.com/frames/?content=/vdb/stats.html:
siempre en SecurityFocus, muestra un interesante estudio sobre los sistemas operativos y sus fallos.
El primer lugar lo ocupa una familia de sistemas operativos muy conocidos y a continuación
Linux (sin hacer hincapié en alguna distribución en particular)
-
www.kitetoa.com : un sitio que se dedica a probar servidores web
y a encontrar cosas interesantes. Patético y divertido a la vez. -Solamente en Francés-
-
http://www.ssh.com : sitio oficial del secured
shell. ssh es de uso gratuito para evaluación, uso no comercial o para
ámbitos universitarios (...no en Francia)
-
http://www.openssh.org : lo mismo que ssh ...
pero bajo licencia BSD :)
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
2001-06-15, generated by lfparser version 2.9