
Una herramienta de inspección de red
Una herramienta de inspección de tráfico de red
Utiliza libnids (a través de sus bindings de Python de Jon Oberheide: pynids) para desfragmentar IP y reensamblar paquetes TCP (UDP se inspecciona por paquete) para generar flujos de red. Estos flujos se inspeccionan a continuación utilizando uno de los cuatro modos de inspección:
Las coincidencias de regex se realizan utilizando la librería re2 y sus bindings de Python, pyre2, que soporta coincidencias PCRE, sin distinción de mayúsculas/minúsculas, invertidas y multilínea, etc. Tiene enormes ganancias de rendimiento en comparación con el módulo re integrado en Python (que se utiliza como respaldo en caso de que re2 no esté instalado).
Las funciones de coincidencia difusa de cadenas se llevan a cabo mediante el módulo fuzzywuzzy. Ayuda a realizar tanto una coincidencia exacta como relativa de cadenas. Se utiliza un umbral de coincidencia predeterminado de 75, que puede anularse a través de la CLI.
Libemu y sus bindings de Python, pylibemu, se utilizan para la detección de shellcode. Las heurísticas GetPC utilizadas por libemu proporcionan una tasa de detección decente. Hay algunos casos en los que libemu simplemente falla, pero para la mayoría de los casos de uso es suficiente.
Yara es una herramienta de identificación y clasificación de malware basada en firmas. Sus bindings yara-python proporcionan una API para usar archivos de firmas existentes/personalizados en un búfer de entrada que, en este caso, es un flujo de red.
La inspección puede solicitarse para cualquiera de las direcciones CTS/STC/ANY o sus combinaciones. Los búferes de inspección se llenan a medida que llega el tráfico de red y, por lo tanto, las coincidencias CTS (CTS o ANY) ocurren primero. Si se solicita más de un modo de inspección, los flujos se inspeccionan en el siguiente orden: regex, fuzzy, libemu y, finalmente, yara. Para TCP, si cualquiera de los modos de inspección tiene éxito, el flujo coincidente no se inspeccionará más. Este es un enfoque optimista y está habilitado por defecto. Sin embargo, si para un determinado caso de uso un flujo TCP debe inspeccionarse varias veces, se puede solicitar explícitamente mediante la CLI.
La inspección puede deshabilitarse por completo si es necesario mediante la opción de CLI linemode. Este modo es realmente útil y, combinado con un outmode adecuado, permite ver la comunicación de red tal cual mientras ocurre en el cable. Linemode se habilita automáticamente como respaldo si no se proporciona ningún modo de inspección mediante la CLI.
Para UDP, las coincidencias ocurren por paquete y, por lo tanto, los paquetes posteriores se probarán incluso después de que ya se haya encontrado una coincidencia en un flujo UDP. Dado que solo se inspeccionan los paquetes posteriores y su contenido, se garantiza que los datos ya coincidentes en ciclos de inspección anteriores no se inspeccionen nuevamente.
El alcance de la coincidencia puede limitarse mediante expresiones BPF, modificadores de contenido offset-depth tipo Snort o mediante opciones de CLI de límite de inspección de paquetes/flujos. Para TCP, los flujos coincidentes también pueden terminarse si es necesario. Los flujos también pueden registrarse en archivos además de volcarse en stdout. Algunos modos de salida útiles (quite, meta, hex, print, raw) ayudan con el análisis posterior. El modo de salida meta es especialmente útil, ya que muestra detalles realmente importantes específicos de la coincidencia, como el tamaño total del contenido coincidente, el desplazamiento del inicio de una coincidencia en el flujo de red, los IDs de paquetes que abarca una coincidencia, la dirección del paquete en el que ocurrió una coincidencia, etc.
También se admite la generación de pcap para flujos coincidentes. Si está habilitada, volcará todos los paquetes desde el inicio hasta el final del flujo. Los flujos TCP coincidentes se vuelcan tan pronto como se ve un cierre/reset, y para aquellos flujos donde no vemos un cierre/reset, se vuelcan antes de que la herramienta salga. Para UDP, dado que no hay información de estado como cierre/reset disponible, solo se vuelcan cuando la herramienta sale. Esto asegura que todos los paquetes, incluso aquellos que llegan después de la coincidencia, se capturen en el pcap del flujo. Excepto por el encabezado global de pcap personalizado, el encabezado de pcap por paquete y el encabezado L2 de Ethernet II (que no es visto por flowinspect), todo lo demás permanece como está en las capturas de paquetes volcadas.
HELP: -----```c ______ _ __ / / /_ _ () _________ ___ / / / // / __ \ | /| / / / __ / / __ / _ / / __/ / __/ / // / |/ |/ / / / / ( ) // / / // / // //_/|/|/// /// ._/_/___/_/ //
flowinspect v0.2 - A network inspection tool Ankur Tyagi (7h3rAm [at] gmail [dot] com)
usage: flowinspect.py [-h] (-p --pcap | -d --device) [-c --cregex] [-s --sregex] [-a --aregex] [-i] [-m] [-G --cfuzz] [-H --sfuzz] [-I --afuzz] [-r fuzzminthreshold] [-C --cdfa] [-S --sdfa] [-A --adfa] [-l] [-X --dfaexpr] [-g [graphdir]] [-P --cyararules] [-Q --syararules] [-R --ayararules] [-M] [-y] [-Y --emuprofileoutsize] [-O --offset] [-D --depth] [-T --maxinspstreams] [-U --maxinsppackets] [-t --maxdispstreams] [-u --maxdisppackets] [-b --maxdispbytes] [-w [logdir]] [-o {quite,meta,hex,print,raw}] [-f --bpf] [-v] [-V] [-e] [-k] [-j] [-Z] [-n] [-L]
optional arguments: -h, --help show this help message and exit -p --pcap input pcap file -d --device listening device
RegEx per Direction: -c --cregex regex to match against CTS data -s --sregex regex to match against STC data -a --aregex regex to match against ANY data
RegEx Options: -i ignore case -m disable multiline match
Fuzzy Patterns per Direction: -G --cfuzz string to fuzzy match against CTS data -H --sfuzz string to fuzzy match against STC data -I --afuzz string to fuzzy match against ANY data
Fuzzy Options: -r fuzzminthreshold threshold for fuzzy match (1-100) - default 75
DFAs per Direction ('m[0-9][1-9]='): -C --cdfa DFA expression to match against CTS data -S --sdfa DFA expression to match against STC data -A --adfa DFA expression to match against ANY data
DFA Options: -l switch default boolean operator to 'or' -X --dfaexpr expression to test chain members -g [graphdir] generate DFA transitions graph
Yara Rules per Direction: -P --cyararules Yara rules to match on CTS data -Q --syararules Yara rules to match on STC data -R --ayararules Yara rules to match on ANY data