jueves, julio 19, 2018

Cupón Verano 10 % descuento en @0xWord

Como todos los veranos, tenemos que cerrar la editorial de 0xWord durante el mes de Agosto, pero antes de que llegue ese días os vamos a dejar la oportunidad de tomar provisiones con todos el material que queráis utilizando un cupón descuento del 10% para este verano.

Figura 1: Cupón Verano 10 % descuento en 0xWord

El cupón que puedes utilizar en las compras es VERANO2018 y estará disponible desde las 00:00 del día 19 de Julio de 2018 hasta las 23:59:59 del día 26 de Julio. Después, se procesarán los pedidos y 0xWord cerrará para hacer inventario y preparar el nuevo año.

Máster de Ciberseguridad de 0xWord

Para que os sea mucho más fácil elegir los libros, hemos hecho unos nuevos packs y hemos trabajo en organizarlos en un orden lógico de aprendizaje, tal como si estuvieras haciendo un máster de especialización en Seguridad Informática, Pentesting y Hacking en tres niveles. Para que sea más fácil de entender hemos hecho esta infografía.


Todos los packs que están en la infografía los tienes disponibles en la zona de Packs de la web de 0xWord, así que puedes utilizar el código de descuento para ir completando tu camino de formación. En otro post os desgranaré cada pack del máster que hemos diseñado, para que entendáis por qué está diseñado así.

Saludos Malignos!

miércoles, julio 18, 2018

Más seminarios en vídeo de ElevenPaths & LUCA D3 disponibles en Youtube @elevenpaths @luca_d3

Desde casi el comienzo, las unidades de ElevenPaths y LUCA tienes seminarios online en los que se explican conceptos que tienen que ver con Ciberseguridad, Big Data o Inteligenica Artifical. En el caso de ElevenPaths tenemos las Talks y las CodeTalks for Devs, y para los temas de BigData o AI las LUCA Talks. Todas ellas quedan disponibles en los canales de Youtube de sendas unidades, a saber: Canal de Youtube de ElevenPaths y Canal de Youtube de LUCA.

Figura 1: Más seminarios en vídeo de ElevenPaths & LUCA D3 disponibles en Youtube

Hoy os dejo aquí las últimas que han grabado nuestros compañeros, junto con una nueva sección del blog Data-Speaks de LUCA, dedicada a explicar los conceptos con Vídeo Posts. Os los dejo todos por aquí por si os son de interés los temas.


Figura 2: Vídeo Post "¿Qué es la Inteligencia Artificial?" 


Figura 3: ElevenPaths Talks 4 "¿Cómo protegerme en la nube?" 


Figura 4: LUCA Talk 16 "Cómo implementar Big Data en la empresa"


Figura 5: LUCA Talk 17 "Six challenges for AI sustainability

Saludos Malignos!

martes, julio 17, 2018

ibombshell 0.0.1b en GitHub con bypass UAC incorporado: Environment Injection en Windows 10

Recientemente se ha liberado ibombShell 0.0.1 beta en el Github de ElevenPaths, una prueba de concepto que hemos trabajado en "Ideas Locas", en colaboración con mi compañero Álvaro Nuñez. En el propio repositorio de Github se puede encontrar un fichero de Docker con el que se puede automatizar el despliegue de lo necesario para el modo Silentlty. El modo Everywhere es el más sencillo, ya que solo requiere de una Powershell y de un Copy and Paste de una línea a ejecutar.

Figura 1: ibombshell 0.0.1b en GitHub con bypass UAC incorporado
"Environment Injection en Windows 10"

Ya hemos hablado del uso básico de la herramienta, pero ahora podéis probarla, hacer un pull request con vuestras mejoras, proponernos mejoras y darnos feedback a través del propio repositorio o utilizando la comunidad de ElevenPaths. Incluso, os hemos enseñado cómo se puede hacer un módulo de manera sencilla para el modo Silently, escrito en Python. En el último artículo de ibombshell en ell blog de ElevenPaths tienes una recopilación de estos trabajos.

Figura 2: iBombShell en GitHub

Hoy quería hablar de que la prueba de concepto está disponible y que iremos añadiendo nuevas funcionalidades, nuevas funciones y nuevos módulos con el paso del tiempo. Uno de los objetivos de ibombshell es que dispongas de un gran número de posibilidades en un Ethical Hacking sin necesidad de descargar nada, por lo que iremos añadiendo funciones al repositorio con el objetivo de que el día de mañana las tengáis. Cuando ejecutéis un showcommands irán apareciendo nuevas funciones o cuando arranquéis el c2 de ibombshell en Python veréis nuevos módulos.

Figura 3: Módulo de bypass UAC en ibombshell

Por supuesto, iremos documentando las nuevas cosas que vayamos incluyendo o, al menos, la gran mayoría, dentro del poco tiempo del que se suele disponer. El proyecto acaba de nacer y queremos dotarle de lo más básico para que la prueba de concepto se convierta en una herramienta útil en el día a día del pentester.

Integrando el bypass UAC en ibombshell

Hace ya un tiempo hablé sobre un bypass de UAC basado en la inyección en las variables de entorno. Hoy tenemos disponible una función en ibombshell everywhere que implementa este bypass proporcionando una ibombshell ejecutada en un contexto de integridad alto. Además, hemos implementado el módulo para ibombshell en modo Silently. Lo interesante de este bypass es que afectaba a los sistemas Windows 10, por lo que es un bypass muy interesante.

