Generador de imágenes Docker para infosec

  • April 12, 2020
  • tuxotron
  • Docker Image Creator

    Este es un proyecto que llevaba tiempo dándole vueltas con Fran y que por fin he encontrado algo de tiempo para dedicarle.

    La idea es muy sencilla, básicamente es el crear una imagen Docker con ciertas herramientas sin tener que tener conocimientos de cómo crear una imagen Docker o de cómo instalar dichas herramientas.

    Por ejemplo, supongamos que queremos lanzar sqlmap contra una aplicación web, y en ese momento no tenemos a mano nuestra querida Kali, y tampoco queremos buscar sqlmap e instalarla en nuestro sistema. Una forma muy conveniente y limpia sería ejecutarla desde de un contenedor Docker, y cuando terminemos nos deshacemos del contendor y listo. Nuestro sistema se queda “intacto”. Para esto, uno tendría que crear un fichero Dockerfile, añadir los comandos necesarios para instalar sqlmap, y por último construir la imagen Docker, o buscar una imagen ya creada con sqlmap y usar dicha imagen, etc.

    Docker Image Generator es un proyecto que permite crear imágenes Docker sin tener que crear Dockerfiles, que contenga las herramientas que le digamos, siempre y cuando estén disponibles en el proyecto.

    Este proyecto, aunque las herramientas que incluye son de ciberseguridad, es un proyecto genérico que puede ser extendido con herramientas de cualquier tipo, siempre y cuando puedan correr dentro de un contenedor Docker.

    El proyecto está escrito en go y he creado los binarios para Linux, MacOS y Windows.

    Si lo prefieres, puedes compilar tú mismo el proyecto (necesitarás una versión de go con soporte para módulos en tu sistema). Para ello sólo tienes que clonar el repositorio y ejecutar:

    go build
    

    O puedes usar make

    make build
    

    Una vez compilado o descargado (y extraído el contenido del .tgz) el proyecto, deberías tener un binario llamado doig, un directorio llamado tools y un fichero llamado Dockerfile.template.

    Veamos la ayuda:

    ./doig -h
    This tool creates a customized docker image with the tools you need
    
    Usage: doig [--tools TOOLS] [--category CATEGORY] [--image IMAGE] [--dockerfile] [--list]
    
    Options:
      --tools TOOLS, -t TOOLS
                            List of tools separated by blank spaces
      --category CATEGORY, -c CATEGORY
                            List of categories separated by blank spaces
      --image IMAGE, -i IMAGE
                            Image name in lowercase
      --dockerfile, -d       Prints out the Dockerfile
      --list, -l             List the available tools and categories
      --help, -h             display this help and exit
    

    Veamos las herramientas que tenemos disponibles:

    ./doig -l
    [*] Tools
      [-] altdns
      [-] amass
      [-] anonsurf
      [-] bucket_finder
      ...
    [*] Categories
      [-] powershell
      [-] scanner
      [-] reversing
      [-] osint
      ...
    

    Si miramos dentro del directorio tools, ahí podremos ver todas las herramientas registradas. Cómo se puede ver, los ficheros son ficheros .ini, y su contenido es muy sencillo, lo que nos permite extender esta aplicación con más herramientas de cualquier tipo. Todo lo que tenemos que hacer es saber que necesitamos hacer dentro de la imagen para instalarlas.

    Veamos un ejemplo de cómo podríamos crear una imagen con sqlmap y nmap:

    ./doig -i ejemplo -t nmap sqlmap
    ...
    ...
    Successfully built b2a1675f6331
    Successfully tagged ejemplo:latest
    
    Tools added to the image:
      [-] sqlmap
      [-] nmap
    

    Lo que hemos hecho es especificar con la opción -t las herramientas que queremos, y con la opción -i decimos que queremos crear una imagen con el nombre dado, en este caso ejemplo.

    Si en vez de crear una imagen docker, queremos simplemente obtener el fichero Dockerfile para generar la imagen, podemos usar la opción -d:

    ./doig -d -t nmap sqlmap
    
    FROM ubuntu:18.04
    
    RUN apt update && \
        apt install -y software-properties-common git curl p7zip-full wget whois locales python3 python3-pip && \
        add-apt-repository -y ppa:longsleep/golang-backports && \
        apt update && \
        localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
    WORKDIR /opt
    ENV LANG en_US.utf8
    
    RUN   apt install -y nmap && \
      apt install -y sqlmap && \
      rm -rf /var/lib/apt/lists/*
    

    Si hemos ejecutado el comando que nos genera la imagen, deberíamos tener un imagen llamada ejemplo, y todo lo que tenemos que hacer es ejecutar un contenedor con dicha imagen:

    docker run -it ejemplo
    [email protected]:/opt#
    

    Y desde ahí deberíamos ser capaz de ejecutar tanto nmap, como sqlmap.

    También podríamos ejectuar cualquiera de esos comandos directamente sin tener que entrar en una shell en el contenedor:

    docker run -it ejemplo nmap localhost
    
    Starting Nmap 7.60 ( https://nmap.org ) at 2020-04-12 14:22 UTC
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.000046s latency).
    Other addresses for localhost (not scanned): ::1
    All 1000 scanned ports on localhost (127.0.0.1) are closed
    
    Nmap done: 1 IP address (1 host up) scanned in 1.68 seconds
    

    ** Recuerda que el comando se ejecuta dentro del contenedor, por lo que localhost es el contenedor y no tú host.

    Por último mencionar que cada herramienta tiene definida una categoría, y existe la posibilidad de instalar todas las herramientas de una o más categorías con la opción -c:

    ./doig -c recon -i imagen-recon
    ...
    ...
    Successfully built bb4598f26508
    Successfully tagged imagen-recon:latest
    
    Tools added to the image:
      [-] wafw00f
      [-] cloudflair
      [-] massdns
      [-] theharvester
      ...
    

    El comando anterior instala todas las herramientas en la categoría recon. Cómo se puede ver, al final se listan las herramientas instaladas en la imagen.

    Al hora de correr el contendor, se le puede sacar mucho más partido si sabemos usar Docker. por ejemplo puedes querer compartir ficheros entre el contenedor y tu sistema, o ejecutar el contenedor con cierto privilegios, etc. Si quiere aprender más sobre Docker, internet está lleno de recursos, pero si prefieres documentació en español y en papel te recomiendo este magnífico libro: Docker: SecDevOps ;)

    Docker: SecDevOps

    El proyecto está en continuo desarrollo, y estamos trabajando en mejorar el código (refactorización, tests, etc), estamos añadiendo más herramientas y nuevas funcionalidades.

    Si lo pruebas y encuentras errores reportalos para que los podamos arreglar o colabora con un pull request, tanto para mejoras, cómo para añadir nuevas herramientas.

    Quiero dar las gracias Oscar por su colaboración con el proyecto, así cómo a los viejos de la vieja escuela: Fran, Alberto y Enrique, por sus ideas, apoyo y aguantarme :D

asn-search, herramienta de reconocimiento

  • February 26, 2020
  • tuxotron
  • Recon

    Uno de los pasos en la fase de reconocimiento o colección de datos sobre un objetivo, es averiguar que IPs están asociadas con el mismo. Para ello, una forma muy usada es buscar los ASN asociados a éste, y a partir de ahí usar alguna herramienta a la que le podamos pasar dicha información y nos de las IPs asociadas.

    Una web que ofrece datos bastante precisos es Electric Hurricane. De ahí podemos sacar la lista de ASNs, volcarla a un fichero y luego mandar dicho fichero a alguna herramienta como nmap, amass, etc.

    Este fin de semana me entretuve un rato jugando con este modelo y decidí automatizar el proceso del volcado de ASNs de Electric Hurricane. Para ello inicialmente intenté ejectuar curl para la extracción de dichos datos, pero esto no resultó ya que la página que muestra datos ejecuta javascript para los mismos, luego intenté hacer web scrapping, esta opción tampoco funcionó y tampoco quería usar algo como Selenium, así que por último intenté usar un navegador en modo headless, y así pude grabar la página con los datos y luego a través de un script en python extraer la información. Para automatizar todo y no tener dependencias de navegador, python, etc, decidí montar todo este tinglado en Docker (sí, es otra dependencia, pero más limpia :) ).

    Podéis encontrar el proyecto en github, y lo podéis usar de la siguiente manera:

    docker run -it --cap-add=SYS_ADMIN tuxotron/asn-search aol
    
    aol
    AS15445
    AS13084
    62.51.0.0/16
    

    Para volcarlo a un fichero sólo tienes que redirigir la salida a un fichero y luego usarlo como fuente de alguna otra herramienta.

    De vez en cuando te encontrarás con el siguiente error:

    [0227/012256.257103:ERROR:headless_shell.cc(481)] Failed to serialize document: Uncaught
    

    Por lo visto es un error en Chromium con la opción headless.

    De todas formas, si te da ese error, ejecuta el comando varias veces más y debería de funcionar.

    No es más que un proyecto de fin de semana… Happy Hacking!

El país de la [des]conexión. Parte de lo que no se vio

  • November 9, 2019
  • tuxotron
  • Equipo Enviado Especial

    El pasado miércoles 6 de noviembre en La Sexta emitieron el tercer documental de la tercera temporada de Enviado Especial, en el que Jalis de la Serna nos lleva desde el norte de España hasta la costa oeste de los EEUU. En éste, Jalis se adentra en la “nube”, muestra el peligro del rastro de los datos que vamos dejando consciente e inconscientemente, pasa por un centro de desintoxicación tecnológica, se adentra en Microsoft, Google, y acaba hablando con Javier Marcos y su esposa.

    Si no has visto el documental y deseas hacerlo, lo puedes ver desde aquí. Si estás fuera de Europa quizás no puedas verlo a través de ese enlace. Yo, desde EEUU, no lo puedo ver, a menos que salte por algún proxy en Europa (desde Alemania funciona).

    El motivo por el que escribo esta entrada es para: agradecer a Jalis y a todo el equipo que lleva detrás: Erea, Raquel, Elena, Marcos, Armando… posiblemente se me olvida alguno, y también para añadir algunas cosas que les comenté durante la grabación, pero que al final no se pudieron poner. Entiendo que en la televisión el tiempo es oro y se miden las cosas al segundo, por no decir al milisegundo.

    Todo comienza cuando una mañana me levanto y tengo un mensaje de mi compañero de batalla y gran amigo Fran Ramírez diciendo que Chema Alonso (¡Qué crack!) le había dado mi información a Antena3 porque les habían preguntado por algún “hacker” en Virginia (EEUU), que hablara español.

    A partir de ahí, efectivamente recibo un email y empezamos conversar, y durante mi paso por la RootedCON X, tuve la oportunidad de ir a los estudios de Antena3 en Madrid y conocer en persona a parte del equipo detrás del programa de Enviado Especial y nos comentaron (me acompañaba Cybercaronte) lo que querían hacer. Y dos meses más tardes, Jalis junto a su equipazo, apareció por Virginia.

    Grabando

    Una de las curiosidades sobre el rodaje, es que éste se hizo en dos días. En la escena en la que me voy a tomar café mientras Jalis va al centro de datos se rodó un sábado, y la parte en la que estamos en The Mall se rodó el domingo. En el documental parece que todo ocurre el mismo día, por ello me pidieron que llevara la misma ropa ambos días. Así que me hice dos camisetas iguales, una para cada día.

    Otra curiosidad fue, que cuando estábamos grabando la parte en la que le enseño a Jalis los datos que había encontrado suyos, casi no podía ver la pantalla. El día estaba muy soleado, de hecho hizo bastante calor, y además de eso no llevaba mis gafas, que normalmente uso, así que no fue nada fácil el hacer esa parte :D

    Durante los dos días de rodaje, grabamos muchas conversaciones que no fueron parte del documental y a algunas de las cosas que sí aparecen, me gustaría darles un poco de contexto.

    Cuando hablamos de la huella digital, tenemos que tener en cuenta que esta se va formando por los datos que vamos dejando de forma consciente e inconsciente. Tenemos que tener en cuenta que cuando usamos servicios, especialmente los que son gratuitos, estamos pagando con nuestros datos, es decir, cualquier dato que ese servicio pueda registrar, acabará en alguna base de datos que será usada en algún momento para beneficio de la empresa que ofrece dicho servicio, normalmente de forma financiera. Luego, tienes que tener mucho cuidado con lo que dices y subes a internet, un dato por sí sólo puede parecer muy inofensivo, pero cuando juntamos varios de esos “datos inofensivos”, ya se pueden convertir en datos lo bastante sólidos para poder usarlos de forma dañina. En el documental se comenta, que con los datos que había descubierto sobre Jalis, podría llamar a la operadora de telefonía móvil y haciéndome pasar por él, hacer cambios en su cuenta. Esto, también se podría usar de la otra forma, yo, haciéndome pasar por un empleado llamar a Jalis y sacarle información que pudiera usar para delinquir. Mi consejo, es que nunca confíes en llamadas que recibas o emails. Si te llaman del banco, de tu operadora de telefonía, etc, preséntate en persona si puedes en una de las sucursales, y si no, ve a la página oficial de internet, busca el teléfono o la forma de contacto. Nunca sigas enlaces en emails o información dada por teléfono de una llamada que no esperabas.

    Camaras

    Otra cosa que se comenta de forma muy breve es el tema de las cookies. Las cookies, no son necesariamente malas, y no son siempre usadas para monitorizar a un usuario, aunque desafortunadamente es quizás, aún, la forma más común usada. De hecho existen métodos más avanzados para la monitorización de usuarios.

    Como dato histórico, las cookies se crearon por la necesidad de mantener lo que se llama la sesión de usuario, y esto ocurrió con la llegada del carrito de la compra (eCommerce). Para que un sitio web pudiera saber que cosas añade al carrito cada usuario, se crea un identificativo único que identifica a cada usuario, dicho identificativo se guardaba en una cookie. El hecho de que cuando te conectas a un sitio web (tu red social preferida, tu correo electrónico, etc) y sólo tengas que introducir tu contraseña una vez y puedas ir navegando por dicho sitio web sin tener que introducir dicha contraseña cada vez que hagas un click en algún enlace o botón, es porque ese sitio web ha creado una sesión única para tí, y la identificación de dicha sesión, esté posiblemente guardada en una cookie.

    En el documental también se menciona brevemente el uso de Signal como medida de protección de nuestra privacidad. Signal no es más que una aplicación de mensajería como WhatsApp, por lo que el uso de Signal sólo te protege (tu privacidad) a la hora de mandar mensajes y no a la hora de navegar por internet, ni de las cosas que subimos a las redes sociales. ¿Por qué Signal y no WhatsApp, Telegram…? Bueno Signal es open source, esto quiere decir que el código la aplicación y del protocolo que usa están accesible para poder ser revisado por expertos en criptografía. Sí, WhatsApp actualmente usa el protocolo de encriptación de Signal. La diferencia es que Facebook (propietario de WhatsApp, y competidor directo de Google en el mercado de la publicidad) almacena y guarda tus mensajes en sus servidores por 30 días, Signal dice que tus mensajes no son almacenados y sólo pueden ser leídos por su destinatario, y Telegram, pues parece que encriptan tus mensajes en sus servidores, claramente estos tienen acceso a todos tus mensajes de forma clara. Al final del día, tienes que depositar tu confianza en alguien, y yo la deposito en este caso en Signal, apoyada por la organización sin ánimo de lucro Electronic Frontier Foundation (EFF), en la cual confío y apoyo su misión, de hecho soy miembro de la misma. Por cierto la gorra que llevo en el vídeo es de dicha organización.

    Una de las conversaciones que tuve con Jalis, fue sobre la importancia de encriptar nuestros datos. Está claro que si encriptamos nuestras comunicaciones, protegemos nuestra privacidad, pero también podemos proteger la de otros. Para explicar esto, le puse tres escenarios distintos, en el supuesto que fuera un periodista en un país autoritario, en el cual se está comunicando con un activista para organizar algún tipo de movimiento contra el gobierno:

    • Nadie encripta: en este caso el gobierno podría espiar libremente las comunicaciones y buscar ciertas palabras o frases que enciendan las alarmas. Lo mejor que te pueda pasar es que sólo seas arrestado.

    • Sólo encriptamos cuando tenemos algo que ocultar: en este caso, aunque el gobierno no pueda leer tus conversaciones, sí que podría ver cuando estás encriptando las mismas. De la misma forma, el gobierno que podría arrestar, interrogar y en el mejor de los casos, acabas en la cárcel.

    • Lo encriptamos todo: si todo el mundo encripta todas sus conversaciones, el gobierno ya no tendría un patrón de descarte fácil. Para que seas perseguido en este caso te tendrías que convertir en persona de interés para el mismo, o te estés comunicando con alguien que sea una persona de interés. Para protegerte de esto ya habría que tomar otras medidas.

    Por lo tanto el uso constante de la encriptación en nuestras conversaciones podría proteger a otros (activistas, grupos minoritarios, etc) de forma indirecta.

    Para terminar voy a comentar otra de las conversaciones que tuve con Jalis y que no apareció en el documental. Esta fue sobre el uso de los datos como identificativo de persona. Cada vez son más los casos en los que la policía acude a empresas como Google, Facebook, Amazon, etc para la investigación de crímenes, gracias a la cantidad de datos que estos recolectan de todos sus usuarios, lo cual me parece perfecto, pero cuando los datos se convierten en tu “ADN”, me da un poco de escalofrío.

    Hubo un caso en Arizona en el que la policía acudió a Google para que les dijera quién estaba en la zona de un asesinato que había occurrido. Google tiene una base de datos llamada Sensorvault donde guarda los datos de localización de los usuarios de sus servicios. De esta forma Google puede saber quien ha estado en cierto momento en que lugar y sus alrededores (Geo-fence). Esto usado en un caso de asesinato, o de cualquier otro crimen, es muy delicado, porque dicha base de datos, realmente no puede identificarte a tí como persona, sino a un dispositivo con una cuenta asociada a ti. En el caso que comentaba anteriormente, una persona (Jorge Molina) fue detenida por un crimen que no cometió. Afortunadamente, una semana después de su detención fue liberado porque la policía averiguó quién fue el asesino real. Aunque Jorge fue liberado, parte del daño ya está hecho. Esta persona posiblemente hubiera perdido su trabajo, seguramente no podrá trabajar para el gobierno en ninguna capacidad, y por supuesto el daño psicológico podría ser muy notable.

    Tienes toda la historia en el enlace de arriba, pero la resumo de forma muy breve. Jorge Molina había usado el teléfono del novio de su madre para leer su correo electrónico y además le dejó su coche al novio de la madre. El novio de la madre conducía el coche de Jorge cuando cometió el asesinato y se marchó. La policía, sólo tenía datos del coche, como el color y la marca, ni si quiera tenían la matrícula. La policía, pidio a Google los datos de las personas que estaban en los alreadedores del luegar del asesinato el día en que éste ocurrió. Basado en los datos proveidos por Google, la policía dedujo que Jorge Molina estuvo en el sitio del crimen y su rastro coincidía con el rastro dejado por el asesino, o mejor dicho por el teléfono del asesino, y además el asesino conducía un coche como el de Jorge, de hecho el suyo. Simplemente basado en especulaciones ofrecidas por datos de localización, Jorge Molina acabó detenido por un supuesto asesinato que no había cometido.

    Es muy importante saber cómo vamos dejando nuestro rastro y cómo esos datos se pueden usar, para bien o para mal. Proteger nuestra privacidad es algo por lo que todos deberíamos de luchar antes de que la perdamos por completo y sea demasiado tarde… ¿O es demasiado tarde?

    En fin, una experiencia inolvidable y al final fuimos felices y comimos barbacoa :)

    Comida