Categorías
Hacking

Cómo a utilizar Docker sin conocimientos previos – Parte 2 de 2

Demostración en vídeo de este post:

En el primer post he explicado en funcionamiento de Docker así como la relación que tienen las imágenes y contenedores. En éste post verás cómo trabajar con volúmenes y redes. Creo que con estas bases tendrás lo necesario para empezar a trabajar con Docker y explorar sus características básicas.

Volúmenes en Docker

En el post anterior mencionaba que los contenedores son «efímeros», que se pueden crear y destruir muy fácil y rápidamente. Sin embargo, en ocasiones la información que se almacena en ellos se debe conservar y claro, cuando se elimina el contenedor la información que hay en él se destruye también. Por ese motivo, el objetivo de los volúmenes es el de conservar la información aunque el contenedor se destruya y para hacerlo, se crea un «enlace» entre el sistema host y el contenedor. Dicho «enlace», no es más que un directorio que se encuentra disponible en la máquina host y se monta en una ruta concreta dentro del contenedor, muy similar a una carpeta compartida en VirtualBox u otros sistemas de virtualización. La forma más sencilla de crear un volumen es utilizando la opción «-v» e indicando el directorio en el host y el punto de montaje en el contenedor separado por dos puntos.

En la imagen anterior puedes ver que se crea un fichero en el directorio /tmp/volume llamado «test.txt» y luego, se crea un contenedor que monta dicho directorio en «/container_mount». Se puede ver que desde el contenedor es posible acceder al fichero que está en el sistema host y además, desde el contenedor, se puede crear un nuevo fichero en dicha ruta que posteriormente es visible en el sistema host. De esta forma, si por ejemplo el contenedor debe levantar una base de datos, sus «datafile» se pueden almacenar en un volumen y así no se perderán en el caso de destruir el contenedor. Por defecto los volúmenes son de lectura y escritura, pero se puede poner la opción «ro» como lo siguiente para que sean de solo lectura:
-v /directorio_host:/punto_montaje_contenedor:ro

Redes en Docker

Otra característica importante en Docker son las redes. Por defecto, todos los contenedores se vinculan a una red del tipo «bridge», la cual se encuentra aislada del entorno de red del host por cuestiones de seguridad. Estas redes son virtuales y gestionadas por el servicio de Docker, permiten que los contenedores se comuniquen. Las redes en Docker se encargan de la asignación automática de direcciones a cada contenedor y cuentan con un DNS que permite que los contenedores puedan comunicarse utilizando sus correspondientes nombres en lugar de direcciones IP. Crear redes y utilizarlas es muy simple, un ejemplo lo puedes ver en la siguiente imagen

Se puede ver cómo se crean dos contenedores partiendo de la imagen «nginx» y a continuación, se crea una red en el servicio de Docker en la que se conectan ambos contenedores. Luego, se puede ver cómo desde uno de estos contenedores se realiza una petición HTTP al otro utilizando «curl», no hace falta indicar la dirección IP del segundo contenedor, solo es necesario el nombre que se le ha asignado y la red de Docker se encarga de la resolución.

Con estos dos posts tienes suficiente para empezar a moverte con los contenedores, imágenes, redes y volúmenes en Docker. Son las características más básicas de esta tecnología y el punto de partida para aprender otras cuestiones más complejas sobre contenedores, Docker, DevOps y DevSecOps.

Un saludo y Happy Hack!
Adastra.

 

Categorías
automatizacion Hacking Networking Services - Software

Cómo utilizar Docker sin conocimientos previos – Parte 1 de 2

Demostración en vídeo de este post

Como seguramente ya sabes, Docker es una tecnología que se ha ido popularizando en los últimos años y actualmente, no es raro encontrarse con cientos de proyectos en GitHub que tienen ficheros Dockerfile para la creación rápida de imágenes. De hecho, hace pocos días has podido leer un post en éste blog sobre un proyecto llamado KrakenRDI, en dicho post te explicaba que es un proyecto que permite montar en cuestión de minutos, un entorno de pentesting personalizado sin tener que sacrificar varios gigas de disco duro y otros recursos del ordenador. Este es solo un ejemplo del poder que tiene Docker y el motivo por el que es una tecnología tan bien posicionada y valorada actualmente, especialmente cuando se habla de equipos de desarrollo, DevOps y DevSecOps.

No obstante, sois muchos los que me preguntáis sobre cómo utilizar Docker y por este motivo me he animado a compartir un par de posts en donde hablaré sobre lo mínimo que necesitas saber para utilizar esta tecnología eficazmente. Verás que no es muy complicado.

Imágenes y contenedores en Docker.

Si no tienes ni idea sobre cómo funciona Docker, creo que este sería el punto de partida adecuado. Las imágenes y contenedores constituyen el corazón de Docker y aunque son términos independientes, tienen una estrecha relación. Una imagen declara cada una de las características necesarias para que una aplicación o conjunto de aplicaciones funcionen correctamente, por ejemplo, se puede indicar sobre qué tipo de sistema se debe ejecutar, librerías necesarias, servicios, ficheros, etc. Como tal, la imagen representa «una plantilla», un elemento reutilizable en cualquier sistema que tenga una instalación de Docker. En este sentido, encontramos el servicio de Docker Hub, en donde miles de empresas, equipos e investigadores, publican sus propias imágenes para que puedan ser descargadas por cualquiera en Internet.

Ahora bien, la imagen no es suficiente. Como he mencionado antes, representa una plantilla pero para que haya «algo» que le dé sentido, es necesario crear una unidad de ejecución y es aquí en donde entra el concepto de contenedor.
Un contenedor no es más que un espacio en donde se incluyen todos los elementos declarados en la imagen, incluyendo software y todos los ficheros necesarios. Para que te hagas una idea, un contenedor es como una casa prefabricada, en donde solo tienes que «desplegar» los elementos que están definidos en la imagen y esto en Docker, es un proceso que se realiza muy rápidamente (cuestión de segundos normalmente).

Aquí ves un ejemplo de lo que es una imagen y la creación de un contenedor partiendo de ésta.
El comando «docker pull centos:latest» permite descarga la imagen indicada (centos:latest) del repositorio de imágenes configurado en el servicio de Dockerd, el cual por defecto es Docker Hub. A continuación, el comando «docker run –name containercentos –rm -it centos bash» permite crear un contenedor partiendo de dicha imagen llamado «containercentos» y además, se eliminará de forma automática cuando se deje de utilizar, es interactivo y se ejecuta el comando «bash» para poder entrar en el contenedor creado.

En este caso se parte de una imagen previamente existente en el repositorio de DockerHub, pero también puedes crear tus propias imágenes partiendo de un fichero «Dockerfile», en donde puedes declarar las instrucciones necesarias para el diseño de la imagen, aunque esto es algo que te contaré en otra ocasión.

En el siguiente post explicaré cómo funcionan las redes y volúmenes en Docker, así como algunos otros ejemplos para empezar a usar Docker rápidamente.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Networking Services - Software

Aprende a enumerar dominios de Active Directory con CrackMapExec

Demostración en vídeo de este post:

En el post anterior he explicado el uso de la herramienta SMBMap y los beneficios que aporta a la hora de ejecutar operaciones de post-explotación sobre servicios Samba, SMB y muy especialmente, sobre entornos de directorio activo y en esta ocasión, es el turno de CrackMapExec. Lo cierto es que tanto SMBMap como CrackMapExec son muy similares y permiten hacer prácticamente las mismas operaciones de enumeración y reconocimiento, de hecho, incluso algunas opciones son comunes en ambas herramientas ya que heredan las características de Impacket, una estupenda librería que merece mucho la pena conocer y a la que se le ha dedicado una serie completa de posts que puedes leer en los siguientes enlaces:

Network Hacking con Impacket – Parte 1
Network Hacking con Impacket – Parte 2
Network Hacking con Impacket – Parte 3
Network Hacking con Impacket – Parte 4
Network Hacking con Impacket – Parte 5
Network Hacking con Impacket – Parte 6

Si es interesante para ti todo lo relacionado con la seguridad en Active Directory y los ataques más interesantes que se pueden llevar a cabo en estos entornos, te recomiendo que te apuntes al volumen 1 y volumen 2 del entrenamiento en sistemas Windows que tenemos disponible en Securízame.