En este artículo se habló sobre el funcionamiento del bypass, el cual es bastante sencillo. Se genera en la rama del registro HKCU:\Environment un valor llamado windir y cuando las tareas, que se ejecutan en un contexto de integridad alto, son lanzadas éstas sustituyen el valor de %windir% por el valor creado en el registro. Es decir, hay una inyección. Esto se aprovechaba para lograr ejecutar código en un contexto alto. En otras palabras, podemos hacer que una ibombshell se ejecute en el contexto que mejor nos viene. Éste es el vídeo del bypass tal y como lo explotamos en el artículo citado y ahora vamos a ver cómo hacer el bypass de UAC con ibombshell.


Figura 4: Bypass de UAC en Windows 10 con Environment Variables in Scheduled Tasks

Lo primero es comprobar cómo podemos ejecutar y lograr el bypass. Si analizamos en qué consiste el bypass vemos que son dos pasos. El primero es crear la entrada de registro, o modificar, que nos conviene para lograr la inyección. En este caso el valor windir. Para ello, podemos utilizar el cmdlet New-ItemProperty de Powershell con el que indicando el parámetro name, path y value lograríamos esto. En la imagen se puede ver.

Figura 5: Parámetros en Powershell para el bypass UAC

Después del cmdlet New-ItemProperty se debe lanzar la tarea que es ejecutada en un contexto de integridad alto y que utilizará el %windir%. Hay que notar que la inyección acaba con un “&& REM” para concatenar un comentario a todo lo que está a la derecha de la inyección y que no se rompa la ejecución.

En la imagen de la Figura 5, podemos que la función console, el prompt de ibombshell, es ejecutado con el modo Silentlty, pero si en vez de eso, invocamos solamente console veríamos algo similar a esto que hay en la imagen siguiente.

Figura 6: Ejecución sin modo Silently

Como se puede ver obtenemos una cmd dónde se ejecuta una Powershell y dentro nuestra ibombshell en un contexto de integridad algo, gracias al bypass de UAC. Con el programa ProcessExplorer se puede observar el nivel de integridad en el que se ejecuta un proceso y aquí se puede ver de forma sencilla. En este instante si se quisiera hacer una acción privilegiada se podría.

Figura 7: Nivel de integridad alto en Process Explorer

Si queremos ejecutarlo en modo Silently dejaríamos la función console como venía en una de las imágenes anteriores, es decir, console –silently –uriConsole [URI]. Antes de nada, hay que configurar el listener para que se quede a la escucha. Para ello, se accede a la carpeta ibombshell c2 del repositorio y se ejecuta el fichero ibombshell.py. Una vez hecho esto, cargamos el listener y ejecutamos con run.

Debemos recordar que para hacer el bypass de UAC tenemos que tener un warrior previo conectado en un nivel de integridad medio, que el usuario propietario del proceso sea del grupo administradores y que la política de UAC esté por defecto.

Figura 8: Warrior conectado al listener

Cuando se ejecuta el módulo del bypass UAC del tipo environment injection se obtiene un nuevo warrior. Este warrior se ejecuta en un contexto de integridad alto, por lo que tenemos privilegio y podemos realizar cualquier acción. En el siguiente video se puede ver un ejemplo de lo que hemos ido comentando.


Figura 9: iBombShell Windows 10 UAC Bypass

En esta imagen se puede ver la ejecución del warrior, si estuviera visible y cómo se conecta con el listener. Por pantalla no sale nada, pero se puede ver en el título de la ventana como se está realizando la ejecución de ibombshell. Si se pudiera ver el resto de la instrucción en el título de la ventana se vería la ejecución de console –silentlty –uriConsole [URI].

Figura 10: ibombshell en ejecución

Por último, dejamos un vídeo sobre el uso de la nueva función en el modo ibombshell everywhere. En el video se puede ver como se descarga directamente a memoria el prompt de ibombshell y después se descarga la función del bypass directamente a memoria.

Figura 11: ibombshell en modo everywhere

Seguiremos trabajando en añadir funcionalidades y módulos a este proyecto que acabamos de arrancar. Recuerda probarlo, darnos feedback y hacer tus pull request. Este es solo ‘the first boom’.
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths

lunes, julio 16, 2018

CodeTalk for Developers de Evil FOCA, Entiéndeme tú a mí y un Curso Online

Normalmente los fines de semana os suelo dejar la agenda de actividades de la semana, pero ayer, después de disfrutar el sábado del concierto de los Iron Maiden, me pasé el día entero viajando para venir a participar esta semana en el Microsoft Inspire en Las Vegas. En este evento, hay varias charlas en las que se va a hablar de Aura y Movistar Home, así que me he venido a estar aquí ayudando en la preparación de las charlas.

Figura 1: CodeTalk for Developers de Evil FOCA, Entiéndeme tú a mí y un Curso Online

Pero mientras tanto, hay algunas citas que tienen lugar esta semana en otras partes, así que os las dejo rápidamente. Probablemente yo, después de que esta semana cierre asuntos antes varios, después cortaré definitivamente la publicación de artículos en El lado del mal durante algunas semanas, que este año quiero tomarme un tiempo de relax total.

La "agendita" de esta semana

La primera cita es la última fecha que tiene la obra de teatro de Entiéndeme tú a mí en el Teatro Lara de Madrid, antes de que se vaya de gira. Las entradas las puedes comprar online, y echarte unas risas este día 17 de Julio en Madrid.

Figura 2: 17 de Julio Entiéndeme tú a mí en Madrid

La segunda de las citas es una CodeTalk for Developers dedicada a la Evil FOCA OpenSource, que impartirán mis compañeros de ElevenPaths. Una oportunidad para conocer más de cómo se amplían las funcionalidades de Evil FOCA con nuevos plugins. Tienes más info en la web de la charla.
Por último, el día 20 de Julio, para terminar la semana dará comiendo el Curso Online de Hacking Ético que impartirán nuestros compañeros de The Security Sentinel. En él, además de tratar los temas avanzados del trabajo de pentesting, se entregará como material de estudio que complementa las 180 horas que tiene el curso, el libro de 0xWord dedicado al Pentesting con PowerShell. Más información en la web del curso.

