Sei sulla pagina 1di 6

Asegurando un Linux recién instalado

Por Barry O'Donovan

Traducción al español por Raúl González Duque


el día 20 de Noviembre de 2004

Introducción

Desde la perspectiva de un profesional en la seguridad informática, hay bastantes


distribuciones populares de Linux que son inseguras "recién instaladas", y muchos de los
paquetes que se ponen a disposición del usuario ya están desfasados cuando estos los
quieren utilizar. Dado que la seguridad de nuestro pc y mas concretamente la de la
información que se almacena en este son de importancia prioritaria, hay una lista de
pasos que se deberían seguir a la hora de instalar Linux para asegurar nuestro sistema
operativo así como para ayudarnos a identificar intentos de comprometer esta seguridad o
ataques que hayan tenido éxito.

Los pasos a seguir se indican en la siguiente lista, y cada uno de ellos se comenta en
detalle en las secciones siguientes.

Instalación y configuración de un cortafuegos efectivo


La actualización (automática) de todos los paquetes instalados
Parar y deshabilitar todos los servicios innecesarios
Localizar y borrar/modificar los ejecutables SUID/SGIDs innecesarios
Logwatch y Tripwire

1. Instalación y configuración de un cortafuegos

Un firewall debidamente configurado es además de la primera línea de defensa la más


importante. Cualquier atacante potencial (remoto) que no pueda traspasar tu cortafuegos
será incapaz de explotar las posibles vulnerabilidades de los servicios que este protege.

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.
2. Actualizar todos los paquetes instalados

Una distribución Linux estándar puede incluir perfectamente más de 1,000 paquetes y
muchos de estos pueden tener nuevas versiones cuando vayas a instalarlos. La mayor
parte de estas actualizaciones consistirán en nuevas características y correcciones de
errores, pero algunas también incluirán parches para vulnerabilidades, y algunas de estas
vulnerabilidades pueden ser importantes. El asegurarse de que todos los paquetes
instalados estén en sus versiones mas recientes no es solo algo de lo que preocuparse a
la hora de la instalación sino que se debería tener en cuenta a lo largo de toda la vida útil
de nuestra nueva instalación. Esto puede llevarnos bastante tiempo pero afortunadamente
existen algunas utilidades que pueden hacer esto por nosotros automáticamente. Las dos
aplicaciones más utilizadas son APT (Advanced Package Tool) y Yum (Yellowdog
Updater, Modified).

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 upgrade

El 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.
3. Parar y deshabilitar todos los servicios innecesarios

En muchas distribuciones Linux nada más instalar tendrás bastantes servicios/demonios


configurados para ejecutarse cada vez que arranques tu máquina. Algunos incluirán
demonios HTTP (servidor web), POP3/IMAP (e-mail), un servidor de bases de datos, etc.
Algunos de estos son innecesarios para muchos usuarios y pueden ofrecer rutas por las
que infiltrarse en tu nuevo sistema operativo a un atacante potencial. Deberías
examinarlos uno por uno y parar y deshabilitar todos aquellos que no necesites.

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):

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 on

y 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 status

donde 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.
4. Localizar y borrar/modificar los ejecutables SUID/SGIDs innecesarios
Un ejecutable SUID (set user ID, establecer identificador de usuario) o SGID (set group
ID, establecer identificador de grupo) es aquel que permite a un usuario ordinario
ejecutarlo con privilegios mayores de los que tiene por defecto. Un ejemplo común es el
binario 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/passwd

Como 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.

5. Logwatch y Tripwire

Aunque hagamos todo lo que podamos para asegurar nuestro sistema, la realidad es que
por mucho que nos empeñemos nunca estaremos completamente seguros. Una mejor
estrategia que simplemente confiar en que no pase nada, es asegurarnos de que
sepamos si nuestro sistema ha sido comprometido y en el caso de que lo sea, cuándo.

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.
Observaciones Finales
La seguridad no es algo que consideras a la hora de la instalación y de lo que te olvidas
después; al contrario debe ser algo que esté siempre en tu cabeza en todo lo que hagas;
ya sea al asegurarte de que tu sistema esté actualizado, asegurarte de que usas políticas
adecuadas para las contraseñas, determinar a quién proporcionas acceso a tu sistema y
con qué nivel de acceso, leer tus logs, comprobar los registros de tripwire, leer la lista de
seguridad de tu distribución Linux, etc. Hay un viejo dicho que se adapta a la seguridad
informática bastante bien: "Una cadena es tan fuerte como su eslabón mas débil". Un solo
fallo por tu parte a la hora de aplicar esfuerzo y concentración a la tarea puede crear un
agujero de seguridad y echar a perder todo el trabajo.

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:


Nunca utilices telnet, ftp o cualquier otra sesión remota de texto plano que necesite de
introducir un nombre de usuario o una contraseña. Deberías usar siempre y
exclusivamente ssh, sftp y utilidades similares.
Utiliza diferentes nombres de usuario/contraseñas para identificarte en páginas no
cifradas (http) y cifradas (https) y nunca utilices el mismo nombre de usuario y contraseña
que utilizas para identificarte en tu pc.
Utiliza una política restrictiva en tu cortafuegos siempre; rechaza (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.
Enlaces

APT
http://moin.conectiva.com.br/ AptRpm - página web sobre el port de AptRpm de Conectiva
http://apt4rpm.sourceforge.net - Información general y scripts en Perl para crear
repositorios. También contiene una lista de repositorios para varias distribuciones pero
muchas de ellas pueden estar desfasadas.
http://www.nongnu.org/synaptic/ - Página web de Synaptic (un frontend gráfico para apt)
http://apt.freshrpms.net/ - RMPs de Apt y repositorios para Fedora, RedHat y Yellow Dog
http://www.usr-local-bin.org /apt.php - Instrucciones y un repositorio para SuSE Linux
Otras Utilidades de Seguridad
http://www.bastille-linux.org/ - Bastille intenta asegurar los sistemas operativos Unix/Linux.
Entre sus funciones están bastantes de las cosas que he enumerado antes y mucho más.
http://www.lids.org/ - The Linux Intrusion Defense System (Sistema de Defensa contra
Intrusos para Linux) es un parche para el kernel y una herramienta de administración que
mejora la seguridad del kernel implementando Mandatory Access Control.
http://www.chkrootkit.org - 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)
http://www.nessus.org/ - Un escaner de seguridad remoto libre, potente, actualizado y fácil
de usar; un escáner de seguridad es un producto software que inspecciona de forma
remota una red y determina si alguien (o algo - como un gusano) puede entrar de forma
no permitida en el sistema, o usarlo de manera indebida de alguna forma.

Potrebbero piacerti anche