Categorías
Hacking Services - Software

Aprende a enumerar dominios de Active Directory con SMBMap

Demostración en vídeo de este post:

Una de las actividades habituales cuando se ejecuta una auditoría en un entorno de Active Directory es la enumeración SMB y si ya se cuenta con un usuario, es posible aprovechar las características de dicho servicio para extraer información útil. Para ello existen herramientas como Nmap que cuenta con una buena colección de scripts NSE orientados a SMB y por supuesto, también es posible utilizar otras herramientas como enum4linux, smbclient o rpcclient. No obstante hay dos utilidades que son especialmente interesantes para enumerar un servicio SMB, son SMBMap y CrackMapExec. En este primer post hablaré de SmbMap.

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.

Uso de SMBMap

Se trata de una herramienta con múltiples opciones que permite enumerar los recursos compartidos de un servicio SMB/Samba, ver los contenidos y permisos de unidades compartidas, descargar y subir ficheros e incluso, si las condiciones son las adecuadas, permite la ejecución de comandos. Tanto SMBMap como CrackMapExec son herramientas que están pensadas para la etapa de post-explotación de sistemas, dado que es necesario indicar un usuario y contraseña válidos para que la herramienta pueda hacer su trabajo.

Enumerar los contenidos de los recursos compartidos

La labor más común a la hora de enumerar SMB consiste en listar los recursos compartidos. SMBMap permite hacerlo y además, cuenta con opciones para consultar de forma recursiva los recursos a los que se tiene acceso.

Enumerar un recurso compartido concreto

Si se encuentra algún recurso que sea interesante, se le puede indicar a la herramienta que liste los contenidos de ese directorio concreto.

Subir y eliminar ficheros en la máquina remota

La herramienta cuenta con una opción (–upload) que permite la subida de ficheros que se encuentran en la máquina del atacante. Solamente hace falta especificar el directorio en el servidor SMB en donde se quiere subir el fichero y contar con permisos de escritura para ejecutar la operación.

Como es natural, si se cuenta con permisos para subir ficheros, también será posible eliminarlos. Nuevamente, en SMBMap hay una opción (–delete) que permite eliminar el fichero especificado.

Ejecución remota de comandos

Finalmente, si las condiciones son adecuadas y se cuenta con los permisos de administrador, será posible utilizar la herramienta para ejecutar comandos sobre el servidor. La opción «-x» permite la ejecución remota de instrucciones, en donde solamente es necesario indicar el comando a ejecutar.


Si es posible subir ficheros y ejecutar comandos, se puede ejecutar la operación básica de generar una muestra maliciosa, subirla y finalmente ejecutarla.

SMBMap es una herramienta que merece la pena tener en cuenta cuando se realizan labores de post-explotación sobre sistemas Windows, especialmente en entornos de directorio activo. En el siguiente post hablaré de otra herramienta que permite ejecutar las mismas acciones que SMBMap y alguna más, se trata de CrackMapExec.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking

Cómo crear scripts en Python que utilicen la red de TOR: Parte 2 de 2

Demostración en vídeo del post.

En la parte anterior se ha explicado cómo crear scripts en Python que utilicen TOR, algo que resulta sencillo de implementar cuando se utilizan librerías como Stem o Requests. En este post se explorarán otras alternativas interesantes.

Creando un objeto Session de requests para evitar DNS Leaks

En el post anterior se ha visto cómo usar Requests con TOR, no obstante se pueden producir fugas DNS solamente utilizando las funciones definidas en el módulo requests y esto evidentemente es algo que se debe evitar. La forma más fácil, rápida y limpia de hacerlo consiste en utilizar el objeto Session definido en Requests y realizar todas las peticiones HTTP utilizando dicho componente.

Como se puede apreciar en la imagen anterior, utilizar «Session» es una forma limpia y sencilla de ejecutar peticiones HTTP de forma anónima y además, se evitan las fugas DNS. La única diferencia desde la perspectiva del programador es que las funciones para ejecutar las peticiones HTTP (get, post, delete, put, etc) ya no se invocan desde el módulo «requests» sino desde el objeto «session. No cambia la estructura de dichos métodos así que si hace falta pasar de «requests» a «session» los cambios son mínimos.