Figura 4: Curso Online de Hacking Ético

Y esto es todo, que no es mucho, pero es que estamos llegando a finales de Julio. Como la próxima semana no habrá muchas citas, os dejo por aquí el único evento que tengo en el radar para ella. Será el día 24 de Julio en Chile, y nuestro compañeros Gabriel Bergel estará allí. Es el CyberSecurity Day 2018. Más info en la web del evento.

Saludos Malignos!

sábado, julio 14, 2018

Docker de My WordPress In Paranoid Mode (WPM): "The making of" (Parte 2 de 2)

En esta parte continuamos el trabajo que sigue a lo que hemos visto en la primera parte de este artículo sobre cómo hemos dockerizado WodPresss in Paranoid Mode. Una vez ya tenemos preparados los ficheros Dockerfile es el momento de preparar el fichero Docker Compose, el cual es el encargado de montar todo el sistema.

Figura 9: Docker de My WordPress In Paranoid Mode (WPM): "The making of" (Parte 2 de 2)

Vamos a echar antes un vistazo al código de este fichero llamado docker-compose.yml. Aquí es donde se produce toda la magia de Docker. Este fichero compose se ha realizado utilizando la versión 2.0. Se pueden observar dos etiquetas principales llamadas services y volumes. En la primera, services, se definen los contenedores con sus aplicaciones o servicios, así como las variables necesarias para su configuración.

Figura 10: Contenido del fichero Docker-Compose del proyecto WPM.

La etiqueta volumes indica el nombre del volumen principal donde se crearán los espacios de almacenamiento de cada contenedor. En services se han definido dos, uno llamado db (para MySQL) y otro wordpress (para WordPress).

El servicio que crea el contenedor db de MySQL en la línea 5 le asignamos un nombre para poder tenerlo identificado en todo momento y evitar utilizar nombre aleatorios definidos por Docker. Lo mismo ocurre con el contenedor para Wordpress, en la línea 20 se le asigna el nombre wpm.

Cuando lo tengamos todo en ejecución, si utilizamos el comando:
docker container ls
Este comando nos mostrará la siguiente salida, en la cual tendremos identificado en todo momento el contenedor que corresponde a cada servicio (marcado en rojo en la imagen inferior):

Figura 11: Listado de contenedores en ejecución y sus nombres

Las imágenes resultantes de la creación de los contenedores tendrán los nombres mysqllatch (para MySQL) y wplatch (para WordPress). Estos nombres se asignan en las líneas 6 y 24 del fichero docker-compose. Centrándonos en el contenedor db de MySQL, además de asignar un nombre de la imagen que se generará a partir de estos, también se define la ubicación de los mismos, en este caso en la carpeta ./db (línea 7, comando build). El siguiente paso, línea 8 y 9, será asignar el volumen. Para ello se indica primero el volumen principal y luego la ruta de la aplicación.

El comando de la línea 10 simplemente nos asegura que el contenedor se ejecutará cada vez que lo haga el host. Finalmente, tenemos la parte de asignación de variables de entorno. En este caso se definen las variables correspondientes a los parámetros necesarios para la creación de la base de datos y añadimos también dos para asignar los valores de las key de la aplicación WPM que previamente hemos creado desde nuestra cuenta de Latch.

Figura 12: Estructura en árbol de todas las carpetas y ficheros que componen WPM para Docker

La parte del contenedor que hemos llamado wordpress es parecida a la asignación de valores para db pero con algunos cambios. Por ejemplo, en las líneas 29 y 30 se definen los puertos desde los cuales la aplicación será accesible. En la parte de asignación de variables esta vez se crean aquellas que WordPress necesitará para conectar con la base de datos MySQL creada en el contenedor db.

También hay que destacar la línea 22 donde se utiliza el comando depends_on el cual asigna las dependencias de los contenedores, en este caso db, el contenedor que tiene la base de datos MySQL de Wordpress.

Para que todo funcionara correctamente intentando la menor intervención del usuario, hemos tenido que modificar el script bash de instalación de WPM. En principio, necesitaba dos parámetros para su ejecución, uno era la key de la aplicación WPM y el otro el secret key de WPM. Para que el script tome estos parámetros directamente del docker-compose, en concreto del que pertenece a la creación del contenedor llamado db (MySQL), tendremos que asignarlas internamente utilizando las variables de entorno creadas en el fichero compose.

En concreto serán las variables LATCHAPPID y LATCHSECRET las que luego usaremos dentro del script (por ejemplo, sustituir todas las llamadas que usaban los parámetros de entrada referenciados como $1 o $2) asignándolas a otras variables internas como se puede observar en estar parte del código del mismo:

Figura 13: Asignación de variables internas a las variables de entorno
definidas en el fichero docker-compose del script install.sh de WPM

Finalmente, sólo nos queda ejecutar el comando docker-compose para levantar los contenedores y probar la aplicación siguiendo los pasos del readme. La primera vez tardará un poco ya que tiene que descargar todas las imágenes necesarias para crearlos. En el siguiente video podéis comprobar todos los pasos de ejecución, configuración y los resultados finales:


Figura 14: Docker de WordPress in Paranoid Mode

Si queremos volver a ejecutar y crear desde cero los contenedores en el mismo host, será necesario primero eliminar los contenedores, imágenes y los volúmenes creados. Para realizar esta limpieza utilizaremos el comando prune para cada elemento. En este enlace podéis encontrar un fantástico tutorial sobre cómo borrar los recursos creados en Docker.

Más recursos sobre WordPress in Paranoid Mode

