Categorías
Hacking Hacking Python Networking Programacion Services - Software

Hacking con Python Parte 34 – Examinando servicios SNMP con PySNMP

Uso de PySNMP para controlar agentes SNMP en un segmento de red local.

simpleSNMPTest.py:    https://github.com/Adastra-thw/pyHacks/blob/master/simpleSNMPTest.py
simpleSNMPTestOIDs.py:    https://github.com/Adastra-thw/pyHacks/blob/master/simpleSNMPTestOIDs.py
snmpBruter.py:    https://github.com/Adastra-thw/pyHacks/blob/master/snmpBruter.py


Repositorio GIT de la serie:

https://github.com/Adastra-thw/pyHacks.git


Make a Donation Button

[wpvideo J2FSiucm]

Categorías
Hacking Python Networking Programacion

Hoy vengo a hablar de mi libro. Python para Pentesters.

A partir del día de hoy, se encuentra disponible al público mi libro sobre Pentesting con Python :-). Se trata de un documento que he escrito basándome en lo que he aprendido en los años que llevo dedicándome a la seguridad informática y al desarrollo de software. Me ha llevado varios meses escribir un documento con el me que sintiera a gusto, un documento en el que pudiera recopilar algunos de los tópicos que considero los más importantes cuando se habla de pentesting y hacking. Los contenidos del libro no son los mismos que has visto en la serie de vídeos que he desarrollado sobre “Hacking con Python”, el libro incluye temas más avanzados y completos, además se explica cómo usar librerías y herramientas que no se han mencionado en los vídeos. Lo he hecho con la idea que siempre he tenido en mente cuando de informática se trata: Cualquier profesional que se dedique a esto tiene que tener unos conocimientos mínimos en programación (que no consiste simplemente en dominar un único lenguaje), tiene que tener la capacidad suficiente para afrontar problemas de manera creativa y utilizando la inmensa cantidad de recursos que se encuentran a su disposición y creo, que es algo que las nuevas generaciones de hackers y pentesters lo suelen olvidar (o mejor, solemos olvidar porque no soy tan mayor. 🙂 ). He intentado ponerme en el lugar del lector y he enfocado el documento en aquellos temas que a cualquier persona dedicada a temas relacionados con el hacking le gustaría leer. Por otro lado, aquellos que me conocéis (y los que me soportáis :-p ) sabéis que no me siento a gusto “vendiendo humo”, hablando de cosas de las que no controlo plenamente o sobre “teorías” demasiado abstractas que en muchos casos se alejan tanto del mundo real/practico, que en raras ocasiones las vemos reflejadas en herramientas funcionales. Con todo esto, mi idea es que el lector tenga un documento en el que se mezcle la teoría y la practica con muchos ejemplos y casos prácticos.

No es precisamente un documento introductorio a técnicas de pentesting, hacking o programación en general, pero creo que es una buena guía para el “público de todas las edades”, incluso si no sabes programar, solamente necesitas ser curioso, tener ganas de aprender y dedicar algo de tiempo.

Dado que se trataba de mi primera obra y tenía muchísimas dudas sobre cómo debía editar y publicar mi libro, decidí contactar directamente con Chema Alonso para que me diese consejos sobre todos esos temas y me hablase sobre 0xWORD, que es la editorial que él lleva desde hace algunos años. Chema es una persona que se ha ganado mi respeto no solamente por su nivel técnico, sino también porque es una persona con carisma, amable y que siempre esta dispuesto a compartir sus conocimientos y colaborar en lo que pueda, eso si, no le pidas que te consiga una cuenta de Facebook o Hotmail que ahí ya no es tan amable XD. Toda mi vida he pensado que el respeto es algo que hay que ganarse, ya que tus méritos, habilidades y dedicación es lo que realmente cuenta y la gente puede ver el “brillo” de tu labor.

Por otro lado, después de valorar las otras opciones que tenia a mi disposición, he confiado mi obra a 0xWORD y creo que ha sido la decisión correcta ya que me han asesorado y apoyado durante todo el proceso, la verdad es que he quedado muy satisfecho con su trabajo y desde ya os adelanto, que hay otro libro en marcha sobre Python, pero centrado en Maleware, anonimato, Exploiting, Cyberwarfare y todo lo relacionado con la seguridad puramente ofensiva, a lo que se dedican «los chicos malos» de Internet. Seguro que os va a encantar, pero de momento no puedo decir mucho más. 🙂

La verdad es que llevaba mucho tiempo pensando en escribir un libro sobre Hacking, ese era uno de los objetivos que tenía previstos para este año y desde el mes de enero comencé a dar pinceladas y a estructurar lo que quería escribir. Todos los días estuve volcando las cosas que tenia en mi cabeza y página tras página iba dando forma al documento. Ha sido una actividad muy estimulante para mí, ya que movía de un lado al otro aquellas cosas que llevo aprendiendo desde que comencé a “jugar” con ordenadores. Mientras escribía, me venían muchos recuerdos de aquellas épocas en las me pasaba horas y horas delante del monitor y mis padres se enfadaban conmigo por ello. Épocas en las que iba a la facultad de informática de mi universidad y me sentía a gusto en las salas de ordenadores programando algo en C, jugando con alguna distro de Linux, o en la biblioteca leyendo algún libro. También recuerdo la forma en la que me miraban algunas personas y con su lenguaje corporal (o a veces directamente) me decían: “¿A dónde vas con esos pelos? ¿Qué haces? Las personas de bien llevan el cabello corto y no se visten así”, recuerdo que me importaba una soberana .…. y de hecho, me divertia mucho ver sus reacciones XD. Los ordenadores y mi conocimiento sobre ellos ha cambiado muchísimo desde aquel entonces, pero prácticamente todo lo demás sigue igual, sin importar los años ni las circunstancias. Solamente espero tener la oportunidad de poder seguir así, de poder seguir aprendiendo cosas, mejorando mis habilidades y compartiendo lo aprendido. Aun hay un largo camino por recorrer.

Si compras el libro, solamente espero que superes con creces lo que has invertido, que te sirva para ampliar tus conocimientos o simplemente recordar cosas que a lo mejor tenias olvidadas y como siempre, si tienes cualquier duda, comentario o sugerencia para una futura edición, no dudes en ponerte en contacto conmigo. Con esta entrada no intento venderte nada, simplemente voy dejar que los contenidos del documento hablen por si solos. Fíjate en el índice del libro y si después de leerlo crees que te puede aportar algo, no dudes en comprarlo, eso es justo lo que yo hago con los libros que realmente despiertan mi interés y creo que es el mejor consejo que se le puede dar a cualquier lector.

Saludos y Happy Hack!

Categorías
Hacking Hacking Python Programacion Services - Software

Tortazo v1.1 ya está disponible!

Hace un par de semanas he terminado de desarrollar la versión 1.1 de Tortazo y dado que he incluido varias cosas que me han parecido interesantes, en esta entrada hablaré un poco sobre los cambios y mejoras que se han incluido en esta primera versión estable (o eso espero) del proyecto. Para aquellos que no saben de que va todo esto, desde hace unos meses se me ocurrió desarrollar un framework de auditoría centrado exclusivamente en la web profunda de TOR (aunque tengo pensado extender sus funcionalidades a otras redes como I2P), la razón es muy simple, porque actualmente no hay, o al menos que yo conozca, herramientas que permitan ejecutar pruebas de penetración contra repetidores o servicios ocultos en TOR. Mi idea ha sido crear un framework que incluya varias funcionalidades y utilidades que puedan ser utilizadas por usuarios finales y por desarrolladores que quieran ejecutar rutinas de código contra repetidores maliciosos o servicios ocultos, algo así como Metasploit Framework, pero enfocado a la web profunda. Además de lo anterior, cuenta con una pequeña API que permite crear plugins que rápidamente se integran en Tortazo y permite reutilizar funciones para conectividad, acceso y pentesting en la web profunda. Aunque llevo algunos meses de desarrollo y estoy bastante satisfecho con los resultados, aun hay muchas cosas que me quedan por implementar, cosas que se pueden mejorar y seguramente, cosas que se deben corregir, pero tengo el animo y la motivación para hacerlas en la próxima versión.

Algunas de las cosas que he hecho en la versión 1.1 son las siguientes:

Documentación en readthedocs.

Documentación completa sobre cómo utilizar Tortazo y sus modos de operación. Todas las secciones se encuentran subidas a readthedocs.org en el siguiente enlace: http://tortazo.readthedocs.org

 

Mejoras en el código.

Se han mejorado los modos de operación y la carga de plugins en el interprete de IPython, además se han deprecado algunas opciones, especialmente las que permitían ejecutar ataques por diccionario, las cuales ahora se encuentran incluidas en el plugin “bruter” de Tortazo. También se han incluido varias funciones en la API para que cualquiera pueda aprovecharlas, como por ejemplo funciones para conectar con servicios ocultos con SSH, FTP, SMB, HTTP o iniciar un túnel con Socat. Dichas funciones se explican en la siguiente sección de la documentación: http://tortazo.readthedocs.org/en/latest/plugin_development.html

 

Ejecutables para Windows y Linux.

Utilizando PyInstaller he generado un fichero ejecutable para Windows y otro para Linux, de esta forma, si solamente quieres probar las funcionalidades básicas de Tortazo, los ficheros ejecutables incluyen todas las dependencias necesarias para usarlo sin necesidad de instalarlas una a una en tu interprete de Python. No obstante, solamente incluye los modos de operación básicos y dado que PyInstaller, ni ninguna de las otras alternativas para convertir programas en Python a ficheros ejecutables soporta la importación dinámica de módulos, el sistema de plugins no se encuentra disponible en los ejecutables generados, los cuales se encuentran ubicados en el directorio “bin” del proyecto.

Modo “repositorio” para descubrir servicios ocultos.

