PoisonTap: Instalación y pequeña review

Bueno, parece que toca seguir con los posts sobre hardware para hacking, no os podréis quejar.

Después de un largo tiempo buscandola y luego de pagarla a «buen» precio, por fin tengo en mis manos una Raspberry Pi Zero, sí, esa que supuestamente cuesta 5 dolares pero que antes encuentras el santo grial que este modelo por ese precio. Concretamente me hice con el nuevo modelo W, que ya trae integrado el wireless y el bluetooth, acompañada de un pequeño kit con varios conectores básicos como USB OTG, adaptador de mini-HDMI, etc

Una de las cosas que hacen especial a este modelo de Raspberry es la capacidad que tiene su puerto OTG de hacerse pasar por distintos dispositivos de hardware (o gadgets como le suelen llamar) entre los que se encuentran tarjeta de red, puerto serie, almacenamiento masivo o dispositivos HID, además de varios otros.

En el caso de PoisonTap (PT a partir de ahora) lo que hacemos es que el pc victima reconozca a la Zero como una tarjeta de red y todo el tráfico sea redireccionado hacia ella de tal manera que se pueden extraer cookies en plano e inyectar un backdoor, pero más sobre esto a continuación.

En este tutorial utilizaremos un pequeño «fork» de PT creado por el usuario wismna de GitHub, y digo «fork» porque realmente la parte de PT apenas ha sido modificada. Además de añadir Responder como nuevo vector de ataque, el señor wismna se ha currado un pequeño OS fingerprinting para que nuestra Zero actúe de forma distinta según el OS al que la enchufemos. ¿Por que es esto importante? Pues porque en el caso de las últimas versiones de Windows 10 este ya no reconoce nuestra Zero como una tarjeta de red sino simplemente como un puerto serie. Gracias a los parches de wismna esto se ha solucionado y ahora funciona tanto en los últimos Windows como en Linux (no he probado OSX, no me da el presupuesto).

Pero, ¿Que hace PT? PT realiza varios ataques en cascada.

  1. Se adueña de la red del equipo. PT se configura como una interfaz de red y responde a las peticiones DHCP de tal manera que hace creer que todo el rango de IPV4 es parte de dicha red, haciendo así que todo el tráfico fluya por ella.
  2. Extracción de cookies. Siempre que haya un navegador, bien abierto bien en segundo plano, que realice una llamada HTTP; PT la intercepatará y responderá de tal manera que pueda ser interpretada como HTML o JavaScript, al ejecutarse dicha respuesta en el navegador esta creara numerosos iframes al top de sitios de Alexa y extraerá las cookies que tengamos almacenadas de los mismos.
  3. Backdoors. PT inyectará un backdoor que se activará cuando la Zero desconectada permitiendo que está sea cargada en un iframe de la victima y ejecutar comandos de forma remota. Esto solo es posible si ejecutamos el servidor de backend.

PT también realiza DNS recapping para poder acceder al router de la victima pero esta parte no la he podido probar demasiado debido a que no se ha liberado el código del servidor DNS necesario para esta parte.

Para una descripción mucho más detallada (en inglés) de como funciona PT os recomiendo os leáis la información de la misma en GitHub: https://github.com/samyk/poisontap

Lo más interesante de PT es que es capaz de realizar dichos ataques aunque el pc victima esté bloqueado.

INSTALACIÓN:

Raspberry Pi:

Para empezar necesitaréis instalar la última versión de Raspbian en vuestra Zero y darle salida a internet para poder instalar las dependencias y los repositorios que necesitaremos. Creo que esto está suficientemente documentado ya como para que lo tenga que repetir aquí así que simplemente os daré un consejo, si tenéis una W, configurad el wifi y dejaros de cable, mucho más comodo (vale si, no conseguí que el maldito avahi me dejara conectar a través de raspberrypi.local solo por IPV6 pero eso es otra historia).

Lanzaremos los siguientes comandos para actualizar nuestra Zero e instalar git:

sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt-get -y install git

Una vez finalice esto clonaremos el repositorio en el home, el script asume que se esta usando el home del usuario pi, tened esto en cuenta en caso de que tengáis problemas:

git clone https://github.com/wismna/HackPi

Entramos en la nueva carpeta HackPi y lanzamos el script install.sh sin sudo. En caso de que no tenga permisos de ejecución lo podéis solucionar fácilmente con el siguiente comando:

chmod +x install.sh

El script nos hará varias preguntas durante su ejecución:

  1. ¿Queremos hacer un backup de las configuraciones? Nunca está de más, lo dejo a vuestra elección.
  2. ¿Queremos parchear los módulos? Si contestamos que no el script finalizará sin terminar la instalación.
  3. ¿Configurar el backdoor? Esto solo es importante si vamos a utilizar el servidor de backend para el backdoor, si no lo vais a usar no es necesario. En caso de que sí os pedirá tambien el dominio/ip y puerto donde se estará ejecutando el backend.

¡OJO! En el último paso el script sobreescribe /etc/network/interfaces eliminando la interfaz wireless. Debéis añadirla de nuevo a ese archivo incluyendo este código:

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

El script no hace control de errores durante su ejecución pero es lo suficientemente verbose como para que sea fácil detectar un error durante su ejecución y solucionarlo antes de volverlo a ejecutar.

Backend (Opcional):

En caso de que queramos utilizar el servidor de backend simplemente ejecutamos los siguientes comandos en una máquina que sea accesible por el pc victima, sea en internet sea en nuestra red:

sudo apt-get update && apt-get upgrade
sudo apt-get install screen nodejs nodejs-legacy git npm
sudo npm install websocket
git clone https://github.com/samyk/poisontap
screen
sudo node backend_server.js

La parte de screen es totalmente opcional pero recomendable.

Por defecto el backend escucha en el puerto 1337 así que este debe ser accesible por la victima, en caso de que lo queráis cambiar al final del archivo backend_server.js escontrareis el comando server.listen(1337),  simplemente cambiarlo por el que hayáis configurado en la Zero.

Si todo ha salido bien ya deberíamos tener todo listo para hacer nuestras pruebas.

REVIEW:

Después de muchos quebraderos de cabeza hasta conseguir algo minimamente funcional (recordemos que esto es un POC no una herramienta lista para hacer el mal) aquí van unos pequeños puntos que creo son importantes tener en cuenta:

  • Mientras la PT este conectada el equipo victima no tiene acceso a internet. Todo el tráfico pasa a la Zero y la salida a internet no está configurada.
  • Si no tenéis una Zero W o esta no se conecta a la wifi podéis acceder a la misma desde el pc victima por ssh en la ip 1.0.0.1. Recordemos que es un POC.
  • En la versión de wismna la Zero se reconoce también como puerto serie. Esto puede ser de mucha utilidad ya que podemos conectarnos a la misma (solo en Linux y OSX, Windows no lo soporta por ahora) en el puerto /dev/ttyACM0 a 115200 baudios.

Ahora os muestro una pequeña lista sobre los navegadores y OS que he probado y que resultados he obtenido:

  • Linux:
    • Chrome/Chromium: Las cookies se extraen sin problemas y se puede apreciar el ataque al intentar entrar en una web http. Debido a problemas con la cache sin embargo la única manera en que conseguí que el backdoor se ejecutara fue desconectando la Zero antes de que el websocket hiciera timeout.
    • Firefox: Mucho más lento en ejecución que los anteriores. Todos los ataques funcionaron sin problemas y el backdoor quedo guardado en la cache. 100% funcional.
  • Windows:
    • Chrome: Mismos problemas que en Linux, con la salvedad de que al desconectar la Zero el websocket automáticamente aborta la conexión con lo cual el backdoor no funciona.
    • IE: Todos los ataques funcionaron sin problemas. 100% funcional.

Como véis aun tengo pendiente probarlo en otros OS y navegadores pero los resultados han sido un poco agridulces. Hay que entender que es un POC y no una herramienta 100% funcional.

Le veo mucho potencial en general y seguiré trabajando con ella. Os mantendré informados de lo que vaya consiguiendo.

Espero os haya gustado y, ya sabéis, cualquier duda o comentario no dudéis en dejar un comentario. Os ayudaré en todo lo que pueda y así otra gente podrá aprovecharse de la información.

Saludos, y como siempre, gracias por vuestra visita!

Reconocimiento al gran trabajo de samyk y de wismna que nos han dejado esta impresionante herramienta.

Esta entrada fue publicada en DIY, raspberry, tools, tutorial. Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.