Archive

Archivo de Autor

PoC sobre vulnerabilidad en Whatsapp: WhatsappCrasher

enero 4, 2016 1 comentario

Hola a todos y feliz año nuevo!

Esta es la primera entrada del año 2016 en THW y en esta ocasión, han sido Eduardo Blázquez González ( aka Fare9 ) y Ilya Cabos Kobjak ( aka eijk ) quienes han querido colaborar en este espacio publicando una prueba de concepto utilizando Python para ejecutar un ataque DoS contra un contacto de whatsapp. Es una PoC en la que se expone el uso de librerías como Selenium para la interacción automatizada con sitios web, en este caso concreto, con whatsapp web. Sin más preambulos, os dejo su aportación.

Un saludo y Happy Hack!
Adastra.

 

Estás intentando disfrutar de tu hobbie favorito en tu dia libre, pero cada 3 segundos tu teléfono te distrae porque te está llegando un tren de mensajes de whatsapp… Ese es el tipo de cabreo del que nació este programa. Pocas cosas hay tan estimulantes para la mente que una buena tarde de estudio con  colegas de profesión y más aún si dichos compañeros tiran por ramas tan dispares como son la seguridad informática y la inteligencia artificial. Así que molestos del “brrrr” del móvil al llegar un whatsapp, y con una vulnerabilidad de este servicio de mensajería recientemente publicada, decidimos echar mano a un portátil con una distro de linux instalada, unos cuantos conocimientos en python y ganas de joder la marrana. Sabíamos cómo funcionaba la vulnerabilidad de whatsapp, la teoría era desde luego sencilla:
“Si envías un montón de caritas sonrientes, el whatsapp peta”
Bien, en ninguna de las webs que he leído se explica exactamente qué pasa o por qué solo afecta a los sistemas Android… Una de las teorías con las que jugamos fue que la traducción simultánea que la versión de whatsapp de Android hace de los emojis de UTF-8 a imágenes png codificadas en hexadecimal consume recursos de forma descontrolada hasta que el sistema no puede más; la diferencia con iOS puede estar en que el pipeline de su renderizado de gráficos está optimizada para trabajar con el hardware sobre el que corre, o en la forma de tratar las cadenas que tienen como diferencia android (Java) e iOS (objective-C). Hicimos un sencillo script de consola en python, cuya ejecución abre un navegador y espera a que el usuario entre en la aplicación; una vez dentro nos pedirá el nombre de usuario de la víctima, el cual encontrará usando el buscador. En el caso de que hubiera más de una coincidencia, se pedirá que se seleccione uno de ellos según su orden en la lista (de 1 hasta N). Una vez hecho esto, se abrirá en el navegador el chat con el usuario seleccionado. En este punto el usuario debe hacer alarde de sus habilidades en ingeniería social para asegurarse de que la víctima “pique el anzuelo” escribiendo un mensaje personalizado que sepa captar el interés del objetivo. Será este el punto en el cual el ordenador empezará a bufar al tener que escribir 7000 veces el emoji de una bomba, provocando el crash de whatsapp. Aun así, no es nada en comparación con lo que sufrirá el móvil android del objetivo, quien observará consternado como su pantalla queda bloqueada y la conversación arruinada,
puesto que la única forma que tendrá de volver a hablar con el usuario es borrándola. Se trata de un script picado en no más de 30 minutos, por tanto no ha sido testeado en condiciones, ni se han corregido todos los posibles errores. Queda abierto para todo el que quiera probarlo y ver que en poco tiempo conociendo las herramientas es posible hacer algo interesante.

En esta repo de git viene el código y un instalador para Linux:
https://github.com/Fare9/WhatsappCrasher
Por último dar las gracias a Daniel Echeverry ( aka adastra ), por dejarnos publicar esta entrada en su blog “ the hacker way “, y con esto poder compartir un poco de nuestros conocimientos de forma pública a todos los interesados.
Ilya Cabos Kobjak ( aka eijk )
Eduardo Blázquez González ( aka Fare9 )

THW Academy: Plataforma de aprendizaje para hackers en castellano.

octubre 19, 2015 3 comentarios

