Categorías
Hacking Networking Services - Software

Comandos en Covenant para post-explotación en sistemas Windows

Demostración en vídeo de este post

 

En el post anterior se ha visto cómo instalar y utilizar Covenant, es una herramienta fácil de utilizar y muy potente, parecida a Empire Framework en muchos aspectos. En este post se verá cómo utilizar sus principales características para poder llevar a cabo procesos de post-explotación. Lo primero que hay que decir es que los comandos que se pueden ejecutar en un «Grunt» se ejecutan en forma de «tasks» asíncronas, lo que permite ejecutar múltiples comandos sin tener que esperar a que el anterior termine. Esto es algo que efectivamente, acelera el proceso de post-explotación, pero hay que tener cuidado de no abusar ya que si se lanzan múltiples tareas que consumen una cantidad considerable de recursos puede verse afectado el rendimiento del sistema comprometido.

Tasks en Covenant

Uno de los elementos que llaman la atención son las «tasks» que se encuentran ya preparadas en la herramienta. Se trata simplemente de «alias» de comandos habituales en procesos de explotación. Hay cerca de 100 tasks preconfiguradas a la fecha de redactar este post y todas se encuentran disponibles en la sección «interact» de cada Grunt. Si bien es cierto que son comandos que se podrían ejecutar directamente desde una terminal, lo bueno que tienen es que ejecutan varias instrucciones para llevar a cabo un ataque concreto lo que ayuda a ser más eficiente una vez se gana la costumbre de usar el entorno de Covenant.


En la sección de «Taskings» que se encuentra en el panel lateral se podrán ver todos los comandos o tasks que se han ejecutado contra cada uno de los Grunts disponibles en el entorno. Mantiene un histórico de cada operación realizada aunque el Grunt ya no se encuentre activo.

Ejecución de comandos en el Grunt

Para ejecutar cualquiera de los comandos (Tasks) disponibles en la herramienta, es necesario seleccionar el Grunt con el que se desea trabajar y posteriormente, seleccionar la pestaña «interact» la cual proporciona una shell simple para ejecutar los comandos disponibles. Dicha shell cuenta con una cómoda función de autocompletar, por lo que rápidamente aparecen los tasks que se pueden ejecutar.

Por otro lado, las pestañas que aparecen al lado de «Interact» permiten visualizar los comandos que se han ejecutado previamente y sus resultados, algo que permite saber cuáles han sido los resultados anteriores y conocer el estado de la tarea (en proceso o finalizada).

KeyLogger

Se trata de un comando útil que permite iniciar un KeyLogger durante un periodo de tiempo concreto. Es posible capturar todas las pulsaciones del teclado en el sistema comprometido durante el número de segundos indicado.

DCSync

Permite ejecutar Mimikatz con el comando «lsadump::dcsync», un ataque muy común en entornos de Active Directory y que permite recuperar los hashes de cualquier usuario del dominio, incluyendo la cuenta de Administrador o KRBTGT. No obstante, para ejecutar este ataque se deben cumplir una serie de condiciones previas para que el Domain Controller permita la operación de sincronización, dichas condiciones están relacionadas con los permisos que tenga la cuenta de la máquina o el usuario que ejecuta el comando por lo que no funciona en todos los casos.

SeatBealt

Es uno de los proyectos disponibles en GhostPack y tal como se ha mencionado en otros post que se han publicado en este blog, permite la recolección de información y eventos de seguridad para detectar vulnerabilidades o malas configuraciones que conduzcan a la elevación de privilegios en el sistema.

LogonPasswords

Ejecuta Mimikatz y a continuación lanza los comandos privilege::debug y  sekurlsa::logonPasswords para obtener información sobre las sesiones que se encuentran cargadas en el proceso LSASS.

SharpUp

Ejecuta un conjunto de comprobaciones con el objetivo de encontrar vulnerabilidades que permitan elevar privilegios. Dichas comprobaciones por defecto no son demasiado agresivas con el objetivo no afectar el rendimiento del sistema comprometido o despertar sospechas.

PortScan

Escáner de puertos simple que recibe como argumentos el nombre de la máquina que se desea analizar y un listado de puertos separados por coma. Los resultados incluyen unicamente aquellos puertos que se encuentran abiertos.

SafetyKatz

Ejecuta la utilidad SafetyKatz, la cual a su vez, se encarga de lanzar un «MiniDump» para volcar y guardar en un fichero la información del proceso en el que se ejecuta LSASS. Una vez hecho esto, se utiliza dicho volcado para ejecutar el comando  «logonPasswords full» de Mimikatz.

Rubeus

Es una de las tantas herramientas que soporta Covenant y que se puede ejecutar desde un Grunt. En el caso de Rubeus es una de las herramientas más potentes de GhostPack y permite, entre muchas otras cosas, la gestión de Tickets Kerberos, ataques Pass The Ticket y la extracción e inyección de tickets.

Estos son solo algunos de los muchos comandos que se encuentran disponibles en Covenant. Merece la pena conocer la herramienta a fondo y explorar otros comandos que no se han explicado aquí, se anima al lector a realizar esta investigación y probar la herramienta.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Networking Services - Software

Covenant: C2 con .NET Core para Red Team

Demostración en vídeo de este post

