Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
choronzon — Un fuzzer evolutivo basado en conocimiento | Kitploit
Herramientas/GitHubGitHub/census/choronzon
Análisis de VulnerabilidadesExplotaciónFuzzingAnálisis de Binarios
GitHubcensus/choronzon

choronzon

Un fuzzer evolutivo basado en conocimiento

Ver Repositorio
2726127hace 10 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Choronzon - Un fuzzer evolutivo basado en conocimiento

Introducción

Este documento tiene como objetivo explicar brevemente la teoría detrás de Choronzon. Además, proporciona detalles sobre su funcionamiento interno y cómo se puede extender Choronzon para cumplir con nuevos requisitos. Una visión general de la arquitectura de Choronzon se presentó inicialmente en la Conferencia ZeroNights 2015. También están disponibles una grabación de la presentación y la presentación de diapositivas.

Choronzon es un fuzzer evolutivo. Intenta imitar el proceso evolutivo para seguir produciendo mejores resultados. Para lograrlo, cuenta con un sistema de evaluación que clasifica cuáles de los archivos fuzzeados son interesantes y cuáles deben descartarse.

Además, Choronzon es un fuzzer basado en conocimiento. Utiliza información definida por el usuario para leer y escribir archivos del formato de archivo objetivo. Para familiarizarse con la terminología de Choronzon, debe considerar que cada archivo está representado por un cromosoma. Los usuarios deben describir la estructura elemental del formato de archivo en consideración. Se prefiere una visión general de alto nivel del formato de archivo en lugar de describir cada detalle y aspecto del mismo. Cada una de esas estructuras elementales definidas por el usuario se considera un gen. Cada cromosoma contiene un árbol de genes y es capaz de construir el archivo correspondiente a partir de él.

Choronzon se divide en tres subsistemas: el módulo Tracer, el módulo Chromosome y el fuzzer.

Brevemente, el componente Chromosome se utiliza para describir el formato de archivo objetivo. Los usuarios pueden escribir sus propios módulos para admitir formatos nuevos o personalizados. Como caso de prueba, se proporciona un módulo PNG con Choronzon.

Por otro lado, el componente es responsable de monitorear la aplicación objetivo y recopilar diversa información sobre su ejecución. Esta versión de utiliza la herramienta de instrumentación binaria para registrar los bloques básicos que se visitaron durante la ejecución. Sin embargo, también es capaz de admitir otros backends de rastreo. Tenga en cuenta también que en la próxima versión de Choronzon, Pin será reemplazado debido a su impacto significativo en el rendimiento.

Descargar herramienta
Tracer
Choronzon
Intel's Pin
Choronzon

Por último, el componente fuzzer se utiliza para alterar el contenido de los archivos a probar. El módulo contiene un corpus de Mutadores y Recombinadores. Los Mutadores, simplemente, modifican el archivo como lo hacen los fuzzers comunes. Por ejemplo, realizan volteo de bytes, intercambio de bytes, mutación aleatoria de bytes, etc. Pero Choronzon tiene otra característica que no es tan común entre los fuzzers. Los Recombinadores utilizan la información sobre la estructura del formato de archivo, proporcionada por el módulo Chromosome, para realizar fuzzing inteligente.

Chromosome

En el directorio chromosome/parsers puede encontrar el archivo PNG.py. Este módulo de Python describe el formato de archivo PNG al fuzzer. Puede agregar sus módulos personalizados para otros formatos de archivo en este directorio.

La idea fundamental detrás del subsistema Chromosome es convertir los archivos semilla iniciales usando un Deserializer en un árbol de Genes. En algún momento, los Genes (fuzzeados) se escribirán en un archivo, usando un Serializer.

Considere que en Choronzon el objetivo del módulo analizador es proporcionar la estructura elemental del formato de archivo, en lugar de cada detalle menor. Esto ayudará al fuzzer a construir archivos que sean en su mayoría correctos, evitando salidas prematuras de la aplicación objetivo. Además, este enfoque ahorra tiempo, porque describir cada aspecto del formato de archivo consume tiempo e introduce una sobrecarga de desarrollo significativa.

Cómo escribir un analizador personalizado

Un nuevo módulo analizador debe importar:

  • chromosome.gene.AbstractGene
  • chromosome.serializer.BaseSerializer
  • chromosome.deserializer.BaseDeserializer

y debe implementar

  • una clase Gene derivada de chromosome.gene.AbstractGene,
  • una clase Serializer derivada de chromosome.serializer.BaseSerializer,
  • y una clase Deserializer derivada de chromosome.deserializer.BaseDeserializer.