Logo HackerWay1 Las cosas han cambiado muchísimo con respecto a hace poco más de 15 años, por aquel entonces encontrar información sobre seguridad informática y hacking no estaba al alcance de todo el mundo, en las bibliotecas ya te podías olvidar de encontrar manuales sobre reversing en sistemas Linux, explotación de software o hacking en general. Por aquella época todo ello era como la magia o la alquimia, cosas maravillosas que pocos habían llegado a escuchar y muchos menos habían llegado a ver.
Ahora tenemos Internet, comunidades, blogs, foros, etc. Mucha información que se encuentra a nuestro alcance y llegamos a ella al instante, muchas nuevas tecnologías y una curva de aprendizaje que cada vez está más cuesta arriba. No obstante nos seguimos encontrando con que prácticamente toda la documentación de calidad y con buenos niveles de profundidad se encuentra en inglés.
Hay muchos sitios en castellano que no son buenos, son lo siguiente, pero a veces se suelen centrar una temática muy concreta o abarcan muchos temas sin llegar a un nivel de profundidad aceptable en ninguno.
Luego, hay muchos cursos/certificaciones en donde te piden que pagues miles de euros para aprender sobre web hacking, reversing, networking, programación o cualquier otra temática concreta, con unos precios que a mi juicio tienen una calidad/precio muy desproporcionada.
Los que me conocéis o seguís este blog, sabéis que me gusta investigar y compartir lo que aprendo, llevo muchos años con una “sed” de conocimiento que nunca he llegado a saciar y aunque han habido épocas en las que me he sentido muy cansado y desmotivado por situaciones concretas, nunca he claudicado y llevo media vida, casi 15 años, intentando aprender y mejorar mis habilidades a nivel personal y académico, lo hago porque como he dicho en otras ocasiones, para mi esto no es solamente un oficio, representa una filosofía de vida a la que me mantengo fiel y también por eso escribo en este espacio cada vez que puedo.
Todo esto me ha llevado a crear THW Academy (http://academy.thehackerway.com/), una plataforma de aprendizaje totalmente online en la que vas a poder aprender sobre seguridad informática y hacking desde una perspectiva completamente “hands on” o practica. No esperes las típicas clases tradicionales llenas de conceptos teóricos sin ningún tipo de demostración practica, o clases demasiado extensas y aburridas en las que desconectas a los 10 minutos. Todas las sesiones de cada uno de los cursos tienen una parte teórica que suele ser muy concisa y una parte practica en la que se puede ver “al vuelo” cómo se aplican los conceptos teóricos.
Este espacio lo he diseñado con tres niveles de cursos: “Básico”, “Intermedio” y “Avanzado”, cada uno adaptado a su correspondiente nivel. Las personas inscritas en la plataforma podrán acceder a todos los cursos de cada nivel sin ningún tipo de restricción. Se suben varias sesiones todas las semanas que se pueden consultar en el calendario oficial, además tendrás acceso a vídeos en HD, documentación y espacios privados especialmente diseñados para probar técnicas de hacking.
Puedes seguir todos los cursos a la vez o solamente aquellos que sean de tu interés. Es aconsejable ir siguiendo las sesiones de todos los cursos para sacar el máximo provecho de la plataforma, pero el estudiante es libre de seguir únicamente aquellos cursos que decida. En la medida en que los cursos van avanzando, los contenidos van siendo más prácticos y didácticos, el desarrollo de las sesiones semanales es constante y muy dinámico, cada mes vas a tener acceso a varios vídeos que podrás repasar las veces que quieras.
La plataforma se encuentra ubicada en: http://academy.thehackerway.com y como podrás ver en el catalogo de cursos, los que se encuentran disponibles actualmente son los siguientes:

“Básico”
THWB1: Introducción a la programación en Python.
THWB2: Introducción a la privacidad y el anonimato.
THWB3: Introducción a la programación en Ruby.
THWB4: Introducción al pentesting y al hacking.

“Intermedio”
THWI1: Pentesting en aplicaciones web.
THWI2: Administración y hardening de servidores web Apache.
THWI3: Desarrollo web seguro con Java.

“Avanzado”
THWA1: Hacking con Python.
THWA2: Uso y configuración avanzada de I2P y Freenet.
THWA3: Uso y configuración avanzada de TOR.

Son 10 cursos a los que vas a tener acceso por el mismo precio y además hay promociones que te podrían interesar.  El calendario oficial incluye la planificación de las sesiones que se van a publicar durante los próximos meses con sus correspondientes contenidos, el cual puedes consultar en el siguiente enlace: http://academy.thehackerway.com/calendario-oficial además, puedes ver más detalles sobre THW Academy aquí: http://academy.thehackerway.com/cuentame-que-es-esto
En los próximos meses también tengo planificados cursos sobre Arquitectura de ordenadores, introducción a ensamblador, Fuzzing y explotación de software avanzado en sistemas Windows y Linux.
Esto es lo que tengo para toda la comunidad, quiero compartir lo que constantemente he ido aprendiendo en los años que llevo dedicado a esto y todo lo que me queda por aprender. Creo que está es una buena forma.

Como siempre, si quieres comentarme cualquier cosa o necesitas más información, me puedes escribir a adastra@thehackerway.com

Saludos y Happy Hack!
Adastra.

Así he vivido la segunda edición de la DragonJAR Security Conference.

octubre 2, 2015 8 comentarios

Esta es una entrada que tenia pendiente desde hace algunos días, así como muchas otras, pero debido a la cantidad de cosas que estoy haciendo no me ha dado tiempo, por cierto… pronto novedades😉
Volviendo al tema, tal como anuncié hace algunas semanas en este blog, la charla que había preparado para la segunda edición de la DragonJar Security Conference de este año en Colombia fue aceptada y para allá que me fui la segunda semana de septiembre. El objetivo era dar un taller sobre Pentesting con Python y una charla sobre la web profunda de Tor, pentesting y desanonimización de servicios ocultos maliciosos, para finalmente terminar con la presentación de la herramienta TortazoWeb.
En el viaje no hubo ninguna complicación y aunque fueron muchas horas, me resultaron muy entretenidas charlando con Lorenzo (@lawwait) de todo un poco, no le conocía personalmente y ha sido genial comprobar que es una persona con la que puedes hablar de cualquier cosa y de la que puedes aprender muchísimo, por mi parte espero que podamos coincidir nuevamente🙂.
Llegamos un día antes de comenzar los talleres a Pereira, no sin antes tener una escala en Ciudad de Panama, en donde pasamos varias horas en el aeropuerto esperando nuestro vuelo a Colombia. En Pereira nos esperaban nuestros amables anfitriones, Jaime (@DragonJar) y Jacobo (@jjtibaquira), los cuales nos dirigieron hacia el coche que nos llevaría a Manizales. Unos metros antes de llegar al coche, nos paso algo que no esperábamos, resulta que había un concierto de Vilma Palma en dicha ciudad y al parecer iban a llegar más o menos a la misma hora que llegamos nosotros, con lo cual cuando salimos del aeropuerto de Pereira habían varios fans con las típicas pancartas y tías buenas mostrando las tetas. No, eso último desafortunadamente no😄. El caso es que unos metros antes de llegar al coche se nos acercaron dos tías diciendo cosas que al principio no pude entender producto del agotamiento, hasta que nos dimos cuenta de que nos confundieron con dos de los integrantes de Vilma Palma y no sé si querían un autógrafo u otra cosa, pero después de indicarles que no eramos quienes ellas creían, se alejaron con escepticismo, al parecer aun creían que eramos esas personas y nos miraban mientras nos marchábamos en el coche.
Como cualquiera se puede imaginar, esto ha dado lugar a interminables trolleos durante y después de la CON. Para los ninjas troll: NO, no me sé ni “el auto rojo”, ni “travesti”, ni nada de eso.😄.
Un par de horas después llegamos a Manizales, mi ciudad natal, la cual después de tantos años me resulto muy distinta a como la recordaba en todos los sentidos, aunque aun no ha perdido su esencia y sigue siendo ese lugar encantador en donde comencé a interesarme por la informática a la edad de 16 años, en donde aprendí a cuestionarlo todo, donde aprendí que las cosas no siempre son lo que parecen y que intentar ver las cosas desde el punto de vista del otro nos permite abrir nuestra mente y comprender otras formas de pensar y actuar. Probablemente lo que más recuerdo es “Chipre”, el barrio donde viví más de media vida, recuerdo que cuando era niño siempre estaba jugando en los parques saltando de un lado al otro (eso cuando no tenia algún brazo roto) y cuando era un poco más mayor, pasaba horas y horas con mis libros de informática mientras disfrutaba de sus atardeceres desde la colina más alta, respirando aire fresco y maravillandome al descubrir el mundo de los ordenadores. Fueron tiempos muy buenos que nunca olvidaré, ahora llevo varios años viviendo en Madrid y es otra ciudad por la que siento un cariño muy especial y en la que he podido conocer a gente estupenda que ahora hacen parte de mi vida, a pesar de que tantos hablen mal de ella y de sus ciudadanos. Muy probablemente en unos años me iré a vivir a otra parte del mundo y no me cabe la menor duda de que al sitio al que vaya, siempre llevaré conmigo un “cachito” de estas dos tierras que tanto me han aportado.
El evento tenia una duración de dos días en las que se iban a impartir las charlas por parte de los ponentes, pero los tres primeros días correspondían a los talleres. Dichos talleres se realizaron en la universidad de Manizales y allí pasé los tres primeros días de la semana hablando sobre Python y pentesting a un grupo de personas a las que se les notaba muy motivadas y con ganas de aprender, así da gusto enseñar cosas.🙂
El jueves 17 de septiembre comenzaron las charlas, arrancando con Lorenzo Martinez y finalizando al día siguiente con Gabriel Bergel. En términos generales han ido muy bien, el nivel técnico de los ponentes ha sido bastante alto y la gestión general por parte de los organizadores ha sido impecable. Mi charla fue una de las últimas, el día viernes en la tarde justo después de la charla de Cristian Amicelli sobre NLTK (que por cierto fue una de las que más me gusto). A mi juicio, las mejores cosas del evento fueron las siguientes:

  • Ponencias muy entretenidas y desarrolladas por gente que sabe de lo que habla. Todas me gustaron, sin excepción alguna.
  • Las atenciones recibidas por parte de la organización y lo pendientes que estaban en todo momento de cada detalle. Todos fueron cercanos y muy amables, algo que desde luego es muy característico en la gente de mi tierra.🙂
  • Las condiciones pactadas con los organizadores del evento se cumplieron hasta la última coma, demostrando seriedad y buena voluntad.
  • El buen ambiente generado entre los ponentes. Rápidamente ganamos confianza y los trolleos iban y venían constantemente. He vuelto a España con varias “etiquetas” nuevas, un grupo de rock?/pop? e incluso con una carrera política que aboga por los derechos de los animales.😄
  • El “securityroom” fue la caña, a pesar del Panameño pesao y de que tuvimos que salir muy pronto para iniciar nuestro viaje de regreso.
  • El café, el ceviche, el arroz caldense, los chuzos y hamburguesas “caliche”, los kilos que he subido comiendo tantas cosas ricas….😛
  • En nuestro viaje de vuelta Lorenzo y yo hemos tenido la oportunidad de conocer Ciudad de Panamá durante un día. Rafa Revert (@Bl4ck_D4wn) muy amablemente nos recibio y nos llevo a conocer los lugares más emblemáticos de la ciudad, donde por supuesto no podía faltar el canal.

No obstante, no todo fue tan bueno y hubo un par de puntos negativos que no me gustaron nada.

  • El puñetero “jet lag”. Viajar de un lado al otro es extremadamente agotador, especialmente si tienes escalas que duran varias horas. No obstante, es lo que hay y desde luego que no es un punto negativo de cara al evento, el cual a partir de esta segunda edición seguiré recomendando.
  • Los “haters”. Antes de viajar no tenia ni idea que había personas (bueno, para ser exactos y que yo sepa, solamente una) con comentarios muy negativos sobre la comunidad DragonJar. Sin embargo, después de leer dichos comentarios estando allí y viendo la cantidad de resentimiento que destilaban, me quedó perfectamente claro no hay objetividad en dichas palabras y que son producto de un problema personal de esa persona con Jaime, el cual, asumiendo una actitud que a mi juicio es absolutamente madura y responsable, decidió simplemente ignorar esos comentarios y dejar que los hechos hablarán por si solos. Cuando alguien no es capaz de defender sus argumentos desde el respeto, o bien su educación es muy pobre o sus argumentos carecen de peso. En cualquiera de los dos casos, esa persona pierde legitimidad y lo único que consigue es ponerse en evidencia.
    Personalmente ese tipo de cosas son las que me echan para atrás a la hora de asistir a eventos relacionados con la seguridad informática y relacionarme con otros “hackers”, ya que una comunidad tan fuerte como la Latina, en donde no solamente se incluyen hackers de América Latina, sino también de España, debería caracterizarse y tener por bandera los principios mínimos de respeto y colaboración, pero la realidad es muy distinta (salvo contadas excepciones).
    Siempre me he topado con la misma mierda (y perdonar la expresión), gente que en lugar de alegrarse y apoyar el progreso de otras personas que llevan años trabajando duro y aportando a la comunidad, se llenan de envidia y resentimiento, sentimientos propios de individuos mediocres que son incapaces de sobresalir por sus propios medios o con problemas psicológicos que desafortunadamente, otros tenemos que aguantar. Muchas veces he visto gente que sin ser realmente hackers, habla mal de otros que si que lo son y si escuchas detenidamente sus criticas, te das cuenta que en la mayoría de los casos no tienen ningún fundamento y que además, son llevadas al terreno personal, cuando en muchos casos ni siquiera han hablado más de 10 minutos con la persona que es objeto de critica.
    También he visto gente que se llaman a si mismos “hackers” solamente por el hecho de utilizar Metasploit (y a veces ni eso) pero que luego los sacas de ahí y no saben ni lo que es un desbordamiento de pila y no saben ni escribir un mísero algoritmo en papel, pero lo que les falta en conocimientos les sobra en verborrea y veneno para con otras personas. Todos tenemos nuestros fallos y desconocemos cosas que otros controlan bastante bien y precisamente por ese motivo han surgido las comunidades. No vayas de “guay” haciéndote llamar a ti mismo hacker cuando no tienes ni siquiera los conocimientos básicos de informática y mucho menos critiques a los que llevan años aportando activamente a mejorar tus conocimientos y los de otros que quieren mejorar sus habilidades.
    Hay gente en nuestro sector que siempre han estado ahí para contestar a tus correos con preguntas, para explicarte cómo funcionan ciertas cosas en sus respectivos blogs o comunidades de forma constante, ininterrumpida y gratuita, que viajan a la otra punta del mundo para dar una charla de cosas que nunca has escuchado hablar, por la que no va a recibir ni un duro y que ha preparado con ilusión y dedicación. Mostrar un poco de agradecimiento a esas personas y tratarlas con un mínimo de respeto se llama NOBLEZA y es una de las características más valoradas que puede tener cualquier persona, sea hacker o no.

Personalmente, creo que es uno de esos eventos a los que merece la pena asistir todos los años y desde ya os digo, el próximo CFP de la DragonJAR tendrá un paper mio con investigaciones que estoy haciendo y que espero que sea de interés para todos.

Un saludo y Happy Hack!
Adastra.

Categorías:Hacking

DragonJAR Security Conference en Colombia.

agosto 19, 2015 5 comentarios

Hace algunos días recibí una muy agradable sorpresa, el equipo de DragonJAR ha valorado mi propuesta para asistir como ponente a la próxima edición de la DragonJAR Security Conference que se celebrará en Colombia en el mes de septiembre😀.
En dicho evento, voy a impartir un taller sobre Python enfocado al pentesting, con un contenido muy similar al del RootedLab que he dado este mismo año en Madrid, pero con una diferencia importante: El tiempo. El taller de la Rooted duraba solamente 8 horas, con lo cual tuvimos que ir bastante rápido sobre los contenidos para poder abarcar todas las cosas interesantes que aporta Python a la hora de ejecutar procesos de pentesting, pero en este caso el taller durará 3 días (24 horas) en las que vamos a poder realizar muchas más practicas y demostraciones, además de explicar algunos detalles sobre el lenguaje que incluso se les escapa a programadores con conocimientos sobre Python.
Por otro lado, el día 18 de septiembre a las 14:00 dará comienzo mi charla sobre la “deep web” y anonimato con TOR. Es una charla en la que voy a hablar sobre lo que es la deep web y voy intentar desmitificar muchas de las ideas preconcebidas que he visto rondando en foros o incluso en comentarios en este blog. Será una charla en la que voy a invitar a los asistentes a reflexionar, a romper sus esquemas y la forma en la que ven la deep web y TOR (atentos los vendemo… emm, “analistas del big data” XD). Luego, me voy a centrar en explicar a grandes rasgos la arquitectura de TOR y cómo realizar pruebas de penetración básicas contra servicios ocultos en la deep web. Finalmente, voy a presentar la nueva versión de Tortazo con la que he estado trabajando los últimos meses con constancia e ilusión. Como vaís a poder ver, el enfoque que le he dado ahora es completamente distinto a la primera versión, será más “amigable” y enfocada a compartir información, además de que la podrá utilizar cualquiera con o sin conocimientos tecnicos, eso si, el “core” de Tortazo, es y seguira siendo igual, es decir, tienes que saber exactamente lo que estas haciendo para poder instalar y configurar la herramienta, no está enfocada a script kiddies ni es un metasploit framework que instalas y utilizas con dos comandos que te encuentras por Internet, tampoco es una herramienta pensada para ejecutarse en la plataforma concreta de tu ordenador, es muy probable que tengas que adaptarla para cumplir con tus necesidades concretas, en ese sentido no hay cambios. De todos modos, como podrán ver los asistentes, la nueva versión será un servicio web que se encontrará disponible en Internet en los próximos meses, con el que se podrá acceder a cientos de servicios ocultos en la deep web de TOR y realizar busquedas muy amplias contra la “onion land”, ya sea utilizando una aplicación web o directamente por medio de una arquitectura de servicios REST que se encontrará disponible para todos los usuarios…. creo que ya he dicho demasiado, si realmente te interesa, es mejor que asistas a la charla.🙂
Tengo muchas ganas de ir a conocer a grandes profesionales de la seguridad informática y estoy completamente dispuesto a aprender todo lo que pueda. Quiero volver a España con una bolsa llena de ideas listas para ponerlas en practica.😉
Por último, si llevas alguna de las copias del libro de Python para Pentesters o Hacking con Python, te puedo hacer una dedicatoria sin ningún problema, o si te quieres acercar para preguntarme algo o para conocerme allí estaré, no me voy a ir a ninguna parte y tampoco te voy a morder (bueno… ya si eso lo voy viendo)😄.
Nos vemos en Colombia!

Saludos y Happy Hack!
Adastra.

Categorías:Hacking

Pentesting automatizado con Beef. Consumiendo la API Rest de BeEF con Python – Parte 3

agosto 4, 2015 6 comentarios

La API Rest de BeEF cuenta con todo lo necesario para controlar y automatizar las actividades que se pueden llevar a cabo desde el C&C de BeEF. El hecho de poder invocar a los endpoints definidos en dicha API permite crear rutinas de código que ayuden a ejecutar los procesos de recolección de información y explotación de una forma mucho más rápida y eficiente. Tal como se ha enseñado en las dos entradas anteriores sobre BeEF, utilizar esta API no es nada complicado y solamente es necesario ejecutar las peticiones HTTP con los parámetros correctos. Para hacerlo, se puede utilizar herramientas como wget, curl o incluso netcat/socat y si se quiere automatizar el uso de estas herramientas, una buena forma de hacerlo consiste en crear un script en bash que que las ejecute. Evidentemente también es posible utilizar cualquier lenguaje de programación y ejecutar las peticiones HTTP de forma automatizada utilizando las diferentes librerías que proporcionan todos los lenguajes de programación modernos. Dicho esto, a continuación se explicará cómo invocar a algunos de los endpoints de BeEF utilizando Python y en el próximo artículo, lo mismo pero utilizando Ruby.

Consumiendo la API de BeEF con Python

Python cuenta con un considerable número de librerías para realizar peticiones HTTP, lo que facilita muchísimo las cosas a la hora de crear clientes o incluso servicios utilizando Python y este protocolo. Una de las más conocidas y utilizadas es “requests” ya que con muy pocas líneas de código se puede crear un cliente HTTP completamente funcional y soportando todas las características del protocolo HTTP 1.1, algo que en otras librerías como urllib, urllib2 o httplib requiere más líneas de código y un poco más de esfuerzo. Con esto en mente se podría crear un script utilizando requests para consumir la API Rest de BeEF, pero para facilitar aun más las cosas, existe una librería pequeña y simple llamada BeEF-API que ya se encarga de interactuar con los endpoints de BeEF y solamente es necesario invocar a los métodos adecuados de dicha librería. Se encuentra disponible en el siguiente repositorio de GitHub: https://github.com/byt3bl33d3r/BeEF-API y como ocurre con prácticamente todas las librerías en Python, para instalarla solamente hace falta ejecutar el script “setup.py” con el parámetro “install”.
Esta librería se encarga de gestionar la autenticación con BeEF y almacenar internamente el token generado, el cual como se ha visto en el primer artículo, es requerido para invocar algunos de los endpoints de la API Rest.

 

>python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from beefapi import BeefAPI
>>> beef = BeefAPI({})
>>> beef.login('beef', 'beef')
True

Como se puede apreciar, todo parte de la creación un objeto del tipo “BeefAPI”, cuyo constructor recibe como argumento un diccionario, el cual puede tener las claves “host” y “port” en el caso de que se quiera indicar una interfaz de red y puertos distintos a los valores por defecto (127.0.0.1:3000). Posteriormente se invoca al método “login” enviando como parámetros el usuario y la contraseña para autenticarse en el sistema.
Una vez el usuario se ha conseguido autenticar y se ha generado un token para la sesión actual, la librería dispone de una serie de métodos para invocar distintos endpoints, gestionando el token de autenticación de forma automática en cada una de dichas invocaciones. Algunos de los métodos disponibles en una instancia de la clase BeefAPI, permiten obtener los módulos disponibles en la instancia de Beef, buscar módulos que contengan una cadena determinada, listar todos los navegadores que han ejecutado el “hook” de Beef y que se encuentran “online”, así como aquellos que se encuentran “offline” y por supuesto, ejecutar módulos contra todos o solamente algunos de los navegadores enganchados. Esta librería utiliza internamente “requests” y los valores de retorno de cada petición siempre son diccionarios que representan las repuestas emitidas por cada uno de los endpoints invocados en formato JSON.

beefpython1Listando todos los módulos disponibles en BeEF

Como mencionaba antes, también es posible buscar módulos que cumplan con un patrón de texto determinado, pudiendo filtrar de esta forma aquellos módulos que sean de interés para el usuario.

beefpython2Filtrando módulos en BeEF

Del mismo modo que se pueden realizar búsquedas y listar los módulos disponibles en BeEF, también es posible hacer operaciones similares contra los navegadores que se encuentra online y offline.

beefpython3Listando navegadores hookeados

Y por último, pero no menos importante, es posible ejecutar un módulo determinado contra uno o varios navegadores que se encuentran “hookeados” en BeEF. Para hacerlo, en primer lugar hay que obtener el objeto correspondiente al navegador contra el que se desea ejecutar el módulo y en segundo lugar, se debe especificar el identificador del módulo que se desea utilizar contra el navegador. Cada objeto del tipo “Session” (navegador hookeado) tiene un método llamado “run” el cual recibe como argumento un valor númerico que representará el identificador de un módulo. Dicho método se encargará de buscar el módulo identificado con el valor especificado y posteriormente, se encargará de lanzarlo contra el navegador hookeado, algo que como se puede ver más abajo, se consigue con pocas lineas de código.

>>> for hook in beef.hooked_browsers.online:
...     commandId = hook.run(243)["command_id"]
...     print beef.modules.findbyid(243).results(hook.session, commandId)

En este caso, el módulo con el identificador “243” corresponde al módulo “Detect tor”, el cual como su nombre lo indica, intenta determinar si el navegador en cuestión está utilizando TOR para navegar. El método “run” es el encargado de ejecutar el módulo especificado y de retornar una estructura en formato “JSON” con un identificador del comando, el cual debe ser utilizado posteriormente para obtener los resultados que ha devuelto el módulo.

Como se ha podido ver, utilizar está librería no es complicado y es una buena forma automatizar las tareas que pueden llevarse a cabo desde la consola web de BeEF. En el próximo artículo hablaré sobre cómo hacer esto mismo con Ruby.

Saludos y Happy Hack!
Adastra.

Pluggable transports en TOR para la evasión de Deep Packet Inspection

julio 30, 2015 2 comentarios

Los puentes (bridges) son una de las formas más “tradicionales” de evadir la censura por parte de países y proveedores del servicio que intentan bloquear las autoridades de directorio y nodos de TOR. Se trata de un mecanismo que funciona bastante bien, ya que los puentes son direcciones que no se encuentran directamente relacionadas con TOR y aunque funcionan exactamente igual que cualquier repetidor, su información no se distribuye públicamente en ninguno de los descriptores emitidos por las autoridades de directorio. Aunque esta medida resulta bastante efectiva para evadir mecanismos de bloqueo simples basados en direcciones o dominios, en los últimos años se ha comenzado a ver que organismos censores implementan técnicas del tipo DPI (Deep Packet Inspection) para analizar el contenido de los paquetes en busca de cualquier indicio o patrón que les permita saber si el paquete en cuestión utiliza el protocolo de TOR. Evidentemente este tipo de técnicas suelen ser muy efectivas y permiten detectar y bloquear cualquier paquete de datos que utilice el protocolo de TOR.
Como siempre, nos encontramos en un constante “tira y afloje”, en el que los mecanismos de censura son mucho más complejos y efectivos, lo cual obliga a implementar técnicas de evasión que puedan ir un paso por delante. Dado que utilizar únicamente los bridges tradicionales ahora no es del todo efectivo (en algunos países), el equipo de TOR lleva unos años mejorando las técnicas de evasión y últimamente se ha venido hablando mucho sobre los Pluggable Transports (PT), cuyo principal objetivo es el de ofuscar el tráfico entre un origen y un bridge por medio de PTs. Dichos PTs se encargan de modificar los paquetes de datos para parezcan peticiones normales, ocultando cualquier indicio que permita descubrir de que se trata de un paquete de datos que hace parte de un flujo de TOR. La siguiente imagen simplifica el funcionamiento del sistema de PTs, el cual como se puede apreciar, no es demasiado complejo.

PTFuncionamiento de los Pluggable Transports en TOR

Pluggable Transports en TOR con Obsproxy

La especificación de “Pluggable Transports” está diseñada para que sea independiente de TOR u otras soluciones de anonimato e indica los pasos y directrices que debe seguir cualquier implementación de PTs. En el caso de TOR, existen varias implementaciones de PTs que se pueden utilizar, siendo Meek y ObsProxy las más soportadas y por supuesto, recomendadas.

Obsproxy es un framework escrito en Python que permite implementar PTs. Utiliza Twisted para todas las operaciones de red y la librería pyptlib la cual ha sido creada por el equipo de TOR específicamente para soportar las características de los PTs. Esta librería es especialmente interesante para aquellas aplicaciones que se encargan de transformar y ofuscar tráfico TCP y que requieren enviar dichos flujos de paquetes a un destino utilizando TOR.

Para utilizar Obsproxy en el lado del cliente (ver la imagen de arriba) se puede ejecutar TOR Browser Bundle, el cual contiene las implementaciones de los principales PTs soportados en TOR. En este caso concreto, Obsproxy y las otras implementaciones de PTs se encuentran incluidas en el directorio “<TOR_BROWSER/Browser/TorBrowser/Tor/PluggableTransports>”. Dichas implementaciones pueden utilizarse en modo cliente cuando se arranca Tor Browser y su configuración es prácticamente automática por medio de un asistente muy simple, el cual se inicia al abrir la configuración de Tor Browser.

pt1Configuración del cliente de TOR Browser

Como se puede apreciar, existen dos posibles escenarios, o bien el cliente se encuentra “censurado” y sus peticiones se encuentran filtradas por medio de un proxy o el cliente cuenta con una conexión directa a Internet, con lo cual no tendrá mayores inconvenientes a la hora de conectarse a la red de TOR. En el segundo caso, el asistente de Tor Browser le permite al cliente especificar cuál tipo de PT desea utilizar y a continuación, se encarga de configurar al instancia para que utilice el PT adecuado.

pt2Selección de un PT en Tor Browser

Después de seleccionar el tipo de PT la conexión a la red de TOR se hará por medio de los bridges que vienen por defecto en el Tor Browser y además, todas las peticiones se harán a un servidor OBSProxy por medio del cliente obfs3 local que se ha indicado. En el caso de que no sea posible realizar la conexión a la red de TOR utilizando los Bridges OBFS3 por defecto, Tor Browser indicará que hay un “censor” que se encuentra bloqueando las peticiones a dichas máquinas y en tal caso, se debe solicitar un conjunto de Bridges nuevo tal como se ha explicado en un artículo anterior.

El fichero “torrc” utilizado por Tor Browser habrá sufrido algunos cambios después de aplicar la configuración anterior y como se puede ver a continuación, dichos cambios incluyen el uso de Bridges OBFS3.

Bridge obfs3 169.229.59.74:31493 AF9F66B7B04F8FF6F32D455F05135250A16543C9Bridge obfs3 83.212.101.3:80 A09D536DD1752D542E1FBB3C9CE4449D51298239

Bridge obfs3 169.229.59.75:46328 AF9F66B7B04F8FF6F32D455F05135250A16543C9

Bridge obfs3 109.105.109.163:47779 4C331FA9B3D1D6D8FB0D8FBBF0C259C360D97E6A

Bridge obfs3 109.105.109.163:38980 1E05F577A0EC0213F971D81BF4D86A9E4E8229ED

DataDirectory /home/adastra/tor-browser_es-ES/Browser/TorBrowser/Data/Tor

GeoIPFile /home/adastra/tor-browser_es-ES/Browser/TorBrowser/Data/Tor/geoip

GeoIPv6File /home/adastra/tor-browser_es-ES/Browser/TorBrowser/Data/Tor/geoip6

UseBridges 1

Por otro lado, en el combo en el que se puede seleccionar un PT, también se puede ver “meek-amazon”, “meek-azure” y “meek-google”. Probablemente el lector se preguntará qué significa eso, pues bien, el PT Meek se basa en HTTPS y se encarga de modificar el tráfico de TOR para que las peticiones parezcan “inocentes” y en este caso concreto, “meek-amazon” se encarga de transformar las peticiones para que parezca que el usuario se encuentra interactuando con la plataforma de Amazon Web Services, “meek-azure” para que parezca que las peticiones se realizan contra la plataforma de servicios web de Microsoft Azure y finalmente “meek-google” modifica los paquetes de datos para que parezca que las peticiones realizadas por el cliente, son simplemente búsquedas en Google. Si bien es un PT muy interesante, actualmente hay varios detalles que se encuentran en estado de desarrollo y la cantidad de PTs del tipo servidor (puentes) es bastante pequeña, por ese motivo siempre se recomienda utilizar el PT de ObsProxy. Sobre Meek se hablará con mayor detalle en un próximo artículo y aunque aquí solamente se ha mencionado la configuración básica del lado del cliente para utilizar un PT con TOR, aun queda haciendo falta explicar la forma en la que se pueden crear Bridges PT que aporten a los usuarios de la red de TOR que se encuentran censurados, esto también lo explicaré en el próximo artículo.

Saludos y Happy Hack!
Adastra.

Pentesting automatizado con Beef. Características avanzadas – Parte 2

julio 28, 2015 Deja un comentario

En el artículo anterior hablaba sobre el proceso de instalación de BeEF y cómo invocar a algunos de los endpoints definidos en su API Rest utilizando cURL y en esta ocasión, voy a explicar cómo utilizar algunas características avanzadas del framework y en el próximo artículo, hablaré sobre cómo utilizar BeEF desde cualquier script en Python.

Ejecutar módulos de forma automática.

Si el panel de control central consigue que muchos usuarios ejecuten el hook en sus navegadores, será una labor bastante tediosa e ineficiente tener que ejecutar los módulos contra cada uno de los objetivos de forma manual. Afortunadamente, los módulos que se encuentran creados en BeEF y los que se pueden crear de forma independiente, deben incluir un fichero de configuración para controlar el comportamiento de dicho módulo, de esta forma, es posible marcar aquellos módulos que resulten interesantes para que se ejecuten de forma automática contra cada nueva víctima, ahorrando mucho tiempo y evitando la necesidad de estar permanentemente pendiente de que se conecten nuevas víctimas y lanzar manualmente los módulos necesarios.
Habilitar esta característica es muy sencillo, solamente hace falta editar el fichero de configuración maestro que se encuentra ubicado en “<BEEF_INSTALL>/config.yaml” y modificar la sección correspondiente a “autorun”

# Autorun modules as soon the browser is hooked.

# NOTE: only modules with target type ‘working’ or ‘user_notify’ can be run automatically.

autorun:

enable: true

allow_user_notify: true

El “autorun” se encuentra habilitado por defecto en el fichero de configuración maestro de la herramienta, sin embargo es necesario activar aquellos módulos que se desea ejecutar cuando se reciba un nuevo zombie, para ello es necesario editar el fichero de configuración “config.yaml” de cada uno de los módulos que se desee activar e incluir la flag “autorun: true”. Todos los módulos de la herramienta se encuentran disponibles en el directorio “<BEEF_INSTALL>/modules” y allí se podrán ver cada uno de los módulos disponibles desde el panel de control de la herramienta. Dentro de cada módulo existe un fichero de configuración llamado “config.yaml”, el cual típicamente contiene una única sección que es “beef” y con una única subsección llamada “module”, en ella se definen todos los detalles de configuración del módulo, incluyendo su nombre, categoría, si se encuentra habilitado o no, entre otros detalles. Este fichero sigue una sintaxis muy similar a los módulos que se encuentran disponibles en Metasploit Framework, ya que es completamente configurable e incluye detalles informativos sobre el funcionamiento del módulo. En este caso, para que un módulo cuyo atributo “target” sea “working” o “user_notify” se pueda lanzar de manera automática ante la conexión de un nuevo zombie, basta con establecer el atributo “autorun” con el valor “true”. El siguiente es un ejemplo del módulo “play_sound” que se encarga de lanzar un zumbido (un poco molesto) en la víctima conectada.

beef:

module:

Play_sound:

enable: true

category: “Browser”

name: “Play Sound”

description: “Play a sound on the hooked browser.”

authors: [“Saafan”]

autorun: true

target:

working: [“All”]

En este caso hay que tener en cuenta que esta característica lo que hace es lanzar todos los módulos que se han marcado con la flag “autorun” contra todas las víctimas que se van conectando, algo que no es deseado en todos los casos, ya que algunos módulos son específicos para un navegador concreto y a veces es mucho mejor poder crear una rutina que permita lanzar un módulo u otro dependiendo de las características del navegador de la víctima. Esto es justo lo que se podría hacer con la API Rest de BeEF y Python, como se verá más adelante.

Extensiones en BeEF

Además de los módulos que permiten ejecutar rutinas en el entorno de la víctima, otra característica muy interesante de BeEF es la posibilidad de ejecutar extensiones que permitirán activar ciertas características en el lado servidor de BeEF. Actualmente existen algunas muy interesantes que permiten integrar otras herramientas de pentesting habituales con BeEF, como es el caso de Metasploit Framework o SET. Para habilitar cualquier extensión disponible en la herramienta o una creada por terceros, se debe editar el fichero de configuración maestro (config.yaml) y habilitar todas las extensiones deseadas en la sección “extension” por ejemplo:

extension:

metasploit:

enable: false

console:

shell:

enable: true

En este caso solamente se habilitan las extensiones de metasploit y la shell de BeEF para trabajar con la herramienta desde línea de comandos en lugar de hacerlo desde la interfaz web.

Para utilizar la extensión de Metasploit, es necesario cargar el modulo “msgrpc” desde “msfconsole” o ejecutar la utilidad “msfrpcd” de Metasploit Framework. En cualquiera de los dos casos, se conseguirá levantar un servicio que permitirá la interacción de forma programática con Metasploit Framework con aplicaciones externas, como es el caso de BeEF.

La siguiente imagen enseña cómo se puede cargar el módulo “msgrpc” desde “msfconsole”

 msgrpcCargando el módulo msgrpc

Ahora que el fichero de configuración maestro ya se encuentra preparado para soportar al extensión de metasploit framework y el servicio MSGRPC se encuentra levantado, es el momento de configurar la extensión e indicar los detalles de conexión con el servidor. Para ello se debe editar el fichero de configuración de la extensión de metasploit, el cual se encuentra ubicado en la siguiente ruta “<BEFF_INSTALL>/extensions/metasploit”. Allí se deben incluir como mínimo, las propiedades que permiten establecer una conexión con el servicio MSGRPC.

Ahora, es el momento de arrancar BeEF y para ello, se puede utilizar la opción “-v” y ver el detalle de las operaciones realiza la herramienta. Como se puede ver en la siguiente imagen.

beefmsfConexión entre Beef y Metasploit

Después de esto, los módulos de metasploit framework quedarán registrados en el panel de control de BeEF como si se tratara de cualquier otro módulo de la herramienta. Evidentemente, algunos de dichos módulos requieren una preparación previa y establecer ciertos valores de configuración, pero desde BeEF se puede hacer utilizando un asistente muy simple.

beefmsf2Módulos de metasploit framework en BeEF

Otra extensión muy interesante es la extensión “console”, la cual permite sustituir el panel de control web por una interfaz por línea de comandos para controlar todos los zombies y realizar otras actividades, del mismo modo que se puede hacer con la utilidad msfconsole de metasploit framework. Para activar esta extensión, la cual viene desactivada por defecto, se debe editar el fichero de configuración principal (config.yaml) y en la sección de extensiones incluir lo siguiente:

console:

shell:

enable: false

Ahora, cuando se arranque la herramienta, en lugar de ver un mensaje indicando que se ha iniciado un servidor web para la gestión de los zombies, se podrá ver un interprete desde el cual se podrán ejecutar comandos.

beefconsoleConsola de BeEF

Desde esta consola se pueden ejecutar varios comandos, los cuales se pueden consultar con el comando “help”, dichos comandos permiten cumplir con exactamente las mismas funciones que se pueden llevar a cabo desde la interfaz web

beefconsole2Comandos disponibles en la consola de BeEF.

Existen otros módulos y extensiones que actualmente se encuentran en desarrollo y que probablemente estarán disponibles en los próximos meses, con lo cual se espera que poco a poco, su uso sea mucho más difundido y alcance los niveles de popularidad de otras herramientas de pentesting y hacking similares.

Saludos y Happy Hack!
Adastra.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 2.796 seguidores

A %d blogueros les gusta esto: