viernes, 15 de marzo de 2019

Pentesting contra servicios ocultos TOR (1)

Suponiendo que existe de delincuentes que necesitan transferir información entre ellos y operan en distintos países, solamente ese grupo conocen la dirección del servicio que utilizán y adicionalmente, dicho servicio puede estar disponible en una franja horaria determinada y el resto del tiempo puede estar inactivo. Esta situación limita las probabilidades de que el servicio sea encontrado por cualquier otro usuario de la red de Tor y evidentemente hace que seaprácticamente imposible de atacar. No obstante, si el pentester conoce la dirección "onion" del servicio, las cosas cambian radicalmente, ya que es posible utilizar las herramentas de pentesting habituales para auditar cualquier servicio en internet. Es posible usar Metasploit, W3AF, OpenVAS, NeXpose, Nikto, Nmap, etc. Lo único que necesita el pentester es conocer la dirección del servicio que se debe auditar y a continuación, levantar una instancia de Tor, con su correspondiente servidor proxy SOCKS.
El mecanismo es muy sencillo, basta con crear un túnel que permita conectar el servicio oculto con un puerto arbitrario en la máquina local autorixando el proxy SOCKS levantado por la instancia de Tor y a partir de este punto, se puede ejecutar herramientas. Es tan facil como suena y no requiere configuraciones especiales. A continuación se explicará el procedimiento para realizar pruebas de pentesting contra servicios habituales en la red de Tor.

Pentesting contra servicios ocultos HTTP


En este caso, para demostrar el uso de algunas herramientas de pentesting contra un servicio oculto vulnerable en al web profunda Tor. Se produce al arrancar una aplicación web con múltiples vulneravilidades que utiliza el equipo de W3AF para realizar pruebas, dicha aplicación web vulnerable es conocida como Django-moth.
Para poder iniciar debemos tener python y Django instalados y ejecutar el siguiente comando.
python manage runserver 8080
En este caso concreto, el puerto utilizado para arrancar la aplicación será el puerto "8080", con lo cual el servicio oculto debe estar debidamente configurado para enrutar todas las peticiones entrantes por un puerto en la web profunda de Tor, hacia el puerto "8080" de la máquina  donde se encuentra en ejecución de "Django-moth". Partiendo de la explicación dada en los párrafos anteriores sobre las directivas necesarias para la creación de servicios ocultos en una instancia de Tor, los siguientes valores en el fichero "torrc" podría ser suficiente.
HiddenServiceDir /home/usuario/Escritorio/hidden_service_HTTP/
HiddenServicePort 80 127.0.0.1:8080
Ahora el servicio vulnerable se encuentra iniciado y es accesible, es posible atacar dicho servicio de la misma forma en la que se puede atacar cualquier aplicación o servidor utilizando herramientas de pentesting comunes. En este caso, emplear herramientas de conocimiento para aplicaciones web es un buen comienzo,como por ejemplo Nikto o scripts NSE de Nmap. No obstante, antes de hacerlo es necesario aplicar algún mecanismo para acceder el servicio oculto n la web profunda de Tor dichas herramientas. Para hacer esto, pueden aplicarse dos enfoques, o bien las herramienta que se va a utilizar soporta el enrrutamiento de peticiones por medio de un proxy SOCKS o crear un túnel tranparente que permita enrrutar todas las peticiones al servicio oculto utilizando el proxy SOCKS levantado por una instancia Tor.
La segunda alternativa resulta ser más fiable, ya que no hay que aplicar ningún tipo de configuración adicional para que las herramientas funcionen correctamente, todo se hace transparente por medio de proxy SOCKS  de la instancia de Tor. Para crear un túnel con las características puede ser varias alternativas, una de ellas es creando un túnel SSH y habilitando el soporte para servidores proxy del SOCKS, algo bastante común es implementaciones como OpenSSH.
Utilizando un proxy transparente con librerias como Twisted en python o utilizando directamente una herramienta como Socat. Dado que utilizar Socat es cómodo, rapido, fácil y fiable, se trata sin duda de una de las mejores alternativas para conseguir el objetivo planeado. Suponiendo que las dirección del servicio oculto que se desea atacar  es "sadrewmj712fertxo.onion" y el puerto del servidor proxy SOCKS es "9150", el comando que se ejecutaría para crear el túnel sería el siguiente.
socat TCP4-LIATEN:7000, reuseaddr, fork SOCKS4A:127.0.0.1:sadrewmj712fertxo.onion:80, socksport=9150
El comando anterior abrirá el puerto "7000" en la máquina local utilizará el puerto 9150 para enrutar todas las peticiones entrantes por el puerto "7000" al servicio oculto en el puerto 80. Esto se traduce a que se puede utilizar cualquier herramienta de pentesting web estableciendo como objetivo la máquima local en el puerto "7000" y SOCAT se encargará de rederigir todas la peticiones realizadas contra dicho puerto al servicio oculto definido. Además de enrutar las peticiones desde el cliente hacia el servicio oculto, otra de las características que tiene SOCAT es que los túneles creados con esta herramienta son bidireccionales, es decir, que no solamente es capaz de enrutar las peticiones a su correspondiente destino, sino que también es capaz de transmitir las respuestas que emite el servidor. A partir de aquí, realizar un proceso de pentesting contra el servicio oculto es un labor con la que probablemente el lector se sentirá mucho más cómodo.


Dado que en este caso concreto el servicio oculto es la aplicación web vulnerable "Django-moth", una buena forma deatacarlo es W3AF.
./w3af_console
w3af>>> plugins audit os_commanding
w3af>>> target set target http://localhost:7000/audit/os_commanding/param_osc.py?param=-la
w3af>>> start
OS Commanding was found at: "http://localhost:7000/audit/os_comanding/param_osc.py”, using HTTP method GET. The sent data was: "param=%7C%2Fbin%2Fcat%%20%2Fetc%2Fpasswd" The modofied parameter was "param". This vulnerability was found in the request with id 39.
Scan finished in 14 seconds.
Stopping the core...
Como se puede apreciar, se haencontrado una vulnerabilidad y se ha registrado en el "knowledge Base" de W3AF. A continuación, se puede intentar explotar dicha bulnerabilidad utilizando el plugin "os_commanding".


Se ha generado una consola contra el servicio oculto utilizado W3AF. A partir de este punto, el atacante podrá ejecutar comandos directamente contra el servicio oculto vulnerable y evidentemente compromenter su anonimato.


En este caso se ha atacado un servicio oculto del tipo HTTP, pero tal como se ha mencionado anteriormente en este documento, el la web profunda de Tor existe toda la case de servicios, los cuales pueden estar mal configurados o ser vulnerables. Siguiendo lso mismos conceptos expluestos en el ejemplo anterior, en las siguientes secciones se extenderá cómo ejecutar pruebas de pentesting contra otros tipos de servicios ocultos.

por Daniel Echeverri Montoya.

No hay comentarios.: