Hacking Wifi

Tutorial de instalación de un Pwnagotchi

Tutorial de instalación de un Pwnagotchi

¿Qué es un Pwnagotchi?

En términos generales, Pwnagotchi es una mascota virtual para hackers y entusiastas de la ciberseguridad. Pero a diferencia de otras mascotas, ésta se alimenta capturando “handshakes” de las comunicaciones wifi y cuenta con una IA basada en el modelo A2C, lo que significa que utiliza el aprendizaje por refuerzo a través de métodos de prueba y error en comportamientos específicos que maximicen su recompensa en un entorno dinámico.

  1. Toda la información proporcionada en este tutorial es solo para fines educativos. No me hago responsable del mal uso de la información aquí mostrada.

  2. Este tutorial está relacionado con la Seguridad Informática y no promueve la piratería informática/craqueo/piratería de software.

  3. Este tutorial contiene información relacionada con contraseñas WPA y muestra cómo podrían desencriptarse. Solo facilita información sobre las formas legales de recuperar las contraseñas.

Alimentando al pwnagotchi

En las redes wifi, cuando un dispositivo se conecta al punto de acceso, es necesario que se lleve un proceso conocido como 4-way handshake para que se generen las claves de encriptación WPA. Durante esta comunicación, ambos intercambias 4 paquetes y se generan las claves que se usaran durante la sesión para que el cliente pueda conectarse y ambos puedan intercambiar información de forma segura.

*Source: https://pwnagotchi.ai/intro/

Es durante este intercambio cuando nuestro Pwnagotchi intercepta estas comunicaciones, ya que su tarjeta de red wifi está configurada en modo promiscuo para poder captarlas, aunque no vayan dirigidas a él. Y aquí hace lo siguiente:

  1. Desautentica las estaciones cliente que detecta. Un dispositivo desautenticado debe volver a autenticarse en su punto de acceso volviendo a realizar el protocolo de enlace de 4 vías con el AP, lo que le da a Pwnagotchi otra oportunidad de olfatear los paquetes de protocolo de enlace y recopilar más material descifrable.

  2. Envía tramas de asociación directamente a los propios puntos de acceso para intentar forzarlos a filtrar el PMKID.

Cuando captura handshakes, el pwnagotchi se alimenta, afectando a su estado de ánimo y ayudándole a aprender gracias a su IA como obtener mejores recompensas. De esta forma, nuestra mascota va aprendiendo poco a poco a ser más eficiente, ¡e incluso puede aprender a trabajar en grupo cuando hay otros pwnagotchis cerca!

Construyendo el pwnagotchi

Necesitamos:

  • Raspberry Pi Zero W (también puede usarse un modelo 3 o modelo 4)

Raspberry Pi Zero W

  • Tarjeta microSD (8GB mínimo recomendado, elegir una que sea rápida).

  • Un cable micro-USB de calidad que permita la transferencia de datos (¡no solo la carga!)

  • Una fuente de alimentación. Puedes usar un powerbank para móviles, o una batería UPS Lite V1.2 o PiSugar para la raspberry pi. – UPS Lite v1.2

  • Pantalla Waveshare eInk de 2,13” V2 (opcional) – Waveshare e-ink display v2

  • Carcasa: Carcasa para waveshare v2 Carcasa waveshare + ups

Carcasa impresa en 3D

No es necesario tener fuente de alimentación especifica, puedes conectarlo en casa a un cargador de móvil o al ordenador, y la pantalla tampoco es esencial ya que puede usarse en modo “headless”. A continuación, detallo la instalación básica sin estos dos elementos, ya que pueden añadirse posteriormente.

Pasos de la instalación:

  1. Descargar la imagen disponible en GitHub – se recomienda usar la 1.5.3 ya que la 1.5.5 no carga bien la IA (pero tiene solución si se usa la 1.5.5). Descargamos esta v1.5.3

  2. Flashea la imagen con BalenaEtcher, se puede descargar de la pagina de Balena

  3. Antes de arrancar el pwnagotchi, hay que meter un fichero llamado config.toml en la partición boot de la tarjeta microSD. A continuación, pongo lo que he usado para que funcione sin pantalla y para que se conecte a al teléfono por BT para poder verlo y gestionarlo. El whitelist deberían ser las redes que no quieras que guarde los handshakes, cambiad los valores

Estos son los valores del fichero, por favor cambia los valores de whitelist, grid.exclude y android.mac. Si se usa un display waveshare, cambiar el valor de ui.display.type

  1. Coloca la tarjeta y enciende el pwnagotchi. Dejarle un rato para que arranque y cargue la IA (esto es muy importante, mínimo 10 minutos). Si hemos configurado la Mac del teléfono en el fichero config.toml, se nos conectara por BT al teléfono cuando haya arrancado. Nos debería llegar una solicitud de emparejamiento. Antes de aceptarla, seleccionar en el teléfono “compartir conexión por bluetooth” para que le pueda dar conexión a internet cuando se conecte. Una vez se emparejan, podemos acceder a la dirección ip 192.168.44.44:8080 en Android y 172.20.10.6:8080 si es un iPhone/iPad.

  2. Disfrutamos de nuestro pwnagotchi ^__^