Tal como explicaba en algunas entradas anteriores sobre encontrar y atacar servicios ocultos en la red de TOR, descubrir servicios ocultos no es una tarea trivial, de hecho es todo un reto para cualquier pentester de seguridad que se enfoca en la web profunda de TOR. Pensando en esto, he intentado mitigar un poco el problema creando un modo de ejecución nuevo en Tortazo, el cual se encarga de generar direcciones onion validas y probar si alguno de los tipos de servicios soportados se encuentra en ejecución en dichas direcciones. Para ello existen dos formas de generación y procesamiento de las direcciones:

Incremental: Partiendo de una dirección onion parcial, intenta completar los caracteres restantes con todas las combinaciones validas y probar cada dirección onion resultante.

Aleatorio: De forma indefinida, intentará generar direcciones onion validas y aleatorias, las cuales son posteriormente probadas para determinar si hay un servicio en ejecución en dicha dirección.

Para ver más detalles sobre este modo de operación, la documentación explica detalladamente su funcionamiento interno. http://tortazo.readthedocs.org/en/latest/repo-mode.html#repository-mode-label

Para activar este modo, basta con ejecutar el script Tortazo.py con la opción “-R” especificando un tipo de servicio para ejecutar las pruebas.

[sourcecode language=»python» wraplines=»false» collapse=»false»]
python Tortazo.py -R ftp -O ganiondf6k8ldip -v

python Tortazo.py -R ssh -O daditnwf7kqltus -v

python Tortazo.py -R http -O RANDOM -v
[/sourcecode]

En los ejemplos de ejecución anteriores, los dos primeros comandos intentarán generar todas las combinaciones posibles para los caracteres faltantes en las direcciones onion ingresadas con la opción “-O” y con cada una de ellas, se ejecutarán peticiones dependiendo del tipo de servicio indicado en la opción “-R”. Finalmente, en el último ejemplo, se ejecutarán peticiones HTTP contra todas las direcciones aleatorias generadas por Tortazo. Como se puede apreciar, para indicarle a Tortazo que genere direcciones onion aleatorias, solamente es necesario utilizar la opción “-O” con el valor “RANDOM”. Todos los resultados son almacenados en la base de datos y posteriormente pueden ser utilizados desde cualquiera de los plugins integrados en Tortazo.

Por otro lado, en el fichero ubicado en <TORTAZO_DIR>/db/knowOnionSites.txt hay más de 400 direcciones onion con servicios ocultos descubiertos. Dichas direcciones pueden ser comprobadas y automáticamente insertadas en la base de datos de Tortazo editando el valor de la propiedad “loadKnownOnionSites” ubicada en el fichero <TORTAZO_DIR>/config/config.py y cuyo valor por defecto es “False”. En el caso de activar dicha propiedad, cada vez que se ejecute Tortazo en modo “repositorio”, automáticamente se comprobará y se insertará en base de datos dichas direcciones, solamente en el caso de que emitan una respuesta valida.

Configuraciones personalizadas y arranque automático de TOR.

Para que alguien pueda realizar peticiones contra cualquier servicio oculto o simplemente para navegar anónimamente utilizando TOR, es necesario iniciar una instancia de TOR que actuará como cliente y se encargará de crear un circuito para el envío de peticiones. Esto no es nada nuevo, pero además de crear un circuito virtual, también se abren ciertos puertos que permiten interactuar con dicha instancia, como por ejemplo un puerto de control, un puerto SOCKS, un puerto OR, entre otros que dependen directamente de las opciones incluidas en el fichero de configuración “torrc” indicado para iniciar TOR. Estas propiedades y especialmente, el valor del proxy SOCKS, son muy importantes para poder utilizar TOR. Evidentemente, muchas de las funcionalidades incluidas en Tortazo también dependen de que exista un proxy SOCKS por el cual poder enviar peticiones contra la web profunda y en este caso, pueden haber dos posibles escenarios:
1. Existe una instancia de TOR ejecutándose y el puerto SOCKS es alcanzable por Tortazo

2. No existe una instancia de TOR ejecutándose o el valor del puerto SOCKS utilizado por Tortazo no es correcto.

En el primero de los escenarios no hay ningún problema, ya que Tortazo utilizará el puerto SOCKS y por medio de él ejecutará peticiones contra cualquier servicio oculto en la red de TOR, Tortazo leerá el valor de la propiedad “socksPort” localizada en el fichero de configuración <TORTAZO_DIR>/config/config.py para obtener el puerto en la máquina local donde supuestamente deberá existir una instancia de TOR en ejecución cuyo valor por defecto será “9050”. Sin embargo, en el segundo escenario hay un problema, ya que para ciertas tareas, es necesario poder conectarse con la web profunda de TOR utilizando el proxy SOCKS de una instancia en ejecución. En tal caso, es posible utilizar las opciones “-U” y “-T”, donde “-U” indica que se debe usar una instancia de TOR iniciada por Tortazo y -T para iniciar una instancia de TOR desde Tortazo utilizando los valores declarados en el fichero de configuración que se debe pasar por argumento. El fichero <TORTAZO_DIR>/config/config-example/torrc-example contiene algunas opciones de configuración de TOR y puede ser utilizado para iniciar una instancia rápidamente.

