unified2 es un analizador en Python puro para la identificación (pensar [Snort] (http://snort.org)) unified2 formato de registro binario.
Módulo permite procesar IDS registros en formato binario "unified2" en objetos de Python.
No resuelve los identificadores de reglas y no pretende ser un sustituto de barnyard2 o sí Snort en ese papel.
El objetivo principal es extraer de paquetes de datos del registro, asociados a algunos en particular provocado (y resuelto / registra por separado a través de otros medios, por ejemplo alert_syslog o alert_csv módulos snort) regla, así que no he prestado mucha atención a los metadatos evento de procesamiento.
Módulo no tiene componentes C y no utiliza ctypes, por lo que debe ser bastante portátil para implementaciones de lenguajes no CPython.
Formato
Formato de definición se deriva de las cabeceras de Snort (src / sfutil / Unified2_common.h) a través del módulo pyclibrary y se almacenan en caché en el archivo unified2 / _format.py.
Definiciones más recientes (por ejemplo, si se han añadido nuevos tipos de datos) pueda ser obtenida mediante la ejecución de la misma secuencia de comandos en Unified2_common.h del Snort:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bzr rama lp: pyclibrary
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; pyclibrary cd
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; python ... / unified2 / _format.py ... / snort-2.XYZ/src/sfutil/Unified2_common.h
Instalación
Es un paquete regular para Python 2.7 (no 3.X).
Utilizando pip es la mejor manera:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip instalar unified2
Si no lo tiene, utilice:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install pip
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip instalar unified2
Alternativamente véase también:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Rizo https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip instalar unified2
O, si es absolutamente necesario:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Easy_install unified2
Pero, realmente no deberías hacer eso.
Versión actual-git se puede instalar como esto:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; % Pip instalar -e 'git: //github.com/mk-fg/unified2.git#egg=unified2'
Uso
Un simple ejemplo:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; unified2.parser importación
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; para ev, ev_tail en unified2.parser.parse ('/ var / log / snort / snort.u2.1337060186'):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; print 'Evento:', ev
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; si ev_tail: 'cola Evento:' print, ev_tail
Objeto de evento que aquí hay una dict de metadatos y una "cola", que puede ser una burbuja o similar tupla recursiva analizado de metadatos-dict y "cola" (por ejemplo, para UNIFIED2_EXTRA_DATA).
interfaz unified2.parser.Parser se ilustra mejor por la función unified2.parser.read:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; parser, buff_agg = Analizador (), ''
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; while True:
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; buff = parser.read (src)
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; si no pulir: romper # EOF
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; buff_agg + = buff
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; while True:
buff_agg, ev = parser.process (buff_agg)
si ev es Ninguno: Rotura
ev rendimiento
Idea aquí es que el método Parser.read debe ser llamado con una corriente (por ejemplo, un objeto de archivo), volviendo sin embargo muchos bytes intérprete necesita obtener el siguiente trozo analizable de datos (un paquete, en caso de registro de u2) o lo que se puede leer por el momento, cadena vacía suele ser una indicación de rentabilidad leer EOF o tal vez no bloqueante.
Parser.process entonces debe ser llamado con (por Parser.read llama) búfer acumulado, volviendo el primer paquete que se puede analizar a partir de ahí (o Ninguno, si búfer no es suficientemente grande) y los datos restantes tampón (no-analizado).
Requisitos :
- Python
Comentarios que no se encuentran