
Stenographer es una solución de captura de paquetes que tiene como objetivo volcar rápidamente todos los paquetes al disco, para luego proporcionar un acceso simple y rápido a subconjuntos de esos paquetes. Discusión/anuncios en [email protected]
Stenographer es una utilidad de captura completa de paquetes para almacenar paquetes en búfer en disco con fines de detección de intrusiones y respuesta a incidentes. Proporciona una implementación de alto rendimiento de escritura de paquetes de NIC a disco, maneja la eliminación de esos archivos a medida que el disco se llena y ofrece métodos para leer conjuntos específicos de paquetes de manera rápida y sencilla.
Está diseñado para:
NO está diseñado para:
Procesamiento complejo de paquetes (reensamblado de flujo TCP, etc.)
Es rápido porque no hace esto. Incluso con el procesamiento mínimo de una sola pasada que hacemos de los paquetes, procesar ~1 Gbps solo para indexación puede consumir >75% de un solo núcleo.
Procesar los datos leyéndolos del disco tampoco funciona: ver el siguiente punto.
Leer grandes cantidades de paquetes (> 1% de los paquetes escritos)
El concepto clave aquí es que las lecturas del disco compiten con las escrituras... se puede escribir al 90% de la velocidad del disco, pero eso solo da un 10% del tiempo del disco para la lectura. Además, estamos escribiendo datos altamente secuenciales, que los discos hacen muy rápido, y generalmente leyendo datos dispersos con muchas búsquedas, que los discos hacen lentamente.
Para más información, consulte DESIGN.md para una discusión sobre el diseño de stenographer, o lea para saber cómo instalar stenographer en una máquina.
Un usuario solicita paquetes a stenographer especificándolos con un lenguaje de consulta muy simple. Este lenguaje es un subconjunto simple de BPF e incluye las primitivas:
host 8.8.8.8 # Single IP address (hostnames not allowed)
net 1.0.0.0/8 # Network with CIDR
net 1.0.0.0 mask 255.255.255.0 # Network with mask
port 80 # Port number (UDP or TCP)
ip proto 6 # IP protocol number 6
icmp # equivalent to 'ip proto 1'
tcp # equivalent to 'ip proto 6'
udp # equivalent to 'ip proto 17'
# Stenographer-specific time additions:
before 2012-11-03T11:05:00Z # Packets before a specific time (UTC)
after 2012-11-03T11:05:00-07:00 # Packets after a specific time (with TZ)
before 45m ago # Packets before a relative time
after 3h ago # Packets after a relative time
NOTA: Los tiempos relativos deben medirse en valores enteros de horas o minutos como se muestra arriba.
Las primitivas se pueden combinar con and/&& y con or/||, que tienen igual precedencia y se evalúan de izquierda a derecha. También se pueden usar paréntesis para agrupar.
(udp and port 514) or (tcp and port 8080)
El script de línea de comandos stenoread automatiza la extracción de paquetes de Stenographer y los presenta en un formato utilizable para los analistas. Solicita paquetes sin procesar a stenographer, luego los procesa a través de tcpdump para proporcionar una experiencia de formateo/filtrado más completa. El primer argumento para stenoread es una consulta de stenographer (consulte 'Lenguaje de consulta' arriba). Todos los demás argumentos se pasan a tcpdump. Por ejemplo:
# Request all packets from IP 1.2.3.4 port 6543, then do extra filtering by
# TCP flag, which typical stenographer does not support.
$ stenoread 'host 1.2.3.4 and port 6543' 'tcp[tcpflags] & tcp-push != 0'
# Request packets on port 8765, disabling IP resolution (-n) and showing
# link-level headers (-e) when printing them out.
$ stenoread 'port 8765' -n -e
# Request packets for any IPs in the range 1.1.1.0-1.1.1.255, writing them
# out to a local PCAP file so they can be opened in Wireshark.
$ stenoread 'net 1.1.1.0/24' -w /tmp/output_for_wireshark.pcap
Para descargar el código fuente, instale Go localmente, luego ejecute:
$ go get github.com/google/stenographer
Go se encargará de descargar e instalar todas las bibliotecas Go de las que depende stenographer. Para compilar stenotype, vaya al directorio stenotype y ejecute make. Es posible que necesite instalar los siguientes paquetes de Ubuntu (o sus equivalentes en otras distribuciones de Linux):
Este no es un producto oficial de Google (experimental o de otro tipo), es solo código que resulta ser propiedad de Google.
Este código no está diseñado (ni se utiliza) para espiar a los usuarios de Google. Su propósito es aumentar la seguridad en nuestras redes mejorando nuestras capacidades internas de monitoreo.