Справочное руководство SOC-аналитика по обнаружению вредоносной активности в сетевом трафике — от базовых Wireshark-фильтров до TLS-фингерпринтинга и написания IDS-правил
🌊
Основы Network ForensicsЧто, зачем и как анализировать в сетевом трафике
Network Forensics — это захват, запись и анализ сетевого трафика для обнаружения вторжений, расследования инцидентов и извлечения доказательств. Для SOC-аналитика сетевой трафик — один из главных источников информации: именно в трафике видны обращения к C2-серверам, эксфильтрация данных, lateral movement, загрузка вредоносных пейлоадов и DNS-резолвинг вредоносных доменов. Даже если endpoint скомпрометирован и логи стёрты — сетевые артефакты остаются на SIEM, NDR и PCAP-записях.
Что анализировать
Типы сетевых артефактов
PCAP / PCAPNGПолный захват пакетов — содержит все данные трафика. Основной формат для глубокого анализа в Wireshark. Генерируется через tcpdump, Wireshark, Zeek, сетевые TAP'ы.
NetFlow / IPFIXМетаданные о соединениях: IP-адреса, порты, протоколы, объём трафика, длительность. Без содержимого пакетов, но охватывает весь трафик организации. Идеален для обнаружения аномалий.
DNS-логиЗаписи DNS-запросов и ответов. Источник: DNS-сервер, Sysmon (Event ID 22), Zeek (dns.log), Pi-hole. Критичны для обнаружения DGA, tunneling, C2.
Proxy / Firewall логиHTTP-запросы через корпоративный прокси, accept/deny записи файрвола. Содержат URL, User-Agent, категории сайтов, объём трафика.
Инструменты
Основной стек
Wireshark / tshark — захват и интерактивный анализ PCAP. Де-факто стандарт.
tcpdump — CLI-захват пакетов на Linux. Быстр, не требует GUI.
NetworkMiner — пассивный анализ PCAP: извлечение файлов, изображений, credentials, OS fingerprinting.
Arkime (бывш. Moloch) — полнопакетный захват и индексация в масштабе предприятия.
Suricata / Snort — IDS/IPS с сигнатурными правилами для обнаружения атак в трафике.
Первый шаг: Получив PCAP для анализа, начните с Statistics → Conversations и Statistics → Protocol Hierarchy в Wireshark — это даст общую картину: кто с кем общается, какие протоколы, какой объём. Не погружайтесь в отдельные пакеты, пока не видите картину целиком.
🦈
Wireshark — фильтры и приёмыDisplay filters, capture filters, ключевые приёмы для SOC-аналитика
Display Filters vs Capture Filters
Capture filters (BPF-синтаксис) применяются при захвате — пакеты, не прошедшие фильтр, не сохраняются вовсе. Display filters (Wireshark-синтаксис) применяются к уже захваченным данным — они фильтруют отображение, не удаляя пакеты. В SOC чаще всего работают с display filters при анализе готового PCAP.
Шпаргалка по Display Filters
Базовые фильтры
Wireshark Display Filtersip.addr == 192.168.1.100 # Трафик от/к конкретному IP
ip.src == 10.0.0.5 # Только исходящий трафик с IP
ip.dst == 8.8.8.8 # Только входящий на IP
tcp.port == 443 # TCP порт 443 (HTTPS)
udp.port == 53 # UDP порт 53 (DNS)
tcp.flags.syn == 1 && tcp.flags.ack == 0 # SYN-пакеты (новые соединения)
frame.time >= "2026-01-15 10:00:00" # Временной диапазон
Протокольные фильтры
Протоколыdns # Весь DNS-трафик
http # Весь HTTP-трафик (не HTTPS!)
http.request.method == "POST" # Только HTTP POST-запросы
http.request.uri contains "login" # URL содержит "login"
http.host contains "evil" # Хост содержит "evil"
tls.handshake.type == 1 # TLS Client Hello (начало соединения)
tls.handshake.extensions.server_name # SNI — имя целевого хоста
smtp # Email-трафик (SMTP)
ftp # FTP-трафик (логины, файлы)
Фильтры для Threat Hunting
Threat Hunting# Подозрительные DNS-запросы (длинные домены — возможный tunneling)
dns.qry.name.len > 50
# HTTP к IP-адресу (без домена) — признак C2
http.host matches "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$"
# Нестандартные порты для HTTP
http && !(tcp.port == 80 || tcp.port == 443 || tcp.port == 8080)
# Большие DNS-ответы (возможный DNS tunneling)
dns.resp.len > 512
# Исходящий трафик на нестандартные порты
tcp.dstport > 1024 && !(tcp.dstport == 8080 || tcp.dstport == 8443 || tcp.dstport == 3389)
# TLS без SNI (подозрительно — легитимные браузеры отправляют SNI)
tls.handshake.type == 1 && !tls.handshake.extensions.server_name
# Пакеты с данными после TCP handshake (PSH,ACK) к одному IP
ip.dst == SUSPECT_IP && tcp.flags.push == 1
Ключевые приёмы
Follow Stream
Правый клик на пакете → Follow → TCP Stream (или HTTP, TLS, UDP). Показывает полное содержимое диалога между клиентом и сервером в читаемом виде. Незаменимо для чтения HTTP-запросов/ответов, извлечения передаваемых данных, просмотра командного интерфейса C2.
Statistics — ключевые пункты
Conversations: таблица всех IP-пар с объёмом трафика. Сортируйте по Bytes — крупнейшие потоки могут быть эксфильтрацией.
Protocol Hierarchy: дерево протоколов. Необычный процент трафика на DNS или ICMP — признак tunneling.
Endpoints: все IP-адреса с количеством пакетов и байт. Быстро находит «шумных» хостов.
DNS: статистика DNS-запросов. Много запросов к одному домену — возможный beaconing.
tshark для автоматизации:tshark -r traffic.pcap -T fields -e ip.src -e ip.dst -e dns.qry.name -Y "dns" | sort | uniq -c | sort -rn — извлечение всех DNS-запросов с подсчётом частоты, прямо из командной строки.
🔤
DNS-аномалииОбнаружение вредоносной активности через DNS-трафик
Почему DNS критичен
DNS — «ахиллесова пята» большинства малвари: даже если C2-трафик зашифрован, DNS-запросы к вредоносным доменам остаются видимыми (если не используется DoH/DoT). Более того, DNS используется для tunneling (передачи данных через DNS-запросы), DGA (генерации доменов для уклонения от блокировок) и как канал эксфильтрации.
Что искать
DGA-домены (Domain Generation Algorithms)
Малварь генерирует псевдослучайные доменные имена для связи с C2, затрудняя блокировку. Признаки DGA:
Высокая энтропия имени домена: x7kd9mq2p.com, ahjf83hd.net — выглядят как случайные символы.
Большое количество NXDOMAIN-ответов (домен не существует) — малварь перебирает сгенерированные домены, пока не найдёт активный.
Однообразная структура: одинаковая длина, один TLD, одинаковый паттерн.
Домены, зарегистрированные менее 30 дней назад — частый признак фишинга и C2. Обнаружение: TI-фиды с NRD-списками, интеграция с Passive DNS (Farsight DNSDB, VirusTotal), корреляция DNS-логов с WHOIS-данными.
Инструменты:Zeek (dns.log с полным разбором DNS), PassiveDNS (историческая база DNS-резолвов), dnstwist (обнаружение тайпсквоттинга — доменов, похожих на легитимные), freq.py (оценка энтропии доменных имён для обнаружения DGA).
📡
Анализ HTTP/HTTPSОбнаружение вредоносных запросов, веб-шеллов и загрузки пейлоадов
HTTP — открытый текст
Нешифрованный HTTP-трафик полностью читаем в PCAP: URL-адреса, заголовки, тела запросов и ответов, загружаемые файлы. Хотя в 2026 году большинство трафика зашифровано (HTTPS), HTTP всё ещё используется малварью (особенно на ранних стадиях), внутри корпоративных сетей и для C2 на нестандартных портах.
POST-запросы часто используются для отправки украденных данных (credentials, keylog), получения команд от C2, загрузки файлов на сервер атакующего.
Wireshark# Все POST-запросы
http.request.method == "POST"
# POST с данными формы
http.request.method == "POST" && http.content_type contains "form"
# POST с JSON (часто C2-протоколы)
http.request.method == "POST" && http.content_type contains "json"
# POST на IP-адрес (без домена)
http.request.method == "POST" && http.host matches "^[0-9]"
HTTPS — что видно, что нет
Анализ зашифрованного трафика
В HTTPS содержимое зашифровано, но метаданные доступны:
SNI (Server Name Indication): имя целевого хоста в TLS Client Hello — видно в открытом виде (до TLS 1.3 ECH). Фильтр: tls.handshake.extensions.server_name.
Сертификат сервера: Subject, Issuer, дата выдачи, SAN (альтернативные имена). Самоподписанный сертификат = подозрительно.
JA3/JA4-фингерпринты: уникальная «подпись» TLS-клиента (см. секцию 06).
Размер и тайминги: объём данных и частота пакетов — видны даже в зашифрованном трафике.
Расшифровка HTTPS: Если у вас есть SSLKEYLOGFILE (pre-master secrets из браузера) или приватный ключ сервера — Wireshark может расшифровать TLS-трафик. В Wireshark: Edit → Preferences → Protocols → TLS → (Pre)-Master-Secret log filename.
📶
Обнаружение C2 и BeaconingИдентификация Command and Control коммуникаций
Что такое beaconing
Beaconing — периодические обращения заражённого хоста к C2-серверу для получения команд. Это характерный сетевой паттерн большинства RAT, ботнетов и пост-эксплуатационных фреймворков (Cobalt Strike, Sliver, Havoc). Beaconing может быть точным (каждые 60 секунд) или с jitter (случайный разброс ±10–50% от интервала для маскировки).
Методы обнаружения
Временной анализ (Timing Analysis)
Постройте график запросов от подозрительного хоста к внешнему IP во времени (I/O Graphs в Wireshark или Excel).
Вычислите интервалы между запросами. Если они стабильны (±jitter) — это beaconing.
Metasploit MeterpreterHTTP: URI содержит 4-символьные чексуммы. HTTPS: самоподписанный сертификат с Issuer: CN=localhost.
SlivermTLS, WireGuard, HTTP/HTTPS. HTTP-профиль по умолчанию имитирует jQuery-загрузку. Уникальные паттерны в TLS.
Cobalt Strike DNSDNS-beaconing через A/AAAA/TXT-записи. Поддомен содержит закодированные данные. Характерный паттерн: [a-f0-9]{12}.c2domain.com.
Инструменты:RITA (Real Intelligence Threat Analytics) — open-source, автоматически обнаруживает beaconing в Zeek-логах. flare-fakenet-ng — для анализа C2 в изолированной среде. Beacon Hunter (ELK-дашборд) — визуализация beaconing-паттернов.
🔏
TLS-фингерпринтинг (JA3/JA4)Идентификация вредоносных клиентов по параметрам TLS-рукопожатия
Принцип
Каждый TLS-клиент (браузер, малварь, скрипт) формирует уникальный набор параметров в сообщении Client Hello: версия TLS, поддерживаемые шифронаборы (cipher suites), расширения (extensions), эллиптические кривые, point formats. Из этих параметров вычисляется хэш — TLS-фингерпринт, уникальный для конкретного ПО.
JA3S — MD5-хэш параметров Server Hello. Идентифицирует сервер.
Пара (JA3 + JA3S) — ещё более уникальная подпись, так как один сервер может отвечать по-разному разным клиентам.
Один и тот же Cobalt Strike Beacon будет иметь одинаковый JA3 на разных хостах, даже если IP и домен C2 меняются.
Wireshark# JA3-хэш в Wireshark (требуется плагин или Wireshark 4.x+)
tls.handshake.ja3
# JA3 из Zeek (ssl.log)
# Поле ja3 уже присутствует в Zeek ssl.log по умолчанию
# Поиск по известному JA3-хэшу
tls.handshake.ja3 == "72a589da586844d7f0818ce684948eea"
JA4+ (следующее поколение)
Улучшения JA4
JA4 — замена JA3 с улучшенной читаемостью: формат t13d1516h2_8daaf6152771_e5627efa2ab1 содержит тип протокола, версию TLS, количество cipher suites.
JA4S — серверный фингерпринт.
JA4H — HTTP-клиент: метод, заголовки, порядок заголовков, cookies.
JA4X — фингерпринт X.509-сертификата.
JA4+ решает проблемы коллизий JA3 и добавляет контекст (читаемые параметры вместо голого хэша).
Практическое применение
Поиск по базам: ja3er.com (публичная база JA3-хэшей), sslbl.abuse.ch (JA3 вредоносных C2).
Обнаружение малвари: если JA3 хоста не совпадает ни с одним известным браузером — это скрипт или малварь.
Hunting: найдите все соединения с одинаковым JA3 → определите, какое ПО их генерирует.
Детекция Cobalt Strike: JA3 дефолтного Beacon хорошо известен и задокументирован.
Подводные камни: JA3 не является серебряной пулей. Malleable C2-профили Cobalt Strike позволяют менять TLS-параметры. Один JA3-хэш может соответствовать нескольким программам. Используйте JA3 как один из индикаторов, а не единственный.
📦
Извлечение файлов и артефактовИзвлечение файлов, credentials и IoC из сетевого трафика
Извлечение файлов
Wireshark — Export Objects
File → Export Objects → HTTP — извлекает все файлы, переданные по HTTP: исполняемые файлы, скрипты, документы, изображения. Аналогично для SMB, TFTP, IMF (email). Для каждого файла показывается хост, Content-Type, имя файла и размер.
NetworkMiner — пассивное извлечение
NetworkMiner автоматически извлекает из PCAP: файлы (по всем протоколам), изображения, credentials (HTTP Basic, FTP, SMTP), сертификаты, DNS-запросы, параметры ОС (OS fingerprinting по TTL и TCP window size). Удобнее Wireshark для массового извлечения.
Извлечение из зашифрованного трафика
Если TLS-трафик не может быть расшифрован — файлы извлечь невозможно. Однако можно извлечь:
Сертификаты сервера (Subject, Issuer, SAN, serial number).
SNI (Server Name Indication) — домен, к которому обращается клиент.
JA3/JA4-фингерпринты.
Размеры передаваемых данных (для оценки объёма эксфильтрации).
После извлечения файлов: вычислите SHA-256 каждого файла → проверьте в VirusTotal → при необходимости передайте на статический / динамический анализ. Никогда не открывайте извлечённые файлы на рабочей машине.
🔀
Lateral Movement в трафикеОбнаружение горизонтального перемещения атакующего по сети
Контекст
После первоначальной компрометации атакующий перемещается по внутренней сети в поисках ценных целей: контроллеры домена, файловые серверы, базы данных. Lateral movement генерирует характерный внутренний трафик, который можно обнаружить.
Протоколы и паттерны
SMB (порт 445)
Массовые подключения по SMB от одного хоста к множеству других — сканирование/распространение.
Доступ к ADMIN$, C$, IPC$ — признак PsExec или аналогичных инструментов.
Передача исполняемых файлов через SMB-шары.
Wireshark# SMB-трафик
smb2 || smb
# Доступ к административным шарам
smb2.tree contains "ADMIN$" || smb2.tree contains "C$" || smb2.tree contains "IPC$"
# SMB-подключения к множеству хостов от одного IP
smb2 && ip.src == SUSPECT_IP
Другие протоколы lateral movement
WMI (порт 135 + динамические)Удалённое выполнение команд через WMI. Фильтр: dcerpc. Признак: DCOM-вызовы к IWbemServices.
RDP (порт 3389)Интерактивный удалённый рабочий стол. Фильтр: tcp.port == 3389. Массовые RDP-подключения от одного IP — подозрительно.
SSH (порт 22)В Linux-средах. Фильтр: tcp.port == 22. Подбор паролей: множество коротких сессий к одному хосту.
Kerberos-аномалии
Kerberoasting: массовые TGS-запросы (msg-type 13) к сервисным аккаунтам от одного пользователя. Фильтр: kerberos.msg.type == 13.
Golden/Silver Ticket: аномальные TGT/TGS с нестандартными параметрами: необычно долгий срок действия, несовпадение доменов.
AS-REP Roasting: AS-REP без предварительной аутентификации — kerberos.msg.type == 11 к аккаунтам с отключённой preauth.
Pass-the-Ticket: использование TGT с одной машины на другой — в трафике это выглядит как TGS-запрос от IP, отличного от IP, получившего TGT.
Baseline: Для обнаружения lateral movement критично иметь baseline «нормального» внутреннего трафика. Если рабочая станция бухгалтера внезапно подключается по SMB к контроллеру домена — это аномалия, которую невозможно обнаружить без понимания нормы.
📤
Обнаружение эксфильтрации данныхКак атакующий выводит данные и как это обнаружить
Каналы эксфильтрации
HTTPS / HTTPНаиболее частый канал: данные загружаются на облачные хранилища (Mega, Dropbox, Google Drive), pastebin-сервисы или C2-сервер через POST-запросы. Маскируется под обычный веб-трафик.
DNS TunnelingДанные кодируются в DNS-запросах (поддомены) и ответах (TXT-записи). Медленно, но часто обходит файрволы, так как DNS обычно не блокируется.
ICMP TunnelingДанные встраиваются в payload ICMP Echo Request/Reply. Фильтр: icmp && data.len > 64 — ICMP-пакеты с аномально большим телом данных.
Шифрованные каналыTLS к нестандартным портам, Tor (.onion), SSH-туннели, VPN. Обнаружение: по JA3-фингерпринтам, объёму исходящего трафика, обращениям к Tor-узлам.
Индикаторы эксфильтрации
На что смотреть
Аномальный объём исходящего трафика: рабочая станция, обычно генерирующая 100 MB/день, внезапно отправляет 10 GB — явный индикатор.
Трафик в нерабочее время: массовая передача данных в 3:00 ночи.
Обращения к облачным хранилищам: mega.nz, anonfiles, transfer.sh, file.io — часто используются для эксфильтрации.
ZIP/RAR-архивы в исходящем трафике: атакующие архивируют данные перед выгрузкой.
DNS-запросы с base64 в поддоменах:dGhpcyBpcyBhIHRlc3Q=.c2.evil.com.
Обратная асимметрия трафика: обычно входящий трафик > исходящего (загрузка контента). Если наоборот — возможна эксфильтрация.
Wireshark-фильтры для обнаружения
Wireshark / tshark# Большие DNS TXT-ответы (tunneling)
dns.resp.type == 16 && dns.resp.len > 200
# ICMP с аномально большим телом
icmp && data.len > 100
# Исходящий трафик к облачным хранилищам (по SNI)
tls.handshake.extensions.server_name contains "mega.nz"
tls.handshake.extensions.server_name contains "transfer.sh"
# Большие POST-запросы (эксфильтрация через HTTP)
http.request.method == "POST" && http.content_length > 1000000
# Исходящий трафик на Tor (guard/entry nodes)
# Предварительно загрузите список Tor-узлов и фильтруйте по IP
Инструменты:Zeek (conn.log: orig_bytes / resp_bytes для анализа асимметрии), RITA (автоматическое обнаружение beaconing + long connections), NetFlow-анализаторы (nfdump, SiLK) для масштабного анализа объёмов трафика.
🛡️
IDS/IPS — Suricata и SnortНаписание и применение правил для обнаружения угроз в трафике
IDS vs IPS
IDS (Intrusion Detection System) — обнаруживает и алертит о подозрительном трафике. IPS (Intrusion Prevention System) — обнаруживает и блокирует. Suricata и Snort работают в обоих режимах. Suricata — более современный, многопоточный, поддерживает JA3 и TLS-анализ нативно.
Разбор: alert — действие, http — протокол, $HOME_NET any -> $EXTERNAL_NET any — направление, msg — название правила, content — искомые строки, pcre — регулярное выражение, sid — уникальный идентификатор.
Примеры правил
Suricata Rules# Обнаружение PowerShell download cradle
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"SUSPICIOUS PowerShell Download Cradle";
flow:established,to_server;
http.user_agent; content:"PowerShell";
classtype:policy-violation;
sid:2026002; rev:1;
)
# DNS-запрос к длинному домену (DGA / tunneling)
alert dns $HOME_NET any -> any 53 (
msg:"SUSPICIOUS Long DNS Query - Possible Tunneling";
dns.query; content:"."; offset:50;
classtype:bad-unknown;
sid:2026003; rev:1;
)
# Обнаружение Metasploit Meterpreter HTTP
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"MALWARE Meterpreter HTTP Beacon";
flow:established,to_server;
urilen:5;
http.uri; pcre:"/^\/[A-Za-z0-9_-]{4}$/";
classtype:trojan-activity;
sid:2026004; rev:1;
)
# Самоподписанный TLS-сертификат (Issuer == Subject)
alert tls $HOME_NET any -> $EXTERNAL_NET any (
msg:"SUSPICIOUS Self-Signed TLS Certificate";
flow:established,to_server;
tls.cert_issuer; content:"CN=";
tls.cert_subject; content:"CN=";
tls_cert_notbefore; content:"2026";
classtype:bad-unknown;
sid:2026005; rev:1;
)
Готовые наборы правил
ET Open (Emerging Threats) — бесплатный набор, обновляется ежедневно. Покрывает малварь, C2, эксплойты, сканирование.
ET Pro — платная версия с расширенным покрытием и более быстрыми обновлениями.
Suricata-рулсеты от Abuse.ch — фокус на IoC: SSLBL (вредоносные сертификаты), URLhaus (вредоносные URL), Feodo Tracker (C2 ботнетов).
OISF Traffic ID — правила для идентификации приложений и протоколов.
Офлайн-анализ PCAP с Suricata
Применение правил к захваченному трафику
Suricata CLI# Прогнать PCAP через Suricata с правилами
suricata -r traffic.pcap -l /tmp/suricata-output/ -S custom.rules
# Результат:
# /tmp/suricata-output/fast.log — сработавшие правила (текст)
# /tmp/suricata-output/eve.json — полный лог в JSON (для SIEM)
# Просмотр сработавших правил
cat /tmp/suricata-output/fast.log
# Фильтрация JSON по severity
jq 'select(.alert.severity == 1)' /tmp/suricata-output/eve.json
Практика: Скачайте тренировочные PCAP-файлы с malware-traffic-analysis.net (Brad Duncan) — коллекция реальных PCAP с малварь-трафиком. Прогоните их через Suricata с ET Open правилами, затем откройте в Wireshark и верифицируйте каждый алерт. Это лучший способ научиться читать трафик.