156 lines
12 KiB
Markdown
156 lines
12 KiB
Markdown
|
### tcpdump
|
|||
|
_возможные сетевые интерфейсы для захвата_
|
|||
|
`sudo tcpdump -D`
|
|||
|
|
|||
|
_указать конкретный интерфейс_
|
|||
|
`sudo tcpdump -i eth0`
|
|||
|
|
|||
|
_больше информации в выводе_
|
|||
|
`sudo tcpdump -v -i eth0`
|
|||
|
|
|||
|
host - _имя хоста;_
|
|||
|
ip - _ip адрес;_
|
|||
|
proto - _протокол;_
|
|||
|
net - _адрес сети или подсети;_
|
|||
|
port - _адрес порта;_
|
|||
|
src - _параметр, касающийся отправителя;_
|
|||
|
dst - _параметр, касающейся получателя;_
|
|||
|
|
|||
|
`sudo tcpdump -i eth0 src host 192.168.1.2 and not port 22`
|
|||
|
|
|||
|
`sudo tcpdump -v -n -A -e not port 22 and not port 123 and not stp`
|
|||
|
|
|||
|
`sudo tcpdump -v -n -A -e -i eth0 src host 192.168.5.1 and tcp`
|
|||
|
v - _более подробный вывод_
|
|||
|
n - _не подменять значения на названия, например - указывать ff:ff:ff:ff:ff:ff вместо Broadcast_
|
|||
|
A - _выводить всё в ASCII_
|
|||
|
e - _выводить данные L2_
|
|||
|
|
|||
|
|
|||
|
#### Подробнее
|
|||
|
**Ключи**
|
|||
|
_Наиболее часто используемые ключи при запуске tcpdump приведены таблице_
|
|||
|
ключ описание
|
|||
|
|
|||
|
-a _Преобразовывает сетевые и широковещательные адреса в доменные имена._
|
|||
|
-e _Отображает данные канального уровня (MAC-адрес, протокол, длина пакета). Помимо IP-адресов будут отображаться MAC-адреса компьютеров._
|
|||
|
-F _файл. Использовать фильтр, находящийся в файле. Если вы используете этот параметр, фильтр из командной строки будет игнорироваться._
|
|||
|
-i _Указывает на то, какой сетевой интерфейс будет использоваться для захвата пакетов. По умолчанию — eth0, для выбора всех интерфейсов — any. Если отсутствует локальная сеть, то можно воспользоваться интерфейсом обратной связи lo._
|
|||
|
-l _Использовать стандартный потоковый вывод tcpdump (stdout), например для записи в файл:
|
|||
|
`shell# tcpdump -l | tee out.log //отобразит работу tcpdump и сохранит результат в файле out.log`_
|
|||
|
-N _Не добавляет доменное расширение к именам узлов. Например tcpdump отобразит `net` вместо `net.library.org`_
|
|||
|
-n _Отображает IP-адрес вместо имени хоста._
|
|||
|
-nn _Отображает номер порта вместо используемого им протокола._
|
|||
|
-p _Не переводит интерфейс в режим приема всех пакетов (promiscuous mode)._
|
|||
|
-q _Выводит минимум информации. Обычно это имя протокола, откуда и куда шел пакет, порты и количество переданных данных._
|
|||
|
-r _Этот параметр позволяет tcpdump прочесть трафик из файла, если он был предварительно сохранен параметром -w._
|
|||
|
-S _Позволяет не обрабатывать абсолютные порядковые номера (initial sequence number — ISN) в относительные._
|
|||
|
-s _число. Количество байтов пакета, которые будет обрабатывать tcpdump. При установке большого числа отображаемых байтов информация может не уместиться на экране и её будет трудно изучать. В зависимости от того, какие цели вы преследуете, и следует выбирать значение этого параметра. По умолчанию tcpdump захватывает первые 68 байт (для SunOS минимум 96 байт), однако если вы хотите увидеть содержимое всего пакета, используйте значение в 1514 байт (максимально допустимый размер кадра в сети Ethernet)._
|
|||
|
-t _Не отображает метку времени в каждой строке._
|
|||
|
-T _тип. Интерпретация пакетов заданного типа. Поддерживаются типы aodv, cnfp, rpc, rtp, rtcp, snmp, tftp, vat, wb._
|
|||
|
-tt _Отображает неформатированную метку времени в каждой строке._
|
|||
|
-tttt _Показывает время вместе с датой._
|
|||
|
-v _Вывод подробной информации (TTL; ID; общая длина заголовка, а также его параметры; производит проверку контрольных сумм IP и ICMP-заголовков)_
|
|||
|
-vv _Вывод ещё более полной информации, в основном касается NFS и SMB._
|
|||
|
-vvv _Вывод максимально подробной информации._
|
|||
|
-w _файл. Сохраняет данные tcpdump в двоичном формате. Преимущества использования данного способа по сравнению с обычным перенаправлением в файл является высокая скорость записи и возможность чтения подобных данных другими программами, например snort, но этот файл нельзя прочитать человеку. Возможен вывод двоичных данных на консоль, для этого необходимо использовать -w —_
|
|||
|
-x _Делает распечатку пакета в шестнадцатеричной системе, полезно для более детального анализа пакета. Количество отображаемых данных зависит от параметра -s_
|
|||
|
-xx _То же, что и предыдущий параметр -x, но включает в себя заголовок канального уровня_
|
|||
|
-X _Выводит пакет в ASCII- и hex-формате. Полезно в случае анализа инцидента связанного со взломом, так как позволяет просмотреть какая текстовая информация передавалась во время соединения._
|
|||
|
-XX _То же, что и предыдущий параметр -X, но включает заголовок канального уровня._
|
|||
|
-с _число. tcpdump завершит работу после получения указанного числа пакетов._
|
|||
|
-U _Собранные пакеты будут сразу складываться в файл, а иначе копиться в памяти до тех пор, пока она не закончится_
|
|||
|
|
|||
|
**Фильтры tcpdump**
|
|||
|
Фильтры разделяются на следующие классификации
|
|||
|
|
|||
|
Тип
|
|||
|
host — _адрес узла сети_
|
|||
|
port – _порт на котором нужно ловить пакеты_
|
|||
|
portrange – _диапазон портов_
|
|||
|
net – _сеть_
|
|||
|
_пример_
|
|||
|
```bash
|
|||
|
tcpdump net 192.168.0.0/24
|
|||
|
```
|
|||
|
_захват всего трафика в котором в качестве источника или получателя стоят ip адреса из сети 192.168.0.0/24_
|
|||
|
```bash
|
|||
|
tcpdump port 80
|
|||
|
```
|
|||
|
_Будет захватываться весь трафик на 80-м порту._
|
|||
|
Направление трафика по отношению к объекту мониторинга
|
|||
|
src – _отправитель_
|
|||
|
dst — _получатель_
|
|||
|
_например команда_
|
|||
|
```bash
|
|||
|
src host 172.31.25.200
|
|||
|
```
|
|||
|
_Захват трафика у которого отправитель ip адрес 172.31.25.200_
|
|||
|
|
|||
|
Протокол
|
|||
|
ether – _базовая сетевая технология Ethernet, как правило указывает на то что в фильтре используется аппаратный MAC адрес_
|
|||
|
ip – _протокол IPv4_
|
|||
|
ip6 – _протокол IPv6_
|
|||
|
arp – _протокол ARP_
|
|||
|
tcp – _протокол TCP_
|
|||
|
udp – _протокол UDP_
|
|||
|
_Если протокол не указан, то будет захвачен трафик по всем протоколам_
|
|||
|
_Например команда_
|
|||
|
```bash
|
|||
|
udp port 5060
|
|||
|
```
|
|||
|
_захват трафика по протоколу udp порт 5060_
|
|||
|
|
|||
|
Составные фильтры
|
|||
|
_Для того что бы более гибко фильтровать трафик можно использовать логические операции_
|
|||
|
«И» – _and (&&)_
|
|||
|
«ИЛИ» – _or (||)_
|
|||
|
«НЕ» – _not (!) – инверсия значения_
|
|||
|
|
|||
|
При этом приоритет этих операций следующий:
|
|||
|
наивысшим приоритетом обладает операция инверсии
|
|||
|
потом логическое «И»
|
|||
|
наименьшим приоритетом обладает операция «ИЛИ».
|
|||
|
|
|||
|
Приоритет операций можно менять с помощью круглых скобок.
|
|||
|
`(net 172.16.0.0/24 or host 172.31.0.5) and tcp port 80`
|
|||
|
_захват трафика протокола TCP и использующего порт 80 принадлежащего сети 172.16.0.0/24 или хосту 172.31.0.5, как любому хосту по отдельности так и вместе_
|
|||
|
`(net 172.16.0.0/24 || host 172.31.0.5) && not tcp port 80`
|
|||
|
_захват любого трафика кроме трафика протокола TCP и использующего порт 80 принадлежащего сети 172.16.0.0/24 или хосту 172.31.0.5 как любому хосту по отдельности так и вместе_
|
|||
|
|
|||
|
**Фильтры tcpdump со смещением, пример**
|
|||
|
Отфильтровать все UDP внутри GRE по смещению
|
|||
|
Отсчет ведется в байтах начиная от внешнего заголовка IP пакета, отсчет идет с 0, т.е. `ip[0]` это поле версии протокола, обычно это `0x45`
|
|||
|
```
|
|||
|
sniff(offline="erspan.pcap", filter="ip[71] == 0x11")
|
|||
|
```
|
|||
|
71 - смещение
|
|||
|
0x11 - 17 в hex, т.е. UDP
|
|||
|
Смещение не обязательно считать от IP заголовка, можно и от других
|
|||
|
|
|||
|
**tcpdump linux примеры**
|
|||
|
Запись вывода в файл
|
|||
|
```bash
|
|||
|
$ sudo tcpdump -w sshtrace.tcpdump tcp port 22
|
|||
|
```
|
|||
|
_Файл sshtrace.tcpdump будет по-умолчанию создан в домашнем каталоге текущего пользователя. Для вывода информации из файла myrouter.tcpdump следует использовать опцию -r:_
|
|||
|
```bash
|
|||
|
$ tcpdump -r sshtrace.tcpdump
|
|||
|
```
|
|||
|
Снять весь трафик с интерфейса eth1
|
|||
|
```bash
|
|||
|
$ tcpdump –i eth1
|
|||
|
```
|
|||
|
Снять трафик с диапазона портов на интерфейсе eth1
|
|||
|
```bash
|
|||
|
$ tcpdump -i eth1 portrange 100-200
|
|||
|
```
|
|||
|
весь трафик, идущий к 172.16.0.1, который не является ICMP.
|
|||
|
```bash
|
|||
|
tcpdump dst 172.16.0.1 and not icmp
|
|||
|
```
|
|||
|
Ловим весь входящий трафик, исключая трафик генерируемый нашей SSH-сессией.
|
|||
|
```bash
|
|||
|
$ tcpdump -i eth0 -n -nn -ttt 'dst host 172.16.0.10 and not (src host 172.16.0.11 and dst port 22)'
|
|||
|
```
|