Otras librerías que pueden utilizar TOR

En ocasiones es necesario utilizar librerías para hacer pentesting ya que Requests como cliente HTTP funciona estupendamente, pero se puede ser insuficiente. Existen otras librerías útiles para hacer pruebas sobre servicios web tales como Mechanize o Selenium, las cuales permiten automatizar casos de pruebas y simular la interacción de un usuario con el sitio web. Ambas librerías funcionan muy bien con TOR ya que admiten el uso de un proxy SOCKS.

Mechanize

En el caso de Mechanize es necesario crear un objeto «Browser» y a continuación, indicar todas las características que va a incluir antes de ejecutar cualquier petición. En realidad, es tan simple como invocar al método «set_proxies» e indicar un diccionario que contenga el proxy SOCKS de TOR.

En el script anterior se obtiene un objeto Browser, se establecen algunas cabeceras que contendrán todas las peticiones HTTP y además, se indica el proxy SOCKS que utilizará el navegador. Finalmente, se abre el sitio «thehackerway.com», se obtienen todos los enlaces y se busca aquel que tenga en el texto la palabra «Contact». Una vez recuperado dicho elemento, se «hace click» en él. Cabe anotar que esto se ha hecho utilizando TOR y que se podría hacer sobre cualquier otro sitio web.

Selenium

Es una de las librerías más interesantes y extendidas en el mundo del testing, existen múltiples herramientas que basan su funcionamiento en ella y por supuesto, existe una implementación para Python así como para otros lenguajes de programación comunes.

Sockets en Python con TOR

Aunque es lo más habitual, no siempre se utiliza TOR para conectar con sitios web y en ocasiones se utiliza para establecer conexiones con otros tipos de servicios TCP (no hay que olvidar que TOR únicamente soporta este protocolo).
En este sentido, la forma más rápida y directa consiste en importar el modulo socket de la API estándar de Python e indicarle el proxy SOCKS de TOR. A partir de este punto, cualquier conexión que se realice a un host remoto utilizando TCP, pasará primero por TOR. No obstante, hay que tener en cuenta que no todas las librerías y proyectos en Python están pensados para, por ejemplo, hacer peticiones a sitios «onion» y se pueden producir excepciones que hay que controlar.

En la imagen anterior simplemente se aprecia que se establece una conexión TCP a una dirección onion, a la cual solamente se podría acceder si existe una conexión a TOR, lo cual se consigue con el módulo «socks» y la función «setdefaultproxy». A continuación, se envía una cadena de texto y suponiendo que en el servicio oculto se esté ejecutando algo como un «netcat» o cualquier otro tipo de servicio TCP, el programa en Python recibirá la respuesta por parte de dicho servicio.

Como se ha podido apreciar en éste y en el post anterior, crear scripts en Python que se conecten a la red de TOR no es una tarea compleja y existen múltiples alternativas, en estos artículos desde luego no las he mencionado todas, solamente aquellos que utilizo con mayor frecuencia en mis proyectos, no obstante me interesa saber tu opinión ¿qué otras alternativas conoces para hacer esto mismo? te leo en los comentarios.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Hacking Python Programacion Services - Software

Cómo crear scripts en Python que utilicen la red de TOR: Parte 1 de 2

Demostración en vídeo de este post:

La red de TOR es ampliamente difundida y permite evadir restricciones de acceso a redes o sitios censurados, así como navegar de forma anónima por la darknet o clearnet. Por otro lado, en ocasiones es necesario automatizar algunas actividades, ya sea para realizar labores de pentesting, spidering, scrapping, etc. Si por el motivo que sea, estas actividades se deben llevar a cabo de forma anónima, resulta conveniente saber qué alternativas tenemos disponibles para realizar conexiones de red desde Python pasando por el servicio SOCKS que levanta cualquier instancia de TOR. En éste y el siguiente post, te enseñaré algunas librerías disponibles para esto y los beneficios que aportan.