Covenant es uno de los C2 más potentes que se encuentran disponibles actualmente, está desarrollado en C# y se caracteriza por contar con una interfaz web que permite aprovechar sus características de una forma fácil y rápida. Sigue un modelo muy parecido a otros C2, es decir, está completamente enfocado a las labores de post-explotación en sistemas Windows, no obstante su parecido con Empire Framework es innegable y de hecho, en varias secciones de la documentación de ambos proyectos se hacen referencias mutuas. Evidentemente son herramientas distintas, pero aprovechan las características la una de la otra. En el caso de Covenant, sigue el mismo modelo operacional de Empire Framework: Iniciar un listener, generar un stager y obtener un agente (en terminología de Covenant se le llama Grunt en lugar de Agent). En el caso de Empire Framework, se utiliza el compilador Roslyn para generar agentes C# y aprovechar la potencia de las herramientas disponibles en GhostPack y SharpSploit. La sinergia que existe entre ambos proyectos es evidente, tanto en la documentación como en sus funcionalidades. No obstante, es probable que Covenant resulte más amigable para algunas operaciones básicas como la generación de «Stagers» y gestión de «Grunts» la cual se lleva a cabo íntegramente desde la interfaz web.

Instalación de Covenant

El proceso de instalación de la herramienta es simple. Hay dos métodos disponibles, o bien instalando DotNet en el sistema donde se va a ejecutar la herramienta y posteriormente, ejecutando el comando «dotnet run» o ejecutando un contenedor Docker que ya tendrá todo configurado. Ambos mecanismos son sencillos y no suelen presentar dificultades, sin embargo es importante tener en cuenta que tal como se indica en la documentación del proyecto, es necesario utilizar la versión 3.1 del SDK de DotNet si se selecciona el primer método.
Si se opta por utilizar Docker, la gestión es muy simple y se puede crear un contenedor que utilice la imagen previamente creada con el comando «docker build«. En el vídeo de YouTube que se puede ver un poco más arriba se aprecia el proceso de instalación con Docker y se puede ver lo fácil que es crear la imagen y posteriormente el contenedor.
Una vez instalado el proyecto, se puede interactuar con él desde la interfaz web, es necesario acceder al puerto 7443 y crear el primer usuario, que será el administrador.

Listeners en Covenant

A continuación, es necesario empezar creando un Listener, algo que se puede hacer muy fácilmente pinchando en «Listeners» e introduciendo los datos básicos. Es importante tener en cuenta que la IP y puerto que se seleccionen deben ser accesibles para la víctima. Si se utiliza una instalación basada en Docker, por defecto pondrá la IP del contenedor y evidentemente, la víctima no sabrá cómo establecer la conexión. Por ese motivo cuando se ha creado el contenedor se han especificado varios puertos que estarán disponibles tanto en el host como en el contenedor, concretamente los puertos 80:80, 443:443 y 7443:7443. De esta forma, si se especifica la IP del host y el puerto 80, el proceso funcionará correctamente.

Se pueden crear tantos Listeners como sea necesario y gestionarlos desde la interfaz web. Estos componentes serán utilizados posteriormente por los «Launches» que apuntarán a ellos.

Launchers en Covenant

Representan simplemente las muestras o comandos que se deben ejecutar en el sistema comprometido para recibir una conexión y poder controlarlo remotamente. Hay algunos varios tipos disponibles en la herramienta, sin embargo algunos de ellos no funcionan correctamente en sistemas basados en Windows 10 o las últimas versiones de Windows Server. Por este motivo puede ser recomendable utilizar un Launcher basado en Powershell o un binario generado por la herramienta. Una de las ventajas que tiene Covenant y que recuerda mucho a Sliver, es que los binarios se compilan y generan «al vuelo» con el compilador integrado en Covenant, cada binario es completamente diferente, no hay payloads estáticos, lo que ayuda en la evasión de las soluciones de AV que se encuentren implantadas en el objetivo.

La herramienta enseña un listado de alternativas y como se puede ver, en algunas de ellas se indica que podría no funcionar como se espera en sistemas Windows recientes. Sin embargo, se cuenta con otras alternativas interesantes como Powershell, ShellCode (utilizando la técnica Donut) y Binary.
En cuanto se selecciona uno de estos componentes, hay que configurar el listener al que se conectará el launcher. Normalmente es suficiente con configurar todo en la pestaña de «Generate» y descargar la muestra en el caso de que sea un binario o copiar el comando que se genera y que se debe ejecutar en el sistema comprometido. En la pestaña de «host» se puede indicar una ruta para que dicha muestra sea descargada en la máquina comprometida utilizando HTTP, algo que en algunos casos puede resultar cómodo.

Grunts en Covenant

En cuanto se ejecuta el Stager/Launcher en la máquina comprometida, dicha instrucción se encargará de establecer una conexión al listener que se haya indicado durante su creación y si todo va bien, se obtendrá un nuevo «Grunt», que no es más que un componente que permite controlar remotamente el sistema comprometido, es equivalente a los «Agents» que se encuentran disponibles en Empire Framework.

Cada «grunt» que aparece en la interfaz web está identificado con un nombre único y además aparecen los detalles básicos correspondientes al sistema comprometido y el nivel de integridad obtenido.
Para interactuar con Covenant y llevar a cabo procesos de post-explotación es necesario conocer los comandos que se encuentran disponibles y ejecutarlos. Una de las ventajas que aporta Covenant frente a Empire Framework es que también se ejecutan los comandos de forma asíncrona, pero en la opción de «Taskings» se puede ver exactamente el estado de cada tarea y es posible interrumpirla si hace falta, en el caso de Empire Framework es necesario esperar hasta que la tarea termine y devuelva resultados (o no).
Cuando se selecciona un «Grunt» se pueden ver las pestañas «info», «Interact», «Task» y «Tasking». Es una interfaz intuitiva y no requiere demasiadas explicaciones, en la pestaña de «Interact» se pueden ejecutar comandos y en «Tasking» se puede ver el estado de dichos comandos, que se ejecutan de forma asíncrona tal como se ha mencionado antes.

