Wireshark для всех. лайфхаки на каждый день
Содержание:
- Фильтры
- Установка и настройка
- Фильтры отображения
- Использование фильтров в Wireshark
- Настройка Wireshark
- Знакомимся с фильтрами
- Начало работы
- Как захватить пакеты данных
- Как пользоваться Wireshark
- Перехват SSL-контента
- Wireshark
- Возможности программы
- The slice operator
- capinfos
- Анализируем трафик с удаленных хостов
- Первый запуск и начало работы с программой
- Использование фильтров Wireshark
- Расшифровка беспроводного трафика
- Bit field operations
- Со временем приходит опыт
- Практические примеры
Фильтры
Выбор интерфейса для захвата
$ sudo tshark -D 1. eth0 2. any 3. lo (Loopback) 4. nflog 5. nfqueue 6. usbmon1
$ sudo tshark -i eth0
$ sudo tshark -i eth0 host 192.168.1.100
$ sudo tshark -i eth0 src host 192.168.1.100
$ sudo tshark -i eth0 dst host 192.168.1.100
$ sudo tshark -i eth0 src net 192.168.1.0/24
$ sudo tshark -i eth0 host 192.168.1.1 and port 80
$ sudo tshark -i eth0 -a duration:10 -w traffic.pcap
Фильтры чтения
$ sudo tshark -R "правило" -r "путь к файлу"
$ sudo tshark -R "ip.addr == 192.168.0.1" -r /tmp/capture.cap
$ sudo tshark -R "!(ip.addr == 192.168.0.1)" -r /tmp/capture.cap
$ sudo tshark -R "eth.addr == 00:08:15:00:08:15" -r /tmp/capture.cap $ sudo tshark -R "udp.port == 80" -r /tmp/capture.cap $ sudo tshark -R "tcp.port == 80" -r /tmp/capture.cap
$ sudo tshark -R "not arp and not (udp.port == 53)" -r /tmp/capture.cap
Установка и настройка
Скачать Wireshark можно с официального сайта разработчика. Программа совершенно бесплатна
Стоит обратить внимание на то, что последняя версия (2.0.5) не работает с Wi-Fi адаптерами. Поэтому, если вам нужно анализировать трафик беспроводного соединения, следует скачать более старую версию
Установка утилиты стандартна и не вызовет никаких проблем даже у новичков. В инсталляторе все понятно, хоть он и на английском. Кстати, Wireshark на русском языке в природе не существует, поэтому для того, чтобы успешно справляться с этим софтом придется напрячь память и вспомнить английский. В принципе, для простого захвата и просмотра TCP пакетов ничего сверхъестественного не понадобится. Хватит и школьного уровня английского.
Итак, первое, что мы видим после запуска установленной программы – главное окно. Для неподготовленного пользователя оно может показаться непонятным и страшным.
Ничего страшного в нем нет. В этом вы сейчас убедитесь. Для начала работы нужно сначала выбрать источник, из которого будет производиться захват TCP пакетов. Перехват может осуществляться как с Ethernet подключения, так и с WLAN адаптера. В качестве примера рассмотрим вариант с WLAN. Для настройки нужно зайти в пункт «Capture», подпункт «Options». В открывшемся окне следует выбрать ваш беспроводной адаптер и отметить его галочкой. Для начала захвата трафика достаточно нажать кнопку «Start».
После нажатия «Start» начнется анализ и захват пакетов. В окне появится много непонятных букв и цифр. Некоторые из пакетов имеют собственную цветовую маркировку. Для того, чтобы хоть что-то понять, нужно определить какой цвет к чему относится. Зеленый – TCP трафик, темно-синий – DNS, светло-синий – UDP и черный – пакеты TCP с ошибками. Теперь разобраться в этой горе данных проще.
Для остановки процесса перехвата достаточно нажать кнопку «Stop», которая помечена красным прямоугольником. Теперь можно выбрать интересующий вас пакет и просмотреть его. Для этого нужно щелкнуть по пакету правой клавишей мыши и в появившемся меню выбрать пункт «Show packet in new window». Тут же появится куча непонятных букв и цифр.
Но при углубленном изучении представленной информации можно понять, откуда и куда шел пакет и из чего он состоял. Для того чтобы просмотреть данные о TCP пакетах позднее, нужно использовать функцию сохранения захваченной информации. Она находится в пункте меню «File», подпункт «Save as». Потом можно будет загрузить информацию из файла и спокойно просмотреть ее.
Фильтры отображения
Примеры:
tcp.port eq 25 or icmp
Показывать только трафик из локальной сети (192.168.x.x) между рабочими станциями и серверами без интернет-трафика:
ip.src==192.168.0.0/16 and ip.dst==192.168.0.0/16
tcp.window_size == 0 && tcp.flags.reset != 1
Показывать только HTTP-запросы, в которых символы в конце строки запроса совпадают со строкой «gl=se»:
http.request.uri matches "gl=se$"
Примечание: Символ $ является пунктуационным символом PCRE, который обозначает окончание строки, а в данном случае окончание поля http.request.uri. |
Фильтрация по протоколу (т.е. SIP) и фильтрация нежелательных IP-адресов:
ip.src != xxx.xxx.xxx.xxx && ip.dst != xxx.xxx.xxx.xxx && sip
Использование фильтров в Wireshark
Некоторые люди считают искусство захвата и интерпретации пакетов, передающихся по сети таким же сакральным знанием, как чтение матрицы из одноименного фильма, но вам не нужно быть новым Нео для того, чтобы иметь возможность исследовать сетевой поток. Мощным союзником в этой миссии является Wireshark — программный инструмент для анализа сетевого трафика (описание программы Wireshark вы найдете в предыдущей статье того же автора).
Wireshark сочетает в себе несколько инструментов. Вы можете использовать эту программу для анализа структуры вашей беспроводной сети и поиска возможных ошибок в ее конфигурации. Она может идентифицировать множество типов инкапсуляции, при этом разделить и показать все поля, из которых состоит сетевой пакет. Она также работает как сниффер пакетов аналогично программе tcpdump.
Учитывая мощные возможности Wireshark, можно подумать, что будет сложно обучиться использовать эту программу. В каком-то смысле это так, но вы можете без лишних усилий разобраться с тем, как использовать часть фильтров из комплекта поставки программы, и сконцентрироваться на исследовании интересующих клиентов и видов трафика. В этой статье я продемонстрирую ряд вариантов использования Wireshark для облегчения ваших поисков.
Когда я говорю «фильтры», я имею в виду Фильтры Пакетов Беркли (Berkeley Packet Filters (BPF)). На самом деле BPF является микроязыком программирования (содержащим мнемоники на ассемблере!), выражения которого компилируются и выполняются в отношении пакетов, обрабатываемых такими программами, как tcpdump и Wireshark. Фильтры просто необходимы в том случае, когда вам хочется отделить небольшую часть пакетов из сотен тысяч пакетов, передающихся по сети с предельной скоростью 100 Мбит/с
Выражения фильтров компилируются, поэтому обработка пакетов происходит с максимально возможной скоростью, что очень важно при осуществлении захвата в реальном времени.
Фильтры в Wireshark достаточно просто использовать. Вам необходимо знать только названия полей для каждого протокола, такие, как http, icmp и ftp
Например, если вы хотите, чтобы были показаны только пакеты ICMP, вы можете просто написать icmp в строке фильтра в главном окне Wireshark. Если вы хотите выделить все пакеты, идущие в обоих направлениях относительно узла с адресом, к примеру, 10.100.1.1, выражение фильтра будет записано в форме ip.dst == 10.100.1.1 || ip.src == 10.100.1.1, что расшифровывается как указание показывать только те пакеты, поле адреса назначения (ip.dst) или (||) поле адреса источника (ip.src) IP-протокола для которых соответствует (==) 10.100.1.1.
Настройка Wireshark
Общие параметры самого приложения WIreshark находятся во вкладке Edit->Preferences. Их можно настроить в зависимости от своих потребностей или предпочтений, но я бы, на стадии знакомства с программой, не рекомендовал туда лезть. С опытом использования программы и работы с трафиком понимание что тебе нужно подкрутить для удобства придет само, а потому просто кратко перечислим какие здесь есть разделы:
- Appearance (Внешний вид). Грубо говоря здесь определяется внешний вид программы: положение окон, расположение основных панелей, расположение полосы прокрутки и столбцов в панели Packet List, шрифты, а также цвета фона и шрифтов.
- Capture (Перехват). В этом разделе можно настроить порядок перехвата пакетов, в том числе стандартный интерфейс для перехвата, параметры обновления панели Packet List в реальном времени.
- Filter Expressions (Фильтрующие выражения). Здесь можно создавать фильтры сетевого трафика и управлять ими. Этот момент мы обсудим отдельно.
- Name Resolution (Преобразование имен). В этом разделе активируются средства Wireshark, позволяющие преобразовывать адреса в имена, более удобные для понимания, в том числе адреса канального, сетевого и транспортного уровня, а также можно указывать максимальное количество параллельных запросов на преобразование имен.
- Protocols (Протоколы). В этом разделе находятся параметры, влияющие на перехват и отображение различных пакетов, которые Wireshark может декодировать. Правда настраивать параметры можно далеко не для всех протоколов, да и в большинстве случаев, без острой на то необходимости менять здесь ничего не надо.
- Statistics (Статистика). Название раздела говорит само за себя, здесь находятся параметры отображения и ведения статистики.
- Advanced (Продвинутый). Параметры которые не вошли не в одну из перечисленных категорий, либо предназначены для более тонкой настройки функционала. Вот сюда точно лезть не нужно.
Если ты планируешь в большей мере работать с трафиком беспроводных сетей, то есть смысл немного кастомизировать рабочие области Wireshark для большего удобства, а именно добавить несколько дополнительных столбцов, информация из которых поможет значительно сэкономить время.
Перейдем в Edit->Preferences и во вкладке Appearance выберем раздел Columns, здесь жмем на плюсик и добавляем такие колонки, с такими параметрами:
- Title: Channel, Type: Custom, Fields: wlan_radio.channel – будет показывать нам канал в котором перехвачен пакет;
- Title: Signal Strenght, Type: Custom, Fields: wlan_radio.signal_dbm – покажет мощность сигнала в канале в момент перехвата пакета.
Знакомимся с фильтрами
Wireshark поддерживает два вида фильтров:
- перехвата трафика (capture filters);
- отображения (display filters).
Первая подсистема досталась Wireshark в наследство от библиотеки Pcap, обеспечивающей низкоуровневый API для работы с сетевыми интерфейсами. Выборка трафика на лету во время перехвата позволяет экономить оперативную память и место на жестком диске. Фильтр представляет собой выражение, состоящее из группы примитивов, при необходимости объединенных логическими функциями (and, or, not). Записывается это выражение в поле «Capture Filter» диалогового окна «Capture options». Наиболее употребляемые фильтры можно сохранять в профиле для повторного использования (рис. 1).
Рис. 1. Профиль фильтров перехвата
Другие статьи в выпуске:
Хакер #170. Малварь для OS X
- Содержание выпуска
- Подписка на «Хакер»
Язык фильтров перехвата стандартный для мира Open Source и используется многими Pcap-основанными продуктами (например, утилитой tcpdump или системой обнаружения/предотвращения вторжений Snort). Поэтому описывать синтаксис здесь нет особого смысла, так как он тебе, скорее всего, знаком. А детали можно посмотреть в документации, например в Linux на странице справочного руководства pcap-filter(7).
Фильтры отображения работают с уже перехваченным трафиком и являются «родными» для Wireshark. Отличия от Pcap — в формате записи (в частности, в качестве разделителя полей используется точка); также добавлены английская нотация в операциях сравнения и поддержка подстрок.
Вписать фильтр отображения можно прямо в соответствующее поле (внимание, работает выпадающий список-подсказка) главного окна программы после кнопки «Filter» (кстати, под этой кнопкой скрывается профиль для часто используемых выражений). А если кликнуть расположенную неподалеку кнопку «Expression…», то откроется многофункциональный конструктор выражений (рис
2).
Рис. 2. Конструктор фильтров отображения
Слева (Field Name) представлено упорядоченное по алфавиту дерево полей сообщений протоколов, которые известны Wireshark. Для данного поля можно указать логический оператор (Relation), вписать значение (Value), указать диапазон (Range) или выбрать значение из списка (Predefined Value). В общем, полная сетевая энциклопедия в одном окошке.
Вот логические операторы, используемые в фильтрах отображения:
- and (&&) — «И»;
- or (||) — «ИЛИ»;
- xor (^^) — исключающее «ИЛИ»;
- not (!) — отрицание;
- — выборка подстроки. # Фильтруя по MAC-адресу своего сетевого адаптера, исключаем весь локальный трафик not (eth.addr eq aa:bb:cc:22:33:44) # О, чтобы сконцентрироваться на интересующем нас трафике !(arp or icmp or dns)
Что касается выборки подстроки, то это не совсем логическая операция, но весьма полезная опция. Она позволяет получить определенную часть последовательности. Например, так можно использовать в выражении первые (первое число в квадратных скобках — смещение) три байта (число после двоеточия — длина подпоследовательности) поля MAC-адреса источника:
eth.src == 00:19:5b
В выборках с двоеточием один из параметров можно опускать. Если пропустить смещение, то отсчет выборки начнется с нулевого байта. Если длину — то получим все байты от смещения до конца поля.
К слову, выборку подстроки удобно использовать для выявления малвари в случае, если известна последовательность байт, идущая после заголовка (например, «0x90, 0x90, 0x90, 0x04» в UDP-пакете):
udp == 90:90:90:04
Операции сравнения, используемые в логических выражениях:
- eq (==) — равно;
- ne (!=) — не равно;
- gt (>) — больше;
- lt (<) — меньше;
- ge (>=) — больше или равно;
- le (<=) — меньше или равно.tcp.dstport ne 8080 && tcp.len gt 0 && data eq A0
Собственно, теории для начала достаточно. Дальше используй здравый смысл и скобки по необходимости и без нее. Также не забывай, что фильтр по сути — логическое выражение: если оно истинно, то пакет отобразится на экране, если ложно — нет.
Начало работы
$ sudo apt-get install tshark
$ sudo tshark
Capturing on eth0 0.000000 88:e0:f3:b6:47:c0 -> Broadcast ARP Who has 31.186.98.120? Tell 31.186.98.1 0.322046 5a:58:74:bf:a9:9c -> Broadcast ARP Who has 31.186.98.77? Tell 31.186.98.226 0.351801 31.186.98.235 -> 188.93.16.50 SSH Encrypted response packet len=224 0.352414 188.93.16.50 -> 31.186.98.235 TCP cap > ssh Seq=1 Ack=225 Win=331 Len=0 TSV=194287231 TSER=416767897 0.600054 88:e0:f3:b6:47:c0 -> Broadcast ARP Who has 31.186.98.120? Tell 31.186.98.1 0.622913 Cisco_0d:0d:96 -> PVST+ STP Conf. Root = 32768/398/00:21:1c:0d:0d:80 Cost = 0 Port = 0×8016 0.800377 88:e0:f3:b6:47:c0 -> Broadcast ARP Who has 31.186.98.107? Tell 31.186.98.1 1.320775 31.186.98.235 -> 188.93.16.50 SSH Encrypted response packet len=528 1.321507 188.93.16.50 -> 31.186.98.235 TCP cap > ssh Seq=1 Ack=753 Win=331 Len=0 TSV=194287474 TSER=416768866 1.322109 5a:58:74:bf:a9:9c -> Broadcast ARP Who has 31.186.98.77? Tell 31.186.98.226 1.400654 88:e0:f3:b6:47:c0 -> Broadcast ARP Who has 31.186.98.107? Tell 31.186.98.1 1.589797 Cisco_0d:0d:96 -> PVST+ STP Conf. Root = 32768/401/00:21:1c:0d:0d:80 Cost = 0 Port = 0×8016 2.100769 88:e0:f3:b6:47:c0 -> Broadcast ARP Who has 31.186.98.107? Tell 31.186.98.1 2.322163 5a:58:74:bf:a9:9c -> Broadcast ARP Who has 31.186.98.77? Tell 31.186.98.226 2.322764 31.186.98.235 -> 188.93.16.50 SSH Encrypted response packet len=720 2.323594 188.93.16.50 -> 31.186.98.235 TCP cap > ssh Seq=1 Ack=1473 Win=331 Len=0 TSV=194287724 TSER=416769868 2.520048 88:e0:f3:b6:47:c0 -> Broadcast ARP Who has 31.186.98.64? Tell 31.186.98.1 2.635370 Cisco_0d:0d:96 -> PVST+ STP Conf. Root = 32768/398/00:21:1c:0d:0d:80 Cost = 0 Port = 0×8016 3.200299 88:e0:f3:b6:47:c0 -> Broadcast ARP Who has 31.186.98.64? Tell 31.186.98.1 3.451774 31.186.98.235 -> 188.93.16.50 SSH Encrypted response packet len=528
Как захватить пакеты данных
Когда вы впервые запускаете Wireshark, появляется экран приветствия, содержащий список доступных сетевых подключений на вашем текущем устройстве. В этом примере вы заметите, что отображаются следующие типы соединений: Bluetooth Network Connection, Ethernet, VirtualBox Host-Only Network и Wi-Fi. Справа от каждого отображается линейный граф в стиле EKG, который представляет прямой трафик в соответствующей сети.
Чтобы начать сбор пакетов, выберите одну или несколько сетей, нажав на свой выбор и используя сдвиг или же Ctrl если вы хотите записывать данные из нескольких сетей одновременно. После того, как тип соединения выбран для целей захвата, его фон затенен либо синим, либо серым. Нажмите на Захватить в главном меню, расположенном в верхней части интерфейса Wireshark. Когда появится раскрывающееся меню, выберите Начните вариант.
Вы также можете инициировать захват пакетов с помощью одной из следующих ярлыков.
- Клавиатура: ПрессаCtrl + E.
- Мышь: Чтобы начать захват пакетов из одной конкретной сети, дважды щелкните его имя.
- Панель инструментов: Нажмите на синюю кнопку плавника акулы, расположенную на левой стороне панели инструментов Wireshark.
Процесс записи в реальном времени начинается, и Wireshark отображает данные пакета по мере их записи. Остановить захват:
- Клавиатура: Нажмите Ctrl + Е
- Панель инструментов: Нажмите на красный Стоп расположенной рядом с плавником акулы на панели инструментов Wireshark.
Как пользоваться Wireshark
Итак, для запуска программы потребуются права доступа типа ROOT, ибо только с такими правами можно получить полный доступ ко всем сетевым интерфейсам. Сам старт программы можно произвести как в обычном режиме, так и из командной строки.
Очень многие системные администраторы рекомендуют использовать именно командную строку, но только с изменением команды запуска путем добавления команды gksu перед самой командой wireshark.
После этого можно запускать основное приложение.
После старта программы появится окно, в котором необходимо ввести логин и пароль с подтверждением доступа.
Перехват SSL-контента
Настоящий бич исследователя сетевого трафика — шифрование. Но если у тебя есть заветный файл с сертификатом (кстати, беречь его нужно как зеницу ока), то ты легко сможешь узнать, что прячут пользователи данного ресурса в SSL-сессиях. Для этого нужно указать параметры сервера и файл сертификата в настройках протокола SSL (пункт «Preferences» меню «Edit», слева в списке протоколов выбрать SSL). Поддерживаются форматы PKCS12 и PEM. В последнем случае нужно убрать пароль с файла командами:
openssl pkcs12 -export -in server.pem -out aa.pfx openssl pkcs12 -in aa.pfx -out serverNoPass.pem –nodes
Wireshark
Программа Wireshark (ранее программа была известна под названием Ethereal) стала стандартом де-факто при исследовании сетей и анализе протоколов среди приложений с открытым исходным кодом. Она предоставляет возможность проводить низкоуровневую фильтрацию пакетов и их анализ. Файлы с захваченными данными из сети (trace files) могут быть открыты в Wireshark и рассмотрены вплоть до каждого пакета.
Некоторые примеры использования программы Wireshark:
- Администраторы сетей используют ее для выявления причин неполадок в сетях.
- Специалисты по безопасности сетей используют ее для поиска проблем с безопасностью.
- Разработчики используют ее для отладки реализаций протоколов.
- Пользователи используют ее для изучения принципов работы сетевых протоколов.
Помимо этих примеров, Wireshark может помочь и в других ситуациях.
Установочные пакеты Wireshark доступны в официальном репозитории Ubuntu 10.04 (пакеты доступны также для более поздних версий Ubuntu и других популярных дистрибутивов — прим.пер.), поэтому для установки потребуется всего лишь использовать команду:sudo aptitude install wireshark.
После запуска программы вы увидите на экране главное окно программы:
Под заголовком «Interface List» вы должны увидеть список всех сетевых интерфейсов вашей системы, для начала захвата пакетов достаточно просто выбрать интересующий вас интерфейс при помощи клика, после чего вы увидите пакеты, проходящие через интерфейс в новом окне.
Очень частой проблемой при работе со стандартными настройками является то обстоятельство, что пользователю предоставляется огромный объем информации, а интересующую информацию становится очень сложно найти.
Большой объем информации уводит из поля зрения нужную информацию.
По этой причине фильтры так важны, ведь они могут помочь нам с поиском необходимой информации в обширном журнале данных:
- Фильтры захвата: используются для указания на то, какие данные должны записываться в журнал данных. Эти фильтры задаются до начала захвата данных.
- Фильтры отображения: используются для поиска внутри журнала данных. Эти фильтры могут быть изменены в процессе захвата данных.
Так что же использовать: фильтры захвата или фильтры отображения?
Задачи этих фильтров отличаются.
Фильтр захвата используется в первую очередь для сокращения объема захваченных данных с целью предотвращения чрезмерного увеличения в объеме журнала данных.
Фильтр отображения является более мощным (и сложным); он позволяет вам искать именно те данные, которые вам необходимы.
Возможности программы
Рассмотрим возможности программы более подробно. В верхней панели по умолчанию выводится 6 колонок – номера пакета в списке собранных, временная метка, адреса и номера портов отправителя и получателя, тип протокола и краткое описание пакета. Выбрав необходимый пакет из списка, содержащейся в верхней панели, мы можем просмотреть содержимое средней панели. В ней представлено дерево протоколов для пакета. Дерево отображает каждое поле и его значение для заголовков всех протоколов стека:
С помощью программы Wireshark Вы можете контролировать пакеты, проходящие по протоколу НТТР. Приведем пример вычисления имени пользователя и пароля при входе в почту. Для этого необходимо предварительно произвести процедуру входа в почтовый ящик и запуск программы в режиме захвата пакетов сообщений. После этого для удобства желательно произвести сортировку по протоколам при помощи нажатия на колонку Protocol. Далее, выбрав любой пакет, у которого установлено значение Protocol — НТТР, кликнуть правую кнопку мыши, в контекстном меню нажать Conversation filter>IP, тем самым выбрав фильтрацию списка пакетов только данного перечня адресов отправителя и получателя:
Далее возможно отфильтровать пакеты сообщений, выбрав только пакеты протокола НТТР – для этого выберем любой пакет протокола НТТР и кликнем правую кнопку мыши и в контекстном меню выберем Conversation filter>Ethernet. Теперь у нас в верхнем окне остались только пакеты протокола НТТР. Для оптимизации поиска нужного пакета, воспользуемся пунктом главного меню Edit>Find Packet:
В появившемся диалоговом окне выбираем Find by string и указываем название строки с адресом страницы почтового ящика:
С помощью системы поиска проверяем пакеты, соответствующие адресации и в дереве протоколов находим в ветви Line-based text data значения Login, Domain, Password.
Wireshark предоставляет возможность пользователю сохранять файлы данных (изображения, CSS и др.) на жесткий диск из просмотренных ранее страниц в Интернете. Для этого необходимо в главном меню программы выбрать File>Export>Objects>HTTP:
В появившемся списке НТТР object list выбираем необходимый файл и нажимаем Save As:
Далее программа предложит нам выбрать путь для сохранения файла на диск:
The slice operator
You can take a slice of a field if the field is a text string or a byte array. For example, you can filter on the vendor portion of an ethernet address (the first three bytes) like this:
Another example is:
You can use the slice operator on a protocol name, too. The «frame» protocol can be useful, encompassing all the data captured by Wireshark or TShark.
The following syntax governs slices:
Offsets can be negative, in which case they indicate the offset from the end of the field. The last byte of the field is at offset -1, the last but one byte is at offset -2, and so on. Here’s how to check the last four bytes of a frame:
or
A slice is always compared against either a string or a byte sequence. As a special case, when the slice is only 1 byte wide, you can compare it against a hex integer that 0xff or less (which means it fits inside one byte). This is not allowed for byte sequences greater than one byte, because then one would need to specify the endianness of the multi-byte integer. Also, this is not allowed for decimal numbers, since they would be confused with hex numbers that are already allowed as byte strings. Nevertheless, single-byte hex integers can be convenient:
Slices can be combined. You can concatenate them using the comma operator:
This concatenates offset 1, offsets 3-5, and offset 9 to the end of the ftp data.
capinfos
В комплекте с Wireshark поставляется удобный инструмент командной строки . Эта утилита генерирует статистику пакетного дампа, с временем начала/окончания записи и другими подробностями. С опцией она выдаёт текст с табуляцией — он подходит для импорта в электронные таблицы или анализа в консоли.
test@ubuntu:~$ capinfos test.pcap File name: test.pcap File type: Wireshark/tcpdump/... - pcap File encapsulation: Ethernet File timestamp precision: microseconds (6) Packet size limit: file hdr: 262144 bytes Number of packets: 341 k File size: 449 MB Data size: 444 MB Capture duration: 3673.413779 seconds First packet time: 2018-12-01 11:26:53.521929 Last packet time: 2018-12-01 12:28:06.935708 Data byte rate: 120 kBps Data bit rate: 967 kbps Average packet size: 1300.72 bytes Average packet rate: 93 packets/s SHA256: 989388128d676c329ccdbdec4ed221ab8ecffad81910a16f473ec2c2f54c5d6e RIPEMD160: 0742b6bbc79735e57904008d6064cce7eb95abc9 SHA1: d725b389bea044d6520470c8dab0de1598b01d89 Strict time order: True Number of interfaces in file: 1
Анализируем трафик с удаленных хостов
Пользователи Windows могут работать не только с интерфейсами того компьютера, на котором запущен Wireshark, но и снимать трафик с удаленных машин. Для этого существует специальная служба (Remote Packet Capture Protocol) в поставке библиотеки WinPcap. Ее нужно предварительно включить в оснастке управления службами (services.msc). Теперь, запустив Wireshark на удаленном компьютере, можно подключиться к тому узлу, на котором работает сервис удаленного перехвата трафика (по умолчанию использует порт 2002), и данные по протоколу RPCAP потекут к тебе рекой.
Также приведу варианты подключения к домашнему *nix-роутеру «извне» для удаленного анализа трафика:
$ ssh ‘tshark -f «port !22» -i any -w -‘ | wireshark -k -i — $ ssh tcpdump -U -s0 -w — ‘not port 22’ | wireshark -k -i —
Первый запуск и начало работы с программой
Для начала сборки перехваченных программой пакетов сообщений по сети, Вам необходимо выбрать пункт главного меню Capture>Interfaces или кнопку на верхней панели инструментов List the available capture interfaces – после этого на экране появится следующее диалоговое окно:
С помощью кнопки Options возможна установка желаемых параметров работы программы. Для того, чтобы начать процедура захвата, Вам необходимо нажать кнопку Start, после чего интерфейс программы примет следующий вид:
Как видно из изображения, подобно другим анализаторам протоколов, окно Wireshark включает в себя 3 области просмотра с различными уровнями детализации. Верхнее окно содержит список собранных пакетов с кратким описанием, в среднем окне показывается дерево протоколов, инкапсулированных в кадр. Ветви дерева могут быть раскрыты для повышения уровня детализации выбранного протокола. Последнее окно содержит дамп пакета в шестнадцатеричном или текстовом представлении. Программа Wireshark представляет пользователю ряд уникальных возможностей, не поддерживаемых другими анализаторами протоколов. Программа обеспечивает возможность сбора всех пакетов заданного соединения TCP и представления данных в удобном для просмотра формате.
Использование фильтров Wireshark
Одним из наиболее важных наборов функций в Wireshark является возможность фильтрации, особенно когда вы имеете дело с файлами, имеющими значительный размер. Фильтры захвата можно установить перед фактом, указав Wireshark только запись тех пакетов, которые соответствуют вашим указанным критериям.
Фильтры также могут быть применены к уже созданному файлу захвата, чтобы были показаны только определенные пакеты. Они называются фильтрами отображения.
По умолчанию Wireshark предоставляет большое количество предопределенных фильтров, позволяя сузить количество видимых пакетов всего несколькими нажатиями клавиш или щелчками мыши. Чтобы использовать один из этих существующих фильтров, поместите свое имя в Применить фильтр отображения поле ввода, расположенное непосредственно под панелью инструментов Wireshark или в Введите фильтр захвата поле ввода, расположенное в центре экрана приветствия.
Существует несколько способов достижения этого. Если вы уже знаете имя своего фильтра, введите его в соответствующее поле. Например, если вы хотите отображать только TCP-пакеты, вы вводите ТСР, Функция автозаполнения Wireshark показывает предлагаемые имена при вводе текста, что упрощает поиск правильного прозвища для фильтра, который вы ищете.
Другой способ выбрать фильтр — щелкнуть значок закладки, расположенный в левой части поля ввода. Это представляет собой меню, содержащее некоторые из наиболее часто используемых фильтров, а также возможность Управление фильтрами захвата или же Управление отображаемыми фильтрами, Если вы решите управлять любым типом, появится интерфейс, позволяющий добавлять, удалять или редактировать фильтры.
Вы также можете получить доступ к ранее использованным фильтрам, выбрав стрелку вниз в правой части поля ввода, чтобы отобразить раскрывающийся список истории.
После установки фильтры захвата применяются, как только вы начинаете запись сетевого трафика. Чтобы применить фильтр отображения, нажмите кнопку со стрелкой в правой части поля ввода.
Расшифровка беспроводного трафика
Когда мы запустили захват трафика на интерфейсе wlan0mon ты наверняка обратил внимание, что в Packet List отображается всё что угодно кроме того что нужно, а именно из полезной информации там можно найти только название сети (SSID) и MAC адреса (на самом деле кое-что ещё есть), а какой-нибудь интересной информации нет, от слова “совсем”. На самом деле она есть, просто она зашифрована
Почему так? Ответ банален – потому что трафик шифруется. Соответственно надо его расшифровать, а для этого надо понимать некоторые процессы которые происходят в wi-fi сетях.
При передаче данных по wi-fi трафик шифруется с использованием ключа PTK (Pairwise Transient Key). При этом этот ключ динамичный, то есть создаётся заново для каждого нового соединения, а соответственно трафик для каждого соединения в одной и той же сети зашифрован разными PTK. Когда какой-нибудь клиент переподключается, то и PTK тоже меняется. Что бы этот самый PTK узнать необходимо перехватить четырёх этапное рукопожатие, ну и знать пароль, имя (SSID) wi-fi сети и канал на котором она работает. Как узнать пароль wi-fi сети я статью уже писал, поэтому примем за аксиому что он у тебя есть, а SSID и канал мы и так видим в Wireshark, вопрос остаётся только в PTK. Соответственно нужно перехватить рукопожатие и не какое-нибудь, а именно то которое произошло между интересующим нас клиентом и точкой доступа непосредственно перед обменом интересующей нас информацией. Так как наш адаптер уже в режиме мониторинга, а необходимые нам данные мы видим в Packet Details при нажатии на пакет из интересующей нас сети:
То сразу открываем терминал и запускаем перехват рукопожатия:
ждать повторных подключений мы не будем, поэтому помогаем отключится всем устройствам в сети:
и спустя небольшой промежуток времени видим в правом верхнем углу нашего терминала появилась надпись: WPA handshake
это означает, что рукопожатие мы получили, а значит успех близок. Вернемся в Wireshark.
В Filter Toolbar нужно написать:
Это необходимо что бы убедится что рукопожатие действительно у нас, если это так – можем продолжать. Теперь сделаем то, что я чуть раньше предупреждал не делать, а именно поменяем настройки протоколов. Идём Edit-> Preferences и выбираем вкладку Protocols, в ней нам надо найти IEEE 802.11 и поставить галку Enable decryption после чего нажать Edit
в появившемся окне жмём “+” и там где Key type выбрать wpa-pwd, а там где Key нужно ввести через двоеточие “пароль:имя сети”, потом нажать ОК и сохранить изменения в настройках протокола.
сразу после этого захваченный трафик будет расшифрован и начнет приобретать более вразумительный и понятный вид.
Bit field operations
It is also possible to define tests with bit field operations. Currently the following bit field operation is supported:
The bitwise AND operation allows testing to see if one or more bits are set. Bitwise AND operates on integer protocol fields and slices.
When testing for TCP SYN packets, you can write:
That expression will match all packets that contain a «tcp.flags» field with the 0x02 bit, i.e. the SYN bit, set.
Similarly, filtering for all WSP GET and extended GET methods is achieved with:
When using slices, the bit mask must be specified as a byte string, and it must have the same number of bytes as the slice itself, as in:
Со временем приходит опыт
После некоторого времени, проведенного за захватом разнообразного трафика, можно заменить какую-то шарообразную кнопку в нижнем левом углу, которая еще иногда меняет цвет.
Нажатие на эту кнопку приведет к открытию окна Expert Infos
. Того же результата можно добиться, пройдя в менюAnalyze – Expert Info .
В этом окне будет содержаться информация по найденным пакетам, разбитая на группы Errors, Warnings, Notes и Chats. Цветовая раскраска для этих групп выглядит следующим образом: Ошибки — красный цвет Предупреждения — желтый Примечания — сине-зелёный (cyan) Чат — серый
Wireshark содержит в себе мощный анализатор и умеет автоматически обнаруживать большое количество проблем, возникающих в сети. Как вы уже могли заметить, буквально везде можно использовать фильтры и Expert Info не является исключением. Для того чтобы создать такой фильтр, нужно использовать конструкцию expert.severity
. Например,expert.severity==error .
Практические примеры
Мониторинг http-запросов
$ sudo tshark 'tcp port 80 and (((ip - ((ip&0xf)<>2)) != 0)' -R 'http.request.method == "GET" || http.request.method == "HEAD"'
190.302141 192.168.0.199 -> 74.125.77.104 HTTP GET / HTTP/1.1 190.331454 192.168.0.199 -> 74.125.77.104 HTTP GET /intl/en_com/images/srpr/logo1w.png HTTP/1.1 190.353211 192.168.0.199 -> 74.125.77.104 HTTP GET /images/srpr/nav_logo13.png HTTP/1.1 190.400350 192.168.0.199 -> 74.125.77.100 HTTP GET /generate_204 HTTP/1.1
$ tshark -r sample1.cap -R http.request -T fields -e http.host -e http.request.uri | sed -e ‘s/?.*$//’ | sed -e ‘s#^(.*)t(.*)$#http://12#’ | sort | uniq -c | sort -rn | head
Просмотр списка HTTP-заголовков
$ tshark -r sample1.cap -R http.request -T fields -e http.host -e http.request.uri | sed -e ‘s/?.*$//’ | sed -e ‘s#^(.*)t(.*)$#http://12#’ | sort | uniq -c | sort -rn | head
$ sudo tshark tcp port 80 or tcp port 443 -V -R «http.request»
$ sudo tshark "tcp port 80 or tcp port 443" -V -R "http.request || http.response"
Просмотр списка файлов определенного типа
$ sudo tshark -R "http.response and http.content_type contains image" \ -z "proto,colinfo,http.content_length,http.content_length" \ -z "proto,colinfo,http.content_type,http.content_type" \ -r /tmp/capture.tmp| grep "image/gif"| wc -l
Мониторинг запросов к MySQL
$ sudo tshark -i eth0 -a duration:60 -d tcp.port==3306,mysql -T fields -e mysql.query ’port 3306′
$ sudo tcpdump -i eth0 port 3306 -s 1500 -w tcpdump.out
$ sudo tshark -r tcpdump.out -d tcp.port==3306,mysql -T fields -e mysql.query > query_log.out
$ sudo cat query_log.out | grep -v "^$" | grep -v "^commit" | grep -v "^SET autocommit" | grep -v "^rollback" > query_log_no_blank.out