Haiki1337.com

TheTruckOfAlmendruc

28 Mar 2024

Índice

  • Planificación de la herramienta
  • Primera versión de TheTruckOfAlmendruc
  • ¿Cómo funciona TheTruckOfAlmendruc?
  • TheTruckOfAlmendruc terminado
  • Instalación y puesta en acción
  • Conclusiones

Recientemente he terminado mi herramienta de hacking física y os voy a contar la experiencía de como ha sido todo, la hice para un experimento personal y he pensado en compartirla con vosotros por si quereis hacerla.

La idea se me ocurrió como a cualquiera de nosotros se nos puede ocurrir, cuando salimos a cualquier sitio en nuestra vida diária y nos cruzamos con ordenadores, dispositivos IOT o cualquier cosa hackeable, nos paramos a pensar como podríamos lograrlo. Y a mi lo que me llamo la atención son esos conectores Ethernet en las paredes de tantos sitios, que estan ahí a merced de cualquiera que vaya y enchufe algo.

Como ya entendeis a que me refiero, porque seguro que a vosotros también os ha pasado, me puse a investigar sobre que cosas se podrían conectar ahí y que podriamos hacer, por lo que me metí a Hak5 a ver un poco del material por curiosidad. Por lo que encontré dos herramientas en la tienda que parecen buena idea para probar contra este tipo de escenarios:

  • SHARK JACK

Esta herramienta al conectarse al puerto Ethernet lanza una serie de payloads programados por nosotros mismos para evaluar la red, cuenta con una autonomia de unos 15 minutos. Hay otra version que lleva cable y va conectada al teléfono, la autonomia es infinita (Depende de la batería del teléfono).

alt

  • PLUNDER BUG LAN TAP

Con esta otra herramienta cuando la conectemos tendremos la posibilidad de grabacion pasiva y escaneo activo, todo esto conectado por cable a un teléfono con el cual manejar estas funciones.

alt

Después de curiosear un poco y ver que estas dos herramientas ofrecen cosas muy interesantes, pero yo quiero algo mas allá de todo eso, empecé a pensar que herramienta crear llegando a la conclusion de que iba a crear un implante en red portable, con autonomía suficiente como para investigar los activos de la red y conseguir persistencia en alguno de ellos si es posible.

Sin conocimientos de electronica, vamos a montar un aparato casero con lo que tenemos a nuestro alcance y nuestro conocimiento, por lo que se me ocurrió usar una version de Raspberry Pi Zero, escogí la primera porque no habia stock de la segunda versión al momento de preparar la herramienta.

Planificación de la herramienta.

El primer problema que presentamos para la máquina era que no tenia Ethernet la placa, por lo que habia que escoger un HAT, y yo encontre este.

alt

La instalación de este componente a la placa Raspberry Pi Zero W es muy sencilla, son dos tornillos y un conector que une las dos placas. Aquí teneis una foto sacada de internet de como quedaría instalado para que tengais una idea clara:

alt

Después de solucionar lo del Ethernet pasamos a la batería, comencé a buscar por internet como alimentar correctamente una Raspberry Pi Zero W con una batería de litio y poder cargar la misma todo en el mismo aparato. Llegé hasta este post del cual obtuve el siguiente plano:

alt

El post te explica todo a la perfección si quieres saber más entra en el.

Los tres componentes del plano los puedes encontrar aquí:

TP4056 charge controller
MT3608 3.7V to 5V DC/DC converter
Batería Litio Li-Po 3.7v

De este plano solo he cambiado dos cosas, la primera es que he añadido un interruptor en la salida del positivo del cargador (OUT+) al Vin del converter, y la segunda que los cables que salen hacia la Raspberry Pi Zero W sera lo mismo pero a los pines del HAT Ethernet ya que van unidos.

Primera versión de TheTruckOfAlmendruc

Después de soldar todos los componentes y comprobar que todo funcionaba bien, lo uní todo con cinta aislante negra para empezar a hacer pruebas con el software, estas son algunas de las fotos del prototipo:

alt alt alt