Peticiones HTTP utilizando Requests

Requests es probablemente la librería más conocida entre aquellos desarrolladores que necesitan utilizar Python para ejecutar peticiones HTTP. Destaca por su versatilidad y facilidad de uso, con muy pocas instrucciones se pueden crear clientes HTTP completos para hacer cosas tan simples (o complejas) como ejecutar procesos de análisis de peticiones y respuestas o consumir de forma programática una API Rest. No obstante, si lo que se pretende es que las peticiones HTTP que realiza Requests pasen por TOR sin exponer la identidad real del cliente (dirección IP), es necesario indicarle a la librería la configuración del proxy SOCKS. Como prácticamente todo en Requests, configurar un proxy SOCKS no es complicado, basta simplemente con pasarle un diccionario con los detalles necesarios.

Como se puede apreciar en la imagen anterior, con muy pocas líneas de código se puede establecer una conexión a un sitio web en Internet utilizando una instancia de TOR en ejecución. Solamente hay que tener en cuenta que en este caso el proxy SOCKS se encuentra en levantado en el puerto 9150, ya que éste puerto es el valor por defecto de TorBrowser. A la hora de realizar la petición HTTP solamente es necesario tener en cuenta que se debe enviar el parámetro «proxies» con el diccionario declarado previamente. Este parámetro se encuentra definido en todas las funciones del módulo «requests» para hacer peticiones HTTP, tales como «get», «post», «put», «delete», etc.

Ahora bien, cuando se utiliza Requests la cabecera «User-Agent» de la petición no corresponde a la de cualquier navegador web de uso común, con lo que es fácilmente identificable que la petición HTTP se está llevando a cabo desde un script o bot. Para evitar esta situación, es habitual utilizar una librería como fake_useragent, la cual se encuentra disponible en el PYPI y se puede instalar con «pip install fake_useragent«.

Iniciar una instancia de TOR desde Python

En los párrafos anteriores se asumía que ya estaba levantada la instancia de TOR, en este caso concreto utilizando TorBrowser, sin embargo es probable que se quiera levantar una instancia de TOR aislada sin el navegador web de TorBrowser, es decir, solamente el programa de TOR y su proxy SOCKS sin más componentes añadidos. En este caso, es recomendable utilizar una librería como TxTorCon o Stem, en cualquiera de estas librerías se iniciará una instancia de TOR con la configuración que se le quiera pasar. El proceso es muy sencillo y puede venir bien cuando sea necesario ejecutar la instancia de TOR y el script de Python en un sistema que no cuente con un entorno gráfico (como un servidor basado en Unix). Eso sí, es necesario instalar la instancia de TOR manualmente.

Como se puede ver en la imagen anterior, se levanta una instancia de TOR que previamente ha sido descargada y compilada desde torproject.org y a continuación, se le envía un diccionario con la configuración que deberá utilizarse. Se envía una función de callback como parámetro de la función «launch_tor_with_config» para ver todos los eventos producidos y a partir de este punto, se podrían ejecutar peticiones con Requests tal como se ha explicado previamente, lo único que habría que cambiar es el puerto donde se ha iniciado la instancia de TOR que en este caso, se encuentra definido en el script.

Si bien en este post se ha visto cómo realizar peticiones HTTP con Requests utilizando TOR, existe una alternativa que permite gestionar mucho mejor las peticiones y evitar los «DNS Leaks», concretamente usando el objeto «Session» de Requests, algo que explicaré en el siguiente post. Espero que éste te haya gustado y si ese es el caso, puedes dejar un comentario y compartirlo con tus amigos o colegas.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking

Formación práctica en Hacking ético

En lo que queda del 2022 tenemos un conjunto de formaciones muy interesantes sobre Hacking ético en Securízame. Como ya os he mencionado en otras ocasiones, suelo colaborar con el plan de formación completo en Pentesting y Hacking ético, en donde se enseñan los conceptos fundamentales de la seguridad ofensiva desde una perspectiva completamente práctica.