Si quieres saber más sobre WPM, echa un vistazo a esta charla de Chema Alonso donde explica cómo fortificar un Wordpress usando WPM y de paso entender un poco mejor su funcionamiento:


Figura 15: Presentación de WordPress in Paranoid Mode

Y para saber en detalle cómo funciona WPM y la teoría en la cual se basa, siempre podéis consultar el paper oficial de este proyecto:



Sin duda seguiremos utilizando Docker para ir incluyendo nuevas PoC (aparte de WPM) para que sea más sencillo probarlas y jugar con ellas. Puedes descargarte de nuestro repositorio de GitHub el docker de WordPress in Paranoid Mode.

Figura 18: Docker de WordPress in Paranoid Mode

El 19 de septiembre, Pablo González realizará un Code Talk For Developers sobre WPM en el cual también explicará algunos detalles más de cómo ha sido la integración de Docker con el script de WPM. No os lo perdáis.

Autor: Fran Ramírez, (@cyberhadesblog) miembro del equipo de Crazy Ideas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps" y del blog Cyberhades.

viernes, julio 13, 2018

Docker de My WordPress In Paranoid Mode (WPM): "The making of" (Parte 1 de 2)

Hace unos días presentamos en el blog de ElevenPaths nuestro proyecto de dockerizar WordPress in Paranoid Mode (WPM) y de esa forma, hacer más sencillo poder probarlo de una forma rápida y segura. En este artículo vamos a ver un poco más en profundidad cómo hemos realizado la tarea de pasar a Docker nuestro querido WPM ya que pensamos puede ser útil para aquellos que queráis descubrir y practicar con las maravillas que ofrece esta tecnología basada en contenedores.

Figura 1: Docker de My WordPress In Paranoid Mode (WPM): "The making of" (Parte 1 de 2)

Escribir el libro sobre Docker llamado “Docker: SecDevOps” de 0xWord junto a dos grandes como son mi gran amigo Rafael Troncoso (@tuxotron, ¡gracias maestro!) y Elías Grande (@3grander) también ayuda un poco a entender cómo funcionan los contenedores Docker.

Figura 2: Libro de Docker SecDevOps

WordPress in Paranoid Mode

Antes de empezar a hablar del proyecto de crear Docker WordPress in Paranoid Mode, hay que recordar que lo que en él se incluyen son las publicaciones, ajustes, e integraciones de tecnologías de seguridad de las que estuvieron hablando Chema Alonso y Pablo González, y que acabaron formando parte del libro de Máxima Seguridad en WordPress de Daniel Martín Maldonado. En la siguiente lista tienes todos los recursos sobre este tema enlazados, y esta conferencia recoge casi todos los detalles en WPM.


Figura 3: Configurar Wordpress like a hacker

[Libro] Máxima Seguridad en WordPress
[Libro] Hardening GNU/Linux
[Paper] WordPress in Paranoid Mode (Parte 1)
[Paper] WordPress in Paranoid Mode (Parte 2)
[Vídeo] Proteger WordPress con Latch
[Vídeo] Proteger WordPress con Latch Cloud TOTP
[Vídeo] MyWordPress in Paranoid Mode (conferencia Chema Alonso)
[Vídeo] MyWordPress in Paranoid Mode (ElevenPaths Talks de Pablo González)
[Vídeo] Ejemplo de uso de Latch en WordPress
[Vídeo] Hardening WordPress like a hacker
[Vídeo] WordPress Demo XSS en WP-UserAgent
[BlogPost] My WordPress in Paranoid Mode
[BlogPost] Máxima Seguridad en WordPress
[BlogPost] Hackear un WordPress con Network Packet Manipulation
[BlogPost] Fortificar comunicación entre WordPress y MySQL
[BlogPost] WordPress Latch Enforcement
[BlogPost] WordPress aún más seguro con Latch Lock After Request
[BlogPost] Fortificar WordPress frente a ataques de fuerza bruta
[BlogPost] Ataques (al corazón) de tu WordPress
[BlogPost] Cómo robarle las contraseñas a los administradores de WordPress
[BlogPost] Agrupar el control de varios WordPress con un solo Latch
[BlogPost] WordPress: Time-Based XSPA (Cross-Site Port Attack)
[BlogPost] Cómo debería ser un WordPress un poco más seguro
[BlogPost] WPHardening: Automatizar fortificación de WordPress
[BlogPost] Protege los borradores de los artículos de tu WordPress
[BlogPost] Registro de cuentas en WordPress públicos
[BlogPost] Riesgos en la ejecución de tareas de Cron
[BlogPost] WordPres: XSS en plugin WP-UserAgent
[BlogPost] Listar los plugins de WordPress en un pentest
[BlogPost] WordPress: SQL Injection en Scarcity Builder Plugin
[BlogPost] Docker WordPress in Paranoid Mode

Y ahora, vamos a centrarnos en el proceso de dockerización de WPM para que pueda ser implantado fácilmente en los entornos que sean necesarios.

Dockers: Essentials

Un contenedor es básicamente un paquete de software donde se incluye una aplicación y todo lo que necesita para funcionar como por ejemplo librerías, componentes, entornos runtime, herramientas, etcétera. La gran ventaja frente a las máquinas virtuales es que los contenedores comparten la base del sistema operativo en el cual se ejecutan (host), ya sea GNU/Linux o Microsoft Windows. De esta forma se consigue una gran optimización tanto en la ejecución como en el tamaño de los contenedores gracias a que, como se ha comentado antes, sólo tienen lo necesario para ejecutar la aplicación, el resto lo obtendrán del sistema operativo host.

Figura 4: Comparación entre VMs y Contenedores Docker 

