El nuevo formato no tiene cabeceras que identifiquen el fichero (como si ocurre en el formato unified), y que cada fichero no es más que un conjunto de eventos y los paquetes de datos asociados a lo mismos. Todos los DWORD (unit32_t) y WORD (uint16_t) son enteros de 4 y 2 bytes respectivamente big endian ("network byte order"). La estructura de un evento almacenado en el fichero es la siguiente:
- Una cabecera de dos palabras de 32 bits. El primer DWORD indica el tipo de registro y el segundo la longitud total del evento almacenado.
- Una estructura que dependerá del valor de campo tipo, y en su caso, de los datos del paquete. Tal como se recoge en la siguiente tabla:
#define | Valor | Estructura |
---|---|---|
UNIFIED2_PACKET | 2 | Unified2Packet |
UNIFIED2_IDS_EVENT | 7 | Unified2Event |
UNIFIED2_IDS_EVENT_IPV6 | 72 | Unified2Event6 |
UNIFIED2_IDS_EVENT_MPLS | 99 | Unified2Event_MPLS |
UNIFIED2_IDS_EVENT_IPV6_MPLS | 100 | Unified2Event6_MPLS |
En caso de estar grabando un paquete de datos (representado por la structura Unified2Packet),tras esta va los datos del paquete.
Estructuras C
Las estructuras C que representan los eventos están a continuación. Todos los campos tienen los bytes en network byte order (big endian). Las estructuras que representan eventos especial tienen varios campos comunes que se repiten en las estructuras que están en la siguiente tabla:
Campo | Tipo | Descripción |
---|---|---|
sensor_id | DWORD | Identifica el sensor que ha generado el evento. |
event_id | DWORD | Identificador del evento. |
event_second | DWORD | Para almacenar una marca temporal de la generación del evento. |
event_microsecond | DWORD | |
signature_id | DWORD | Identifica a la regla de Snort que ha generado ele vento. |
generador_id | DWORD | Identifica el módulo de Snort que generado el eventos. |
signature_revision | DWORD | Revisión de la regla |
classification_id | DWORD | Identifica la clase a la que pertenece la alerta generada. Esto se configura en Snort a través de la sentencia config classification |
priority_id | DWORD | Identifica la prioridad de la regla que ha generado la alerta. |
El resto de los campos de cada estructura son específicos de cada uno de los eventos.
Unified2RecordHeader
Esta estructura de datos está presente al principio de todos los eventos que se almacenan en el fichero. Su longitud es de 8 bytes.typedef struct _Unified2RecordHeader
{
uint32_t type;
uint32_t length;
} Unified2RecordHeader;
Unified2Event
typedef struct _Unified2Event
{
uint32_t sensor_id;
uint32_t event_id;
uint32_t event_second;
uint32_t event_microsecond;
uint32_t signature_id;
uint32_t generator_id;
uint32_t signature_revision;
uint32_t classification_id;
uint32_t priority_id;
uint32_t ip_source;
uint32_t ip_destination;
uint16_t sport_itype;
uint16_t dport_icode;
uint8_t protocol;
uint8_t packet_action;
} Unified2Event
Unified2Packet
Esta estructura de datos tiene una particularida:Los últimos 4 bytes, representados po el campo packet_data se sobreescriben con los primeros del paquete de datos.typedef struct _Unified2Packet
{
uint32_t sensor_id;
uint32_t event_id;
uint32_t event_second;
uint32_t packet_second;
uint32_t packet_microsecond;
uint32_t linktype;
uint32_t packet_length;
uint8_t packet_data[4];
} Unified2Packet
Unified2Event6
typedef struct _Unified2Event6
{
uint32_t sensor_id;
uint32_t event_id;
uint32_t event_second;
uint32_t event_microsecond;
uint32_t signature_id;
uint32_t generator_id;
uint32_t signature_revision;
uint32_t classification_id;
uint32_t priority_id;
struct in6_addr ip_source;
struct in6_addr ip_destination;
uint16_t sport_itype;
uint16_t dport_icode;
uint8_t protocol;
uint8_t packet_action;
} Unified2Event6
Unified2Event6
typedef struct _Unified2Event6
{
uint32_t sensor_id;
uint32_t event_id;
uint32_t event_second;
uint32_t event_microsecond;
uint32_t signature_id;
uint32_t generator_id;
uint32_t signature_revision;
uint32_t classification_id;
uint32_t priority_id;
struct in6_addr ip_source;
struct in6_addr ip_destination;
uint16_t sport_itype;
uint16_t dport_icode;
uint8_t protocol;
uint8_t packet_action;
} Unified2Event6
Unified2Event_MPLS
typedef struct _Unified2Event_MPLS { uint32_t sensor_id;
uint32_t event_id;
uint32_t event_second;
uint32_t event_microsecond;
uint32_t signature_id;
uint32_t generator_id;
uint32_t signature_revision;
uint32_t classification_id;
uint32_t priority_id;
uint32_t ip_source;
uint32_t ip_destination;
uint16_t sport_itype;
uint16_t dport_icode;
uint8_t protocol;
uint8_t packet_action;
uint32_t mpls_label;
} Unified2Event_MPLS;
Unified2Event6_MPLS
typedef struct _Unified2Event6_MPLS
{
uint32_t sensor_id;
uint32_t event_id;
uint32_t event_second;
uint32_t event_microsecond;
uint32_t signature_id;
uint32_t generator_id;
uint32_t signature_revision;
uint32_t classification_id;
uint32_t priority_id;
struct in6_addr ip_source;
struct in6_addr ip_destination;
uint16_t sport_itype;
uint16_t dport_icode;
uint8_t protocol;
uint8_t packet_action;
uint32_t mpls_label;
} Unified2Event6_MPLS
Referencias
Technorati Tags: snort
No hay comentarios:
Publicar un comentario