[sourcecode language=»python» wraplines=»false» collapse=»false»]
python Tortazo.py -R ftp -O ganiondf6k8ldip -v -U -T config/config-example/torrc-example

[/sourcecode]

Desarrollo de plugins en Tortazo.

En Tortazo existe un sistema de plugins que se basa en el uso de IPython para la carga dinámica de clases. Dichas clases representan los plugins que se integran en Tortazo y extienden de la clase “BasePlugin”, la cual incluye todas las funciones y elementos necesarios para conectarse con la web profunda de TOR. Aun se trata de una API pequeña, pero contará con muchísimas más funciones en futuras versiones. Para ver un ejemplo simple sobre cómo crear un plugin en Tortazo, la siguiente guía puede ser de utilidad. http://tortazo.readthedocs.org/en/latest/plugin_development.html

 

Plugins incluidos en la versión 1.1

El número de plugins que se encuentran integrados en la versión 1.1 es muy pequeño, sin embargo son completamente funcionales y permiten realizar tareas de pentesting contra repetidores o servicios ocultos. Algunos de ellos se explican a continuación.

crawler

Se trata de un plugin que utiliza la API de Scrapy para lanzar un crawler contra un servicio web oculto en la deep web de TOR. Cuenta con varias funciones que permiten especificar las reglas que debe usar el Spider a la hora de visitar enlaces y extraer contenidos. Este plugin, como muchos otros, se encarga de crear un túnel utilizando Socat para mapear un puerto local contra una dirección onion concreta. El valor de dicho puerto por defecto es el 8765, con lo cual debe encontrarse abierto en la máquina donde se ejecuta Tortazo, pero si no es el caso, es posible especificar un valor distinto cuando se invoca a la función “crawlOnionWebSite”.

[sourcecode language=»python»]
python Tortazo.py -P crawler -D -v -U -T config/config-example/torrc-example

Tortazo Plugin<deepWebCrawlerPlugin> : self.help()