En dicho host - en nuestro caso era una máquina virtual con Ubuntu 16.04 Desktop 64bits (esto es importante) - es donde se ejecutará el motor Docker (Docker Engine) el cual es el encargado de gestionar los contenedores. Este motor consta de un cliente, desde el cual se introducen los comandos y un demonio el cual se ejecutará en el servidor host y es el encargado de gestionar los contenedores.

Básicamente la idea es crear dos contenedores, uno para ejecutar MySQL y otro para WordPress. Ambos tendrán a su vez una ubicación en el sistema de ficheros del host para poder asegurar la consistencia de la información. Es decir, necesitaremos un espacio en el disco duro (volumen Docker) para que los datos almacenados tanto en la base de datos MySQL como los cambios que se realicen en el WordPress se mantengan cuando reiniciemos el host.

Figura 5: Explicación técnica del funcionamiento de un volumen en Docker.

Necesitaremos dos ficheros Dockerfile, uno para el contenedor MySQL y otro para el Wordpress donde se definen los parámetros básicos necesarios para montarlo, como por ejemplo la imagen base o los comandos que necesitemos ejecutar (como las dependencias necesarias para instalar el script de WPM o copiar el plugin de Latch). El siguiente gráfico muestra el proceso de creación (A) y de ejecución (B) de los contenedores y los volúmenes:

Figura 6: Esquema de creación y ejecución de WPM Docker

La fase (A) es donde se definen los contenedores y la fase (B) corresponde a la ejecución del docker-compose y es donde se crean los contenedores y los volúmenes. Tal y como ya hemos mencionado antes, cada contenedor tiene su propio fichero Dockerfile. Estos ficheros deben de tener este mismo nombre, por lo tanto, cada contenedor tendrá su propia carpeta sobre la cual se creará tanto el fichero Dockerfile correspondiente así como su volumen para los datos.

En el caso del contenedor MySQL, será necesario instalar las dependencias necesarias para ejecutar WPM así como copiar dentro del mismo contenedor el script de instalación WPM. Vamos a verlo en detalle, este es el contenido del fichero Dockerfile de MySQL (carpeta /db):

Figura 7:  Contenido del fichero Dockerfile para el contendor de MySQL

La línea número 1 define la imagen que vamos a recuperar del repositorio de Docker utilizando el comando FROM y la etiqueta mysql:5.7 (la cual se descargará desde el Docker Hub) que servirá como base para configurar el contenedor y ejecutar MySQL. La línea número 3, comando RUN (este comando permite ejecutar instrucciones directas del sistema operativo), se encargará de instalar (usando el típico apt-get) en el contenedor todas las dependencias necesarias para poder ejecutar el script que instala WPM, como por ejemplo ruby, gcc, etcétera.

En la línea 6, el comando ADD añade o copia el directorio /WPM_Latch el cual contiene WPM al completo dentro de una carpeta y que se ubicará en el directorio raíz del contenedor, también con el nombre WPM_Latch. En la línea 7 activamos los permisos necesarios para poder ejecutar el script en la carpeta donde se encuentra WPM y finalmente en la línea 8 establecemos como directorio de trabajo (el que aparecerá por defecto cuando accedamos al contenedor) /WP_Latch.

Figura 8: Contenido del fichero Dockerfile para el contendor de WordPress

El fichero Dockerfile del contenedor que ejecutará WordPress es un poco más sencillo. Sólo necesitamos definir la imagen sobre la cual lo vamos a ejecutar, en este caso wordpress:latest (la última versión que exista en el repositorio) y copiar Latch. Para copiar el plugin de Latch, usamos de nuevo el comando ADD.

La carpeta Latch con el plugin ya está preparada dentro de los datos que hemos descargado desde GitHub así que simplemente se copiarán a la ruta que aparece, dentro de la carpeta plugins de WordPress. Esto instalará Latch pero no lo activará, esta acción tendremos que realizarla manualmente durante el proceso de configuración, como ya explicamos en el post de "·Cómo fortificar tu Base de datos de WordPress con Latch".

Continúa en la Parte 2

Autor: Fran Ramírez, (@cyberhadesblog) miembro del equipo de Crazy Ideas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps" y del blog Cyberhades.

jueves, julio 12, 2018

Un evento, un pack y unas pegatinas "malignas" de @0xWord

Mañana doy mi última charla antes de las vacaciones, en el Evento Décimo Aniversario de 0xWord. El evento tiene un aforo muy limitado, y hoy, después de que termine el proceso de registro tendremos todas las vacantes asignadas y confirmadas. Tienes toda la información del evento en este artículo que os dejé publicado la semana pasada.

Figura 1: Un evento, un pack y unas pegatinas "malignas" de @0xWord

Entre otras cosas, en el evento os contaré cuál fue la historia de este cómo nacieron los libros y cómo se llegó al CodeProject: 0xWord y cómo hemos seguido evolucionando día a día el concepto. No sabemos cuánto tiempo seremos capaces de mantener vivo el proyecto, pero de momento hemos reorganizado todos los packs y hemos hecho un trabajo de conceptualización en un "itinerario" de todos los títulos que tenemos, y que os vamos a contar allí.

Figura 2: Agenda del evento Décido Aniversario de 0xWord

Además, los compañeros de 0xWord han hecho packs nuevos, entre los que están el de Pablo González o el Pack de "Chema Alonso", donde están los libros en los que hemos participado nosotros. Los que compréis los míos os los podéis llevar dedicados con un No Lusers si lo ponéis en las observaciones.

Figura 3: Pack Chema Alonso en 0xWord

Tanto los libros como los packs, los puedes comprar en la web de 0xWord y pedir la opción de "Recogida en Tienda" y en las observaciones solicitar recogerlos en el lugar del evento, por los que te los podrás llevar mañana en el descanso de las charlas.


