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
sniffles — Sniffles: Generador de captura de paquetes para IDS y evaluación de expresiones regulares | Kitploit
Herramientas/GitHubGitHub/petabi/sniffles
Sniffing y Análisis de PaquetesEvasión de IDS/IPSFuzzingSeguridad de RedesPruebas de PenetraciónDetección de Intrusiones
GitHubpetabi/sniffles

sniffles

Sniffles: Generador de captura de paquetes para IDS y evaluación de expresiones regulares

Ver Repositorio
6525hace 7 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

Sniffles--Generador de Capturas de Paquetes para IDS y Evaluación de Expresiones Regulares

Sniffles es una herramienta para crear capturas de paquetes que probarán IDS que usan patrones fijos o expresiones regulares para detectar comportamientos sospechosos. Sniffles funciona de manera muy simple. Toma un conjunto de expresiones regulares o reglas y elige aleatoriamente una expresión regular o regla. Luego genera contenido basado en esa regla o expresión regular. Para cadenas fijas, esto significa agregar la cadena directamente a los datos (posiblemente con desplazamientos u otras opciones según las reglas de Snort). Para expresiones regulares, el proceso es algo más complejo. La expresión regular se convierte en un AFN y se elige un camino aleatorio a través del AFN (desde el inicio hasta el final). Los datos resultantes coincidirán con la expresión regular. Finalmente, Sniffles se puede configurar para coincidencia completa o coincidencia parcial. Con una coincidencia completa, los datos del paquete coincidirán absolutamente con al menos una regla o expresión regular (aunque algunas opciones de Snort no se consideran completamente). Una coincidencia parcial eliminará el último carácter de una secuencia de caracteres coincidente para obtener una secuencia que no debería coincidir (aunque podría coincidir con otra regla). Las reglas coincidentes deberían causar la mayor carga en un IDS. Por lo tanto, es posible determinar qué tan bien maneja el IDS el tráfico en el peor caso. El tráfico de coincidencia parcial causará casi tanta carga como el tráfico coincidente. Finalmente, Sniffles también puede generar tráfico que tiene datos completamente aleatorios. Estos datos aleatorios ofrecen un escenario de mejor caso, ya que es muy poco probable que los datos aleatorios coincidan con alguna regla. Por lo tanto, pueden procesarse a máxima velocidad. Así, Sniffles permite la creación de capturas de paquetes para el funcionamiento en el mejor y peor caso de la inspección profunda de paquetes del IDS.

Además de lo anterior, Sniffles también tiene la capacidad de crear capturas de paquetes de evaluación. Hay dos tipos de capturas de paquetes de evaluación. La primera captura de paquetes de evaluación creará exactamente un paquete para cada regla o expresión regular, en secuencia. Por lo tanto, es posible probar y ver que cada regla coincide como se espera. La evaluación completa va un paso más allá y crea un paquete para cada rama posible en una expresión regular. Una sola expresión regular podría tener miles de ramas posibles. Esto prueba para asegurar que todas las ramas posibles de una expresión regular se manejen correctamente. Las capturas de paquetes de evaluación deberían coincidir con todos los paquetes. Cualquier paquete no coincidente probablemente representa una falla del IDS y necesita más investigación. Por supuesto, siempre existe la posibilidad de que Sniffles no esté creando el paquete correcto para un IDS dado, o no reconozca una opción particular para una regla. Consulte las características de reglas soportadas para más información.

Finalmente, Sniffles también puede hacer mucho para generar tráfico de red aleatorio. Por defecto, el tráfico aleatorio es TCP, UDP o ICMP y unidireccional. Sin embargo, también puede generar tráfico TCP con ACKs, handshakes y teardowns para cada flujo. Generará números de secuencia y sumas de verificación correctos. Además, las direcciones MAC se pueden configurar según las distribuciones deseadas, y las direcciones de red IP pueden definirse mediante espacios de direcciones locales y externos. Además, es posible simular escaneos dentro de una captura de tráfico.

Instalación

REQUIERE: Python 3.3+ y el módulo SortedContainers

Sniffles consta de los siguientes archivos:

  • rulereader.py: El analizador de reglas.
  • ruletrafficgenerator.py: La herramienta para generar flujos de contenido.
  • sniffles.py: El programa principal que gestiona el proceso.
  • sniffles_config.py: maneja la entrada de línea de comandos y las opciones para Sniffles.
  • traffic_writer.py: Escribe un paquete en un archivo compatible con pcap. No requiere libpcap.
  • vendor_mac_list.py: Contiene Identificadores Únicos de Organización MAC utilizados para generar direcciones MAC semi-realistas en lugar de solo octetos combinados aleatoriamente.
  • examples/vendor_mac_definition.txt: Archivo opcional para definir la distribución de direcciones MAC parciales o completas.
  • archivos pcre para pcre (pcre_chartables.c pcre_compile.c pcre_globals.c pcre_internal.h pcre_newline.c pcre_tables.c pcre.h pcrecomp.c pcreconf.py ucp.h).
  • nfa.py: para recorrer el AFN.
  • regex_generator.py: El código para generar expresiones regulares aleatorias.
  • rand_rule_gen.py, feature.py y rule_formats.py: módulos para generar conjuntos de reglas aleatorios.

Para instalar:

  1. Vaya al directorio de nivel superior.
  2. Escriba python3.x setup.py install.
  3. Esto instalará la aplicación en su sistema.

Notas de instalación:

  1. Esto no se ha probado con Windows ni en Linux. Se ha probado en FreeBSD y Mac OS X.
  2. Use python3.x setup.py build para compilar localmente, luego vaya al directorio de la biblioteca, encuentre la lib y use python3.4 -c "from sniffles import sniffles; sniffles.main()" para ejecutar localmente.