Una vez entendido en funcionamiento básico de la herramienta, es necesario conocer los principales comandos y cómo usarlos adecuadamente. Esto se verá en el siguiente post.

Un Saludo y Happy Hack!
Adastra.

Categorías
Hacking Networking Services - Software

Módulos para post-explotación en Empire Framework 4

Demostración en vídeo de este post

La semana pasada he mencionado algunas de las Mejoras y novedades en Empire Framework 4 así como los esfuerzos por parte de BC-Security para mejorar el codebase de la herramienta y lo cierto es que está quedando muy bien. En este post me centraré en explicar algunos de los módulos de post-explotación disponibles en Empire Framework 4, algunos de ellos ampliamente conocidos ya que vienen desde las versiones iniciales de Empire Framework, pero otros no tanto y que merece la pena explorar.

Módulo wdigest_downgrade

Este ya lleva unos cuantos años pero puede ser interesante. Desde las versiones de Windows 8.1 se ha deshabilitado por defecto el SPP Wdigest, por lo que las credenciales ya no se quedan almacenadas en texto plano en el proceso LSASS (old history). No obstante, por cuestiones de compatibilidad y debido a que algunos servicios como es el caso de IIS utilizan WDigest para procesos de autenticación, aún es posible habilitar esta característica nuevamente modificando la clave HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential en el registro del sistema operativo.

 

Una vez se ejecuta el módulo y dependiendo de cómo se ha configurado (con o sin NoLock) en el sistema comprometido se modificará la clave del registro indicada anteriormente y ahora, cuando el usuario vuelva a realizar el proceso de autenticación, la herramienta será capaz de leer en texto plano las credenciales del usuario. De hecho, se pueden utilizar en otros módulos que las requieran gracias al comando usecredential

Módulo TimeStomp

Se trata de otro módulo básico y que también se encontraba disponible en versiones antiguas de Empire Framework. Permite ejecutar la instrucción «Set-MacAttribute» de PowerShell para manipular los atributos MACE de un fichero. Similar a lo que se hace con el comando «timestomp» en Meterpreter.

Módulo Phant0m

Phant0m es una herramienta reciente que se enfoca en evitar de forma «inteligente» que se generen logs en sistema comprometido. Se trata de una herramienta que se enfoca en descubrir los hilos de los servicios que generan logs y que se ejecutan con Svchost. La herramienta, una vez detecta dichos hilos procede a matarlos, por lo que dichos servicios son incapaces de generar logs y por lo tanto, no se produce «ruido» en el sistema que pueda alertar al administrador sobre la intrusión y las actividades que se están realizando. Sobre Phant0m se hablará con mucho más detalle en otro post dedicado a este proyecto.

Módulo PrivescCheck

La herramienta PrivescCheck se encuentra disponible en GitHub y desde hace un poco más de dos años se encuentra en desarrollo y mejor. Se trata de un script en Powershell que intenta detectar servicios mal configurados y otros detalles relevantes que le permitan a un atacante elevar privilegios en el sistema. Ha sido creada con el objetivo de darle continuidad al trabajo de Will Schroeder y Matt Graeber con PowerUP, herramienta que actualmente se encuentra abandonada.

Módulos basados en C#

Una de las novedades que trae Empire Framework es la posibilidad de integrarse con herramientas que se encuentran desarrolladas en C# como las que se encuentran en el proyecto GhostPack o SharpSploit, los agentes de C# tienen la ventaja de que incluyen algunas de las funcionalidades de los proyectos Covenant y Sharpire pero a diferencia de los módulos explicados anteriormente, su uso depende de que el plugin «csharpserver» se encuentre en ejecución y que se encuentre instalado el SDK de DotNet, algo que no es problema si durante la instalación de Empire Framework se ha marcado la opción «Y» cuando ha preguntado sobre la instalación de DotNet en el sistema. Afortunadamente utilizar el plugin es algo sencillo y se puede hacer rápidamente.


A continuación, se debe generar un stager del tipo windows/csharp_exe y finalmente ejecutar dicho binario en el sistema comprometido.

Ahora es posible utilizar cualquiera de los módulos disponibles en la categoría «csharp/»

Existen muchos más módulos en Empire Framework a día de hoy y muy probablemente habrán más en algunos meses, así que es una buena idea acostumbrarse a usarla y conocer cuantos más módulos mejor.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking

8 pasos para aprender Hacking desde cero.

Video en YouTube

NOTA: Si estás interesado en el mundo de la ciberseguridad y no sabes muy bien por dónde empezar, te recomiendo la siguiente formación que se encuentra disponible en The Hacker Way: Fundamentos de la ciberseguridad volúmenes 1 y 2
Estoy seguro que te va a encantar.

Hace un par de años tuve la oportunidad de dar una charla en la MorterueloCON sobre cómo empezar en el «mundillo» de la ciberseguridad y el hacking, en la que planteaba un plan o bitácora con los conocimientos que considero fundamentales para dedicarse a esto. El título de dicha charla era «Seguridad informática en 50 días – YOUR hacker way» y publique las diapositivas con todos los recursos que hay en ellas. Sigue vigente a día de hoy, aunque algunos enlaces ya no se encuentran disponibles. Creo que guías como esta abundan en Internet pero aún así, son muchas las personas que aún se sienten perdidas y no saben por dónde empezar. Creo que el problema no está en la falta de recursos disponibles ya que hay muchos, tenemos grupos de Telegram, Facebook, canales en YouTube e infinidad de tutoriales disponibles online. Entonces, por qué seguimos viendo un número considerablemente alto de personas que preguntan «Por dónde empiezo»?. En mi opinión esto se debe a que se tiene la percepción de que cualquiera puede meterse en ciberseguridad sin muchos conocimientos previos ya que «hay herramientas que lo hacen todo» y lo cierto es que no hay nada más lejos de la realidad. Son necesarios unos conocimientos de base muy profundos en varias temáticas, por ese motivo es posible que resulte conveniente empezar con los fundamentos, por ejemplo aprender sobre el funcionamiento de los sistemas operativos, aprender a programar o conocer las tipologías, componentes y protocolos de red básicos. No podemos pretender salir a correr sin antes haber aprendido a caminar. En este sentido, me gustaría dejar plasmados los pasos que en mi opinión,  permiten progresar en esta profesión.