Y para conmemorar esto, a los packs "Chema Alonso" les vamos a poner desde hoy una pegatina "Maligna" que yo ya he puesto como parte de la decoración de mi ordenador portátil, junto con la de 0xWord, o la de AURA.


En definitiva, que teneos un evento en Madrid este Viernes 13 de Julio por la tarde en el que daré mi última charla antes de cortar en verano, que tienes nuevos packs oferta en 0xWord, y unas nuevas y molonas pegatinas "malignas"

Saludos Malignos!

miércoles, julio 11, 2018

Cómo usar Movistar + con Aura: Unos vídeo-tutoriales

Desde que lanzamos Aura en Movistar + para España en el pasado Mobile World Congress, el número de casos de usos ha ido creciendo a la par que los usuarios. Cada día Aura va aprendiendo nuevas cosas, y para que sea más fácil estamos grabando unos tutoriales de uso. Alguno de ellos me ha tocado hacerlo a mí, como podéis ver en el post de hoy.

Figura 1: Cómo usar Movistar + con Aura: Unos vídeo-tutoriales

A mí me hicieron grabar tres tutoriales con cierto humor, y yo, que me presto a todo con mis compañeros, me animé. Uno de ellos explicando cómo cambiar de canal, cómo poner una película de superhéroes y cómo poner una película de dibujos.


Figura 2: Cómo poner Canal #0 con Aura en Movistar + 


Figura 3: Cómo poner una película de Superhéroes en Movistar + usando Aura

Figura 4: Cómo poner una película de Dibujos en Movistar + usando Aura

Para poder utilizar Aura en tus servicios de Movistar+ debes bajarte la última versión de la app de Movistar + para iPhone o la app de Movistar+ para Android directamente desde los markets de aplicaciones oficiales.

Figura 5: Movistar+ con AURA para Android

Además de estos tres tutoriales míos, el equipo de comunicación de Movistar+ ha hecho varios tutoriales que explican algunos de los casos de usos más comunes, que os recopilo en este post y que se ven en un minuto.


Figura 6: Lo que puedes hacer con Aura en Movistar +


Figura 7: Tutorial Movistar+ con AURA


Figura 8: Tutorial Cómo buscar una serie en Movistar+ con AURA


Figura 9: Cómo buscar contenidos similares en Movistar + con Aura 


Figura 10: Cómo buscar una película en Movistar + con Aura 


Figura 11: Cómo buscar una carrera de Formula 1 en Movistar + con Aura

Al final, Aura está diseñada como una Congnitive Intelligence con sistemas de NLP (Natural Language Processing) e intenta que las personas no tengan que aprender los interfaces de los sistemas, sino que sea al contrario. Por eso, si no sabes cómo se usa, simplemente pregunta. Si al principio no te entiende, no pasa nada, estamos enseñando cosas nuevas a Aura cada día.

Saludos Malignos!

martes, julio 10, 2018

ibombshell: Crear un módulo para extracción de claves privadas SSH en Windows 10

La semana pasada hablamos sobre la extracción de claves privadas SSH en Windows 10 como un nuevo método para el Hacking de Windows. Hoy quería enseñar lo sencillo que es crear un módulo de ibombshell, el cual será liberado este mes en cuanto Álvaro Nuñez y yo terminemos unos detalles. Recordando que ibombshell tiene dos modos de ejecución, uno el denominado "everywhere" con Powershell y el denominado "silently" gracias a un C2 escrito en Python.

Figura 1: ibombshell: Crear un módulo para extracción de claves privadas SSH en Windows 10

Cuando hablamos de módulos hablamos de la posibilidad de incorporar funcionalidad al C2 de Python. En el caso de querer crear una nueva funcionalidad para el modo everywhere se debe añadir en el Github correspondiente, en nuestro caso será el GitHub de ElevenPaths, la función de Powershell necesaria. Como se explicó en el artículo dedicado a ibombshell es necesario tener clara la estructura de directorios y ficheros en el Github, ya que la consola hará uso de dicha estructura.

Primera parte. Creación de la función

En primer lugar, vamos a crear una función para extraer las claves privadas SSH en Windows 10. Esta función se obtiene del conocimiento de esta técnica y tiene un requisito importante y es que el proceso dónde se ejecute dicha función se esté ejecutando con integridad alta. Es lógico aplicar una serie de comentarios en la función o en la ayuda de la función sobre este tema.

El aspecto de la función puede ser algo parecido a lo que se puede ver en la imagen. La función extract-sshprivatekey comprueba en primer lugar si existe el path HKCU:\Software\OpenSSH\Agent\Keys. En caso de existir, recorre el número de claves almacenadas en la ruta. Por cada clave, se lista el valor de Comment que es el nombre de la clave en ASCII. Por último, se recupera el valor de clave en binario y se codifica en Base64. Aquí acaba la función.

Figura 2: Función extract-sshprivatekey

Hay que recordar que, posteriormente, habría que hacer uso del script parse_mem.py para obtener el valor ASCII de la clave privada. Lo importante sería poder utilizar esta información en una vía remota, pero cabe la posibilidad de utilizar en el modo everywhere de ibombshell.

Si listamos las funciones disponibles en la shell con el comando showcommands nos aparece la siguiente ruta post/extract-sshprivatekey. Esto es gracias al mapeo que se puede encontrar en la raíz del repositorio, en el fichero functions.txt, en el que se relaciona las funciones con las rutas del repositorio.

Una vez descargada a memoria la función, ésta se queda en el provider de funciones con el nombre sshprivatekey. Como he comentado anteriormente, si el entorno dónde se ejecuta la función tiene privilegios podremos ejecutarla, si no nos devolverá un error, tal y como se puede visualizar en la imagen.