¿Cómo funciona TheTruckOfAlmendruc?

Bueno, después de haber montado todo y haber estado programando el software que va a utilizar y replantear alguna de las formas en las que debe funcionar el aparato, esta es la conclusión.

El proyecto cuenta con un software cliente-servidor, el aparato (Cliente) y nuestra maquina de trabajo (Servidor) unidas entre las dos por un puente (un VPS); Se podría ver como algo así:

alt

Para que lo entendais mejor después de ver el diagrama, nosotros nos conectamos por VPN al VPS (La VPN esta creada en este VPS), este VPS está configurado para hacernos Port Forwarding de los puertos 7070, 8080, 8800 al cliente de la VPN es decir nuestra máquina de trabajo, hasta aqui todo bien lo dejamos preparado. El segundo paso es conectar el aparato a la red que queramos, una vez hecho esto el aparato se conectara al VPS con el cliente del software por el puerto 7070, ya que los otros dos son para otras funciones.

Como ya hemos dicho todo lo que pase por el VPS termina en nuestra máquina oseaque al recibir la conexión haremos unos tramites para cifrar nuestra comunicación, tanto el cliente como el servidor generan claves Fernet (el metodo de cifrado que he usado) y claves RSA de 2048 bits, estas se generan al ejecutar el software en cada parte y cuando hay conexion se transmiten a traves de cifrado RSA, compartiendo primero sus claves públicas para mandar cifradas estas claves de Fernet. Una vez se ha completado todo el procedimiento de la conexión, tendremos a nuestro alcance con la pseudoconsola del servidor unos cuantos comandos para lanzar directamente al aparato, realmente lo que más nos interesa es el comando que crea un tunel con ligolo hacia nuestra máquina, para poder tener alcance a la red donde se encuentra el aparato, las otras funciones sirven para gestionar el aparato remotamente si es necesario.

Cuando iniciamos el servidor en nuestra máquina automaticamente se nos crea la interfaz de ligolo que podemos verificar con ifconfig, el proxy lo tendremos que abrir en otra consola para recibir la conexión de ligolo cuando mandemos el comando desde el software del servidor.

Después de todo esto al recibir la conexión del aparato, iniciariamos el tunel y a jugar.

TheTruckOfAlmendruc terminado

Bueno, tras acabar de perfeccionar todo en la parte del software y haber replanteado y corregido algunos problemas que se nos presentaron por el camino, volví a hacer el aparato desde cero pero esta vez colocandolo en una carcasa que lo protegiera más y lo ocultara (ya que con cinta aislante parecia algo peligroso).

Esta carcasa las conseguí desmontando un cargador de portatil viejo que tenia por casa, tras eso, soldé y pegué todos los componentes dentro de la carcasa e hice agujeros en esta para sacar todo los conectores al exterior. Y así quedo:

alt alt alt alt

Instalación y puesta en acción

Bien, vamos a comenzar con la instalación, lo primero que debemos hacer es entrar en la página de raspberry en la zona de software (aquí) para instalar en una memoria SD el sistema operativo que vamos a utilizar para el aparato.

alt

Damos al botón de Download de color azul, tras eso, vamos a descargas e instalamos el .deb

sudo apt install ./imager_1.8.5_amd64.deb

Tras eso conectamos el usb con la tarjeta Micro SD en nuestra máquina e inciamos el programa

alt

Seleccionaremos primero el tipo de dispositivo, luego el OS que en nuestro caso utilizaremos Raspberry PI OS Legacy 32 bits Lite, y seleccionamos el usb que hemos insertado con la Micro SD.

alt

Al darle al boton de Siguiente, nos aparecerá este recuadro al que le tendremos que dar en Editar Ajustes, para proceder a dos cosas muy importantes; Crear un usuario y activar el servicio SSH.

alt alt

Al terminár le damos a guardar y nos aparecerá el mismo cuadro de antes pero ahora con el Si activado, le damos.

alt

Se comenzará a instalar todo y al acabar nos saldra un recuadro avisandonos que la instalación termino, entonces le damos a continuar.