1. Bases de informática.

Cuantos más conocimientos tengas sobre el funcionamiento de sistemas mejor. El hacking representa precisamente un conocimiento profundo de una área determinada (algo que no solo aplica a la informática) por lo tanto debes asimilar una serie de conocimientos básicos antes de empezar. En este sentido puede ser conveniente aprender sobre el desarrollo de software, sistemas operativos y redes.

2. Entiende el contexto.

La seguridad informática está compuesta por especialidades en las que el nivel de dificultad puede ser alto, por lo tanto creo que lo primero sería entender el contexto global y las especialidades relacionadas con la seguridad informática, entendiendo que todas ellas requieren unos conocimientos base que son comunes. Por ejemplo, en el caso del Hacking web, es importante tener conocimientos en desarrollo web para entender algunas vulnerabilidades que se presentan en las aplicaciones de este tipo. Si se trata de pentesting en entornos de red, los conocimientos en redes y sistemas operativos son fundamentales y si no los tienes vas a tener dificultades. Algunas de las especialidades más comunes y amplias en este contexto son:

  • Seguridad en sistemas operativos
  • Seguridad entornos de red y servidores
  • Seguridad en aplicaciones web
  • Análisis de malware y reversing
  • Respuesta ante incidentes y DFIR
  • Ciberinteligencia y Thread Hunting
  • Desarrollo seguro en aplicaciones de todo tipo
  • Seguridad en dispositivos móviles, gadgets o industriales
  • Seguridad en redes inalámbricas y radiofrecuencia
  • SecDevOps
  • Hardware Hacking

Esto sólo por mencionar algunas. Es recomendable saber al menos en qué consisten estas especialidades y cuáles de ellas te llaman más la atención.

3. Google/Startpage, DuckDuckGo, son tus amigos.

Este punto de hecho, ni siquiera debería de estar incluido ya que en los tiempos que vivimos la información está al alcance de todos, solo hay que saber buscar. Sin embargo hay muchas personas que no lo hacen y prefieren preguntar cosas que son fáciles de encontrar realizando búsquedas en cualquier servicio disponible en Internet. Esto normalmente demuestra que o bien, no has llegado al paso 1 o que prefieres que te lo den todo hecho en lugar de buscar por tu cuenta una solución. Esta actitud, como te podrás imaginar, no es precisamente bien recibida en grupos o comunidades dedicadas a la seguridad informática. Y ojo, que está bien preguntar cuando no se sabe de algo o se tiene alguna dificultad, pero se espera que ya te hayas pegado con ello y demuestres que realmente necesitas ayuda porque no das con la solución a tu problema.

4. Acostumbrate a leer.

No me refiero a leer novelas o cómics, que están bien para pasar el rato, pero… Me refiero a leer artículos técnicos, blogs y libros. También vas a encontrar recursos interesantes en otras plataformas de streaming como YouTube, por supuesto es algo que te ayudará en tu aprendizaje pero si no tienes la sana costumbre de leer y entender documentación técnica o algo tan simple como lo que te aparece en una terminal o fichero de log, va a ser muy complicado para ti avanzar. Esta es probablemente una de las cosas más difíciles, ya que en ocasiones cuando ejecutamos programas o creamos nuestras propias herramientas los mensajes de error no son tan claros como se podría esperar, sin embargo también es cierto que si estás experimentando dificultades con algo, es posible que otras personas hayan pasado por lo mismo y la solución se encuentre documentada en Internet (o directamente en StackOverFlow). Vuelve al paso 3. Busca, lee y aprende sobre los motivos por los que estás teniendo esos problemas. La mayoría de las veces, entender el problema es suficiente para encontrar una o varias soluciones. Como técnico vas a estar en la rutina de investigar y aprender de forma constante, es una de las características de la informática en general.

5. Aprende los fundamentos de las principales especialidades.

Inicialmente es buena idea «tocar muchos palos» aprender las bases de las especialidades más comunes para tener una perspectiva más amplia y así identificar con cuáles te sientes más a gusto o se te dan mejor. Esto puede llevar tiempo, pero es una estupenda forma de aprender y reforzar las bases que son comunes a dichas especialidades.

6. Invierte.

Todo está en Internet. Sí es cierto, pero tienes que buscar, categorizar y en ocasiones pierdes mucho tiempo intentando comprender ciertas cosas que son muy complejas. En ese sentido puede que te resulte interesante comprar libros sobre una temática concreta y adquirir alguna formación relacionada con dicha área. Es posible que tengas que invertir en actualizar tu ordenador o comprar otros dispositivos para realizar pruebas. Esta profesión, como cualquier otra, no está exenta de gastos. Si has llegado hasta este punto es posible que hayas decidido que esto es lo que te gusta y quieres desarrollar mejor tus habilidades. Si ese es el caso, invierte. No lo veas como un gasto innecesario, es una inversión orientada a cumplir con tus objetivos por lo tanto merece la pena.

7. Escoge una especialidad.