Figura 3: Extracción de clave privada con ibombshell genera error

Ahora, vamos a suponer que tenemos privilegio en el proceso. Realizando el mismo proceso comentado anteriormente, el resultado es distinto, la función ejecutada en ibombshell devuelve los nombres de las claves y el base64 del binario de la clave privada.

Figura 4: Extracción correcta

Con ese base64 se debe ejecutar parse_mem.py para obtener la clave privada en ASCII. La función extract-sshprivatekey es una versión nuestra que se ha realizado para este artículo y que queda dentro del repositorio para su uso en auditoría o un proyecto de Ethical Hacking.

Segunda parte. Creando el módulo para nuestro panel en Python

Lo primero es entender el formato que tiene un módulo de ibombshell en Python. La idea es sencilla, que cuando el pentester ejecute el módulo en Python éste genere la función de Powershell y la instrucción para invocarla. Esta información es almacenada en un fichero que el "warrior", o proceso que ejecuta ibombshell en remoto, leerá mediante una petición HTTP.

Recuperando el esquema con el que jugamos en nuestro panel en Python y la interacción con el warrior de ibombshell vemos la siguiente imagen. En esta imagen, se puede ver que es el warrior el que, cuando es ejecutado en la máquina remota, realiza una petición hacia nuestro C2 registrando la dirección IP y el nombre o ID. Esto es a través de una petición HTTP, a través de un GET. Posteriormente, tras el registro, el warrior realiza una petición HTTP para verificar si hay algún tipo de función o funciones que deba, primero cargar en memoria y posteriormente ejecutar.

Figura 5: Intercambio de mensajes

El usuario del C2 al configurar un módulo y ejecutar el run, lo que está haciendo es almacenar en un fichero la función correspondiente y las instrucciones que se deben ejecutar en el warrior de ibombshell en Powershell. Cuando el warrior lee el fichero, ya carga la función y las instrucciones las ejecuta. Posteriormente, el warrior envía los resultados a través de un POST que se realiza al mismo recurso en el panel de Python.

Ahora, entendamos qué partes tiene un módulo de ibombshell en Python. Se proporcionará una clase denominada CustomModule. El cual tiene el constructor y un método run_module. Como se puede ver, un módulo no será algo complejo.

En el constructor tenemos una variable information, la cual es un diccionario que proporciona varios atributos y varios valores. Suele ser tema informativo, nombre del módulo, autor, descripción, etcétera. Por otro lado, se tiene la variable options. Esta variable es un diccionario que tiene los atributos del módulo. Por cada atributo se tiene una lista en el que se indica si el atributo tendrá algún valor, su descripción y si es obligatorio.

Figura 6: CustomModule

El método run_module implementará lo que se va a ejecutar cuando el pentester haga ‘run’, una vez configurado el módulo. Lo primero que se hace en esta función es verificar si el warrior configurado por el usuario existe. Para ello se comprueban los ficheros creados por ibombshell sobre los que se comunicará el warrior ejecutado en remoto. El ID de dicho warrior debe existir en forma de fichero.

Figura 7: Método run_module

Por último, se añade a la variable function la instrucción que hará que el warrior remoto ejecute la función cargada. No es más que el propio nombre de la función. En este caso, depende de la configuración del módulo, ya que una función puede tener N formas de ser ejecutada.


Figura 8: Módulo cargado en ibombshell

Es decir, una función puede ser ejecutada con varios parámetros o argumentos, por lo que utilizaremos selectores o bifurcaciones para los diferentes casos y acabaremos agregando a la variable function la instrucción necesaria, en función de la configuración del módulo.

Conclusión final: PoC en Vídeo

A continuación, os dejo un video dónde se puede ver el funcionamiento del nuevo módulo y los resultados que éste proporciona.

Figura 9: PoC en vídeo de nuevo método de ibombshell

Pronto liberaremos la primera versión beta de ibombshell, será la 0.0.1 y esperamos el feedback. Recuerda ‘the first boom, but two ways…”

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths

lunes, julio 09, 2018

Generative Adversarial Networks: Inteligencia Artificial & Ciberseguridad (2 de 2)

Continuando con lo explicado en la primera parte de este artículo, vamos a hablar en esta segunda parte de dos areas de aplicación de las GANs en el mundo de la seguridad. La primera de ellas es el área del cracking de contraseñas, o cómo utilizar GANs para crackear más rápido passwords. La segunda de las aplicaciones que vamos a ver tiene que ver coon cómo utilizar GANs para generar sistemas de esteganografía más robustos.

Figura 8: Generative Adversarial Networks: Inteligencia Artificial & Ciberseguridad (2 de 2)

Como se ha dicho ya, otra de las aplicaciones recientes y más reseñables de este tipo de tecnología fuera del procesado y reconocimiento de imágenes, y que ilustran cómo los algoritmos aplicados en Deep Learning aplicados a este tipo de arquitecturas pueden resultar de gran ayuda en el mundo de la ciberseguridad, está descrita en el artículo de los investigadores Briland Hitaj, Paolo Gasti, Giuseppe Ateniese y Fernando Pérez-CruzPassGAN: A Deep Learning Approach for Password Guessing”.

GANs y Cracking de contraseñas

Todos usamos contraseñas como un método sencillo y rápido de autenticación. Desafortunadamente, no solo los eventos filtración de contraseñas no son eventos infrecuentes, sino que además estos han demostrado que la complejidad de las contraseñas elegidas por los usuarios es muy baja, principalmente formadas por caracteres puramente numéricos o alfabéticos (p.e., 1234, password, asdfgh…) las combinaciones alfanuméricas más sencillas que se os puedan ocurrir (p.e., abc123).

