Seguridad Informática en el CPS


Ultima modificación: 13 Septiembre, 2000

Este documento reside en http://webdiis.unizar.es/~spd/sec/linux-sec.html


Recientemente (Agosto de 2000) un grupo de italianos ha estado entrando en máquinas Unix del CPS y del CCUZ. Sus actividades han consistido básicamente en lo siguiente:

Conviene hacer notar que la puerta de entrada utilizada para la entrada inicial han sido los PC's con Linux que usuarios particulares tienen en sus despachos como estaciones de trabajo personales, máquinas instaladas sin tener en cuenta ningún tipo de consideración sobre seguridad.
Este hecho es bastante importante, ya que ayuda a ver el porque la preocupación por la seguridad de una máquina, aunque sea personal, es importante. Aunque a alguien pueda no importarle que entren en su máquina porque no tiene información importante, como se ve, lo que está en juego es la seguridad de toda la red, no la de su máquina.

Siguiendo los rastros que iban dejando por las máquinas atacadas, he llegado a localizarlos e incluso a hablar con ellos (el "cabecilla" es un chaval de 15 años, según dice). Mientras no han realizado ninguna actividad directamente destructiva sobre las máquinas invadidas, las consecuencias de sus actos han sido:

Hoy en día, la proliferación de distribuciones de Linux "fáciles" hace que cualquiera pueda instalarse un Unix en su despacho; pero el mantener ese Unix con un mínimo de garantías ya no es tan trivial.

Existen multitud de recursos en Internet sobre como hacer un sistema Unix seguro, al final de este documento se incluyen algunos links de obligada lectura; aparte de eso veremos ahora unos mínimos consejos al respecto. Se ha tomado como referencia un sistema Linux Red Hat 6.2. Los conceptos son similares para otros Unix o distribuciones de Linux, aunque los detalles pueden variar.

No trabajes como root.

Crea una cuenta de usuario, preferiblemente usando los mismos nombre de usuario, UID y GID que tengas en alguna otra cuenta Unix del departamento. Cuando necesites ejecutar cosas como root, hazlo usando "su" desde dicha cuenta (o "ssh localhost -l root")

Elimina servicios

Desactiva todos los servicios. No los necesitas. De hecho casi podrías no ejecutar inetd. Solo cuando veas que necesitas realmente un servicio, activalo (tras revisar sus opciones de log y de control de acceso).
Si necesitas algún tipo de acceso remoto a tu Unix, utiliza ssh para sesiones interactivas y scp para transferencia de ficheros.

Utiliza ssh

Jamás uses telnet ni ftp, que, entre otras cosas, mandan tu password en texto claro por la red. Instala ssh y utilizalo.

Instalar ssh es algo tan simple como esto:


:~> wget ftp://ftp.cps.unizar.es/pub/unix/security/ssh-1.2.32.tar.gz
:~> tar xvzf ssh-1.2.32.tar.gz
:~> cd ssh-1.2.32
:~/ssh-1.2.30> ./configure --with-libwrap --disable-scp-stats
:~/ssh-1.2.30> make
:~/ssh-1.2.30> su
:~/ssh-1.2.30# make install
:~/ssh-1.2.30# cat > /etc/rc.d/init.d/ssh <<EOF
#!/bin/sh
#
# /etc/rc.d/init.d/ssh - Start/Stop the ssh daemon
#
# SPD, Tue May 14 15:18:08 MET DST 1996
#
#
# chkconfig: 345 50 50
# description: Secure Shell
#


# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ \${NETWORKING} = "no" ] && exit 0


case \$1 in 
        'start')
                if [ -f /usr/local/sbin/sshd ]
                then
                        touch /var/lock/subsys/ssh
                        /usr/local/sbin/sshd
                fi
                ;;

        'stop')

                if [ -f /etc/sshd.pid ]
                then
                        kill \`cat /etc/sshd.pid\`
                else
                        pid=\`/bin/ps ax | /bin/grep sshd | \\
                        /bin/sed -e 's/^  *//' -e 's/ .*//'\`
                        if test "\$pid"
                        then
                                kill \$pid
                        fi
                fi
                rm -f /var/lock/subsys/ssh
                ;;
        *)
                echo "usage: \$0 {start|stop}"
                ;;
esac
EOF

:~/ssh-1.2.30# chmod 755 /etc/rc.d/init.d/ssh
:~/ssh-1.2.30# chkconfig ssh on
:~/ssh-1.2.30# /etc/rc.d/init.d/ssh start
:~/ssh-1.2.30# exit

Ademas, puedes leer mas sobre el uso de ssh en http://webdiis.unizar.es/~spd/sec/ssh.txt

Utiliza las reglas de control de acceso

Linux o un Unix con tcpwrappers instalados tiene dos ficheros /etc/hosts.allow y /etc/hosts.deny. Utilizalos.
Por defecto, deniega todo y solo cuando veas que tienes que acceder a algun servicio desde determinada IP, dale permiso.

Un ejemplo de estos ficheros sería:

---------------------------------------------------------------------------
/etc/hosts.allow

#
# Known trusted hosts
#
ALL:    \
localhost \
: ALLOW

sshd,sshdfwd-X11: \
localhost, \
unix-de-al-lado.unizar.es \
: severity auth.notice : ALLOW
---------------------------------------------------------------------------
/etc/hosts.deny

ALL: UNKNOWN : severity auth.warning : DENY
ALL: PARANOID : severity auth.alert : DENY
ALL:ALL:DENY
---------------------------------------------------------------------------

Nunca uses xhost, usa xauth

El tema de la seguridad en X11 es algo extenso y conviene entenderlo a fondo. Se recomienda la lectura de http://webdiis.unizar.es/~spd/sec/X11.txt

¡Ojo con Netscape!

Cuando uses Netscape, procura dejar Java y JavaScript desactivado; igualmente desactiva todo lo que sea "smart" (smart updates, internet keywords, etc)

Suscribete a la lista de avisos de seguridad de tu Unix.

Lamentablemente, esto es así. No te basta con instalarlo y olvidarte, periodicamente van apareciendo bugs que hay que parchear.
Si tu máquina solo tiene un usuario (tú) y si has eliminado todos los servicios, puede que te puedas tomar con mas calma el tema de las actualizaciones; pero aun así conviene que estes al día.

Para nuestro caso, las direcciones de interes son:

Usa passwords seguros

Esto es algo que sabemos todos pero que muchos no cumplen. Utiliza passwords que no sean palabras de diccionario, que tengan mayúsculas y minúsculas así como números y caracteres no alfanuméricos, etc. etc.

Además no uses el mismo password en todas las máquinas. Especialmente no utilices el mismo que en maquinas inherentemente inseguras. Estas ultimas comprenden:

Programa, pero seguro

Si programas servicios y/o CGI's asegurate de documentarte al respecto para no introducir más puertas de entrada.

Algunos links:

Como saber si te han entrado

En muchos casos, los intrusos son gente que aplica a ciegas programas que aprovechan los bugs existentes, sin tener mucha idea de lo que están haciendo; por lo que no borran rastros de ningún tipo.

Más información



Notas:

[1] DoS:ataque consistente en "tirar" una máquina o uno de sus servicios, no para consiguir acceder, si no simplemente para que deje de funcionar.

[2] Debido a esto se esta considerando muy seriamente limitar el acceso a los servicios "r" de las máquinas que administro a únicamente las máquinas que administro.