El primer bloque de estas formaciones lo tenemos el día viernes 23 de septiembre con la formación en «Hacking básico», en donde tendrás la posibilidad de aprender las bases del pentesting en entornos de red y web.
A continuación, el día 7 de octubre continuamos con la formación en «Hacking avanzado», en esta formación verás con mucho más detalle algunas técnicas de explotación y post-explotación de sistemas, así como el uso de múltiples herramientas y técnicas para hacking web.
En estas dos primeras formaciones podrás adquirir las bases necesarias para ejecutar procedimientos de pentesting pero no termina, seguimos con dos formaciones orientadas específicamente a explotación y post-explotación en entornos de Active Directory y redes Windows, en este caso son formaciones en las que contarás con un entorno dedicado para ti, en el que podrás aplicar todas las técnicas de Hacking que aprenderás durante estos dos bloques.
Las fechas de estas dos formaciones son los fines de semana del 21 de octubre y 4 de noviembre respectivamente.
El último bloque de la formación está compuesto por dos entrenamientos cuyo objetivo es probar tus habilidades y destrezas. En los entrenamientos nuevamente, tendrás disponible un entorno preparado para ti en el que se propondrán una serie de retos, los cuales podrás disfrutar resolviendo poco a poco. No te preocupes si no consigues el objetivo marcado, tras finalizar cada reto explicaré la solución y podrás ver en qué has fallado o qué te ha faltado. Estos dos entrenamientos son los fines de semana del 18 de noviembre y 2 de diciembre
Es una formación completa en Hacking ético, diseñada cuidadosamente para que los conocimientos adquiridos los puedas poner en práctica a nivel profesional, es por ello que además de los cursos también tenemos la certificación RTCP.
Es un examen completamente práctico, en donde te enfrentarás a un entorno con sistemas vulnerables pero a diferencia de cualquier CTF u otras certificaciones similares, tiene un diseño orientado a las infraestructuras de red y aplicaciones habituales que te podrías encontrar en la red local de cualquier empresa. Esta certificación la puedes incluir en tu CV, lo cual te ayudará a tener un reconocimiento de tu esfuerzo y estudios, algo que por supuesto, tendrá cierto peso en procesos de selección en el caso de que busques una primera experiencia laboral o quieras cambiar de trabajo.

Espero que te resulte interesante nuestra propuesta y si ese es el caso, no dudes en apuntarte y recuerda que tienes disponibles packs con la certificación RTCP incluida y sin ella, de tal manera que puedes elegir lo que mejor encaje con tus necesidades.

Nos veremos nuevamente en la academia de Securízame, presencialmente u online, tu eliges.

Un saludo y Happy Hack!
Adastra

Categorías
Hacking

10 vulnerabilidades que se pueden presentar en tu CI/CD – Parte 2 de 2

Demostración en vídeo del post:

En el post anterior que puedes leer aquí. Se han explicado los primeros cinco puntos de la guía Top 10 CI/CD Security Risk en donde se describen las principales amenazas en los entornos de CI/CD y la importancia de conocer estos problemas cuando se implementa un modelo de trabajo basado en DevSecOps.

A continuación, se describen los 5 puntos restantes de la guía.

CICD-SEC-6: Insufficient Credential Hygiene

Es común encontrar ficheros del tipo IaC tales como ficheros Dockerfile, ficheros YAML para Kubernetes o pipelines para alguna plataforma de CI/CD. En ocasiones en dichos elementos se encuentran «secrets» que pueden suponer un riesgo para el entorno completo, tales como usuarios y contraseñas, tokens o claves privadas. Este punto de la guía se refiere precisamente a que la gestión de secretos debe realizarse en el sistema de CI/CD utilizado en lugar introducir estos valores en texto plano en ficheros de configuración. Un atacante con acceso a la plataforma de CI/CD o al SCM podrá acceder a estos valores sensibles si se introducen en ficheros de configuración como los mencionados anteriormente o directamente en el código fuente de la aplicación. Plataformas como Jenkins, Github Actions, Circle-CI entre muchas otras, cuentan con herramientas para la gestión de información sensible y evidentemente se recomienda su uso.