Formatos Soportados:

  • Snort: Reglas de alerta de Snort (la regla debe comenzar con la directiva Alert). Las etiquetas de contenido se reconocen y analizan correctamente. Las etiquetas PCRE también se analizan correctamente. Las etiquetas HTTP se procesan consecutivamente, por lo que pueden no crear el paquete deseado. El contenido (y el contenido PCRE o HTTP) puede ser modificado por distance, within y offset. Una regla puede usar una opción de control de flujo, aunque solo se deriva la dirección de los datos a partir de esto. La opción nocase se ignora y se usa la mayúscula/minúscula presentada. Todas las demás opciones se ignoran. Los valores del encabezado se analizan y se generará un paquete que cumpla con esos valores. Si se usan espacios de direcciones de red local y externa, se usará el espacio correcto para las respectivas variables $HOME_NET y $EXTERNAL_NET. Ejemplo:

    alert tcp $EXTERNAL_NET any -> $HOME_NET 8080 (msg:"SERVER-APACHE Apache Tomcat UNIX platform directory traversal"; flow:to_server; content:"/..|5C|/"; content:"/..|5C|/"; http_raw_uri;

  • Expresiones regulares: Expresiones regulares sin formato, 1 por línea, escritas como abc o /abc/i. Actualmente soporta las opciones i, s y m. Otras opciones se ignoran. Ejemplo:

    /ab*c(d|e)f/i

  • Formato de regla Sniffles descrito a continuación.

Opciones de Línea de Comandos:

  • -a TCP Ack: Enviar un acuse de recibo TCP por cada paquete de datos enviado. Desactivado por defecto. Los paquetes de acuse de recibo no tienen datos por defecto.

  • -b Bidireccional: Se generarán datos en ambas direcciones de un flujo TCP. Los ACKs se activarán. Esta característica está desactivada por defecto.

  • -B [Protocolo de Tráfico de Fondo:Porcentaje]: Establecer al menos un protocolo con un valor entre 1 y 100 para producir Tráfico de Fondo. Este valor representa el porcentaje de la cantidad total de tráfico. Protocolos disponibles: FTP, HTTP, IMAP, POP y SMTP. Por ejemplo: "http:20,ftp:30,smtp:10". Introducir solo un número como valor del argumento para generar tráfico aleatoriamente. Por ejemplo: "80".

  • -c Recuento: Número de flujos a crear. Cada flujo contendrá un mínimo de 1 paquete. El paquete estará entre dos puntos finales según lo definido por la regla o elegidos aleatoriamente. tcp_handshake, tcp_teardown y packets_per_stream aumentarán el número de paquetes por flujo. Actualmente, los datos en un flujo fluyen en una sola dirección. Si se usa la opción -b, los datos deberían fluir en ambas direcciones. Además, las reglas de Sniffles pueden designar que los datos fluyan en ambas direcciones.

  • -C Flujos Concurrentes: Número de flujos que estarán abiertos a la vez. Es el mejor esfuerzo, ya que si hay menos flujos que el número de flujos concurrentes designados, se utilizarán todos los flujos actuales. Por ejemplo, si solo quedan 1000 flujos, pero el número de flujos concurrentes se configuró en 10000, aún así solo se escribirán 1000 flujos en ese momento. El valor predeterminado es 1000. Si se usa con duración, los flujos -C se mantendrán durante toda la duración, lo que finalmente ignorará cualquier entrada de -c. Nota: el propósito de esto es crear un pcap diverso donde los paquetes del mismo flujo se distribuyan en lugar de estar justo uno al lado del otro y crear la ilusión de muchos flujos concurrentes. En nuestras pruebas, hemos manejado hasta 2-3 millones de flujos concurrentes antes de que la memoria sea un problema. Además, debemos mencionar que las diferentes latencias entre flujos pueden hacer que algunos flujos terminen antes que otros.

  • -d Directorio de Reglas: ruta al directorio que contiene los archivos de reglas. Leerá todas las reglas habilitadas en todos los archivos de reglas del directorio. Asume que todos los archivos de reglas terminan con la extensión .rules. Use esta opción o -f, pero no ambas. El símbolo # se usa para desactivar (es decir, comentar) una regla.

  • -D Duración: Generar basado en la duración en lugar de en el recuento. La duración está en segundos. Tenga en cuenta que la latencia predeterminada entre paquetes es un promedio de 1-200 microsegundos. Para latencias bajas, una duración grande podría resultar en millones de paquetes, lo que podría llevar mucho tiempo construir. Además, la duración es al mejor esfuerzo. Esencialmente, no se crean nuevos flujos después de que se cumple la duración, pero puede haber flujos que no se hayan completado. Estos aún se escriben, por lo que la duración real puede ser mayor que la designada, pero no debería ser menor. Finalmente, establezca una latencia más grande si desea tener menos flujos creados durante la generación.

Ejemplos:

NOTA: todos los ejemplos asumen que ha instalado el paquete sniffles.

Para generar un pcap a partir de un archivo único de expresiones regulares con 10 flujos donde cada paquete coincide con una regla

sniffles -c 10 -f myre.re -m

Para generar un pcap a partir de un archivo de reglas Snort único donde cada paquete coincide casi con una regla

sniffles -c 10 -f myrules.rules

Para generar un pcap a partir de múltiples archivos de reglas Snort en un solo directorio donde cada paquete coincide con una regla.

sniffles -c 10 -d myrulesdir -m

Para generar el mismo pcap que el anterior, usando las mismas reglas, pero con contenido aleatorio (el contenido es aleatorio, los encabezados seguirán las reglas--no funciona con regex o reglas Sniffles):

sniffles -c 10 -d myrulesdir -r

Para generar un pcap con 10 flujos (1 paquete cada uno) y con datos aleatorios:

sniffles -c 10

Para generar un pcap con 10 flujos donde el 50% de los flujos serán tráfico de fondo y el resto de los flujos contendrán paquetes que coinciden con una regla:

sniffles -c 10 -B 50 myrules.rules

Para generar un pcap con 10 flujos, cada flujo con 5 paquetes, con ACKs, handshake y teardown, así como una longitud fija de 50 para los datos en cada paquete con datos:

sniffles -c 10 -p 5 -l 50 -t -T -a

Para generar un pcap con 20 flujos aleatorios con una red local de 192.168.1-2.x:

sniffles -c 20 -h 192.168.1,192.168.2

Para generar un pcap con 20 flujos aleatorios con una red local de 192.168.1.x para IPv4 y 2001:8888:8888 para IPv6 con el 50% del tráfico IPv6:

sniffles -c 20 -h 192.168.1 -H 2001:8888:8888 -i 50

Para generar una captura de paquetes de 5 segundos de paquetes aleatorios con un lapso promedio entre paquetes de 100 microsegundos:

sniffles -D 5 -L 100

Para generar un pcap que creará un paquete que coincida con cada regla en un archivo de reglas (o archivo de regex) en secuencia:

sniffles -f myrules.rules -e

Para generar un pcap que creará un paquete para cada rama posible de una regex para cada regex en un conjunto de regex y luego guardar ese archivo en un pcap llamado everything.pcap es como se muestra a continuación. Sin embargo, esta función puede ejecutarse en tiempo exponencial si la regex tiene una gran cantidad de contadores min-max, por lo que puede tardar mucho tiempo en ejecutarse. Además, todas las demás opciones, excepto las dos ilustradas a continuación, se ignoran.

sniffles -f myrules.rules -o everything.pcap -E

Para generar tráfico aleatorio con un ataque de escaneo que ocurre 2 segundos después y dura 2 segundos con 1000 paquetes de escaneo por segundo y con toda la captura con una duración de 5 segundos y tiempo de lapso de 50us y con puerto inicial 80 (buscando puertos secuencialmente desde el 80):

sniffles -D 5 -O 2 -W 2 -I 1000 -L 50 -s 192.168.1.2 -P 80

Similar al anterior, pero creará múltiples ataques de escaneo, cada uno con duración de 1 segundo, y un desplazamiento promedio entre ataques de 2 segundos. Además, solo escanea los puertos designados. También apunta a direcciones IP en el rango 192.168.1.0-255 aleatoriamente.

sniffles -D 8 -O 2 -W 1 -I 10 -L 50 -s 192.168.1 -P 80,8080,8000,8001

Formato de Regla Sniffles:

Sniffles soporta varios formatos de reglas. Primero, Sniffles puede analizar reglas Snort, y expresiones regulares (una por línea). Además de esto, Sniffles también tiene su propio formato de regla que puede usarse para controlar explícitamente el tráfico. Esto se hace mediante el uso de archivos xml que describirán el tráfico. Cuando se usa este formato, las otras opciones de Sniffles pueden ser irrelevantes. En el directorio examples se pueden encontrar archivos de reglas de ejemplo. Estos archivos de reglas se usan simplemente designando el archivo de reglas con la opción -f (es decir, sniffles -f rules.xml)

El formato de regla Sniffles es el siguiente:```xml

<petabi_rules> <traffic_stream proto="tcp" src="any" dst="any" sport="any" dport="any" handshake="True" teardown="True" synch="True" ip="4"> </traffic_stream> <traffic_stream proto="tcp" src="any" dst="any" sport="any" dport="any" handshake="True" teardown="True" synch="True"> </traffic_stream> </petabi_rules>

root@kitploit:~
En detalle, las etiquetas funcionan de la siguiente manera:

- `<petabi_rules> </petabi_rules>`: Define todas las reglas para este archivo
  de reglas. Solo debe haber un conjunto de estas etiquetas que abran y
  cierren todos los flujos de tráfico designados.
    - `<rule > </rule>`: Designa una sola regla. Una sola regla puede generar
      un número arbitrario de flujos de tráfico o paquetes. Puede tener cualquier
      cantidad de reglas en un solo archivo.
        - Opciones:
            - name: El nombre de esta regla. Principalmente para documentación, sin
              función real.
        - `<traffic_stream> </traffic_stream>`: Un flujo de tráfico define el tráfico
          entre dos puntos finales. Todos los paquetes designados dentro de un mismo
          flujo de tráfico compartirán los mismos puntos finales. Se puede designar
          cualquier número de flujos de tráfico para una regla determinada. Diferentes
          flujos de tráfico dentro de la misma regla pueden tener o no diferentes
          puntos finales dependiendo de la configuración a continuación.
            - Opciones:
                - typets: Especifica qué tipo de flujo de tráfico usaremos para
                  generar paquetes. Actualmente, tenemos Standard, ScanAttack y
                  BackgroundTraffic.
                - scantype: 1==Syn scan (predeterminado) 2 == Connection scan.
                  Se utiliza con ScanAttack.
                - target: Especifica la dirección IP de destino para el ataque de escaneo.
                - targetports: Para un ataque de escaneo. Proporciona una lista
                  separada por comas de puertos posibles, o un único puerto de inicio.
                  De lo contrario, los puertos se escanearán al azar. Si se proporciona
                  un único puerto de inicio, los puertos se escanearán en orden desde
                  ese punto hasta 65535, después de lo cual volverá al punto de inicio.
                  Esta opción se usa junto con typets 'ScanAttack'.
                - srcport: Especifica el puerto de origen para el ataque de escaneo.
                  Aleatorio por defecto.
                - duration: La ventana, o duración, en segundos de un ataque de escaneo
                  si typets es 'ScanAttack'.
                - intensity: Intensidad del ataque de escaneo si typets es 'ScanAttack'.
                - offset: Desplazamiento antes de iniciar un ataque de escaneo.
                  También se usa al insertar múltiples escaneos en el tráfico.
                - replychance: Probabilidad de que un escaneo tenga una respuesta.
                  En otras palabras, probabilidad de que el puerto de destino esté abierto
                  (predeterminado 20%). Se utiliza con ScanAttack.
                - proto: Designa el protocolo de este flujo de tráfico.
                  Debe ser TCP o UDP o ICMP (no probado).
                - src: Dirección IP de origen. Puede ser una dirección en formato
                  xxx.xxx.xxx.xxx, $EXTERNAL_NET (para una dirección externa--asume que
                  se ha designado una red doméstica), $HOME_NET, o any (selecciona
                  aleatoriamente una dirección IP).
                - dst: Dirección IP de destino. Igual que la dirección IP de origen.
                - sport: Puerto de origen (asume TCP o UDP). Puede usar el formato
                  de puerto de Snort que puede ser una lista separada por comas entre
                  corchetes (p. ej., [80,88,89]), un rango (p. ej., [10:1000]), o any
                  (p. ej., selección aleatoria de 0-65535).
                - dport: Puerto de destino según sport.
                - handshake: Generará un handshake TCP al inicio del flujo.
                  Si se omite, no habrá handshake. Los valores válidos son true o false.
                  El valor predeterminado es false.
                - latency: Establece la latencia promedio entre paquetes (en microsegundos).
                - teardown: Cerrará el flujo cuando todo el tráfico haya sido enviado
                  agregando el teardown TCP al final del flujo de tráfico.
                  Los valores válidos son true o false. El valor predeterminado es false.
                - synch: Los flujos de tráfico son síncronos o no. Cuando es true, un
                  flujo de tráfico debe terminar antes de que comience el siguiente.
                  Cuando es false, todos los flujos contiguos que sean false
                  (es decir, asíncronos) se ejecutarán al mismo tiempo.
                - tcp_overlap: El valor predeterminado es false. Cuando es true, a
                  partir del segundo paquete se agregará un contenido extra y el número
                  de secuencia TCP se reducirá en uno para simular la superposición
                  de números de secuencia TCP.
                - ipv: Designa IPv4 o IPv6. Las opciones válidas son 4 o 6.
                  El valor predeterminado es 4.
                - out_of_order: Hace que los paquetes lleguen fuera de orden de
                  manera aleatoria. Nota: esto solo funciona con paquetes que usan
                  la opción 'times'. Además, esta opción debe usarse con ack para
                  que aparezcan los acks duplicados adecuados en el rastro de tráfico.
                  Los valores válidos son true o false. El valor predeterminado es false.
                - out_of_order_prob: Establece la probabilidad de que los paquetes
                  lleguen fuera de orden. Por ejemplo, 10 significaría que hay un 10%
                  de probabilidad de que cada paquete llegue fuera de orden. Los
                  paquetes fuera de orden llegan después de todos los paquetes en orden.
                  Además, se mezclan aleatoriamente. Por lo tanto, si los primeros
                  paquetes 2 y 5 de 10 paquetes se determinan como fuera de orden,
                  llegarán al final de los 10 paquetes (posiciones 9 y 10) y estarán
                  en un orden arbitrario (es decir, el 5 puede llegar antes que el 2
                  o viceversa). El valor debe estar entre 1 y 99. El valor
                  predeterminado es 50.
                - packet_loss: Hace que los paquetes se pierdan aleatoriamente
                  (es decir, que no lleguen). Esto solo funciona con la opción 'times'.
                  Además, esta opción debe usarse con la opción ack establecida en
                  true para que aparezcan acks duplicados en el rastro de tráfico.
                  Los valores válidos son 1 a 99, que representan la probabilidad de
                  que un paquete se pierda. Nota: la pérdida de paquetes solo ocurre
                  en paquetes con datos, no en los acks.
                - ack: Hace que cada paquete de datos en este flujo sea seguido por
                  un ACK del servidor. Los valores válidos son true o false.
                  El valor predeterminado es false.
                - percentage: Esto solo aplica para BackgroundTraffic y debe haber
                  solo una regla de BackgroundTraffic en un archivo o directorio de
                  reglas. El porcentaje indica el porcentaje del flujo de tráfico de
                  fondo que se creará en el flujo de tráfico total.
                - http: Distribución porcentual de protocolos de aplicación http en
                  el flujo de tráfico de fondo.
                - ftp: Distribución porcentual de protocolos de aplicación ftp en
                  el flujo de tráfico de fondo.
                - pop: Distribución porcentual de protocolos de aplicación pop en
                  el flujo de tráfico de fondo.
                - smtp: Distribución porcentual de protocolos de aplicación smtp en
                  el flujo de tráfico de fondo.
                - imap: Distribución porcentual de protocolos de aplicación imap en
                  el flujo de tráfico de fondo.
            - `<pkt > </pkt>`: Esta directiva designa ya sea un paquete individual
              o una serie de paquetes. La función 'times' se puede usar para que una
              sola directiva <pkt> </pkt> genere varios paquetes. De lo contrario, es
              necesario designar explícitamente cada paquete en cada dirección.
                - Opciones:
                    - dir: La dirección del paquete. Los valores válidos son to server
                      o to client. La IP src inicial se considera el cliente, y la
                      IP dst inicial el servidor. Por lo tanto, 'to server' envía un
                      paquete del cliente al servidor y 'to client' envía un paquete
                      del servidor al cliente. El valor predeterminado es to server.
                    - content: Expresión regular que designa el contenido de este
                      paquete. El tamaño del paquete dependerá de la expresión regular.
                    - fragment: Si fragmentar o no este paquete.
                      Solo funciona con ipv4. Debe tener un valor mayor que 2.
                      Creará tantos fragmentos como sean válidos o como se designen
                      (el que sea menor). El valor predeterminado es 0, lo que significa
                      sin fragmentos.
                    - ack: Enviar un ack a este paquete o no. Los valores válidos son
                      true o false. El valor predeterminado es false.
                    - split: Divide el contenido entre el número designado de
                      paquetes. Por defecto, todo el contenido se envía en un solo
                      paquete (los fragmentos son una pequeña excepción a esta regla).
                    - times: Envía este paquete x veces. El valor predeterminado es 1.
                      Un valor positivo enviará exactamente x paquetes (posiblemente
                      con acks si ack es true), mientras que un número negativo enviará
                      un número aleatorio de paquetes entre 1 y abs(-x).
                    - ttl: Establece el valor time to live para el paquete. Por defecto,
                      sniffles generará un valor TTL aleatorio.
                    - ttl_expiry: Simula el ataque de expiración TTL dividiendo los
                      paquetes en múltiples paquetes con un paquete malicioso entre
                      dos paquetes buenos. Por defecto, el valor es 0 (sin paquete
                      malicioso). Si el valor es distinto de cero, insertará un paquete
                      malicioso con este ttl igual al valor de ttl_expiry. Si se
                      establece el valor ttl, el paquete bueno se establecerá con el
                      nuevo valor ttl.

Notas finales: El nuevo formato de reglas es solo un comienzo y puede contener problemas.
Por favor, avíseme de cualquier inconsistencia o error. Además, la intención es
expandir las opciones para proporcionar cada vez más funcionalidad según sea necesario.
Por favor, contácteme con las funciones deseadas. Finalmente, este producto se
proporciona tal cual. No hay garantía de funcionalidad o precisión.
Siéntase libre de bifurcar este proyecto para satisfacer sus propias necesidades.

Créditos:
--------

Esta aplicación ha sido traída a usted por Petabi, Inc., donde hacemos
soluciones de seguridad confiables, realistas y realmente rápidas.

Autores:

- Victor C. Valgenti
- Min Sik Kim
- Tu Le
- Moosuk Pyun

Nuevas Características:
-----------------------

- 21/11/2014: Versión 1.4.0. Se agregó división de tráfico y traffobot para
   generación de tráfico bidireccional. Se corrigió un error donde se lanzaba
   una excepción cuando la cantidad de tráfico generado cabía en una sola
   llamada de escritura de tráfico. Se reformateó y habilitó el uso. Finalmente,
   se agregaron pruebas unitarias para traffobot y análisis XML.

- 03/02/2015: Versión 2.0. Se reescribió completamente cómo funcionan los flujos para reducir
   los requisitos de memoria al generar grandes flujos usando reglas especiales. Actualmente,
   puede manejar alrededor de 2-3 millones de flujos concurrentes antes de que las cosas se ralenticen.
   He agregado algunas características para ayudar al crear grandes flujos. Primero,
   genere con algo como una concurrencia de 2-3 millones de flujos. Además, no use
   teardown para estos flujos. Una fracción de los flujos durará desde el inicio
   hasta el final de la captura, mientras que el resto se cerrará cada
   período de lote. Trabajaré para hacer esto más eficiente, pero gestionar
   todas las opciones complejas en Sniffles ahora no se puede hacer de manera económica en
   memoria. La única otra solución es obtener una máquina más potente con más RAM.
   Esta versión también contiene una variedad de correcciones.

- 11/02/2015: Se agregó probabilidad a los paquetes fuera de orden para permitir ajustar
   la frecuencia de los paquetes fuera de orden.

- 05/03/2015: Se cambió el teardown TCP a la secuencia de teardown estándar.
   Ahora se permite que el contenido se distribuya en múltiples paquetes sin usar fragmentos.

- 09/04/2015: Se corrigió el tráfico de escaneo, que estaba parcialmente roto durante uno de los
   cambios anteriores. La marca de tiempo de inicio de pcap ahora por defecto es la hora actual y se
   puede establecer con la opción -g. Finalmente, el tercer paquete en el handshake TCP de 3 vías
   ahora contendrá datos si el cliente debe enviar datos primero.

- 22/05/2015: Se reescribió el análisis de reglas para simplificar la capacidad de extender el
   analizador de reglas para admitir más formatos. Se incorporó la navegación nfa y
   pcre directamente en sniffles. Se limpió el código y se preparó para el
   público.

- 27/05/2015: Se actualizó la documentación, se fusionaron las bibliotecas pcre y
   la construcción nfa para hacer de sniffles un paquete autónomo.
   Se agregaron el Generador de Expresiones Regulares y el Generador de Reglas Aleatorias como
   parte del paquete Sniffles. Se actualizó la versión a 3.0.0
   y se publicó en github.

- 12/08/2015: Se implementaron una gran cantidad de correcciones de errores y nuevas
   características. Se cambió fundamentalmente cómo se manejan los flujos y las corrientes
   para permitir una mejor extensibilidad. Se agregó latencia por
   flujo. Se actualizó la documentación.

Generador de Expresiones Regulares
==================================

Este es un generador simple de expresiones regulares.
Crea expresiones regulares completamente al azar, o
basado en una serie de distribuciones.
Los controles que se pueden aplicar sobre cómo se generan las expresiones
regulares son estructurales más que contextuales. En otras palabras,
no hay esfuerzo para que ciertos tokens de cadena aparezcan en
las expresiones regulares generadas. Sin embargo, las distribuciones
de probabilidad se pueden ajustar para afectar los tipos de características
que se encuentran en las reglas, como clases de caracteres, alternancia, repetición, etc.

Instalación
-----------

Se instalará automáticamente con el resto de Sniffles.

Opciones
--------

regexgen--Generador aleatorio de expresiones regulares.

    uso: regexgen [-C distribución de caracteres] [-c número de regex]
    [-D distribución de clases] [-f archivo de salida re]
    [-l lambda para generación de longitud] [-M longitud máxima de regex]
    [-m longitud mínima de regex] [-n probabilidad de negación]
    [-o probabilidad de opciones] [-R probabilidad de repetición] [-r distribución de repetición]
    [-t distribución de tipo estructural re] [-?] [-g]

-    -C Distribución de caracteres: Establece la posibilidad de ver
    caracteres o tipos de caracteres particulares. Vea una breve explicación de
    distribuciones a continuación para ejemplos de cómo usar esto. Por defecto
    esta distribución es una distribución igual. Esta distribución
    tiene cinco ranuras: Caracteres ASCII, Caracteres binarios en formato \x00,
    Letras alfabéticas (mayúsculas o minúsculas), Dígitos y clases
    de sustitución (como \w). Un ejemplo de entrada sería "10,20,10,40,20"
    lo que significaría 10% de probabilidad de que cualquier carácter generado provenga de 10% ASCII,
    20% binario, 10% letras, etc. Una advertencia es que los caracteres ASCII que
    podrían causar problemas con expresiones regulares (como `[' o '{')
    se convierten a representación hexadecimal (\x3b por ejemplo).
-    -c Número de expresiones regulares a generar. El valor predeterminado es uno.
-    -D Distribución de clases: Solo hay dos ranuras en la distribución
    de clases. La primera ranura es la probabilidad de que la clase esté
    compuesta por un número de caracteres generados aleatoriamente. La
    segunda ranura es la probabilidad de que la clase esté compuesta por
    rangos (como a-z).
-    -f Nombre del archivo de salida. Establece el nombre del archivo donde se
    almacenan las expresiones regulares. El valor predeterminado es un archivo
    llamado rand.re en el directorio de trabajo actual.
-    -g Grupos: Todas las expresiones regulares tendrán un prefijo común con
    al menos una o más expresiones regulares (siempre que haya más de una
    regex). Un prefijo común es simplemente una expresión regular que es la
    misma para algún conjunto de expresiones regulares. El número total de
    prefijos comunes posibles es de 1 a la mitad del tamaño total de las
    expresiones regulares a generar. El valor predeterminado para esta opción
    es false. Esta opción no toma parámetros.
-    -l Lambda para longitud: Esta es la longitud media para una distribución
    exponencial de longitudes de expresiones regulares. El valor predeterminado es 10.
-    -M Longitud máxima de regex: hacer que las expresiones regulares tengan como máximo esta
    longitud estructural o más corta. Por defecto, la longitud máxima no está limitada.
-    -m Longitud mínima de regex: hacer que las expresiones regulares tengan al menos esta
    longitud o más larga. El valor predeterminado es 3, y automáticamente usará un valor de 1
    si la entrada es cero o menos.
-    -n Probabilidad de negación: La probabilidad de que una clase de caracteres sea
    una clase de negación ([^xyz]) en lugar de una clase de caracteres normal ([xyz]).
    La probabilidad predeterminada es 50%.
-    -o Probabilidad de opción: Esta es la probabilidad de que se agregue una opción
    a la expresión regular. Las opciones actuales son 'i', 'm' y 's'.
    Se agrega un número aleatorio de opciones a la lista con esas opciones
    elegidas mediante una distribución uniforme.
-    -R Probabilidad de repetición: La probabilidad de que ocurra una repetición
    después de que se haya agregado cualquier componente estructural a la expresión regular.
-    -r Distribución de repetición: La distribución de estructuras de repetición.
    Las ranuras son: Cero a uno (?), Cero a muchos (*), uno a muchos (+), y
    conteo ({x,y}).
-    -t Distribución de tipo estructural Re: La distribución para los
    componentes estructurales principales de la expresión regular. Estos
    comprenden tres ranuras o categorías: caracteres, clases y alternancia.
    Nota: la alternancia simplemente generará una expresión regular más pequeña
    hasta el tamaño de la longitud restante de la re. En otras palabras,
    la alternancia dará como resultado que varias expresiones regulares más pequeñas
    se unan en la expresión regular general. La alternancia utiliza la misma
    metodología exacta para crear esas expresiones regulares más pequeñas.
-   -? Imprime esta ayuda.

    Este generador creará expresiones regulares aleatorias. Es posible
    ajustar las estructuras dentro de las expresiones regulares a una distribución
    de probabilidad, pero actualmente no el contenido. Esto es deseable para
    explorar la máxima diversidad en expresiones regulares posibles
    (aunque no necesariamente expresiones regulares realistas).
    Las distribuciones se manejan creando una lista de probabilidades para
    las diversas posibilidades, o ranuras, para una distribución particular.
    Estas se agregan como argumentos de línea de comandos usando una lista de
    cadenas simple como: "10,30,40,20". La lista debe tener tantos valores
    como ranuras tenga. El total de todos los valores en la lista debe ser
    100 y no debe haber fracciones. El valor en cada ranura es la probabilidad
    de que esa ranura sea elegida. Por ejemplo, la distribución de tipo
    estructural RE base tiene tres ranuras. La primera ranura es la probabilidad
    de que el siguiente tipo de estructura sea un carácter (donde un carácter
    puede ser una letra, dígito, binario, ASCII o clase de sustitución (como \w)).
    La segunda ranura es para clases de caracteres como [ab@%], [^123] o [a-z].
    La ranura final es la probabilidad de que ocurra alternancia como (ab|cd).
    Con estas tres ranuras puede ajustar con qué frecuencia desea que aparezcan
    las estructuras en sus expresiones regulares. Por ejemplo, regexgen -c 10
    -t "80,10,10" crearía 10 expresiones regulares donde el 80% de las estructuras
    utilizadas serían caracteres, el 10 por ciento serían clases de caracteres y
    el 10% alternancia.

Generador de Reglas Aleatorias
==============================

El Generador de Reglas Aleatorias proporciona un medio para crear una cantidad de reglas
generadas aleatoriamente con las cuales probar una plataforma particular. Actualmente,
las reglas generadas cumplen con el formato de reglas de Snort o son solo líneas
de texto. Para que el Generador de Reglas Aleatorias funcione, debe tener
un conjunto de características definidas. Se pueden encontrar características de
ejemplo en la carpeta example_features y se describen más a continuación.

Instalación
-----------

Se instala automáticamente con Sniffles

Nota: El Generador de Reglas Aleatorias hace uso del
Generador de Expresiones Regulares Aleatorias para crear contenido de cualquier tipo.Opciones
-------

Generador de Reglas Aleatorias

usage: rulegen -c [número de reglas] -f [conjunto de características]
        -o [archivo de salida] [-s]

- -c  Número de reglas: La cantidad de reglas a generar.
      El valor predeterminado es uno.
- -f  Conjunto de características: El archivo que contiene la descripción del conjunto de características.
      Consulte la documentación para obtener una explicación más detallada de
      los conjuntos de características y cómo describirlos.
- -o  Archivo de salida: archivo de salida en el que se escriben las reglas.
      El valor predeterminado es rules.txt
- -s  Formato de regla Snort: escribe las reglas en un formato de regla Snort.
      Sin parámetros, por defecto está desactivado. Cuando está desactivado, las reglas se
      convierten a un formato de cadena, cualquiera que sea según el
      analizador de características.

Conjunto de Características
-----------

Las características se utilizan para describir aspectos potenciales de las reglas utilizadas en
IDS. Por ejemplo, un filtro de paquetes podría utilizar reglas que tengan como objetivo
la dirección IP de origen y destino. En ese caso, sería posible
crear un conjunto de características que describa cómo se deben generar esas direcciones IP de origen y destino. Más específicamente, hacemos la
distinción entre reglas simples y reglas complejas. La diferencia
entre estas dos es la presencia de notaciones ambiguas. Por
ejemplo, si tuviéramos una notación ambigua de * para significar cualquier
dirección IP, entonces podríamos decir que * representa una notación ambigua.
Además, sabemos que una regla también puede usar una notación no ambigua,
como 192.168.1.1. Eso representaría una dirección IP simple, ya que
es una única dirección IP fija sin ninguna notación ambigua posible.
Luego definimos además el rango de las características particulares
(es decir, direcciones IP en los más de 4 mil millones de
posibles direcciones IPv4, o solo un subconjunto de eso).

Las características definen, en última instancia, todos los aspectos de una
regla arbitraria. Dado un conjunto de características y un formato de regla válido,
es posible generar aleatoriamente un número arbitrario
de reglas que utilicen esas características. De esta manera, es posible
generar conjuntos de reglas de prueba que examinarán el IDS a lo largo de un
vector que a menudo se pasa por alto.

Las características se definen en una lista separada por punto y coma, una característica por línea:
type=feature; lista de argumentos en pares key=value, listas usando formato de Python
(es decir, [a, ..., z]). Las características definen porciones específicas de un
formato de regla objetivo. Las características se pueden extender para agregar más funcionalidad.
Opcionalmente, se puede extender la capacidad de las características creando un nuevo
formato de regla.

Tipos de características actuales:

1. Feature — característica genérica
2. Content — Característica de contenido
3. IP — Característica de IP
4. Protocol — Característica de protocolo

Las listas ambiguas deben escribirse como listas como [x:y]
para un rango, [x,y] para una lista, {x1,x2,x3} para un conjunto
o simplemente * para un comodín o una opción única similar.

Ejemplo sobre lista ambigua:```
ambiguity_list=[[2:9]]
it will generate [3:4], [5:6], etc (any [x:y] such that
x <= y and x >= 2 and y > x and y <= 9).

ambiguity_list=[[3,20]]
it will generate [3,9,10], [3,4,8,12], etc (any list [x1,x2,x3,..]
such that all values falling between 3 and 20.

ambiguity_list=[{5,6,10}]
it will generate a subset of {5,6,10} such as {5,10}, {5}.

ambiguity_list=[[2:9],[3,20],{5,6,11}]
it will pick one of [2:9], [3,20], and {5,6,11} and
generate a corresponding instance (see above)

Ejemplo para archivo de características:``` type=protocol; name=proto; proto_list=[TCP,UDP,ICMP]; complexity_prob=0;ambiguity_list=None; type=ip; name=sip; version=4; complexity_prob=100;

root@kitploit:~
lo anterior define dos características: una característica de protocolo y una característica de IP de origen. El protocolo se llama proto, que es importante solo para el formateador de reglas, y los protocolos válidos son: IP, TCP, UDP e ICMP. La característica IP se define como IPv4 y todas las reglas serán complejas. La complejidad de IP ya es parte de la clase y no es necesario agregarla en la definición de la característica. Esto creará direcciones IP usando notación CIDR.

Atributos genéricos de característica:

- Feature_name: Atributo informativo, potencialmente valioso para el formateador de reglas.
- lower_bound: El límite inferior de valores posibles. Asume que la característica es un número.
- upper_bound: Opuesto a lower_bound.
- complexity_prob: La probabilidad de usar características complejas para una regla. De 0 a 100. Por defecto 0. Cuando se usan características complejas, se selecciona aleatoriamente una notación ambigua de la lista de ambigüedad, o si la característica define una ambigüedad específica (como direcciones IP), entonces se usa esa. Cuando no se usan características complejas, se genera un valor usando los límites, o, en el caso de Content, usando un conjunto de valores de distribución que restringirán la cadena generada a una serie de caracteres ASCII.
- ambiguity_list: Una lista de posibles notaciones ambiguas. Lista separada por comas usando formato de Python (es decir, [a, b, c]).
- toString(): Imprime una instancia de una regla dado este conjunto de características particular.

Content Feature — Hereda de Feature:
- regex: Verdadero o Falso. Si es Verdadero, usará formato PCRE para expresiones regulares y también posiblemente agregará las opciones i, s o m a la expresión regular.
- length: Define la longitud promedio del contenido generado.
- min_regex_length: Define la longitud mínima de la expresión regular.

Protocol Feature — Hereda de Feature:
- proto_list: Define la lista de protocolos posibles, como una lista separada por comas (es decir, [TCP, UDP]).

IP Feature — Hereda de Feature:
- version: 4 para IP versión 4, 6 para IP versión 6. Por defecto versión 4.

Notación ambigua para rangos, listas, conjuntos:

Notación de rango:
  [x:y] significa de x a y (inclusive).

Notación de lista:
  [x,y] significa una lista de un número determinado aleatoriamente de valores donde cada valor es mayor o igual que x y menor o igual que y.

Notación de conjunto:
  {x1,x2,x3,x4} significa un conjunto de valores x1, x2, x3, x4. Generará un subconjunto del conjunto original.

Consulte los conjuntos de características de ejemplo en la carpeta example_features para más ejemplos. Más detalles, así como la teoría académica detrás de esto, están programados para agregarse más adelante.
Descargar herramienta
  • -e eval: Crear solo un paquete para cada regla en el conjunto de reglas. Ignora todas las demás entradas excepto -f. Cada paquete tendrá contenido que coincida con la regla seleccionada.

  • -E Evaluación Completa: Crear un paquete para cada camino viable en una regla pcre del conjunto de reglas. En otras palabras, ab(c|d)e crearía dos paquetes: abce y abde. Ignora todas las demás entradas excepto -f.

  • -f Archivo de Reglas: leer un único archivo de reglas según la ruta y el nombre de archivo proporcionados.

  • -F Config: Designar un archivo de configuración para las opciones de Sniffles. El archivo de configuración es una forma de fijar los parámetros utilizados para una ejecución de Sniffles.

  • -g Marca de Tiempo: establecer la hora de inicio para la marca de tiempo del pcap. Este será el número de segundos desde el 31/12/1969. El valor predeterminado es la hora actual.

  • -h Prefijos IP Locales: Una lista de Prefijos de Red Local IP. Las direcciones IP destinadas a provenir de una dirección interna usarán estos prefijos. Los prefijos pueden designar una dirección IPv4 completa de 4 bytes en formato xxx.xxx. Por ejemplo: "10.192.168,172.16".

  • -H Prefijos Locales IPv6: Lo mismo que Prefijos Locales IPv4, solo que para IPv6. Excepciones notables: el separador es dos puntos con dos bytes representados entre dos puntos.

  • -i Porcentaje IPv6: Establecer este valor entre 1 y 100 para generar paquetes con IPv6. Esto determinará el porcentaje de flujos que serán IPv6.

  • -I Intensidad del ataque de escaneo (es decir, paquetes por segundo).

  • -l Longitud del Contenido: Fijar la longitud del contenido al número de bytes designado. Menos de uno establecerá la longitud igual al contenido generado por el afn, o un número aleatorio entre 10 y 1410 si los encabezados también son aleatorios. Truncará o rellenará el paquete según sea necesario.

  • -L Latencia: Latencia promedio en microsegundos. Si no se establece, se determina una latencia promedio aleatoria entre 1 y 200 usec para cada flujo. Por lo tanto, los paquetes de un flujo dado tendrán una latencia promedio de tiempo entre cada paquete en el flujo.

  • -M Permite el uso de una distribución MAC para tener direcciones MAC personalizadas en el tráfico. Por defecto, las direcciones MAC se generan aleatoriamente. Más información sobre el archivo de definición MAC se puede encontrar en el archivo examples/mac_definition_file.txt. Nota: Puede especificar hasta dos archivos de definición MAC para establecer diferentes valores según el origen o el destino de las MAC. Si especifica solo un archivo, se usará para cualquier dirección. Si usa la siguiente notación, puede especificar direcciones específicas. Por ejemplo: 'ruta1:ruta2'. Ruta1 será el archivo de definición MAC para MAC de origen y ruta2 será el archivo de definición MAC para MAC de destino. También puede usar un signo de interrogación (?) para designar uno u otro como aleatorio, como en '?:ruta2' para tener MAC de origen aleatorias pero usar el archivo para.

  • -n No Coincidir Completamente. Establece que el contenido generado a partir de una regla no coincida completamente (es decir, truncará automáticamente los últimos caracteres). El comportamiento predeterminado es que el contenido coincida completamente con la regla.

  • -o archivo de salida: designar el nombre del archivo de salida. Por defecto, el archivo se llama: sniffles.pcap.

  • -O Desplazamiento: Desplazamiento antes de iniciar un ataque de escaneo. También se usa al insertar múltiples escaneos en el tráfico. Es el número de segundos antes de que comience el escaneo. Si se usa con -R, esto se convierte en el número promedio de segundos antes del inicio.

  • -p Paquetes por flujo: Designar el número de paquetes con contenido para un solo flujo. Si se proporciona un valor positivo como argumento, aparecerán exactamente x (donde x es el entero proporcionado) paquetes con contenido para cada flujo. Si x es negativo, aparecerá un número aleatorio de paquetes para cada flujo (de 1 a abs(x)). Por defecto, este valor es 1.

  • -P Lista de Puertos Objetivo: Para un ataque de escaneo. Proporcione una lista separada por comas de puertos posibles, o un solo puerto inicial. De lo contrario, los puertos se escanearán aleatoriamente. Si se proporciona un solo puerto inicial, los puertos se escanearán en orden desde ese punto hasta 65535, después de lo cual volverá al punto inicial. Si se proporciona una lista, los puertos de la lista se escanearán en round-robin.

  • -r Aleatorio: Generar contenido aleatorio en lugar de a partir de las reglas. Si aún se proporcionan reglas, las reglas se usan en la generación de los encabezados. Nota: muchas características en las reglas pueden anular ciertos aspectos de la generación aleatoria.

  • -R Ataques de Escaneo Aleatorios: Usará el desplazamiento para crear ataques de escaneo en el tráfico, pero usará el desplazamiento solo como mediana. El desplazamiento se usa para determinar la cantidad de tiempo entre que termina un escaneo y comienza uno nuevo.

  • -s Ataque de Escaneo: seguido de una lista separada por comas de direcciones ipv4 que indican qué dirección ip atacar. Cada rango IP creará un ataque de escaneo. Los rangos deben ser como: 192.168.1.1, que apuntaría exactamente a esa única dirección ip, mientras que 192.168.1 apuntaría a una dirección ip aleatoria entre 192.168.1.0 y 192.168.1.255.

  • -S Tipo de Escaneo: 1==Escaneo Syn (predeterminado) 2 == Escaneo de conexión.

  • -t Handshake TCP: Incluir un handshake TCP en todos los flujos TCP. Desactivado por defecto.

  • -T Teardown TCP: Incluir un teardown TCP en todos los flujos TCP. Desactivado por defecto.

  • -v Verbosidad: Aumentar el nivel de mensajes de salida.

  • -w escribir contenido: Escribir las cadenas de contenido en un archivo llamado 'all.re'

  • -W Ventana: La ventana, o duración, en segundos de un ataque de escaneo.

  • -Z Probabilidad de Respuesta: probabilidad de que un escaneo tenga una respuesta. En otras palabras, probabilidad de que el puerto objetivo esté abierto (predeterminado 20%).