Сетевая безопасность/Анализ сетевого трафика
Содержание
Теоретические сведения
TTL
- Хоп - переход пакета между двумя маршрутизаторами.
- TTL - максимальное количество хопов, которое может пройти пакет до своего исчезновения.
При получении пакета маршрутизатор уменьшает его TTL на 1. Если TTL становится равным 0, пакет уничтожается, а его отправителю посылается пакет ICMP Time Exceeded.
RTT
- RTT (round-trip time) - время, затраченное на отправку пакета + время, которое требуется для подтверждения, что пакет был получен.
Инструменты для анализа сетевого трафика
Утилита Ping
Ping - утилита для проверки целостности и качества соединений в сетях на основе TCP/IP. В работе использует протокол ICMP.
ICMP (Internet Control Message Protocol) - протокол сетевого уровня, в основном используемый для передачи сообщений об ошибках.
Утилита Ping отправляет интересующему узлу пакеты ICMP Echo-Request и фиксирует поступление ответов ICMP Echo-Reply.
Пример работы
В примере выше отправлены 8 пакетов (желаемое количество пакетов задается флагом -t) на домен google.com. Утилита определили соответствующий домену IP адрес и отправила на него заданное количество пакетов.
В результате утилита вывела следующую информацию по каждому отправленному пакету:
- номер пакета,
- TTL пакета на момент его получения,
- RTT пакета.
Также вывод содержит информацию о том, сколько пакетов ICMP Echo-Reply в итоге было получено, процент потерянной информации, минимальное, максимальное и среднее значение RTT и величину среднеквадратического отклонения для RTT.
Traceroute
Traceroute (Tracert в Windows) - утилита, используемая для определения маршрутов следования данных в сетях TCP/IP. В работе может использовать различные протоколы (TCP, UDP, ICMP).
Принцип работы
- На целевой хост отправляется серия пакетов (обычно, 3) с TTL = 1.
- Первый маршрутизатор, который встретится на пути каждого отправленного пакета, уменьшит TTL на 1. TTL станет равным 0.
- Маршрутизатор отправит источнику сообщение о том, что пакет не может быть передан далее (сообщая источнику свой IP адрес).
- На целевой хост отправляется серия пакетов с TTL = 2...
Пример работы
При вызове Traceroute для домена также будет показан IP адрес, TTL и вес пакетов. Для каждого из маршрутизаторов, встретившихся на пути пакетов, указывается
- Доменное имя, если его удалось получить
- IP адрес (или адреса, если разные пакеты серии пришли на разные маршрутизаторы)
- Время доставки для каждого из пакетов
Также вместо информации по одному или нескольким пакетам может быть показан символ "*". Это означает, чтобы тем или иным причинам отправитель не получил от этого маршрутизатора ICMP Time Exceeded.
Часть возможных причин указана на странице справки traceroute:
Netcat
Netcat (nc, ncat) - утилита, позволяющая устанавливать TCP и UDP соединения, принимать и передавать данные. Основные режимы: подключения и прослушивания.
Режим подключения позволяет подключиться к любому порту, открытому на прослушивание (при условии, что порт разрешает подключения такого типа).
На примере с помощью nc осуществляется подключение к google.com: при вводе nc google.com 80 утилита подключается к серверной стороне по протоколу HTTP (80 - стандартный порт для этого протокола). Далее клиент отправляет на сервер простейший HTTP-запрос "GET /", в ответ получает соответствующую веб-страницу, которая отображается в терминале в необработанном виде.
Режим прослушивания позволяет открыть на прослушивание сокет на хосте с запущенной утилитой (поставив ему в соответствие порт, к которому смогут обращаться другие приложения). С помощью этого режима можно сделать подобие чата между двумя хостами (например, для передачи данных между двумя виртуальными машинами). Ссылка на демонстрацию приведена в конце статьи.
Netstat
Netstat (Network Statistics) - утилита, позволяющая получить информацию о состоянии TCP-соединений (входящих и исходящих), таблицах маршрутизации, сетевых интерфейсах, сетевой статистике по протоколам.
Для различных ОС реализации данной утилиты отличаются, одни и те же параметры могут отвечать за разные функции. Сводная таблица по ключам есть на английской странице Википедии по Netstat (ссылка приведена в конце статьи).
Ниже - примеры, которые будут работать на большинстве UNIX-систем.
Примеры работы
- -l - выводит информацию о состоянии всех открытых веб-сокетов (в состоянии LISTEN). По каждому сокету отображается информация о соответствующем ему порте. netstat -lt выведет информацию только о TCP-портах, netstat -lu - только о UDP-портах, netstat -lx - о UNIX-сокетах. Флаги t, u, x можно комбинировать между собой и добавлять ко всем флагам идущим ниже, получая соответствующую фильтрацию.
- -p - добавить в вывод PID и имя процесса, работающего на конкретном порту
- -n - отображать адреса и номера портов в числовом формате
- -i - информация о сетевых интерфейсах
- -ie - расширенная информация, аналог ifconfig
Tcpdump
Tcpdump - утилита, позволяющая перехватывать и анализировать сетевой трафик хоста, на котором запущена данная утилита. Также возможен анализ трафика, записанного в файл (*.pcap)
В данном примере используются следующие флаги:
- -i - перехватывать только пакеты с определенного сетевого интерфейса
- -с - только заданное количество пакетов
- -n - отображение в числовом формате
- -tttt - timestamp-ы в формате дата + время
- Если требуется собирать трафик, идущий на конкретный порт, его можно задать с помощью настройки port.
Также Tcpdump позволяет задавать множество других настроек: IP-адреса хостов, отправляющих и получающих трафик, конкретные протоколы, параметры пакетов и т.п.
Wireshark
Wireshark - программа для анализа сетевого трафика. По функциональности она аналогична Tcpdump, но имеет графический интерфейс и более широкий спектр возможностей. Также Wireshark поддерживает расширения, написанные на языке Lua.
Примеры работы
Wireshark также позволяет анализировать как получаемый в режиме реального времени, так и записанный в файл трафик.
Трафик можно собирать с использованием фильтров, можно выбрать уже готовый вариант или задать свой. На этом же окне Wireshark показывает, на каких интерфейсах есть сетевая активность.
Wireshark способен определить большинство существующих сетевых протоколов и предоставляет информацию для каждого пакета по всем доступным протоколам с учетом инкапсуляции.
Также можно просматривать данные не по отдельным пакетам, а целыми стримами (красным обозначаются запросы клиента, синим - ответы сервера). Можно также искать в потоке определенное содержимое, исключать конкретные потоки из общего отображаемого трафика и сохранять содержимое потоков в виде текстовых файлов, в бинарном виде и в других форматах.