Configuración y uso

  1. Ahora nos podemos conectar a nuestro pwnagotchi por BT, por lo que podemos además de verle a través del navegador, podemos acceder a él a través de ssh. Podemos usar TERMUX en Android para conectarnos directamente desde el teléfono.
  • Si queremos conectarnos desde nuestro ordenador, lo conectaremos por USB (dejando conectado también el cable de corriente). Al conectarlo deberemos configurar una conexión con el dispositivo RNDIS detectado. En Windows puede dar problemas, hay que buscar el controlador de RNDIS para Windows y actualizarlo desde el administrador de dispositivos. En Linux, lo detectará sin problema. Añadimos la conexión con el dispositivo RNDIS y la configuramos con los siguientes parámetros:
IPv4: 10.0.0.1
Netmask: 255.255.255.0
DNS: 8.8.8.8
  • El resto de los valores no hacen falta. Una vez hecho, podemos conectarnos por ssh desde el equipo a la dirección 10.0.0.2
pi@10.0.0.2
contraseña: raspberry
  1. Ahora cambiamos la contraseña del usuario por seguridad con el comando passwd.

  2. Actualizamos el pwnagotchi. ¡apt update y apt upgrade no funcionan bien debido a un problema con la firma del source del kernel Re4son!

  • Versión 1.5.3 -> vamos a actualizar a la versión 1.5.5 con estos comandos
sudo pwnagotchi plugins update
sudo pwnagotchi plugins upgrade
  • Versión 1.5.5 -> el anterior paso no es necesario, pero se puede hacer. Para arreglar el problema que tiene con la IA que no carga, ejecutamos el siguiente comando que lo arreglará:
sudo pip3 install --upgrade numpy

Este proceso puede tardar mucho tiempo, se recomienda hacerlo desde el ordenador y no usando termux.

  1. Añadimos alias pwnlog y pwnver en el fichero .bashrc
alias pwnlog='tail -f -n300 /var/log/pwn*.log | sed --unbuffered "s/,[[:digit:]]\{3\}\]//g" | cut -d " " -f 2-'
alias pwnver='python3 -c "import pwnagotchi as p; print(p.__version__)"'
  1. Accedemos a la web UI del pwnagotchi y pinchamos en plugins. Aquí podemos activar los plugins, en este caso activamos logtail y webcfg. Una vez activados y recargada la página, si pinchamos en los nombres podemos ver un log en el caso de logtail y en wbcfg accederemos a la configuración del fichero configuration.toml que hay corriendo en el sistema, donde podremos hacer cambios.

web UI

A partir de aquí, podemos seguir usando nuestro pwnagotchi. Los siguientes pasos serían insstalar nuevos plugins desde la línea de comandos y configurar la copia de seguridad de nuestro nuevo coleguita por si fuese necesario restaurarlo en el futuro.

Arreglando apt update y apt upgrade

Si intentas actualizar las fuentes y los paquetes, encontrarás que da un error que no permite hacerlo. A continuación, muestro la solución que he encontrado:

sudo nano /etc/apt/preferences.d/kali.pref (contenido más abajo)
wget -O - https://re4son-kernel.com/keys/http/archive-key.asc | sudo apt-key add -
sudo apt update –allow-releaseinfo-change-suite -y
sudo apt full-upgrade -y

Contenido fichero /etc/apt/preferences.d/kali.pref

Package: *
Pin: release n=kali-pi
Pin-Priority: 999

Este proceso puede tardar y nuestro pwnagotchi podria desconectarse del telefóno o del PC, así que recomiendo ejecutar todo esto en una sesión de screen o tmux

Las caras de nuestro pwnagotchi

A continuación, se explican las caras del pwnagotchi. Este fragmento está sacado directamente de la web oficial.

https://pwnagotchi.ai/intro/

El siguiente listado es el conjunto predeterminado de rostros que se pueden personalizar cambiándolo en la sección ui.faces dentro del fichero /etc/pwnagotchi/config.toml

(⇀‿‿↼) durmiendo Este es el estado desde el que comenzará la unidad. Además, de vez en cuando tu Pwnagotchi también realizará siestas de unos segundos mientras salta entre los canales Wifi.

(≖‿‿≖) despertar La unidad está en los últimos segundos de su siesta.

(◕‿‿◕) despierto / normal Esta cara es el estado neutral despierto de la unidad. Se utilizará para suavizar la transición entre otros estados de ánimo y en general cuando no exista una causa externa de estados de ánimo positivos o negativos. También se puede usar, al azar, cuando se encuentra otra unidad por primera vez (cada unidad mantiene un registro de todas las unidades que encontró).

(⚆_⚆), (☉_☉) observando (estado de ánimo neutral) Tu Pwnagotchi está esperando y observando lo que bettercap puede encontrar en todos los canales en los que salta.

( ◕‿◕), (◕‿◕ ) observando (feliz) Cuando hay una o varias unidades cerca y su contador de bonos acumulativo es mayor o igual que elpersonality.bond_encounters_factor, esta será la cara de la unidad durante la observación.