alt

Tras todo este procedimiento, retiramos el usb y sacamos la Micro SD insertando esta en la Raspberry Pi Zero W. Obviamente todo esto va a antes de ensamblar todo, esto se hace justo después de instalar el HAT Ethernet en la placa, para comprobar que todo funciona correctamente. Insertamos la SD en la placa y conectamos esta a la luz y a la red para buscarla desde nuestra máquina ( Tardará unos segundos en encenderse ).

sudo arp-scan -l

alt

sudo nmap -p22 192.168.1.0/24

alt

Tras localizar el objetivo probamos a autenticarnos en el por SSH.

alt

Yo tengo el proyecto en mi máquina, pero estará disponible en github para clonarlo. Voy a iniciar un servidor http en mi máquina local para pasarle el archivo del cliente al aparato.

alt

Una vez en nuestro aparato, lo siguiente que debemos hacer es instalar golang y descargarnos el agent de ligolo correspondiente para nuestro aparato, yo ya tengo instalado golang pero se puede instalar con el siguiente comando.

sudo apt install golang-go

Buscaremos aquí la última versión de ligolo para nuestra arquitectura que en este caso es la armv6l.

alt

Descargamos la nuestra que es justo la que está en el medio, tras eso descomprimimos el archivo.

wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.5.2/ligolo-ng_agent_0.5.2_linux_armv6.tar.gz

alt

Después de esto, tendremos que hacer varias cosas; Instalar pip3 para descargar las librerias que no vienen por defecto, crear una tarea cron que cuando se inicie el aparato se ejecute el script automaticamente y lo mas importante, probarlo.


sudo apt install python3-pip
pip3 install rsa
pip3 install cryptography

Tras instalar todo lo necesario, vamos a crear un archivo bash con unas pequeñas lineas necesarias para crear una tarea cron, con crontab -e la crearemos.

alt alt

Especificamos en la tarea cron que todo lo que salga mal lo mande a un archivo llamado cronlog en la carpeta logs, esta carpeta no existe pero la creamos facilmente con el comando mkdir logs.

Tras todo el proceso de preparación anterior probamos si funciona correctamente, para eso abrimos una consola para ejecutar el servidor de ligolo-ng y otro para ejecutar el servidor de nuestro proyecto.

alt

Ahora solo queda enchufar la máquina y esperar a que llegue la conexión a nuestro servidor.

alt

Al pasar un rato nos llega la conexión por parte de la máquina, tras eso seleccionamos el usuario con los comandos de la pseudoconsola y mandamos el comando ligolo para comenzar también el tunel.

alt

Como hemos podido comprobar, localmente hemos probado a hacer la conexion tanto del servidor y el cliente del software de TheTruckOfAlmendruc como la conexion por ligolo-ng para la creación de un tunel. Ahora vamos a ver como configuramos el servidor VPS instalando el servidor VPN y haciendo Port Forwarding de los puertos necesarios para el funcionamiento de la herramienta.

Yo tengo una VPS en OVH que utilizo para hacer mis pruebas, lo primero que vamos a hacer es configurar el firewall con ufw para permitir los puertos que vamos a utilizar tanto en el software de la herramienta como en la del VPN

alt alt

Después de permitir los puertos y activar el firewall, reiniciamos la máquina para aplicar todos los cambios, cuando volvamos a iniciar sesión podemos comprobar con el comando sudo ufw status el estado del firewall.

alt

Ahora instalemos el servidor de openvpn

wget https://git.io/vpn -O openvpn-install.sh

alt

Una vez descargado, tendremos que darle permisos de ejecucion con chmod +x name_of_file

alt alt

Una vez presionemos cualquier tecla, comenzará a instalarse y configurarse el servidor openvpn. Al finalizar veremos que abajo se ha creado un archivo .ovpn que es el archivo que nosotros tendremos que utilizar para conectarnos a la vpn que hemos creado.

alt

Comprobamos que esta activo el servicio del servidor

alt

Vemos que esta en activo, aqui estan los comandos para iniciarlo, detenerlo o reinciarlo.


