Hace unas semanas lanzamos Censeyeuna utilidad de código abierto diseñada para ayudar a los investigadores y cazadores de amenazas a explorar los datos de escaneado de Censys y pivotar automáticamente hacia nuevos hallazgos. Si aún no lo has visto, echa un vistazo a nuestro anuncio original aquí. Ha sido increíblemente emocionante ver las capturas de pantalla y los descubrimientos que comparte la gente: ya se han obtenido resultados realmente fascinantes. ¿Ver la herramienta en acción y descubrir cosas interesantes? Es increíble.
Una de las primeras cosas que queríamos hacer tras la primera versión era crear un marco que facilitara la ampliación del sistema en dos áreas clave:
- Generación de consultas: Necesitábamos una forma sencilla de conectarnos a la cadena de procesamiento de datos del host y generar dinámicamente consultas para informes y pivotaje. Por ejemplo, podríamos analizar los nombres de archivo de los directorios abiertos HTTP y buscar esos archivos en otros directorios abiertos. Estas consultas generadas debían tratarse igual que las definiciones de campo ya existentes, las configuraciones de pesos pivotantes y todo lo demás.
- Etiquetado de datos: Queríamos una forma sencilla de añadir etiquetas personalizadas a los informes finales, lo que nos daría más control y flexibilidad sobre cómo se muestra la salida. Por ejemplo, podríamos buscar el host en una base de datos externa y devolver una cadena para etiquetar el host.
Para hacer esto posible, hemos construido un sistema de plugin simple llamado Censeye Gadgets y comenzó a implementar algunas de las características que queríamos ver. Estos se encuentran ahora en la instalación por defecto de v1.0.0.
Nota Puedes ver todos los gadgets disponibles ejecutando:
~$ censeye -list-gadgets
Gadgets del generador de consultas
Los gadgets generadores de consultas leen los datos de exploración del host Censys y generan una o varias consultas de búsqueda, que se tratan como cualquier otro campo de la configuración de Censeye. La siguiente sección detalla los gadgets que hemos implementado actualmente.
Gadget de directorio abierto
Este gadget procesa un resultado de host Censys , identifica servicios con un directorio HTTP abierto, extrae nombres de archivo del cuerpo de la respuesta y genera consultas de búsqueda para localizar esos nombres de archivo en otros cuerpos de respuesta HTTP.
En la siguiente captura de pantalla, ejecutamos Censeye contra 209.105.248.135 utilizando el comando "-g odir"que activa el gadget de directorio abierto. El informe ahora incluye varias claves etiquetadas como "open-directory.gadget.censeye", con valores que contienen consultas de búsqueda Censys para encontrar nombres de archivo específicos en otros hosts.
Si nos fijamos bien, este gadget generó tres consultas para los archivos "sostener.vbs", "svchost.vbs"y "sostener1.vbs. El primer archivo se encontró en otros seis hosts con directorios abiertos, mientras que los dos últimos parecen ser exclusivos del host que estamos viendo.
Y al igual que cualquier otro campo configurado, ¡estos datos pueden utilizarse para el autopivotaje! Por ejemplo, ejecutando el siguiente comando con un peso de pivote mínimo de 0,9 (para omitir los campos NTLM para el pivote) y estableciendo la profundidad en 1:
~$ censeye 209.105.248.135 -gadget odir -min-pivot-weight 0.9 -profundidad 1
Aquí, podemos ver que los datos del archivo de directorio abierto ("sostener.vbs) está siendo utilizado para descubrir otros hosts, como se muestra en el Árbol pivotante de abajo:
Configuración del gadget "Abrir directorio
La configuración predeterminada del gadget Abrir directorio tiene este aspecto (observe que está desactivado por defecto):
Este gadget sólo tiene dos variables configurables:
- max_archivos: Limita la generación de consultas a los N primeros archivos del cuerpo de la respuesta HTTP. El valor predeterminado es 32, lo que evita que los directorios abiertos masivos consuman tiempo y recursos excesivos.
- min_chars: Garantiza que sólo se procesen nombres de archivo con al menos este número de caracteres.
El gadget debe añadirse a la configuración del campo para garantizar que estos campos se tratan como cualquier otro. (Sí, ¡eso es mucho "campo" en una frase!) Afortunadamente, la configuración incorporada por defecto ya se encarga de esto, y sí, también puedes añadir valores ignorados igual que otros campos. Esto es lo que parece:
El artilugio más noble
El gadget "Nobbler" se dirige a servicios desconocidos ("services.service_name=UNKNOWN"). Extrae el banner en bruto y genera búsquedas con comodines en diferentes desplazamientos dentro de la respuesta.
Si has trabajado antes con datos de protocolo, probablemente habrás visto que muchos protocolos binarios o sistemas de entramado incluyen una cabecera estructurada o número mágico, seguida de cargas útiles dinámicas. El gadget Nobbler se ha creado para ayudar a encontrar automáticamente otros servicios con ese concepto en mente.
Para demostrarlo, veamos un ejemplo real de cómo utilizamos este gadget para identificar cargas útiles de Metasploit.
Encontramos un host aleatorio(45.144.137.45) con un conjunto inusual de servicios que Censys no pudo identificar. Ejecutando Censeye con la función "nobbler"habilitado con el siguiente comando:
~$ censeye -gadget nobbler 45.144.137.45
El resultado (captura de pantalla a continuación) muestra cuatro filas generadas por nobbler, cada una de ellas con algunas métricas interesantes.
Nobbler generó las siguientes consultas e informó sobre ellas:
A medida que la consulta se vuelve más específica, cada vez menos hosts coinciden. Esto sugiere claramente que estos servicios presentan datos enmarcados o compilados de una forma interpretable por la máquina. Así que decidimos comprobar manualmente algunos de estos datos utilizando Netcat y pasando la salida al archivo "data.bin":
~$ netcat 45.144.137.45 56241 > data.bin
El comando de archivo no sirvió de mucho para determinar de qué se trataba:
~$ archivo data.bin
data.bin: datos
Sin embargo, binwalk pudo identificar que se trata de algún tipo de binario ELF, al menos a partir del offset 126 del archivo.
Por último, recurrimos a la herramienta de hacking por excelencia, las cadenas, para ver si destacaba algo significativo, y fue entonces cuando nos dimos cuenta de algo.
Con una simple búsqueda en la web y casi sin esfuerzo, identificamos rápidamente este servicio como una carga útil de Metasploit (Meterpreter) configurada para ejecutar mettle y conectarse de nuevo a este host.
Aunque las diferentes cargas útiles generadas pueden producir datos diferentes en Censys, el gadget "nobbler"simplifica el proceso examinando los primeros bytes en diferentes desplazamientos para descubrir puntos en común en los datos sin procesar. Por si fuera poco, ahora sabemos que cualquier cosa que coincida con esta consulta de búsqueda de Censys está probablemente relacionada con Metasploit.
Configuración del gadget nobbler
La configuración por defecto para nobbler está desactivada por defecto, pero se puede activar con la bandera "-gadget nobbler"; a continuación se muestra la configuración por defecto incorporada:
El gadget "nobbler" sólo tiene una directiva de configuración: la directiva iteraciones de iteraciones. Define los desplazamientos en los que se generan las búsquedas de comodines para servicios desconocidos. Por defecto, utiliza los desplazamientos 4, 8, 16 y 32.
Dado que esto opera sobre el valor services.banner_hex de los datos de Censys , tenga en cuenta que 2 bytes de estos datos corresponden a 1 byte de datos reales. Por ejemplo, 8 bytes de datos de banner se traducen en 2 bytes de datos reales, y así sucesivamente. Con la configuración predeterminada, esto significa que estamos generando consultas para 2 bytes, 4 bytes, 8 bytes y 16 bytes de datos reales.
Para que este gadget se pueda utilizar en el pivote, debemos añadirlo también a la configuración de los campos (que ya existe por defecto):
Gadgets para etiquetadoras
Estos gadgets son sencillos y tienen un único objetivo: aumentar los datos del host añadiendo etiquetas relevantes. Actualmente, hemos implementado dos gadgets etiquetadores:
- ThreatFox (-gadget threatfox): Comprueba si el host ha sido visto o reportado en ThreatFox.
- VirusTotal (-gadget virustotal): Comprueba si el host ha sido visto o reportado en VirusTotal.
A continuación se muestra un ejemplo (utilizando el host que vimos anteriormente) de estos gadgets etiquetadores:
Desarrollar su propio Gadgets
Si desea aplicar su propio generador de consultas o etiquetador de hosts, echa un vistazo al repositorio GitHub de Censeye para ver cómo funcionan los gadgets existentes - son extremadamente (y quizá vergonzosamente) sencillos.
Reflexiones finales
Censeye ha sido una evolución divertida de bloques de construcción simples que se apilan unos sobre otros para crear una utilidad potente y útil para un público muy nicho, y si quieres saber más, por favor echa un vistazo al post de anuncio original sobre Censeye.
Esta utilidad de código abierto utilidad de código abierto alojada en GitHub; ¡los comentarios, problemas y parches son bienvenidos!
Una última cosa que queríamos mencionar es que Censeye está ahora en PyPI y se puede instalar usando Python pip:
~$ pip install censeye -upgrade