Hay mucho terreno que cubrir y sería una locura intentar abordarlo todo con un nivel de profundidad aceptable. Si eres como yo, probablemente te sentirás atraído por todas las especialidades y facetas de la informática, pero el tiempo es limitado por lo que probablemente el mejor enfoque será escoger una o varias especialidades y meterse de lleno en ellas. Luego con el tiempo, pasar a la siguiente y luego otra, luego otra. Vas a ver que los conocimientos que adquieres de una te pueden servir para la siguiente y se te hace cada vez más fácil asimilar o actualizar conocimientos.

8. Insiste.

Ya habrás visto que la seguridad informática es compleja. Requiere tiempo y dedicación, son necesarias una serie de habilidades personales relacionadas con la constancia y la resiliencia. Esto no es para todo el mundo, pero si realmente te gusta y lo has decidido, no te rindas e insiste, el esfuerzo merece la pena y da sus frutos.

Espero que estos pasos, consejos, tips o como quieras llamarlos te resulten interesantes y de ayuda, si considerás que hay algún otro que pueda ser importante y que no he tenido en cuanta aquí puedes escribirlo en un comentario.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Networking Services - Software

Mejoras y novedades en Empire Framework 4

Demostración en vídeo de este post

Empire Framework ha sido diseñado en sus inicios como una herramienta de post-explotación que ayuda en las labores típicas en esta etapa de un pentest o campaña de Red Team, no obstante ha tenido sus altos y bajos, pasando de PowerShell Empire a luego llamarse Empire Framework,  es un proyecto inicialmente desarrollado por personas tan conocidas en el mundo de la seguridad informática como Will Schroeder y con características que realmente sobresalían, no obstante su desarrollo fue abandonado y el repositorio archivado, por lo que daba la impresión de que el proyecto había llegado a su fin y era el momento de ver otras alternativas o sacar lo que se pudiese del código para crear otra herramienta. Sin embargo, tiempo después de que el proyecto original fuese declarado como «finalizado», la empresa BC-Security y  concretamente, Cx01N, Hubbl3 y Vince decidieron reactivarlo haciendo un fork del proyecto original. Desde ese momento la herramienta no ha parado de crecer y ahora mismo cuenta con más listeners y stagers orientados a entornos maduros en los que evidentemente, pueden haber mecanismos de seguridad implementados.
Inicialmente uno de los cambios más relevantes de Empire Framework 4 con respecto a su versión anterior, es que ahora hay un componente «server» completamente independiente que se encarga de la gestión de absolutamente todas las características del entorno. Esto significa que, evidentemente, también existe un componente «client» que es desde donde se envían las peticiones y es precisamente la interfaz principal con la que se interactua. Esto de hecho, también estaba montado así en versiones anteriores, pero gracias a una refactorización profunda en el código y al diseño modular que se ha implementado, es posible ejecutar el componente server y client en máquinas separadas. Esto también tiene otra ventaja y es que se pueden crear clientes personalizados, es decir, se puede crear un script en cualquier lenguaje de programación que consulte la API Rest del componente server y ejecutar rutinas de forma automática. De hecho, además del componente cliente disponible en la herramienta, hay otra utilidad que es capaz de consultar los endpoints de dicha API Rest llamada StarKiller de la que se hablará en otra ocasión.

Uso de Empire Framework 4

Como se ha comentado anteriormente, ahora hay dos componentes cliente y servidor independientes, lo que significa que es necesario ejecutar ambos programas de forma separada. Hay que tener en cuenta que ambos son configurables, es decir, en ambos componentes existe un fichero de configuración que indica la interfaz de red y puerto que se abrirá (componente server) así como la IP y puerto contra el cual se debe realizar la conexión (componente client). Si no se modifican estos valores, tanto el servidor como el cliente utilizarán la interfaz de red local y el puerto 1337. Otro detalle que hay que tener en cuenta es que requiere poetry y una versión superior a Python 3.8, al margen de esto, se conserva el script de instalación que es tan frecuente en las versiones anteriores de la herramienta ubicado en setup/install.sh
Funciona perfectamente en Debian 10 y Kali, aunque el proceso de instalación puede tardar algunos minutos. Una vez se encuentra instalado, es necesario abrir una terminal y ejecutar el componente servidor y desde otra, ejecutar el componente cliente que se conectará a la API Rest que levanta el servidor.


En la imagen anterior se puede ver cómo se ha ejecutado el componente «server» en la consola superior utilizando el comando «poetry run python empire.py server» y en la terminal inferior, aunque no se puede ver el comando ejecutado dada la forma en la que se enseña el interprete de Empire, pero ha sido «poetry run python empire.py client«. Se aprecia que efectivamente, el cliente establece la conexión contra el componente servidor en el puerto 1337 y el servidor acepta dicha conexión. Se trata de una conexión utilizando HTTPS con un certificado autofirmado generado por Empire, pero se podría generar otro certificado con OpenSSL o uno valido emitido por una CA de confianza e incluirlo en los ficheros de configuración tanto del cliente como del servidor para esta establecer una conexión.
A partir de este punto, usar la herramienta no tiene ninguna dificultad y se siguen los mismos pasos de las versiones anteriores y que por cierto, he documentado en este blog hace algunos años. Puedes leer ese post aquí.

  1. Levantar un Listener para recibir las conexiones por parte de los agentes (sistemas que han sido comprometidos).
  2. Generar un stager y ejecutarlo en el sistema comprometido.
  3. Recibir la conexión por parte de la máquina comprometido.
  4. Interactuar con el agente que se ha generado a partir del paso anterior.
  5. Ejecutar comandos contra el sistema comprometido y utilizar módulos de post-explotación disponibles en Empire Framework

