Анализ сетевого трафика (pcap)
Если диск говорит «что осталось на машине», то трафик говорит «что и куда уходило по сети» — и часто это единственный свидетель эксфильтрации данных.
pcap (packet capture) — файл с сохранёнными сетевыми пакетами «как они летели по проводу». Из него реконструируют сессии, восстанавливают переданные файлы и выявляют каналы управления (C2) и утечки.
Этот урок — про криминалистику сети: как из захваченного трафика извлечь картину инцидента. Работаем в режиме защитника и расследователя: анализируем трафик своей сети или лабораторного стенда. Перехват чужого трафика без полномочий нарушает тайну связи (ст. 138 УК РФ), поэтому всё ниже — про захват на своём периметре и разбор учебных дампов.
Зачем это знать защитнику
Многие следы атаки не остаются на диске вовсе: «бесфайловый» вредонос живёт в памяти, а данные утекают в зашифрованном потоке, не касаясь локального хранилища. Сеть видит то, что скрыто от хоста: к какому внешнему серверу ходила машина, как часто, сколько данных отдала. Реконструкция трафика отвечает на ключевые вопросы инцидента — «была ли эксфильтрация», «есть ли управляющий канал», «какие ещё хосты заражены». Без сетевой телеметрии расследование однобоко: вы видите взлом, но не его масштаб и не вывод данных.
Захват трафика
Пакеты захватывают там, где они проходят: на хосте, на зеркалирующем порту коммутатора (SPAN/TAP), на шлюзе. Базовая иллюстрация захвата в лаборатории:
# Захват в файл на лабораторном интерфейсе (метод, не таргет)
tcpdump -i eth0 -w capture.pcap
# Ограничить срез интересующим хостом стенда
tcpdump -i eth0 host 10.0.0.5 -w host.pcap
Главный принцип форензики применим и здесь: захват нужно настроить до инцидента (постоянный сенсор на периметре) — задним числом «переснять» вчерашний трафик нельзя. И сразу зафиксировать целостность дампа: хеш файла + журнал «кто, где, когда снял», иначе доказательство оспорят.
Реконструкция сессий
Сырые пакеты неудобно читать поштучно: TCP-поток разбит на сегменты, перемешан повторами и подтверждениями. Инструменты (Wireshark, tshark, Zeek, NetworkMiner) собирают сессии обратно: склеивают сегменты в непрерывный диалог, выделяют, кто инициатор, какие протоколы внутри, какие файлы передавались. В Wireshark это «Follow TCP/HTTP Stream» — он показывает запрос и ответ целиком, как переписку. Несколько базовых фильтров отображения для сортировки трафика:
http.request # все HTTP-запросы
dns # DNS-запросы и ответы
ip.addr == 10.0.0.5 # весь трафик подозрительного хоста
tcp.flags.syn == 1 && tcp.flags.ack == 0 # попытки установить соединение
Из реконструированного HTTP- или FTP-потока часто удаётся извлечь переданный файл (carving по содержимому ответа). Незашифрованные протоколы выдают многое; с TLS содержимое скрыто, но метаданные (адрес, объём, SNI-имя в рукопожатии) остаются — и их достаточно для выводов.
Выявление эксфильтрации и C2
Признаки эксфильтрации
Эксфильтрация — вывод данных наружу. В трафике она проявляется как заметный исходящий объём к внешнему адресу, который обычно ничего не получает; передача в нерабочее время; необычный протокол для таких данных. Классический трюк — DNS-туннелирование: данные кодируются в длинных поддоменах (a8f3...x9.tunnel.example) и «утекают» через, казалось бы, безобидные DNS-запросы. Признак — аномально длинные, высокоэнтропийные доменные имена и шквал запросов к одному домену.
Признаки C2 (beaconing)
C2 (command-and-control) — канал, по которому заражённая машина получает команды. Его выдаёт beaconing: регулярные, однообразные обращения к одному адресу через равные промежутки (например, каждые 60 секунд) — заражённый хост «звонит домой» за инструкциями. Человеческий трафик нерегулярен и разнообразен, а маячок ритмичен. Простой Python-эвристик: если соединения к одному адресу идут с почти постоянным интервалом и низким разбросом — это подозрительно на beaconing.
import statistics
# Времена соединений (сек) к одному внешнему адресу, извлечённые из pcap
timestamps = [0, 60, 121, 180, 239, 301, 360]
intervals = [b - a for a, b in zip(timestamps, timestamps[1:])]
mean = statistics.mean(intervals)
spread = statistics.pstdev(intervals) # разброс интервалов
print(f"Интервалы: {intervals}")
print(f"Средний интервал: {mean:.1f} c, разброс: {spread:.2f} c")
print("Подозрение на beaconing" if spread < 5 else "Похоже на обычный трафик")
Вывод:
Интервалы: [60, 61, 59, 59, 62, 59] Средний интервал: 60.0 c, разброс: 1.15 c Подозрение на beaconing
Малый разброс при постоянном интервале — сильный признак автоматического маячка. На практике эвристику дополняют: одинаковый размер пакетов, обращения по таймеру даже когда пользователь неактивен, обращение к свежезарегистрированному домену.
Как это работает под капотом
Захват опирается на режим, в котором сетевая карта отдаёт ОС копии проходящих кадров (через libpcap/WinPcap); каждый пакет сохраняется с временной меткой и заголовками канального, сетевого и транспортного уровней. Реконструкция сессии — это обратная сборка: анализатор сопоставляет пакеты по «пятёрке» (адреса и порты источника/назначения + протокол), упорядочивает TCP-сегменты по номерам последовательности, отбрасывает дубликаты и склеивает полезную нагрузку в непрерывный поток. Поверх этого протокольные парсеры распознают HTTP, DNS, TLS и достают поля (URL, домены, имена сертификатов). Выявление аномалий — уже статистика над метаданными потоков: распределение объёмов, периодичность, энтропия доменных имён. Важное ограничение: шифрование (TLS) прячет содержимое, поэтому современная сетевая форензика всё больше опирается на метаданные и поведение потоков, а не на чтение полезной нагрузки.
Как защититься
1. Постоянный захват/сенсор на периметре. Зеркалируйте трафик на IDS/сенсор (Suricata, Zeek) с ротацией дампов. Тогда при инциденте есть что разбирать, а не пустота.
2. Фиксируйте целостность дампов. Хеш pcap-файла и журнал сбора (где, когда, кем снят) превращают захват в доказательство, которое выдержит проверку.
3. Алерты на beaconing и DNS-аномалии. Правила на регулярные обращения к одному адресу, на длинные/высокоэнтропийные домены и всплески исходящего объёма ловят C2 и эксфильтрацию раньше, чем утечёт всё.
4. Снижайте слепые зоны TLS. Логируйте метаданные (SNI, объёмы, репутацию адресов); там, где политика и закон позволяют, применяйте контролируемую инспекцию на корпоративном шлюзе. Не пытайтесь «расшифровать» чужой трафик вне своих систем.
5. Анализируйте только разрешённый трафик. Свой периметр, лабораторные дампы, инциденты в своей организации. Перехват чужой связи без полномочий — ст. 138 УК РФ.
Итоги
- pcap сохраняет пакеты «как с провода»; из них реконструируют сессии и нередко извлекают переданные файлы.
- Сеть видит то, чего нет на диске: эксфильтрацию и C2-каналы — поэтому сетевая телеметрия незаменима для оценки масштаба инцидента.
- Beaconing (регулярные однообразные обращения к одному адресу) и DNS-туннелирование (длинные высокоэнтропийные домены) — ключевые индикаторы.
- Шифрование прячет содержимое, но метаданные потоков (адрес, объём, периодичность, SNI) остаются и достаточны для выводов.
- Захват настраивают заранее, фиксируют целостность дампа и анализируют только разрешённый трафик (ст. 138 УК РФ о тайне связи).