Tortazo Plugin<deepWebCrawlerPlugin> : self.compareWebSiteWithHiddenWebSite(‘http://theanarchistlibrary.org/library’, ‘http://4zeottxi5qmnnjhd.onion/titles.html’)

Tortazo Plugin<deepWebCrawlerPlugin> :self.crawlOnionWebSite("http://4zeottxi5qmnnjhd.onion/")

[/sourcecode]

En las instrucciones anteriores, se carga el plugin en el interprete y posteriormente se ejecutan algunas funciones disponibles en él. La función “help” muestra todas las funciones disponibles en el plugin, la función “compareWebSiteWithHiddenWebSite” se encarga de comparar un sitio web en Internet con el contenido de un sitio web oculto y devuelve un porcentaje que indica el nivel de similitud entre ambos sitios y finalmente, la función “crawlOnionWebSite” se encarga de ejecutar el spider contra la dirección onion indicada.

hiddenService

Este plugin permite crear un servicio web oculto en la deep web con el contenido indicado por el usuario. Con este plugin es posible crear servicios web ocultos con contenidos maliciosos que intenten obtener información sobre el usuario que consulta dicho servicio. Permite crear una dirección onion nueva o utilizar un servicio que se ha inicializado anteriormente.

[sourcecode language=»python»]
python Tortazo.py -P hiddenService -D -U -T config/config-example/torrc-example -v

TortazoPlugin <maliciousHiddenServicePlugin> :self.startHTTPHiddenService(serviceDir="/home/adastra/Tortazo/plugins/attack/utils/hiddenServiceTest/",hiddenserviceDir="/home/adastra/Escritorio/hidden_service_django")

[/sourcecode]

La única función definida en el plugin es “startHTTPHiddenService” y permite iniciar un servicio oculto con los recursos indicados en el argumento “serviceDir”, recursos como páginas html, scripts, CSS, imágenes, documentos, etc. En el caso de que se haya creado un servicio oculto con anterioridad, es posible indicar su ubicación con el parámetro “hiddenserviceDir”, si dicho parámetro no se indica, automáticamente se creará un servicio oculto con una dirección onion nueva.

bruterPlugin

Este plugin simplemente se encarga de ejecutar ataques por diccionario contra diferentes tipos de servicios ocultos, tales como SSH, FTP, SNMP o SMB. Del mismo modo que otros plugins en Tortazo, es necesario contar con una instancia de TOR en ejecución con el puerto SOCKS abierto, de esta forma será posible enviar las peticiones a cada uno de los servicios ocultos indicados.

[sourcecode language=»python»]
python Tortazo.py -P bruter -D -U -T config/config-example/torrc-example -v

Tortazo Plugin <bruterPlugin>: self.sshBruterOnHiddenService("5bsk3oj5jufsuii6.onion",dictFile="/home/user/dict")

Tortazo Plugin <bruterPlugin> : self.sshBruterOnHiddenService("5bsk3oj5jufsuii6.onion")

Tortazo Plugin <bruterPlugin> : self.ftpBruterOnRelay("37.213.43.122",dictFile="/home/user/dict")

Tortazo Plugin <bruterPlugin> : self.ftpBruterOnHiddenService("5bsk3oj5jufsuii6.onion",dictFile="/home/user/dict")

Tortazo Plugin <bruterPlugin> : self.self.snmpBruterOnRelay("37.213.43.122",dictFile="/home/user/dict")

[/sourcecode]

Existen varias funciones en el plugin que permiten ejecutar ataques por diccionario, las cuales en todos los casos, reciben como argumento el diccionario con nombres de usuario y contraseña. En el caso de no especificar dicho fichero, el plugin utilizará FuzzDB automáticamente para la generación de usuarios y contraseñas a probar. La función “help” permite ver todas las funciones disponibles y en todos los casos, existen funciones para atacar repetidores o servicios ocultos en la deep web de TOR. No obstante, el caso de SNMP es bastante particular, dado que se trata de un protocolo que funciona sobre UDP y el trafico que maneja la red TOR es enteramente TCP, debido a esto, teóricamente no pueden existir servicios ocultos con SNMP, sin embargo si que es posible que algunos de los repetidores encontrados tengan un servicio SNMP en ejecución, por este motivo las funciones disponibles para atacar este tipo de servicios, solamente están disponibles para repetidores y no para servicios ocultos.

Hay algunos otros plugins que también son interesantes y si el proyecto te llama la atención, puedes estudiarlos con mayor detalle en la siguiente sección de la documentación. http://tortazo.readthedocs.org/en/latest/available_plugins.html
Además, existen otros plugins que permiten integrar herramientas como Nessus, W3AF o Shodan.

Saludos y Happy Hack!

Categorías
Explotación de Software Hacking Programacion

Explotación de Software Parte 33 – Desarrollo de Shellcodes en Linux – Reverse Shell

Desarrollo de una ReverseShell en un sistema Linux. Se enseña el uso de la systemcall «socketcall» con las funciones «socket» y «connect».

reverse.nasm:      https://github.com/Adastra-thw/ExploitSerie/blob/master/reverse.nasm
reverseTest.c:     https://github.com/Adastra-thw/ExploitSerie/blob/master/reverseTest.c


Repositorio GIT de la serie:

https://github.com/Adastra-thw/ExploitSerie.git


Make a Donation Button

[wpvideo 8l0qLEjY]

Categorías
Hacking Hacking Python Networking Services - Software

Hacking con Python Parte 33 – Peticiones HTTP contra TOR utilizando requests y requesocks

Uso de las librerías requesocks y socks para ejecutar scripts utilizando el proxy socks de TOR.

AnonBrowser.py:    https://github.com/Adastra-thw/pyHacks/blob/master/AnonBrowser.py
SimpleTorConnect.py:   https://github.com/Adastra-thw/pyHacks/blob/master/SimpleTorConnect.py
SimpleTorConnectRequests.py:   https://github.com/Adastra-thw/pyHacks/blob/master/SimpleTorConnectRequests.py

Repositorio GIT de la serie:

https://github.com/Adastra-thw/pyHacks.git


Make a Donation Button

[wpvideo Tp0OocbT]

Categorías
Explotación de Software Hacking Programacion Services - Software

Explotación de Software Parte 32 – Desarrollo de Shellcodes en Linux – Bind Shell

Desarrollo de una BindShell en un sistema Linux. Se enseña el uso de la systemcall «socketcall» con las funciones «socket», «bind», «listen» y «accept».

dump.sh:  https://github.com/Adastra-thw/ExploitSerie/blob/master/dump.sh
bind.nasm: https://github.com/Adastra-thw/ExploitSerie/blob/master/bind.nasm

Repositorio GIT de la serie:

https://github.com/Adastra-thw/ExploitSerie.git


Make a Donation Button

 

[wpvideo 4IAPeKYW]

Categorías
Hacking Hacking Python Networking Programacion

Hacking con Python Parte 32 – Uso de Fabric sobre servicios SSH

Uso de la librería Fabric para administrar paralelamente múltiples servidores SSH. Puede ser útil para crear una botnet sobre servidores SSH vulnerables o con contraseñas débiles.

fabfile.py:   https://github.com/Adastra-thw/pyHacks/blob/master/fabfile.py

SimpleFabricAdmin.py:   https://github.com/Adastra-thw/pyHacks/blob/master/SimpleFabricAdmin.py


Repositorio GIT de la serie:

https://github.com/Adastra-thw/pyHacks.git


Make a Donation Button

[wpvideo fWn320Pk]

Categorías
Hacking Networking Services - Software

Ataca un servicio oculto en TOR. Si te atreves!

Los servicios ocultos en TOR son una de las características más interesantes que tiene dicha red y sin lugar a dudas, constituyen una forma de compartir información o comunicarse con alguien de forma confidencial y anónima. No obstante suelen ser muy lentos, pesados y a veces, no tienen unos buenos niveles de disponibilidad, además, después del último “advisory” de seguridad publicado por el equipo de TOR https://blog.torproject.org/blog/tor-security-advisory-relay-early-traffic-confirmation-attack muchos han optado por utilizar otras soluciones que suelen dar buenos niveles de anonimato, privacidad, confidencialidad y rendimiento, véase por ejemplo los “freesites” en Freenet o los “eepsites” en I2P. Lo cierto es que en los últimos años la red de TOR se ha convertido en el centro de atención, hay mucho interés de gobiernos y entidades privadas que ven en dicha red, una fuente de información ENORME y todos buscan cualquier tipo de fallo que permita descubrir la identidad de cualquier usuario que utilice TOR.

A pesar de todo, TOR sigue siendo “el rey” en el campo del anonimato y aunque otras redes del mismo tipo tienen características muy similares, aun no llegan al nivel de madurez ni a la cantidad de usuarios que usan TOR. Hablamos de una red muy solida y atacar directamente su infraestructura requiere de una cantidad considerable de servidores para intentar controlar una pequeña fracción de trafico, algo que no suele pasar desapercibido por demasiado tiempo.

Configurar un repetidor o servicio oculto no es demasiado complicado, solamente es necesario establecer las opciones de configuración adecuadas en el fichero “torrc” y a correr. No obstante, hay muchos detalles técnicos que son interesantes y que un hacker/pentester que se dedique a trabajar con esta red debería conocer.

¿Cómo funcionan los servicios ocultos en TOR?

En primer lugar, un servicio oculto puede ser cualquier cosa, desde un servidor HTTP, FTP, SSH, SAMBA, etc. Hablamos de servicios comunes que funcionan utilizando la red de TOR para el envío y recepción de paquetes, el único requisito es que dichos servicios utilicen protocolo TCP o se utilice un “wrapper” para convertir cualquier paquete de datos en otros protocolos como UDP o ICMP directamente a TCP. Como el lector podrá imaginarse, dichos servicios pueden contener fallos de seguridad que pueden ser aprovechados por un atacante y de esta forma, conseguir “romper” su anonimato, aunque suena simple, como se verá más abajo hay ciertos impedimentos que dificultan descubrir y posteriormente atacar servicios vulnerables en la red de TOR.

Evidentemente para que podamos seguir hablando de anonimato y privacidad tanto en el servicio como para sus clientes, la ubicación de ambas partes debe ser desconocida y para ello, TOR emplea el siguiente flujo de trabajo:

Paso 1. El servicio necesita estar disponible en la red de TOR para que los usuarios puedan utilizarlo y para ello, lo primero que hace es elegir tres repetidores en la red de TOR de forma aleatoria y construir un circuito virtual hacia ellos, esto quiere decir que el servicio no establece una conexión directa con dichos repetidores, son simplemente el punto final de los circuitos creados. Estos repetidores elegidos aleatoriamente en la terminología de TOR son conocidos como “Introduction Points” y son los encargados de recibir las peticiones de los clientes y enrutarlas por medio del circuito virtual hacia al servicio oculto. Posteriormente, el servicio oculto se encarga de enviar su clave pública a cada uno de los “Introduction Points”, la cual será utilizada para que cada “Introduction Point” pueda asociar dicha clave pública con un servicio concreto y de esta forma, no exponer en dichos repetidores la ubicación real del servicio.

Paso 2. Hasta este punto, solamente se seleccionan repetidores de forma aleatoria, se crean circuitos virtuales para comunicarse con dichas máquinas y se les envía la clave privada del servicio. No obstante, el servicio oculto debe estar disponible a los clientes y para ello debe registrar su información básica en la red de TOR y de esta forma los clientes podrán acceder a dicho servicio. El servidor debe conformar un “hidden service descriptor” que no es más que un fichero que contiene la dirección “onion” del servicio (se hablará de esto más abajo), su clave pública y el listado de “Introduction Points” seleccionados en el paso anterior. Este descriptor es enviado a las autoridades de directorio de TOR, las cuales se encargan de procesar la solicitud y registrar el servicio oculto.

Paso 3. El servicio está disponible y ahora cualquier usuario podrá acceder a él. No obstante, el cliente TIENE QUE CONOCER la dirección “onion” de ese servicio antes de poder consultarlo a las autoridades de directorio de TOR. Asumiendo que el cliente disponga de dicha dirección “onion”, realiza una petición HTTP a dicha dirección. Dicha petición es tratada de un modo distinto por el protocolo TOR, ya que detecta que se trata de una petición a un servicio oculto y automáticamente se encarga de obtener la información que se encuentra asociada con dicha dirección. En el caso de que dicha dirección se encuentre registrada, el cliente obtendrá la clave pública del servicio y el listado de los repetidores que actúan como “Introduction Point” para contactar con el servicio oculto. El documento que devuelven las autoridades de directorio se conoce como “Rendezvous Service Descriptor”.

Paso 4. Ahora que el cliente tiene todo lo que necesita saber para conectar con el servicio oculto, debe encargarse de crear un circuito a un repetidor concreto que será seleccionado de forma aleatoria y que se encargará de enviar las peticiones del cliente a uno de los “Introduction Point” del servicio oculto. Este repetidor que ha seleccionado el cliente de forma aleatoria se conoce como “Rendezvous Point” y es el encargado de enviar los datos de la petición del cliente junto con la clave pública del servidor para realizar la conexión con alguno de los “Introduction Point” definidos.

Paso 5. La petición inicial del cliente se conoce como “Introduce Message” y se trata de un mensaje cifrado con la clave pública del servicio en el que se indica la ubicación del “Rendezvous Point” junto con una cadena codificada utilizando el mecanismo “one-time-secret” (ver más aquí: http://searchsecurity.techtarget.com/definition/one-time-pad).

Paso 6. Dado que el servicio ahora conoce la ubicación del “Rendezvous Point”, las respuestas a las peticiones del cliente no pasarán por medio de los circuitos creados con los “Introduction Points”, sino que en su lugar, serán enviadas directamente al “Rendezvous Point” el cual usará el circuito establecido con el cliente para encaminar dichas respuestas a su correspondiente destino.

Se trata de un mecanismo que está muy bien pensado, de forma segura se preserva el anonimato y la confidencialidad de los datos. Es simplemente genial. No obstante se sacrifica muchísimo en términos de rendimiento ya que es bastante costosa la construcción de los circuitos involucrados entre el cliente y el servidor. Por este motivo, los hidden services en TOR son lentos. Para que quede un poco más clara la explicación anterior, la siguiente imagen enseña “grosso modo” cómo se establece un servicio oculto en TOR y cómo los clientes acceden a ellos.

 

hiddenservices

 

Hasta este punto ya sabes como funcionan los servicios ocultos en TOR, ahora: ¿Cómo atacar un hidden service y encontrar su ubicación real?. Esa es la gran pregunta y no tiene una respuesta simple, antes habría que responder algunas otras para partir el problema en trozos:

¿Los servicios ocultos pueden contener vulnerabilidades, pero cómo las puedo aprovechar?

Claro que pueden contener vulnerabilidades (y muy gordas) y lo mejor de todo es que es relativamente fácil descubrir y explotar vulnerabilidades en cualquier servicio oculto. Solamente es necesario conocer el servicio oculto que se desea atacar y enrutar cualquier petición que el atacante desea enviar por medio del proxy SOCKS que se levanta en una instancia local de TOR cuando se utiliza la opción de configuración “SocksPort” en el fichero “torrc”. En realidad es un proceso bastante simple, solamente basta con enrutar todas las pruebas que un pentester profesional ejecutaría contra un objetivo determinado utilizando el proxy SOCKS de TOR.

¿Y si es tan fácil, porque los gobiernos y otras organizaciones no lo hacen para atacar servicios ocultos maliciosos?

Atacar un servicio oculto, del que se conoce su dirección “onion” puede ser una tarea “sencilla” (dependiendo de lo bien asegurado que se encuentre el servicio, evidentemente), pero atacar un servicio oculto desconocido, del que no se tiene su correspondiente dirección “onion” es otra cosa.

No se ha mencionado antes, pero las direcciones Onion generadas por TOR, son el resultado de aplicar el algoritmo Base32 sobre el hash SHA de los primeros caracteres de la clave pública del servicio oculto. El algoritmo Base32 generaráun valor codificado de 16 caracteres donde los valores validos son las letras de la “a” a la “z” en minúsculas y los dígitos entre 2 y 7. El resultado de dicha operación es la dirección onion para un servicio oculto y que el usuario debe conocer antes de poder acceder a él. Una vez comprendido lo anterior, una dirección como “ahgt56dr32mhkva1.onion” es teóricamente valida.

¿Es tan difícil obtener todo el listado de direcciones “.onion” en la red de TOR y luego intentar atacar todos los servicios ocultos al estilo “Chuck Norris”?

No solo es difícil, actualmente no hay ordenadores que sean capaces de tratar la cantidad de combinaciones posibles, especialmente cuando los 16 caracteres que conforman la dirección Onion son desconocidos para el atacante. Para que el lector comprenda la dificultad que implica intentar encontrar un servicio oculto, vamos a jugar un poco con los números y vamos a realizar algunos cálculos.

Sabemos que una dirección Onion se compone de 16 caracteres, donde los posibles valores de cada uno de esos 16 caracteres puede variar entre las letras de la “a” y “z” y los dígitos entre 2 y 7. Esto quiere decir, que para calcular el conjunto de direcciones, es necesario realizar un producto cartesiano https://es.wikipedia.org/wiki/Producto_cartesiano dónde el número de posibles combinaciones es: 32^16 = 1208925819614629174706176

Se trata de un valor ENORME y ahora, solamente por un segundo, imagina ese número de posibles combinaciones cargadas en la memoria de un programa para después intentar procesarlas. Es simplemente imposible e inviable con la capacidad de computo de los ordenadores modernos.

El espacio de posibles direcciones Onion es tan grande que resulta imposible controlar la totalidad de posibles servicios ocultos que puedan existir en la red de TOR (Eso sin mencionar que muchos no se encuentran activos todo el tiempo, dificultando aun más su detección). Hablamos de un problema que se encuentra relacionado con la capacidad de los ordenadores modernos y aunque se utilice un cluster de super-ordenadores, el problema sigue presente.

Vamos a jugar un poco más con los números, de tal modo que puedas comprender cuánto tiempo seria necesario para completar la tarea de generar y procesar el espacio total de posibles direcciones Onion.

Supongamos que tenemos uno o varios ordenadores que trabajan paralelamente y son capaces de procesar diez millones de posibles combinaciones por segundo, no estaría nada mal, verdad? Pues, abre una calculadora y haz el calculo o el interprete de Python, que también funciona como una calculadora.

>>> 32**16 / (10000000*60*60*24*365)

3833478626L

Estamos hablando de un proceso que puede tardar cerca de 4 billones de años. Ahora seguro que queda claro el porqué resulta tan difícil descubrir servicios ocultos en la red de TOR. Muchos de los servicios ocultos que conocemos, son muy difundidos en múltiples sitios en Internet, como por ejemplo en este blog, en el que encontrarás algunas entradas con direcciones Onion de servicios ocultos interesantes. La realidad es que la gran mayoría de servicios ocultos y especialmente aquellos que tienen contenidos maliciosos que son creados por mafias, traficantes y de otros grupos de delincuentes que pueden ser extremadamente peligrosos, se mantienen en las sombras y tienen un nivel de anonimato bastante alto ya quesus direcciones no las vas a encontrar en blogs, directorios de direcciones onion o cualquier sitio en Internet, son realmente servicios ocultos que un grupo muy limitado de personas conocen y utilizan. Esos servicios, puede que tengan vulnerabilidades que cualquier Hacker podría explotar, pero el punto es: ¿Cómo encontrar servicios con esas características? Es como encontrar una aguja en un pajar, o más concretamente encontrar una aguja entre 1208925819614629174706176 agujas. Resulta prácticamente imposible.

Pero algo se podrá hacer, no?

La realidad es que actualmente es poco lo que se puede hacer desde el punto de vista de un pentester o desarrollador, ya que se trata de un problema relacionado con capacidad y poder de procesamiento de los ordenadores actuales, un problema que probablemente se solucionará en algunos años/décadas con la llegada de los ordenadores cuánticos, los cuales teóricamente, tendrán una capacidad de procesamiento que será muchísimo mayor que varios super-ordenadores juntos, sin embargo para eso aun faltan varios años. Se puede intentar limitar la cantidad de combinaciones reduciendo el número de caracteres empleados para la generación de la dirección Onion, limitando también la cantidad de posibilidades y probablemente descartando una gran cantidad de direcciones con algún servicio en ejecución. Otra posibilidad, es tener el conocimiento de una dirección parcial y de este modo, la cantidad de combinaciones de la dirección onion se reducirá considerablemente. Finalmente, se puede crear un proceso que se ejecutará de manera indefinida e ininterrumpida generando direcciones onion validas de forma aleatoria y posteriormente ejecutar una petición contra dicha dirección con la esperanza de encontrar un servicio oculto, algo similar a pegar tiros al aire esperando darle a algún pato o irte a pescar, sera simplemente cuestión de suerte y puede tardar horas o incluso días en obtener resultados positivos.

No son soluciones que realmente ayuden a resolver el problema, sin embargo permiten acotarlo un poco.

De esto hablaré en una próxima entrada.

Saludos y Happy Hack!

Categorías
Explotación de Software Hacking Programacion

Explotación de Software Parte 31 – Desarrollo de Shellcodes en Linux – Execve Local Shell

Primer vídeo en el que se hace un énfasis especial en el desarrollo de shellcodes bajo sistemas Linux. Se enseña un ejemplo en el que es posible generar una shell local.

dump.sh:     https://github.com/Adastra-thw/ExploitSerie/blob/master/dump.sh
shell.nasm:  https://github.com/Adastra-thw/ExploitSerie/blob/master/shell.nasm
exit.nasm:   https://github.com/Adastra-thw/ExploitSerie/blob/master/exit.nasm

 

Repositorio GIT de la serie:

https://github.com/Adastra-thw/ExploitSerie.git


Make a Donation Button

[wpvideo yDBRlble]

Categorías
Hacking Hacking Python Programacion Services - Software

Hacking con Python Parte 31 – Examinando programas y librerías con pefile y pydasm

Usando PEFile y PyDASM para inspeccionar y desensamblar ficheros en formato Portable Executable (PE) en sistemas windows.

 

disassemblerDemo.py:   https://github.com/Adastra-thw/pyHacks/blob/master/disassemblerDemo.py

Repositorio GIT de la serie:

https://github.com/Adastra-thw/pyHacks.git


Make a Donation Button

[wpvideo O08gKAuP]