CICD-SEC-7: Insecure System Configuration

Este tipo de vulnerabilidad se refiere a configuraciones inseguras que se pueden presentar en cualquiera de las herramientas o componentes utilizados durante el ciclo de vida del desarrollo. Desde IDEs con configuraciones inseguras que permiten la subida de ficheros con información sensible en el SCM, software desactualizado, gestión insegura de permisos, hasta mecanismos inexistentes o insuficientes para el registro de eventos relacionados con la seguridad. Todos estos detalles se tienen en cuenta en éste punto de la guía y tienen el potencial de afectar severamente el entorno de CI/CD.

CICD-SEC-8: Ungoverned Usage of 3rd Party Services

La superficie de ataque en los entornos de CI/CD no solamente se define por los SCM, plataformas de gestión y otros componentes que integran dicho entorno, en este punto también hay que considerar el uso de programas, librerías, frameworks, herramientas y plataformas de terceros que no se están gestionando correctamente. El problema en este punto radica en que con bastante frecuencia estos componentes tienen acceso a recursos sensibles del entorno, extendiendo la superficie de ataque y en ocasiones, sin que la organización sea plenamente consciente de ello. En este punto de la guía se hace hincapié en que este tipo de vulnerabilidades se pueden mitigar  con una correcta gestión de cambios y políticas de seguridad que incluyan la revisión periódica de los activos que hacen parte del entorno.

CICD-SEC-9: Improper Artifact Integrity Validation

Los procesos de CI/CD normalmente están compuestos por múltiples pasos y el objetivo en última instancia consiste en convertir el código que crean los desarrolladores en una aplicación plenamente funcional en un entorno de producción. En este proceso se llevan a cabo varias labores en las que se mezclan recursos y artefactos internos y externos, componentes que se obtienen de sitios remotos y todo tipo de interacciones con sistemas externos. El hecho de que la aplicación dependa de múltiples fuentes, las cuales la van «alimentando» en cada paso del proceso, también crea múltiples puntos a través de los cuales un atacante puede envenenar entradas y manipular el resultado final. Si un recurso del que depende la aplicación se puede alterar, manipular o cambiar por un atacante en alguno de los pasos, lo más probable es que continúe fluyendo por todo el proceso de CI/CD hasta llegar a producción sin que nadie sepa que esta situación se ha producido ya que en apariencia, se trata de un recurso legítimo.
La recomendación consiste en utilizar técnicas de validación de la integridad, como por ejemplo el uso de hashes y firmas digitales que permitan saber que los componentes de los que depende la aplicación son confiables y no han sufrido alteraciones.

CICD-SEC-10: Insufficient Logging and Visibility

Este punto guarda cierta similitud con el OWASP Top 10 y la categoría «Security Logging and Monitoring Failures» ya que habla de los problemas que se pueden producir por una falta de control sobre los sistemas de logs y seguimiento en los eventos producidos. Cuando no existen mecanismos de registro o no se presta atención a los eventos de seguridad, existe la posibilidad de que un atacante pueda llevar a cabo actividades maliciosas sin que sean detectadas por parte del equipo y esto es especialmente critico en un entorno de CI/CD dada la cantidad de componentes e integraciones con terceros que se suelen producir.
En este sentido, las recomendaciones generales coinciden con las medidas de seguridad clásicas cuando se pretende implementar medidas de seguridad perimetral y bastionado, entre las que se incluyen el mapeo completo del entorno, gestión de activos y riesgos, detectar y habilitar las fuentes de logs, centralizar todos los eventos producidos en un servidor de syslog o mejor aún en un SIEM.

Como se puede comprobar, la guía es muy completa e incluye aquellas amenazas que afectan a los entornos de CI/CD, sin duda es un recurso muy útil si se desea implementar el modelo de DevSecOps en el ciclo de vida del desarrollo de software.

Un saludo y Happy Hack!
Adastra.