
Stenographer é uma solução de captura de pacotes que visa gravar rapidamente todos os pacotes em disco e, em seguida, fornecer acesso simples e rápido a subconjuntos desses pacotes. Discussões/anúncios em [email protected]
Stenographer é um utilitário de captura completa de pacotes para armazenar pacotes em buffer no disco para fins de detecção de intrusão e resposta a incidentes. Ele fornece uma implementação de alto desempenho de escrita de pacotes da NIC para o disco, lida com a exclusão desses arquivos à medida que o disco enche e fornece métodos para ler rapidamente e facilmente conjuntos específicos de pacotes.
Ele foi projetado para:
NÃO foi projetado para:
Processamento complexo de pacotes (remontagem de fluxo TCP, etc)
É rápido porque não faz isso. Mesmo com o processamento mínimo de passagem única de pacotes que fazemos, processar ~1 Gbps apenas para indexação pode consumir >75% de um único núcleo.
Processar os dados lendo-os de volta do disco também não funciona: veja o próximo tópico.
Ler grandes quantidades de pacotes (> 1% dos pacotes escritos)
O conceito chave aqui é que as leituras do disco competem com as escritas do disco… você pode escrever a 90% da velocidade do disco, mas isso lhe dá apenas 10% do tempo do disco para leitura. Além disso, estamos escrevendo dados altamente sequenciais, nos quais os discos são muito bons em fazer rapidamente, e geralmente lendo dados esparsos com muitas buscas, que os discos fazem lentamente.
Para leitura adicional, consulte DESIGN.md para uma discussão sobre o design do stenographer, ou leia INSTALL.md sobre como instalar o stenographer em uma máquina.
Um usuário solicita pacotes do stenographer especificando-os com uma linguagem de consulta muito simples. Esta linguagem é um subconjunto simples do BPF e inclui os primitivos:
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: Os tempos relativos devem ser medidos em valores inteiros de horas ou minutos, conforme demonstrado acima.
Primitivos podem ser combinados com and/&& e com or/||, que têm a mesma precedência e avaliam da esquerda para a direita. Parênteses também podem ser usados para agrupar.
(udp and port 514) or (tcp and port 8080)
O script de linha de comando stenoread automatiza a extração de pacotes do Stenographer e os apresenta em um formato utilizável para os analistas. Ele solicita pacotes brutos do stenographer e os executa através do tcpdump para fornecer uma experiência de formatação/filtragem mais completa. O primeiro argumento para stenoread é uma consulta do stenographer (veja 'Linguagem de Consulta' acima). Todos os outros argumentos são passados para o tcpdump. Por exemplo:
# 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 baixar o código-fonte, instale o Go localmente e execute:
$ go get github.com/google/stenographer
O Go cuidará do download e instalação de todas as bibliotecas Go das quais o stenographer depende. Para compilar o stenotype, vá para o diretório stenotype e execute make. Pode ser necessário instalar os seguintes pacotes do Ubuntu (ou seus equivalentes em outras distribuições Linux):
Este não é um produto oficial do Google (experimental ou não), é apenas um código que pertence ao Google.
Este código não tem a intenção (nem é usado) de vigiar os usuários do Google. Seu propósito é aumentar a segurança em nossas redes, ampliando nossas capacidades internas de monitoramento.