Uso de Listeners, Stagers y Agents en Empire Framework 4

Tal como mencionaba anteriormente, el uso de la herramienta no ha cambiado mucho con respecto a versiones anteriores, se encuentran más elementos, por supuesto, pero la dinámica sigue siendo la misma. Una cosa que resulta llamativa de esta nueva versión de Empire es que la interfaz es más limpia y cuenta con componentes de ayuda que permiten trabajar rápidamente.

Existen varios listeners y stagers nuevos que son interesantes, además funcionan bastante bien. Por ejemplo windows/wmic y windows/launcher_vbs pueden ser útiles en determinados entornos. Además, tal como se indica en el post publicado por BC-Security sobre las características nuevas en Empire Framework 4 que puedes leer aquí, describe un stager basado en C#  que embebe su código en un ejecutable. La «gracia» que tiene es que el agente que se genera de la ejecución de dicho stager en la máquina comprometida es que cuenta con un conjunto de módulos muy interesantes, entre los que se incluye la integración con las herramientas de GhostPack, lo que permite llevar a cabo procesos de post-explotación en Windows muy potentes y elaborados. De esto, hablaré con mucho más detalle en otro post.

Puedes ver el vídeo que está disponible en este post para que puedas ver más claramente cómo utilizar Empire Framework 4 y los beneficios que aporta en un Pentest o en una campaña de Red Team
No será el último post que escriba sobre Empire Framework, se están haciendo grandes esfuerzos en mejorar la herramienta y merece la pena prestarle atención y apoyar.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Networking Services - Software

Pentesting en Active Directory Parte 2: Conceptos básicos

En la primera parte que puedes leer aquí se han mencionado algunos conceptos fundamentales sobre Active Directory, sin embargo se trata de una tecnología en la que hay muchos términos fundamentales que hay que entender antes de intentar montar un entorno de este tipo y hacer pruebas, por ese motivo en este segundo post continuaremos viendo algunos otros elementos básicos sobre Active Directory.

Tipos de Trust

En el post anterior se ha explicado este concepto, pero además merece la pena mencionar que cada trust puede ser unidireccional o bidireccional y transitiva o no transitiva y además puede ser:
Jerárquica: Entre un dominio padre y uno hijo.
Forest: Un dominio en un forest puede acceder a recursos de otro dominio en otro forest.
Externa: Trust directa entre dominios de diferentes forest.
Realm: Conecta un AD con un dominio no-windows.
Shortcut: Cuando 2 dominios en el mismo forest se comunican constantemente pero no están conectados directamente, se puede crear este tipo de Trust para evitar “saltar” sobre diferentes Trusts.

Trust Transtivity

Los objetos «Trust» pueden ser transitivos o no transitivos. La confianza no transitiva solamente afecta a los dos extremos de la relación (dominio confiable y dominio que confiá). Por otro lado, las relaciones de confianza transitivas pueden actuar
como un puente y ser utilizadas por un tercero para acceder a los recursos del dominio que confía. De esta manera, cualquier dominio en el Forest puede atravesar las relaciones de confianza y acceder a otros dominios en el mismo Forest, esto también es conocido como relaciones «intra-forest».

Usuarios

Entre otras cosas, Active Directory gestiona los usuarios del entorno tratándolos como un tipo de objeto especial que se almacena en la base de datos central. A continuación se listan algunas cuestiones importantes a tener en cuenta sobre los usuarios de un dominio.

  • Aunque el nombre de usuario sirve para identificarle, el SID (Security Identifier) también puede ser utilizado para dicho fin. El SID es la combinación del Domain SID y el RID (Relative Identifier). Algunas herramientas enseñan el SID en lugar del nombre de usuario, por ese motivo es importante saber esto.
  • Los user secrets son elementos utilizados por el Domain Controller para realizar el proceso de autenticación. Las
    contraseñas no se guardan en texto plano, pero los user secrets derivados de ellas sí, los cuales son Hashes NT y
    claves Kerberos.
  • Los hashes LM y NT son almacenados en dos sitios: La SAM (Security Account Manager) de Windows y la base de
    datos del AD, la cual por defecto se encuentra disponible en los DC en la ruta C:\Windows\NTDS\ntds.dit.
  • Aunque los hashes NT no son contraseñas, se pueden utilizar en algunos casos para ataques del tipo Pass-The-Hash/Overpass-The-Hash
  • Los ordenadores registrados en un AD también están representados por una cuenta de usuario, la cual es el nombre de la estación de trabajo con un «$» al final.
  • User Account Control es una de las propiedades de la clase User (no confundir con el mecanismo User Account Control para impedir la ejecución de programas en contextos elevados). Esta propiedad está compuesta por una serie de atributos que son relevantes para la seguridad de la cuenta de usuario y el dominio, especialmente relevante la propiedad DONT_REQUIRE_PREAUTH ya que significa que la cuenta no requiere preautenticación Kerberos.
  • Probablemente las cuentas de usuario más importantes son Administrator y krbtgt. La primera tiene privilegios altos en el sistema y la segunda permite el cifrado de los tickets TGT, lo que significa que si un atacante compromete dicha cuenta podrá crear este tipo de tickets sin problema. A esta técnica se le conoce como Golden Ticket y se hablará más adelante de esto en otro post.

Grupos

