
Stenographer — это решение для захвата пакетов, которое быстро сохраняет все пакеты на диск, а затем предоставляет простой и быстрый доступ к подмножествам этих пакетов. Обсуждения и анонсы: [email protected]
Stenographer — это утилита для захвата полного трафика, предназначенная для буферизации пакетов на диск в целях обнаружения вторжений и реагирования на инциденты. Она обеспечивает высокопроизводительную реализацию записи пакетов из сетевого интерфейса на диск, управляет удалением этих файлов по мере заполнения диска и предоставляет методы быстрого и простого чтения определённых наборов пакетов.
Она предназначена для:
Она НЕ предназначена для:
Сложной обработки пакетов (сборка TCP-потоков и т.д.)
Она быстра именно потому, что этого не делает. Даже при минимальной однопроходной обработке пакетов, которую мы выполняем, обработка ~1 Гбит/с только для индексации может занимать >75% одного ядра.
Обработка данных путём чтения их с диска также не работает: см. следующий пункт.
Чтения больших объёмов пакетов (> 1% записанных пакетов)
Ключевая концепция здесь в том, что чтение с диска конкурирует с записью... Вы можете писать с использованием 90% скорости диска, но это оставляет только 10% времени диска для чтения. Кроме того, мы записываем сильно последовательные данные, с которыми диски справляются очень быстро, а читаем, как правило, разреженные данные с множеством операций поиска, которые диски выполняют медленно.
Для дальнейшего изучения ознакомьтесь с DESIGN.md — обсуждением архитектуры stenographer, или прочитайте INSTALL.md — инструкцию по установке stenographer на машину.
Пользователь запрашивает пакеты у stenographer с помощью очень простого языка запросов. Этот язык является простым подмножеством BPF и включает следующие примитивы:
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
ПРИМЕЧАНИЕ: Относительное время должно задаваться целыми значениями часов или минут, как показано выше.
Примитивы можно комбинировать с помощью and/&& и or/||, которые имеют одинаковый приоритет и вычисляются слева направо. Также можно использовать круглые скобки для группировки.
(udp and port 514) or (tcp and port 8080)
Скрипт командной строки stenoread автоматизирует извлечение пакетов из Stenographer и предоставляет их аналитику в удобном формате. Он запрашивает у stenographer сырые пакеты, а затем пропускает их через tcpdump для обеспечения более полнофункционального форматирования и фильтрации. Первый аргумент stenoread — это запрос stenographer (см. раздел «Язык запросов» выше). Все остальные аргументы передаются в tcpdump. Например:
# 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
Чтобы скачать исходный код, установите Go локально, затем выполните:
$ go get github.com/google/stenographer
Go позаботится о загрузке и установке всех библиотек Go, от которых зависит stenographer. Для сборки stenotype перейдите в каталог stenotype и выполните make. Возможно, вам потребуется установить следующие пакеты Ubuntu (или их аналоги в других дистрибутивах Linux):
Это не официальный продукт Google (ни экспериментальный, ни какой-либо другой), это просто код, который, как оказалось, принадлежит Google.
Этот код не предназначен (и не используется) для слежки за пользователями Google. Его цель — повысить безопасность наших сетей, расширив возможности внутреннего мониторинга.