Rubber Ducky y Raspberry Pi: rápida y mortal en equipos "despistados"

lunes, 19 de febrero de 2018

Jaques Rousseau dijo: "El hombre es bueno por naturaleza, es la sociedad la que lo corrompe". Los usuarios que, disfrutando de permisos de administrador (enmascarados por el UAC), se ausenta de su puesto de trabajo sin bloquear el sistema, son buena parte de esa "sociedad". Tientan a que algunas personas buenas se vayan al lado oscuro de la fuerza. En esta entrada mostramos una sencilla receta que combina Rubber Ducky, Raspberry Pi y algunos scripts, para crear un ataque eficaz, rápido y potencialmente indetectable en sistemas Windows. Veamos cómo.


USB imagen
Los dos elementos esenciales para el experimento
Desde el TAGS, hemos querido hacer una pequeña prueba de concepto (PoC) con fines educativos, en la que demostramos cómo con una Raspberry Pi configurada con un par de servicios y un Rubber Ducky se puede comprometer un equipo Windows desatendido y desbloqueado con permisos de administrador. Evidentemente, es un escenario ideal pero que aun así supone dos retos: ser lo suficientemente rápido y, además, pasar inadvertido para los antivirus. Esta receta lo consigue con dos premisas:
  • Enchufar y esperar. No es necesario teclear.
  • Fileless: Sin tocar disco, las probabilidades de ser detectado por las soluciones habituales de seguridad (antivirus), se minimizan.
El flujo es sencillo, levantaremos un servicio SSH y uno web en la Raspberry, con un móvil podremos acceder al sistema para encender o apagar el servicio web a voluntad. Dentro de la Raspberry, tendremos un script powershell con mimikatz para ejecutarlo en las máquinas objetivo y un usb Rubber Ducky para hacer la llamada al script desde las máquinas desbloqueadas y, en este caso, obtener su contraseña de inicio de sesión.

Raspberry
Lo primero de todo es configurar la Raspberry. Como sistema operativo se ha elegido el oficial, Raspian, pero se puede optar por cualquiera, según las preferencias de cada uno. Para abrir una conexión desde el móvil u otro terminal hacia la Raspberry se utiliza un servicio SSH. Por defecto, desde el 2016 viene desactivado, con lo que se deberá activar con los siguientes pasos:
  1. Abrir un terminal y escribir "sudo raspi-config"
  2. Seleccionar "Opciones Avanzadas"
  3. Navegar hasta SSH y habilitarlo
Activando SSH en Raspberry imagen
Activando SSH en Raspberry
Teniendo el servicio SSH activo se aconseja usar unas cuantas medidas de seguridad básicas para prevenir ataques. Obviamente, para acceder desde redes externas a la Raspberry se debe abrir el puerto correspondiente al servicio en el router y se podría usar un servicio como no-ip.org para no tener que aprender la IP pública en caso de que esta sea dinámica y/o cambie periódicamente.

Además del servicio SSH procede a habilitar un servidor web, en esta caso se ha elegido lighttpd por ser un servicio ligero y rápido. Se instala abriendo en la Raspberry un terminal mediante el comando sudo apt-get install lighttpd. Si se quiere parar o iniciar el servicio basta con introducir el comando sudo service lighttpd start/stop.

Dentro de la Raspberry en la ruta /var/www/html se añade el script de powershell para la ejecución de mimikatz, obtenido desde aquí (por cierto, aunque ponga que sólo es efectivo hasta Windows 8.1 funciona en W10); y se añadirá un fichero PHP con el siguiente código:

Fichero PHP con código imagen

Rubber Ducky USB
Vamos a "armar" nuestro USB. Necesitamos un fichero .bin que se ejecute en cuanto se conecte. Es tan simple como crear un fichero de texto en el que se añadirá una serie de comandos para nuestro payload desde esta página y se convertirá al archivo necesario con el servicio que proporciona la página https://ducktoolkit.com/encoder/.

Los principales comandos que se van a utilizar son abrir un terminal con permisos de administrador:
  • GUI r
  • STRING powershell Start-Process cmd -Verb runAs
  • ENTER
  • SHIFT TAB
  • ENTER
Llamar y ejecutar el script powershell de mimikatz (alojado en nuestra Raspberry) y volcar las credenciales:

Script Powershell de mimikatz imagen

Resultado
Con las configuraciones previas y tras obtener una vil oportunidad para actuar, procedemos a levantar el servicio lighttpd y conectar el Rubber Ducky en la máquina objetivo. Con esto, el proceso se realizará de forma automática y, muy importante:
  • Enchufar y esperar, todo en menos de un minuto.
  • El payload no tocará disco.
Las credenciales, junto con la IP de la máquina objetivo, acabarán en la Raspberry. Objetivo cumplido.

En el caso de máquinas Windows 10 el fichero volcado en la raspberry no nos mostrará la contraseña en texto plano sino “null” pero habrá un hash NTLM. Por supuesto, este hash puede descifrarse (si no es endiabladamente complejo) con la ayuda de herramientas como John the ripper y un buen diccionario.

Resultados del ataque
Las posibilidades con este tipo de herramientas son múltiples y permiten una gran variedad de diversos ataques, desde la prueba realizada en la que se roban las contraseñas, hasta instalar malware, establecer backdoors, etc. Existen múltipes ejemplos ya creados con  payloads para que el ataque resulte incluso más sencillo. También es posible trabajar en la velocidad de ejecución  y optimizar todo el proceso en varios aspectos.

Como es natural, se soluciona con una mínima exposición de privilegios (evitar el uso de UAC y utilizar cuentas de no administrador) y bloqueando el sistema en todo momento cuando se encuentre desatendido, además de vigilar quién enchufa nada en los puertos USB.

También te puede interesar:

» Arducky: Un Rubber Ducky hecho sobre Arduino para hackear Windows #Arduino
» Descargar Github DirtyTooth for Raspberry Pi 


Miguel Ángel Arévalo
Telefónica Advanced Global SOC con la colaboración de Innovación y Laboratorio de ElevenPaths

No hay comentarios:

Publicar un comentario