sudo systemctl status [email protected]
sudo systemctl start [email protected]
sudo systemctl stop [email protected]
sudo systemctl restart [email protected]

Bien, una vez tenemos esto preparado vamos a comprobar que todo funciona bien, descargamos en nuestra máquina el archivo .ovpn que hemos generado en la instalacion del servidor vpn.

alt

Nos conectamos a la vpn con el siguiente comando:

sudo openvpn thetruckofalmendruc.ovpn

Ejecutamos ifconfig para comprobar que se nos crea la interfaz del vpn:

alt

Bien, ahora vamos a crear un script con las siguientes reglas iptables para hacer el port forwarding de los puertos, yo lo meteré en un archivo llamado insert_iptables.sh dandole permisos de ejecución y crearé una tarea cron en el VPS para que estas reglas persistan cada reinicio.


sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -p tcp --dport 7070 -j DNAT --to-destination 10.8.0.2:7070
sudo iptables -A FORWARD -p tcp --dport 7070 -d 10.8.0.2 -j ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.8.0.2:8080
sudo iptables -A FORWARD -p tcp --dport 8080 -d 10.8.0.2 -j ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp --dport 8800 -j DNAT --to-destination 10.8.0.2:8800
sudo iptables -A FORWARD -p tcp --dport 8800 -d 10.8.0.2 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
sudo iptables-save

alt

En este punto, después de reiniciar la vps solo nos quedaría probar todo en una situación parecida a la realidad, yo probaré con mi portatil conectado al internet de mi teléfono (para estar en otra red diferente) y conectaré el aparato a mi red para ver si puedo entrar a un website que voy a hostear en mi ordenador personal.

Aqui dejo preparado en mi portatil ligolo y el servidor de TheTruckOfAlmendruc, antes configurando con el comando server newconfig la ip del cliente de la vpn como host y el puerto correspondiente.

alt

Teniendo todo listo para la acción, conecto el aparato a la red.

alt

alt

Una vez que me llega la conexión al servidor, selecciono el aparato e inicio la conexion de ligolo con mi servidor a través del comando.

Hago un ifconfig desde ligolo para ver las interfaces que tiene el aparato a su disposición, la única y la que nos interesa es la eth0, entonces la añadimos con TheTruckOfAlmendruc con el comando route_add ip_range

alt

Una vez todo listo ejecutamos el comando start en ligolo para iniciar el tunel y viajamos a la ip local de mi ordenador personal, donde he dejado un http server abierto en el puerto 1234 con una imagen para comprobar el éxito de la operación.

alt

Conclusiones

Al terminar el proyecto y probarlo localmente me ha gustado el resultado, la batería realmente no he tenido ni que calcular cuanto dura, según el post donde vi como hacerla portable ponía que 8 / 10 horas, sinceramente desde que ensamble el aparato y hice pruebas con el software y demás la he enchufado a la corriente un par de veces contadas y hasta ahora nunca se ha apagado, por lo que me deja tranquilo.

Seguiré mejorando el proyecto ya que esto realmente es una especie de beta, queda mucho que tocar en el código y en el aparato, todo lo que cambie de codigo lo subiré en mi github, y si cambio algo del aparato o lo colocaré en este posts indicando que esta actualizado o crearé uno nuevo, por ahora lo siguiente que me gustaría hacer seria hacerlo mas pequeño y mas potente a nivel de Ethernet, ya que este HAT lo máximo que soporta son 10 mb/s, pero bueno también podemos hacer este proyecto con una Raspberry Pi 3 o 4, que esas llevan integradas el conector Ethernet y son gigabit, también hacer una buena carcasa para el aparato que se pueda fabricar con impresora 3d y ponerla por aquí para quien haga el proyecto.

Sea como sea, mantendré todo por este blog, no olvides entrar en mi canal de youtube ahí también subiré videos de demostración de TheTruckOfAlmendruc.

https://www.youtube.com/channel/UCae2TOC2fLlOHrJetnR9QUQ

Un saludo hackers <3