Del mismo modo que ocurre con los usuarios y ordenadores, los grupos son almacenados en la base de datos de AD y se pueden identificar por medio del atributo SID o SamAccountName. Uno de los grupos más importantes es el de Domain
Admins, por lo tanto, consultar cuáles son los usuarios que hacen parte de dicho grupo es importante para el atacante. Otro grupo importante es el de Enterprise Admins ya que permite que todos sus miembros tengan permisos de administrador en todo el Forest. A diferencia del Domain Admins el grupo EnterpriseAdmins está definido solo en el Root Domain del Forest. Otro detalle importante a tener en cuenta es el alcance de los grupos, estos son:

  • Universal Groups: Grupos que tienen miembros del mismo forest y garantizan permisos en el forest y trusted forests. El grupo Enterprise Admins es un Universal Group.
  • Global Groups: Grupos que tienen miembros del mismo dominio y garantizan permisos en el forest y trusted domains. El grupo Domain Admins es un Global Group.
  • DomainLocal Groups: Puede tener miembros del dominio o cualquier trusted domain y garantiza permisos solo en el
    dominio. El grupo Administrators es un DomainLocal Group.

 Base de datos NTDS

La base de datos de un AD contiene todos los objetos que se encuentran disponibles en el entorno y se comparte/sincroniza con todos los DC. Por defecto, se encuentra ubicada en el fichero C:\Windows\NTDS\ntds.dit de cada DC. Por otro lado, la NTDS se caracteriza por dos cosas:

  • Es una base de datos distribuida.
  • Cuenta con una estructura basada en objetos y jerarquías de clases.

El elemento fundamental de la base de datos son las clases, las cuales están compuestas por un conjunto de propiedades y
relaciones de herencia. Las clases más importantes son: User, Computer y Group.

Con estos conceptos básicos es suficiente de momento, en las siguientes entradas se verá un poco más en detalle otras cuestiones importantes de un Active Directory por medio de ejemplos y ataques concretos.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Networking Services - Software

Pentesting en Active Directory Parte 1: Conceptos básicos

Este será el primer post de una serie dedicada íntegramente a Active Directory y ataques en redes windows, en donde se explicarán los principales ataques que se suelen realizar en este tipo de entornos y las herramientas que se pueden emplear para ello. Antes de empezar es importante mencionar algunos conceptos básicos y dado que la cantidad de términos, protocolos, arquitecturas y herramientas que se utilizan en un entorno de Active Directory es enorme, en este primer post se señalan solamente aquellos componentes de un AD que son fundamentales.

 

¿Qué es un Directorio Activo?

En primer lugar, AD (Active Directory) es una tecnología diseñada por Microsoft e introducida en Windows 2000 Server  cuyo objetivo es el de definir un conjunto de componentes centralizados que se encargan de almacenar, organizar y distribuir información a las máquinas que hacen parte de una red de ordenadores. Para que exista un AD, es necesario contar con ordenadores que tengan una versión «Server» de Windows, los cuales se encargarán precisamente de mantener la información del entorno. Ahora bien, la información que se guarda en estos servidores se compone de unidades llamadas objetos y pueden ser prácticamente cualquier cosa: Usuarios, ordenadores, grupos, unidades organizativas, servicios, etc.

Dominios

Un dominio representa una agrupación lógica de un conjunto ordenadores conectados en una red los cuales comparten una base de datos de Active Directory. La base de base de datos es probablemente el elemento más importante en un AD (Active Directory) y es gestionada por los servidores centrales del dominio, también conocidos como Domain Controllers. Un dominio básicamente es una etiqueta que típicamente representa un nombre DNS, el cual en algunas organizaciones es el mismo que su sitio web, pero no tiene porque ser así en todos los casos y es posible que la organización prefiera utilizar otro nombre de dominio que será al que se unirán las estaciones de trabajo.

Controladores de Dominio

Son sistemas basados en Windows Server que pueden acceder y manipular la base de datos del AD. Cada dominio tiene como mínimo un controlador, por lo que si por ejemplo, un departamento o unidad de negocio crece más de lo esperado, es posible instalar más controladores de dominio dedicados a procesar las solicitudes de las estaciones de trabajo en ese departamento. También es posible crear subdominios para que los usuarios puedan acceder a los recursos en otros subdominios que hagan parte del mismo Forest.

Forest

Los dominios en AD son muy flexibles y permiten crear una infraestructura completa y bien organizada. Partiendo de un dominio raíz, es posible crear subdominios que representen la disposición física y/o lógica de las estaciones de trabajo. Esto significa que se puede crear un subdominio para el departamento de ventas, IT, marketing, etc. También se podría crear subdominios para las oficinas que se encuentran distribuidas en diferentes ubicaciones geográficas. Evidentemente, se trata de decisiones de diseño a la hora de configurar la red. Lo importante a tener en cuenta en este punto, es que un forest (bosque) es el conjunto de todos los subdominios (incluyendo el dominio raíz) y su nombre es el mismo que el de el dominio raíz.

Nombre NetBIOS

Un dominio puede ser representado por su correspondiente nombre DNS y también, por su nombre NetBIOS. Por ejemplo el dominio “testing.local” puede ser representado por el nombre NetBIOS “testing”. El nombre NetBIOS suele ser utilizado en múltiples operativas, un caso típico puede ser el proceso de login en una estación de trabajo utilizando un usuario del dominio. Por ejemplo testing\PEPE. En donde “testing” es el nombre NetBIOS y PEPE el nombre de usuario.

NIvel de funcionamiento

Tanto los dominios como los Forest cuentan con un modo de funcionamiento mínimo. Dicho modo dicta qué características se pueden usar en el forest o dominios. Los valores se pueden consultar en la página oficial de Microsoft.  La asignación del modo permite definir la versión mínima de Windows Server que deben cumplir los DC que pretendan gestionar el AD. Si por ejemplo, un dominio o forest tiene el modo funcional Windows 2008, significa que todos los DC de dicho dominio tienen como mínimo, una versión Windows Server 2008.

Trusts