Instalación y uso de CrackMapExec

Hay varias formas de instalar la herramienta y probablemente, la más cómoda sea por medio de Docker, ya que existe una imagen preparada para poder crear un contenedor y lanzar la herramienta desde éste. Otra alternativa consiste en descargar la última versión disponible desde la sección de releases y ejecutar el binario con Python 3.8 o superior. En cualquier caso, puedes leer la documentación del proyecto en donde se explican las diferentes opciones de instalación.

Una vez se cuenta con la herramienta instalada y preparada para usar, hay que tener en cuenta que no solamente soporta SMB, cuenta con otros módulos que permiten la enumeración de servicios tales como LDAP, RDP, WinRM, SQL Server y otros muy orientados a entornos de directorio activo.

Para listar los protocolos soportados basta con ejecutar la herramienta con la opción «–help», cada uno de ellos cuenta con sus opciones concretas, las cuales también se pueden listar con «cme <protocolo> –help»

Enumeración de usuarios, grupos y unidades compartidas.

La herramienta cuenta con opciones para listar usuarios, grupos y las unidades compartidas en un servicio del tipo SMB, basta simplemente con indicar la opción correspondiente y CME hará el resto.

Como se puede ver en la imagen anterior, con la opción «–users» y «–groups» es posible enumerar los usuarios y grupos respectivamente. Además, el proceso de autenticación puede ser por medio de usuario y contraseña, hash NTLM o token TGT de Kerberos en el caso de una máquina que esté unida a un directorio activo.

Por otro lado la opción «–shares» permite listar las unidades compartidas, incluyendo los permisos y etiqueta asociada,  igual a como lo hace SMBMap

Spidering de ficheros y directorios en unidades compartidas.

La herramienta viene con una opción para realizar búsquedas de forma recursiva en una unidad compartida indicada por parámetro. Entre otras cosas, permite indicar patrones de búsqueda, nivel de profundidad o recursividad y si debe buscar directorios o solo ficheros que cumplan con el patrón dado.

Consultar la política de contraseñas

Otra opción interesante consiste en obtener la política que se utiliza en un directorio activo para las contraseñas de los usuarios. Con la opción «–pass-pol» la herramienta se encargará de enseñar toda la información de las contraseñas en la terminal, sin embargo son necesarios permisos de administrador para realizar esta operación.

Consultar las bases de datos SAM, NTDS y LSA Secrets.

En cualquier sistema Windows o controlador de dominio, los ficheros correspondientes a la base de datos local (SAM) y la de dominio (NTDS) son fundamentales para el correcto funcionamiento de todo el sistema. Este tipo de elementos se pueden consultar con CME y funciona de un modo muy similar a como lo hace Impacket con el script «secretsdump.py». Para realizar el volcado de lo que se encuentra almacenado en dichos ficheros basta con indicar las opciones –sam o –ntds

Por otro lado, la información almacenada en el proceso LSASS es importante también, ya que se utiliza para llevar a cabo el proceso de autenticación. Los LSA Secrets se pueden extraer utilizando la opción «–lsa», sin embargo hay que tener en cuenta que nuevamente, se requieren permisos de administrador.

Ejecución de comandos y módulos en CrackMapExec

Por último, CrackMapExec soporta la ejecución de comandos en el sistema remoto con la opción «-x», exactamente igual que SMBMap

Si bien la posibilidad de ejecutar instrucciones es una característica muy potente de la herramienta, también cuenta con una serie de módulos que se pueden ejecutar sobre el sistema y que permiten realizar todo tipo de labores de pentesting. Para consultar los módulos que se encuentran disponibles basta con ejecutar la opción «-L» o «–list-modules». El listado va creciendo en cada nueva versión ya que poco a poco, son más las personas que deciden aportar al proyecto.

El tema de los módulos en CrackMapExec bien merece la pena explicarlo en otro post y así se hará. Es una herramienta que está evolucionando con el tiempo y que deberías tener en el radar si te dedicas a realizar pruebas de pentesting en sistemas Windows, ya sean estaciones de trabajo o controladores de dominio.

Un saludo y Happy Hack!
Adastra.