En el ejemplo incluido con Choronzon, cada PNGGene corresponde a un fragmento PNG. Generalmente, puede pensar en un Gene como una estructura de datos elemental del formato objetivo. Cada Chromosome se compone de un árbol de Genes y representa un archivo único. Cada Gene debe ser capaz de producir una cadena de bytes que contenga sus datos combinados con los datos de los Genes inferiores en el árbol.

El PNGSerializer debe ser capaz de producir un archivo (en su mayoría correcto) a partir de cuando se le proporciona una lista de Genes. Por otro lado, PNGDeserializer debe ser capaz de analizar un archivo válido del formato objetivo y deserializarlo en un árbol de Genes.

Consulte chromosome/parsers/PNG.py para ver un ejemplo comentado para el formato PNG.

Tracer

El módulo Tracer se utiliza para desensamblar la aplicación objetivo (y/o una o más de sus bibliotecas). En esta versión de Choronzon esto se logra con IDA. Usamos este enfoque porque podemos correlacionar cualquier información interesante de la campaña de fuzzing con nuestros IDB. Sin embargo, es posible que eliminemos la dependencia de IDA en un futuro cercano para hacer Choronzon más portátil y accesible.

Un archivo se prueba contra una aplicación con la ayuda de una utilidad Pin. En el directorio analyzer/coverage se encuentra el código fuente de esta herramienta Pin, que inyecta hooks al comienzo de cada bloque básico en la aplicación objetivo. Cuando la ejecución finaliza, correlacionamos el bloque básico que fue alcanzado con el bloque básico del binario. Por lo tanto, podemos calcular métricas que son valiosas para nosotros (cobertura, etc).

Fuzzer

El componente Fuzzer utiliza la representación Chromosome para fuzzear un archivo. Como se mencionó anteriormente, hay dos métodos de fuzzing en Choronzon.

Para el primer método, Choronzon obtiene el contenido de uno o más genes y aplica uno de los Mutadores. Los Mutadores implementan métodos de fuzzing comunes pero efectivos, como mutación aleatoria de bytes, establecimiento de bit alto, intercambio de bytes y muchos más. También puede escribir sus propios mutadores personalizados y agregarlos en fuzzers/mutators.py.

El segundo método de fuzzing se llama recombinación. Los Recombinadores se utilizan para cambiar la estructura del archivo. Aquí hay un ejemplo con el formato PNG.

Los archivos PNG se componen de fragmentos consecutivos que contienen cuatro campos:

  • longitud,
  • tipo del fragmento,
  • datos del fragmento,
  • y un CRC.

Supongamos que tenemos un archivo PNG que solo tiene fragmentos IHDR, IDAT e IEND. Su estructura se vería así:

root@kitploit:~
[ Firma PNG ] [ IHDR ] [ IDAT ] [ IEND ]

Dado que Choronzon conoce las estructuras básicas (es decir, los fragmentos PNG), es capaz de alterar su secuencia. Después de una recombinación exitosa, el archivo PNG de salida fuzzeado puede verse así:

root@kitploit:~
[ Firma PNG ] [ IDAT ] [ IHDR ] [ IEND ]

Choronzon contiene muchas más estrategias de recombinación que lo hacen capaz de manejar incluso formatos de archivo complicados.

Instalación

Choronzon ha sido probado con Python 2.7, Pin 3, IDA Pro 6.6 a 6.9, en Ubuntu 16.04 LTS (kernel de Linux 4.4) y Windows 10.

Para ejecutarlo, necesitará instalar el paquete Python sortedcontainers. Puede encontrarlo aquí o instalarlo a través de pip.

Además, Choronzon necesita IDA Pro (en realidad, su versión terminal). La ruta de IDA Pro debe especificarse en su archivo de configuración de la siguiente manera:

root@kitploit:~
DisassemblerPath = 'C:\\Program Files (x86)\\IDA 6.6'

Se ha probado con éxito con IDA Pro 6.6, 6.7, 6.8 y 6.9.

La herramienta Pin de cobertura de Choronzon se encuentra en analyzer/coverage y debe compilarse. Puede consultar la documentación de Pin para obtener detalles, o puede realizar los siguientes pasos:

  1. Copie los archivos coverage.cpp y makefile.rules a /ruta/a/pin/source/tools/MyPinTool
  2. Ejecute make. Si está en Windows, debe ejecutar la línea de comandos de Visual Studio y usar la utilidad make y sus dependencias desde Cygwin
  3. Copie de vuelta a /ruta/a/choronzon/analysis/coverage el directorio recién creado obj-intel64 (o obj-ia32 para sistemas de 32 bits)

Configuración

Para fuzzear con Choronzon, debe proporcionar un archivo de configuración. En el directorio settings hay un ejemplo de la configuración de Choronzon.