notes/tcpdump.md

156 lines
12 KiB
Markdown
Raw Normal View History

2022-05-07 22:12:11 +03:00
### 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)'
```