Los usuarios pueden acceder a los recursos de otros dominios del mismo Forest gracias al concepto de confianza (Trust). Los Trust representan una conexión entre dos dominios, sin embargo es una conexión lógica basada en mecanismos de autorización y no se refiere a una conexión de red. Dependiendo del sentido y tipo de Trust, un usuario podrá acceder a recursos de otro dominio pero no podrá autenticarse en máquinas que están en ese dominio. Los objetos “Trust” tienen un sentido que determina cuál es el dominio que confiá y cuál el dominio confiable. Cuando se establece un Trust, los usuarios del dominio confiable podrán acceder a los recursos del dominio que confía. Cuando un dominio es confiable para otro, el objeto Trust es del tipo “Inbound” o “Incoming”. Cuando un dominio confía en otro, el objeto Trust es del tipo “Outbound” o “Outcoming”.

Este es el primer post de una serie que estimo, será bastante larga pero creo que muy interesante para aprender sobre Active Directory desde cero.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Services - Software Web Applications

Formación en ZAP y Hacking contra APIs Rest en TheHackerWay

Dado que algunos me habéis preguntado por las formaciones que se encuentran ahora mismo disponibles en TheHackerWay he decidido escribir este post con el objetivo de explicaros un poco en qué consisten y qué temas se tratan en cada una de ellas. En primer lugar, son formaciones orientadas al uso profesional de ZAP, así como al descubrimiento y explotación de vulnerabilidades en servicios web con arquitectura Rest, algo que como seguramente sabéis, es muy común en las aplicaciones web modernas que siguen modelos de construcción basados en microservicios. Se trata de formaciones que pretenden encontrar un equilibrio adecuado en relación calidad/precio y como siempre, completamente orientadas a explicación de conceptos básicos y avanzados desde la práctica. A continuación te explico cada uno de estos cursos para que te hagas una idea de lo que te vas a encontrar si decides adquirirlo.

ZAP Básico.

Se trata de la primera formación orientada exclusivamente a la exploración de la herramienta. El dominio de ZAP no es una cuestión trivial ya que es necesario hacerse con el control de la interfaz y las opciones que incorpora (que son unas cuantas), por estos motivos en el curso de ZAP Básico se explican cosas como los modos de ejecución de la herramienta, configuración de políticas tanto para escaneos pasivos como activos, detalles de configuración particulares para asegurar de que se ejecuta con las mejores opciones dependiendo del entorno, ajustes en las pruebas para evitar falsos positivos y falsos negativos, exploración de los scripts disponibles en la herramienta, entre otras cuestiones que te permitirán moverte con soltura en ZAP. Al finalizar la formación te sentirás cómodo utilizando la herramienta en tus auditorías de seguridad web.

ZAP Avanzado.

Este curso parte de la base que conoces la herramienta y sus detalles de configuración, es decir, que has aprendido todo lo necesario de ZAP que se encuentra disponible en el curso Básico. A continuación, en este curso avanzado se enseña el uso de las extensiones más potentes que se encuentran disponibles en el marketplace de ZAP, configuración avanzada de los contextos para soportar mecanismos de autenticación y autorización, configuración de las reglas de escaneo orientadas a reducir falsos positivos, uso de la API de ZAP para crear scripts en Python/Jython y ZEST al interior de la herramienta, integración de ZAP con otras herramientas de pentesting web habituales como Burp Proxy o PostMan, el uso de la API Rest de ZAP para la automátización de pruebas de pentesting utilizando la herramienta en modo «headless» y múltiples casos prácticos en los que se utiliza la herramienta para detección y explotación de diversas vulnerabilidades web. Se trata de un curso muy interesante y que en mi opinión, no lo encontraras en ningún otro sitio y menos en castellano. Aprenderás a utilizar ZAP desde una perspectiva profesional y le podrás sacar el máximo provecho a la herramienta. Como sabrás, ZAP es un proyecto insignia de la comunidad OWASP y por esa razón es prácticamente un «must» si te dedicas al pentesting web.

Hacking contra APIs Rest.

En este caso se trata de una formación en la que se describen los problemas a los que se enfrentan las aplicaciones web que exponen servicios web basados en arquitecturas Rest. En él, podrás ver el uso de las principales extensiones disponibles en Burp Professional para hacking en aplicaciones web y por supuesto, APIs Rest. Aprenderás sobre los problemas que se pueden presentar en este tipo de aplicaciones web y cómo descubrirlos. En este curso también podrás ver a ZAP en acción y los beneficios que aporta al hacking web contra aplicaciones de este tipo. Se trata de una formación que está totalmente orientada a la explotación de APIs Rest con vulnerabilidades, las cuales se encuentran cuidadosamente preparadas para enseñar malas prácticas de desarrollo y cómo aprovecharse de dichos defectos. Esta formación es una de las más prácticas que se encuentran disponibles ahora mismo y un porcentaje alto de las lecciones se basan en la resolución de casos prácticos en los que se enseña paso a paso, la detección y posterior explotación de vulnerabilidades.

Paquete de formaciones.

Finalmente, si te interesan dos o más formaciones y quieres que te salga más económico, lo mejor es adquirir alguno de los pack de formaciones, en las que tendrás acceso a dos o tres cursos por un precio reducido. Ahora mismo, se encuentra disponible el «pack» para ZAP y el completo en el que se encuentran los tres cursos. Puedes ver las características del paquete ZAP en este enlace: Pack ZAP y las de el paquete completo en este otro:  PACK Hacking web

Espero que te resulte interesante esta propuesta para aprender más sobre Hacking web utilizando herramientas tan potentes como ZAP y Burp Proxy Professional.

Un saludo y Happy Hack!
Adastra.