Figura 9: Artículo “PassGAN: A Deep Learning Approach for Password Guessing”. Hitaj, B. et al. 2018

Existen herramientas de obtención de passwords que son de gran utilidad para identificar debilidades en las contraseñas, especialmente aquellas que están almacenadas como hash. La efectividad de este tipo de herramientas reside en su habilidad de probar un gran número de contraseñas posibles frente a cada hash del que se disponga. En vez de probar todas las combinaciones posibles de caracteres, estas herramientas de crackeo usan diccionarios de palabras fabricados a partir de leaks de contraseñas anteriores.

Figura 10: Entrenamiento de PassGAN con passwords filtradas

Las herramientas más famosas usadas para este fin son John the Ripper y HashCat, que hacen uso de esa aproximación incluyendo la transformación de contraseñas, entre las que se incluyen la concatenación de candidatos (p.e., iloveyou1234), la mezcla de letras lower-case – upper-case (p.e., HoLa123) y leet speak (p.e., 1l0v3y0u).

Figura 11: Logos de HashCat y John the Ripper

Haciendo uso de modelos de Markov, John the Ripper y HashCat generan un gran número de contraseñas posibles con una alta tasa de éxito, no dejan de ser reglas ad-hoc basadas en la experiencia de cómo un usuario sele elegir sus contraseñas, además de perder efectividad cuando la longitud de las contraseñas supera los 10 caracteres.

Parece que las arquitecturas de tipo GAN presentan un buen desempeño en esa tarea, siendo capaces de complementar las capacidades mostradas por las principales herramientas ya existentes. Por otro lado, presentan una clara ventaja frente a John the Ripper y HashCat, pues no necesitan de ningún conocimiento a priori de las estructuras comunes de las contraseñas.

De acuerdo con este paper, PassGAN duplica la tasa de éxito en el desempeño con respecto a John the Ripper e iguala las reglas best64 y gen2 de HashCat para contraseñas de hasta 10 caracteres. Queda pendiente extender la longitud de las contraseñas contra las que se ha entrenado, considerando que una contraseña robusta debe tener al menos 13 caracteres.

Figura 12: PassGAN en GitHub

La mejor puntuación fue obtenida como fruto de la combinación de PassGAN con HashCat, cuya complementación consiguió crackear entre un 18% y un 24% más de contraseñas de lo que lo hubiera hecho sólo Hashscat. El código de PassGAN que acompaña a este trabajo de investigación también está disponible en GitHub, con lo que se pueden realizar los experimentos y probar los algoritmos fácilmente.

Los autores indican que PassGAN es capaz de extraer de manera autónoma un número considerable de características en contraseñas, gracias a la capacidad de este tipo de modelos de aprender las estructuras subyacentes de las contraseñas del conjunto de datos del entrenamiento, algo que los modelos basados en reglas no pueden abstraer.

GANs en el mundo de la  Esteganografía

Otra aplicación de las GANs relacionadas con el mundo de la ciberseguridad se encuentra en el campo de la esteganografía, que trata del proceso de esconder información en ficheros – generalmente imágenes y archivos de audio – de modo que no se perciba su existencia. Por ejemplo, se podría cambiar mínimamente el valor de cada pixel en una imagen RGB para transmitir información sin corromper la imagen, siendo imposible para un ser humano a darse cuenta de la modificación. Os animamos a leer este artículo, donde ya se trató esta técnica. En el artículo “SSGAN: Secure Steganography Based on Generative Adversarial Networks” encontramos una aplicación de las GANs para crear esquemas estegonográficos.

Figura 13: Artículo “SSGAN: Secure Steganography Based on
Generative Adversarial Networks”. Shi, H., et al. 2018

En este experimento se hace uso de un modelo generador y de dos modelos discriminatorios. En este caso, el generador intenta generar imágenes propicias para la ocultación de información, consistentes y resistentes a métodos de detección visual de inyección de datos. Los modelos discriminatorios realizan dos funciones dedicados a garantizar una buena capacidad para esconder información:
- el primero es capaz de determinar la calidad de la imagen facilitada por el generador

- el segundo compite con el generador para favorecer la variedad en la generación de las imágenes, evitando que el generador produzca imágenes con demasiado ruido. Es el segundo discriminador el que elige qué imágenes son las más adecuadas para aplicar la esteganografía.
Los resultados han mostrado que, haciendo uso de la arquitectura propuesta, el error de clasificación de la red aumentaba, lo que significaba que las imágenes generadas eran mejores para esconder información.

Figura 14: Arquitectura SSGAN con una red GAN y dos redes discriminativvas

La arquitectura basada en un doble discriminador producía de manera exitosa imágenes de alta calidad que permiten esconder información de manera más efectiva, lo cual supone un avance en este campo frente a los algoritmos heurísticos ya existentes.

Conclusión Final

Estas son sólo algunas muestras de cómo la Inteligencia Artificial comienza a hacer acto de presencia de manera activa en la ciberseguridad mediante su aplicación en tareas variadas que van desde el crackeo de contraseñas hasta el bypass de motores antivirus o el descubrimiento de información escondida en imágenes de alta calidad resistentes al estegoanálisis. Con total seguridad, tanto las GANs como otros modelos de redes neuronales profundas se irán incorporando de manera efectiva a la detección de amenazas en constante evolución a las que nos enfrentamos.

[Viene de la Parte 1]

Autor: Enrique Blanco (@eblanco_h) miembro del equipo de Ideas Locas en CDO (Telefónica)

Entrada destacada

Cómo usar Movistar + con Aura: Unos vídeo-tutoriales

Desde que lanzamos Aura en Movistar + para España en el pasado Mobile World Congress , el número de casos de usos ha ido creciendo a la pa...

Entradas populares