

¡Hola a todos! Hoy publico el primero de una serie de 3 artículos en los que hablaré sobre una técnica para crear y, en cierta forma, ocultar túneles HTTP en los que encapsular cualquier tipo de tráfico. Para ello, utilizaré la herramienta Chisel y el servidor NGINX. Además, también tocaré un poco el tema Domain Fronting. Esta técnica puede ser interesante y resultar útil, por ejemplo, en escenarios de Red Team donde el entorno sea muy restrictivo con el tipo de tráfico que permite salir a Internet y HTTP sea una de las pocas opciones, o incluso la única.
En esta primera parte os voy a hablar de Chisel y de cómo utilizar esta herramienta para crear túneles HTTP.
Chisel es un herramienta escrita en Go (golang) desarrollada por Jaime Pillora <
A continuación, se muestra un ejemplo de ejecución básica de chisel. En el ejemplo se ejecuta un servidor chisel escuchando en el puerto 80, y después, un cliente chisel que se conecta a dicho servidor y crea una redirección del puerto 2222 local al puerto 22 del servidor. Con esto se consigue que cualquier conexión que se lance al puerto local 2222 se encamine por el túnel HTTP de chisel y acabe llegando al puerto 22 remoto de la máquina en la que se está ejecutando chisel en modo servidor.
chisel server -p 8080
chisel client --fingerprint fb:0f:ae:0d http://192.168.1.142:8080 2222:localhost:22
ssh -p2222 root@127.0.0.1
Chisel también ofrece una serie de opciones de ejecución que pueden ser útiles en ciertos escenarios. Para ambos modos de ejecución, cliente y servidor, existe el típico argumento -v que hace que la aplicación muestre más información de ejecución. Esto puede ser útil tanto para tener más detalle durante la ejecución de la herramienta, como para solucionar posibles problemas que puedan surgir durante dicha ejecución.
Para el modo servidor, dos parámetros interesantes son --auth y --reverse, los cuales comentamos a continuación:
Para el modo cliente tres parámetros interesantes son --auth, --keepalive, y --proxy, los cuales comentamos a continuación:
Al igual que ocurre con los túneles SSH, el caso de uso más común es el del túnel directo o local, es decir, el caso en el que en un puerto local se expone un puerto remoto, que puede ser tanto de la máquina contra la que se lanza la conexión, como de otra máquina remota visible desde la máquina a donde se lanza la conexión. Sin embargo, en algunas circunstancias puede ser útil hacer justo lo contrario. En el caso del túnel reverso o remoto, en un puerto local de la máquina contra la que se lanza la conexión se expone un puerto de la máquina que lanza la conexión o un puerto de una máquina visible desde la máquina que lanza la conexión.
Chisel permite ambos tipos de conexión si se indica el parámetro --reverse cuando se lanza el servidor, como se ha descrito antes. Además, chisel permite crear múltiples conexiones dentro del mismo túnel. Tan solo hay que pasar estas por parámetro, separadas por espacio cuando se lance el cliente, respetando el siguiente formato y teniendo en cuenta que las direcciones y puertos se indican desde el punto de vista de la máquina que está ejecutando el cliente de chisel: <host-local>:<puerto-local>:<host-remoto>:<puerto-remoto> pare conexiones directas y R:<host-remoto>:<puerto-remoto>:<host-local>:<puerto-local> para conexiones reversas.
Para terminar con el post, simplemente decir que esta herramienta resulta bastante útil si se está en un entorno restringido que solo permite cierto tipo de tráfico (como HTTP) de salida hacia Internet y, por la razón que sea, se necesita lanzar otro tipo de conexiones. Con chisel esto es posible debido a que, a ojos de la red, el tráfico es HTTP. No obstante, dentro de ese túnel HTTP podemos encapsular cualquier cosa, desde SSH hasta RDP. Aun así, una nota de cautela: a nivel de máquina, ciertos controles pueden detectar el binario de chisel como software malicioso; y a nivel de red, el tráfico de esta herramienta es reconocible, lo que significa que es mejor usarla con cuidado y estar detrás de 7 proxies.
Y aquí termina este primer post sobre cómo utilizar la herramienta chisel para crear túneles HTTP- En la siguiente entrada de esta serie hablaremos sobre NGINX y de cómo utilizar esta herramienta para camuflar los túneles HTTP creados con chisel. ¡Nos vemos pronto!