Por Barry O'Donovan
Traducción al español por Raúl González Duque
el día 20 de Noviembre de 2004
Los pasos a seguir se indican en la siguiente lista, y cada uno de ellos se comenta en detalle en las secciones siguientes.
El cortafuegos debería iniciarse antes de que
te conectes a internet por primera vez.
Configuralo para denegar todos los paquetes entrantes a excepción de aquellos
en estado establecido (ESTABLISHED
) o relacionado (RELATED
). Esto te proporcionará
máxima protección mientras llevas a cabo el resto de los
pasos para asegurar tu distribución. Una vez que hayas completado todos los
pasos requeridos puedes configurar el cortafuegos según tus necesidades.
Ya comenté los conceptos básicos de iptables
, el
cortafuegos integrado en el kernel de Linux, con una serie de configuraciones
de ejemplo para varios escenarios en "Usando netfilter/iptables como cortafuegos" en el número #103 de la Gaceta. Te recomiendo
encarecidamente que leas este artículo y lo utilices para completar
la información necesaria para llevar a cabo este paso.
Algunas distribuciones tienen sus propias utilidades para este propósito y en ese caso
puede que te sea más sencillo utilizar las herramientas por defecto de tu distribución.
Por ejemplo las distribuciones RedHat y Fedora vienen con
up2date
y la distribución Debian utiliza APT.
Si quieres o tienes que instalar la herramienta por ti mismo te recomendaría APT que puede ser utilizada con cualquier distribución Linux basada en RPM. También tendrás que localizar algún repositorio que contenga los paquetes nuevos/actualizados para tu distribución desde los que APT los pueda descargar e instalar. Una búsqueda rápida en internet con el nombre de tu distribución y 'apt' o 'apt-get' debería ser suficiente para localizar el binario de APT en formato RPM y un repositorio. Echa un vistazo a los enlaces al final del artículo para ver algunos sitios web útiles y direcciones de repositorios.
Una vez que tengas APT instalado y los repositorios añadidos (normalmente en
/etc/apt/sources.list
o similar), su uso es trivial
y requiere de solo dos comandos (a ejecutar como root):
$ apt-get update $ apt-get upgradeEl primer comando descarga la información mas actual de los paquetes del repositorio y el segundo utiliza esta información para descargar e instalar nuevas versiones de paquetes ya instalados si estas están disponibles. Estos comandos deberían ejecutarse cada cierto tiempo para asegurarnos de que nuestro sistema esté siempre actualizado.
Si quieres máxima protección deberías intentar utilizar siempre
repositorios oficiales que contenga paquetes firmados; esto es más sencillo
de hacer si usas alguna de las aplicaciones para actualizaciones automáticas que vienen con
las distribuciones mas populares. Cuando descargues paquetes individuales y archivos
de internet, intenta utilizar siempre md5sum
(c.f. man md5sum
). Un MD5SUM o suma de control MD5 es un resumen de un
archivo y la mayoría de los sitios de los que descargar archivos publican las sumas de control de los
archivos que tienen disponibles para descargar; comparalos con los que
generes de los archivos descargados para asegurarte de que no hayas descargado una
versión del archivo/paquete que incluya algún troyano.
Por último, deberías considerar seriamente el suscribirte a la lista de correo de tu distribución. Estas suelen ser listas con poco tráfico que te informarán por correo siempre que se libere algún paquete que corrija alguna vulnerabilidad.
Las distribuciones mas comunes y populares probablemente contarán con una aplicación gráfica para configurar estos servicios; prueba a buscar en los menús Configuración o Sistema de tu aplicación de escritorio.
En los sistemas RedHat, la utilidad de línea de comandos para configurar los servicios
se llama chkconfig
. Para obtener una lista del estado actual de todos los
servicios instalados, ejecuta (como root):
$ chkconfig --listlo cual hará que aparezca algo parecido a esto:
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... smb 0:off 1:off 2:off 3:off 4:off 5:off 6:off squid 0:off 1:off 2:off 3:off 4:off 5:off 6:off xinetd based services: chargen-udp: off rsync: off chargen: off ... ... ... ... sgi_fam: on
Los números (0 a 6) que preceden a los dos puntos representan el "nivel de ejecución" del sistema donde los dos de verdadero interés serán 3 y 5; si tu sistema arranca en consola (sin interfaz gráfica) entonces se ejecuta en nivel 3 y viceversa si arranca una interfaz gráfica corre en nivel 5.
Para activar un servicio (por ejemplo squid
) en los niveles de ejecución 2,3,4
y 5 ejecutaríamos (como root):
$ chkconfig --level 2345 squid ony para deshabilitar un servicio (por ejemplo
sshd
) en los niveles 3 y 5
ejecutaríamos (como root);
$ chkconfig --level 35 sshd off
Si no sabes qué hace alguno de los servicios que tengas activados
intenta buscar información en internet o usar el comando
man
con el nombre del servicio como palabra clave
(man -k
). Algunas de las versiones gráficas puede que te ofrezcan una explicación
sobre qué es cada servicio.
El comando chkconfig
activará/desactivará los servicios
la próxima vez que arranques tu pc pero no tendrá ningun efecto
sobre si un servicio sigue ejecutándose o no hasta que reinicies.
Bajo RedHat, se utiliza el comando service
para eso de la siguiente forma:
$ service nombre_servicio start $ service nombre_servicio stop $ service nombre_servicio restart $ service nombre_servicio statusdonde
nombre_servicio
será el que nos indique
chkconfig --list
.
Puedes ejecutar netstat -l
después de deshabilitar todos
los servicios innecesarios para asegurarte de que has acabado con todos (este comando comprueba
qué sockets están escuchando esperando conexiones). Para cada uno de los servicios
que aún estén ejecutándose, asegurate de que están configurados correctamente (y de la forma más restrictiva posible)
y que el cortafuegos los proteja.
passwd
el cual,
entre otras cosas, permite a un usuario normal cambiar su
contraseña. Estas contraseñas están almacenadas en un archivo
que solo puede ser alterado (y algunas veces leído) por el usuario root y,
por lo tanto, los usuarios que no sean root no deberían ser capaces de cambiar sus contraseñas.
Los permisos de acceso para este ejecutable son:
-r-s--x--x 1 root root 18992 Jun 6 2003 /usr/bin/passwdComo puedes ver, el bit de dueño está establecido a '
s
'
en lugar del 'x
' normal, haciendo que el binario sea SUID; es decir,
cuando un usuario ordinario ejecuta passwd
, se ejecutará
con los privilegios del dueño del archivo - en este caso el usuario root.
Muchos de los ejecutables SUID/SGID son necesarios, como el ejecutable
passwd
ya comentado. Sin embargo muchos otros no lo son. Los programas SUID/SGID
pueden ser aprovechados por usuarios locales maliciosos para ganar privilegios
en tu sistema. Ejecuta los siguientes comandos como root para encontrar todos
estos ejecutables:
find / \( -perm -4000 -o -perm -2000 \)o si quieres una lista mas detallada:
find / \( -perm -4000 -o -perm -2000 \) -exec ls -ldb {} \;
Ahora deberíamos recorrer cada uno de los elementos de la lista intentado reducir el número de los archivos cuyo dueño sea el usuario root o que estén en el grupo root a lo mínimo imprescindible bien borrando los binarios SUID/SGID innecesarios y/o borrando el bit SUID/SGID.
Los paquetes que contengan ejecutables SUID/SGID y que no vayas a usar
pueden eliminarse buscando primero el paquete con, por ejemplo,
rpm -q --whatprovides /usr/sbin/kppp
y después desinstalándolo
con rpm -e package-name
.
El bit SUID/SGID puede eliminarse con, por ejemplo, chmod
-s /usr/sbin/kppp
. El ejecutable podrá iniciarse entonces por el usuario
root cuando lo necesitemos.
Un programa de detección de intrusos que muchas veces se subestima es Tripwire (http://www.tripwire.org/). Este programa comprueba los archivos de tu sistema de manera periódica para ver si alguno de ellos ha sido modificado. Si alguno se ha modificado y no debería haberlo sido, Tripwire generará un informe para que puedas tomar decisiones según esta información. Tripwire requiere de un poco de tiempo para ser configurado de manera apropiada pero el esfuerzo merece la pena; Tripwire me ayudó a identificar una intrusión en un servidor que administraba hace un par de años. En el artículo del próximo mes hablaré sobre la instalación y configuración de Tripwire.
Una fuente de información inestimable sobre lo que está ocurriendo
en tu pc son los archivos de registro (que normalmente se encuentran en
/var/log
). Todos los registros que se llevan a cabo en un sistema Linux se manejan por
el demonio syslogd
y su archivo de configuración
/etc/syslog.conf
. El archivo de configuración especifica
sobre qué subsistemas se deben grabar los mensajes (por ejemplo cron,
daemon, mail, etc), qué niveles de mensajes registrar (por ejemplo debug,
info, warn, etc) y qué hacer con esos mensajes (añadirlo a un archivo de registro,
enviarlo a la impresora, etc). Si quieres cambiar la configuración por defecto
encontrarás bastante información en las páginas de manual
(syslogd
(8), syslog.conf
(5),
syslog
(2), syslog
(3) y mas).
Syslog permite también el registro remoto; guardando tus archivos de registro en otros pcs de la red. La ventaja de esto es que si tu sistema queda comprometido por alguien serán incapaces de borrar sus pasos de tus archivos de registro haciendo mas sencillo el buscar su origen y las acciones que llevaron a cabo.
Desafortunadamente hay demasiada información en los diferentes archivos de registro para que el usuario medio lo pueda asimilar por lo que recurrimos a Logwatch. Logwatch (http://www.logwatch.org/), según lo describen sus autores, "procesa tus archivos de registro para un determinado periodo de tiempo y crea un informe analizando las áreas que especifiques, con tanto detalle como requieras."
Logwatch está instalado por defecto en las distribuciones más comunes
y normalmente generará por defecto informes diarios enviándolos al correo
electrónico del usuario root. Dado que estos informes son normalmente muy cortos
deberían ser leídos cada día. Resaltarán, dependiendo de la configuración,
informacion del tipo intentos de login inválidos, conexiones de red
a varios demonios como SSHD, posibles escaneos de puertos,
etc. Su archivo de configuración suele estar situado en
/etc/log.d/conf/logwatch.conf
y está bien
documentado con comentarios que te ayudarán en la configuración.
Hay otros sistemas de detección de intrusos que podrías querer considerar, como Snort - http://www.snort.org/, puedes encontrarlos facilmente con una búsqueda rápida en internet.
Este artículo cubre los procedimientos más basicos e importantes que todo usuario debería aplicar. Siempre hay mas cosas que se pueden hacer pero cada persona tendrá que valorar la ventaja potencial contra el tiempo y esfuerzo que le suponga.
Algunos pequeños consejos para finalizar:
DROP
) todas las conexiones por defecto y abre solo aquellas
que necesites de una forma tan restrictiva como sea posible. Por ejemplo si
tienes que establecer una conexión ssh a tu pc desde el trabajo y desde ningún otro sitio
solo deberías permitir las IPs de la red de tu trabajo.chkrootkit
es una herramienta para buscar signos de de un
rootkit en local (un conjunto de utilidades que los atacantes pueden utilizar para ocultar sus
acciones en el sistema)
Barry O'Donovan se graduó en la Universidad Nacional de Irlanda, Galway
con un Bachelor con honores en ciencias de la computación y matemáticas. Actualmente está
terminando un doctorado en ciencias de la computación con el Laboratorio de Ocultación de Información, en la University
College de Dublin, Irlanda en el área de las marcas de agua de audio.
Barry lleva usando Linux desde 1997 y su distribución actual es
Fedora Core. Es miembro del Grupo de Usuarios de Linux Irlandés.
Cuando no está haciendo su doctorado normalmente se le puede encontrar en
el pub local o corriendo en el parque.
Copyright © 2004, Barry O'Donovan. Publicado bajo la Open Publication license
Publicado en el Número 105 de la Gaceta de Linux, Agosto 2004