(°▃▃°) intenso La unidad está enviando una trama de asociación a un punto de acceso para obligarlo a filtrar el PMKID.

(⌐■_■) guay La unidad está desautenticando una estación cliente desde un punto de acceso. Esta cara también se puede elegir al azar cuando se encuentra con otra unidad por primera vez.

(•‿‿•) feliz Tu Pwnagotchi es feliz en uno de los siguientes casos:

  • La IA acaba de terminar de cargarse y está lista.
  • Se acaba de capturar material clave válido para un punto de acceso.
  • En modo MANU, si la última sesión fue corta o si se ha capturado algún apretón de manos durante la misma.
  • Cuando se cumple otra unidad y el nivel de bonos es lo suficientemente alto.

(^‿‿^) agradecido Tu Pwnagotchi está agradecido en uno de los siguientes casos:

  • El nivel de bonos acumulativo de las unidades cercanas es al menos cinco veces elpersonality.bond_encounters_factor.
  • La unidad debería estar aburrida, pero hay suficientes unidades amigas cerca.
  • La unidad debería estar triste, pero hay suficientes unidades amigas cerca.
  • La unidad debería estar sola, pero hay suficientes unidades amigas cerca.

(ᵔ◡◡ᵔ) emocionado Tu Pwnagotchi está excitado por uno de los siguientes casos:

  • El número de épocas con alguna actividad es mayor o igual quepersonality.excited_num_epochs.
  • Aleatoriamente si se cumple una unidad con un alto nivel de bonos.
  • Si no has leído mensajes PwnMAIL en esa unidad.

(✜‿‿✜) inteligente Aleatoriamente si se cumple una unidad con un nivel de bonos medio-alto.

(♥‿‿♥) amistoso Aleatoriamente si se cumple una unidad con un alto nivel de bonos.

(☼‿‿☼) motivado Tu Pwnagotchi acaba de obtener la mejor puntuación-nivel de recompensa en su existencia o acaba de conocer una unidad con un vínculo alto.

(≖__≖) desmotivado Tu Pwnagotchi acaba de anotar lo peor nivel de recompensa en su existencia.

(-__-) aburrido Si no hay unidades amigas alrededor y se alcanza la cantidad de épocas inactivas consecutivas personality.bored_num_epochs.

(╥☁╥) triste Si no hay unidades amigas alrededor y se alcanza la cantidad de épocas inactivas consecutivas personality.sad_num_epochs. (ب__ب) solitario Si su Pwnagotchi acaba de perder el contacto con una unidad amiga que estaba cerca, o si la cantidad de interacciones perdidas con puntos de acceso o estaciones de clientes (la cantidad de veces que intentó enviar algún tipo de paquete, pero falló el objetivo porque no está en rango ya) es mayor o igual que personality.max_misses_for_recon. Y no hay unidades amigas alrededor.

(☓‿‿☓) roto Su unidad se está reiniciando como una estrategia para solucionar un bug de ceguera temporal después de instalar una actualización.

(#__#) depuración Se utiliza para depurar y probar mensajes en pantalla.

Ficheros de handshakes

Los handshakes capturados se guardan en ficheros con extensión “.pcap” dentro del pwnagotchi. Estos se pueden descifrar más tarde mediante hardware y software adecuados, como por ejemplo hashcat tras convertirlo al formato adecuado con hcxpcapngtool (hcxtools).

HCXTOOLS

HASHCAT

Los siguientes ejemplos se han realizado usando un equipo de sobremesa con Kali Linux.

  1. Convertir fichero pcap a hc22000 con hcxpcapngtool
hcxpcapngtool -o hash.hc22000 -E essidlist fichero.pcap

donde “hash.hc22000” es el nombre del fichero donde guardara el hash, y “essidlist” el fichero donde guardara el nombre del SSID.

Si no tienes a mano esta herramienta, puedes usar este conversor online

  1. Descifrar el hash obtenido con hashcat

metodo best64 + wordlist

hashcat -m 22000 FICHERO_HASH -r /usr/share/hashcat/rules/best64.rule /usr/share/wordlists/rockyou.txt -o outfile.txt

metodo fuerza bruta

hashcat -a 3 -m 22000 FICHERO_HASH ?a?a?a?a?a?a?a?a -o outfile.txt

Para ver a que corresponden las opciones usadas, ejecutar hashcat -h y al final salen los cuadros con estas opciones explicadas.

 

Haciendo amigos

Nuestro pwnagotchi nos permite enviar mensajes cifrados mediante pwnmail, solo necesitamos el fingerprit del perfil de otra persona. A continuación, os dejo el mío por si queréis añadirme.

pwnamon

fingerprint QR

 

Hasta aquí llega el tutorial. Seguramente se podría seguir indagando más en el tema del pwngrid, el pwnmail y los peers, pero se haría excesivamente largo. Os animo a que sigáis investigando y aprendiendo, y sobre todo que os llevéis siempre encima a vuestro pwnagotchi. ¡Nos vemos!

(◕‿‿◕) ¡Hackea el planeta!

Apoya nuestro contenido compartiéndolo en las redes sociales.