Требуется научиться:
Предполагается, что вы знаете:
Изученное в ходе ЛР пригодится:
Примечание. В задании встречаются протоколы и инструменты, которые еще не изучались (traceroute, ICMP, UDP, TCP, DNS) — в таких местах даны краткие пояснения, а подробности будут рассмотрены на последующих занятиях.
Просмотрите параметры сетевого подключения через GUI (графический интерфейс).
Для этого дважды щелкните на значке сетевого подключения (на панели уведомлений в правом нижнем углу) и на вкладке «Поддержка» нажмите кнопку «Подробности…».
Выделите все строки таблицы и занесите в отчет.
Можно наблюдать:
mpei.ru
) в IP-адрес.Просмотрите параметры сетевого подключения через командную строку.
Для этого откройте командную строку (Пуск → Выполнить, ввести cmd
), в ней выполните команду:
ipconfig /all
Саму команду и ее вывод скопируйте и занесите в отчет.
Раздел «Настройка протокола IP для Windows» относится ко всей машине, а не к отдельным сетевым подключениям. В частности:
Далее следуют разделы, описывающие сетевые подключения (обычно одно). Убедитесь, что показания в таком разделе соответствуют полученным из GUI. Присутствует и настройка, через GUI невидимая: «автонастройка включена» — она означает, что в случае, когда адрес не задан статически, а DHCP-сервер недоступен, интерфейс получит специальный адрес автоматической конфигурации.
Проанализируйте полученные настройки.
Команда ping
позволяет направить узло специальные запросы, на которые тот должен ответить, чтобы подтвердить свою доступность.
В командной строке выполните:
ping mpei.ru
Сделайте то же самое для других адресов:
mos.ru
;lab.facelessmen.org
;Из показаний ping
сведите в таблицу: символьный адрес узла, его IP-адрес и среднее время отклика.
Выполните команду:
ping mpei.ru
Как можно видеть, на запросы ping
не получено ответов, потери 100 %. Это не означает, что узел недоступен (попробуйте зайти на сайт) — просто сервер или промежуточное устройство настроены не давать ответов на запросы, которые шлет ping
. Это делается для безопасности: ping
позволяет сканировать доступность узлов и сервисов на них, способен создать нагрузку на сервер.
Полезно бывает отследить маршрут (trace route) прохождения пакета до заданного узла. В Linux соответствующая программа называется traceroute
, в Windows — tracert
.
Выполните команду:
tracert lab.facelessmen.org
Занесите команду и ее вывод в отчет.
Можно наблюдать два факта:
Не для всех узлов можно получить символьное имя по IP. Если символьное имя и не нужно, у tracert
есть ключ -d
.
Не все пункты маршрута удается установить — как минимум, это узлы, настроенные не слать ответы на запросы tracert
, а некоторые узлы блокируют и чужие ответы (как правило, на границах защищенных сетей).
Как известно, пакеты направляются на адреса сетевого уровня, в типичном случае — на IP-адреса, а люди пользуются символьными именами, например, mpei.ru
. Разрешением (resolution, т. е. преобразованием) символьных имен в адреса занимается система доменных имен (Domain Name System — DNS). Сервер DNS содержит базу соответствия имен адресам; клиент запрашивает по протоколу DNS адрес для имени, сервер отвечает ему.
Выполните команду:
nslookup mpei.ru
Занесите команду и ее вывод в отчет.
«Non-authoritative answer» означает, что ответ дан не официальным сервером DNS, обслуживающим вышестоящую зону — в случае mpei.ru
, зону ru.
— а промежуточным сервером DNS. Это нормально. Промежуточные сервера кэшируют (запоминают) ответы вышестоящих, чтобы снизить на них нагрузку и отвечать быстрее.
Кэшируют ответы DNS не только сервера, но и клиенты, в том числе локальная машина. Обычно это ускоряет работу и потому удобно, но для лабораторной работы или при проблемах с DNS кэшированный ответ мешает понять, что происходит. Можно сбросить кэш специальной командой:
ipconfig /flushdns
Все проходящие через машину сетевые пакеты можно захватить (capture) и пристально изучить. Это радикальный способ отладки программ, исследования протоколов и отслеживания проблем.
Программа Wireshark позволяет как захватить сетевой трафик, так и с удобством просмотреть его, исследовать в разных разрезах, собрать статистику.
Примечание. В лаборатории установлена Wireshark 1.10 — последняя версия, поддерживающая Windows XP; новейшая версия Wireshark — 2.4 (на февраль 2018).
Исследуем, что происходит в сети при заходе на web-страницу.
На главной странице доступны ссылки на справку («Online» справа), список недавних файлов («Files» по центру) и главный интересующий нас раздел «Capture». По существу, в нем можно выбрать, с каких сетевых интерфейсов (например: кабельного подключения, Wi-Fi) и какие именно данные захватывать.
Откройте диалог «Capture options» и настройте захват пакетов, который относятся к заходу на web-страницу по основному сетевому интерфейсу.
В списке интерфейсов (вверху) отметьте тот, который исследовали в начале лабораторной работы.
В поле «Capture filter» введите выражение:
(tcp port 80) or (udp port 53) or icmp
Не закрывайте диалог.
Смысл фильтра захвата — отобрать только запрос страницы и ответ на него с собственно страницей (tcp port 80
), запросы и ответы DNS (udp port 53
), а также служебные сообщения ICMP (icmp
), появляющиеся при некоторых ошибках.
Откройте браузер. Если он уже открыт, закройте в нем все окна и вкладки, оставив единственную пустую.
В противном случае будут захвачены не только те пакеты, которые требуется исследовать, и придется дополнительно их фильтровать.
Очистите кэш браузера.
В лаборатории установлен Internet Explorer 8, где это делается из меню Сервис → Удалить журнал обозревателя… с обязательно установленной галочкой Временные файлы интернета.
Очистите кэш DNS.
В Wireshark запустите захват пакетов кнопкой «Start» диалога настройки захвата. Вне диалога это делалось бы кнопкой «Start capture».
В адресной строке браузера введите адрес:
lab.facelessmen.org
и нажмите выполните переход (нажмите Enter или кнопку).
В Wireshark должны появится два пакета DNS (выделяются голубым) и несколько пакетов HTTP (выделяются салатовым).
Рабочее окно Wireshark разделено на три области (сверху-вниз):
Список пакетов со столбцами их свойств и подсветкой в зависимости от типа.
Результат разбора пакета (dissection — термин Wireshark), то есть структурированное представление пакета, разобранного в соответствии с протоколами.
Содержимое пакета в виде байт в шестнадцатеричном виде (hex) и соответствующего им текста. Числа 0000
, 0010
и т. д. по левому краю — смещения от начала пакета в hex, то есть 0, 16 и т. д.
Области диссекции и содержимого пакета связаны. При выборе поля или уровня диссекции подсвечиваются соответствующие байты в содержимом. И наоборот — при щелчке на байте содержимого подсвечивается элемент диссекции, к которому этот байт относится.
Над списком пакетов есть поле фильтра, позволяющее дополнительно отобрать захваченные пакеты. В строке состояния внизу окна отображается общее число пакетов (packets) и количество отображаемых из них (displayed). Фильтр — логическое выражение, включающее свойства пакета. Список свойств можно увидеть в диалоге «Expression…» рядом с фильтром. Обратите внимание, что [синтаксис][wireshark/filter] этого фильтра (отображения) отличается от фильтра захвата: например, вместо tcp port 80
пишется tcp.port == 80
.
В списке пакетов отображаются их основные свойства:
В зависимости от задачи бывает полезно видеть и другие поля. Добавим столбцы с портами и будем отображать порты в числовом виде в сводке.
В диалоге Edit → Preferences… выберите раздел Columns.
Добавьте столбец с портом отправителя: внизу в выпадающем списке выберите Src port (unresolved) и нажмите Add, переименуйте столбец, щелкнув по его мени в таблице. Перетащите его мышью перед столбцом Protocol.
Сделайте то же самое для порта получателя Dest port (uresolved).
Перейдите в раздел Name resolution и снимите галочку Resolve transport names.
Закройте диалог кнопкой OK и убедитесь, что новые столбцы появились.
Вид времени прохождения можно менять в меню View → Time display format. Нужно понимать, что у Wireshark не всегда есть информация о том, в каком часовом поясе захвачен трафик (при анализе файлов — см. ниже), поэтому отображение абсолютного времени может быть со смещением.
Результаты разбора сгруппированы по протоколам и упорядочены по уровням от нижнего (L2, канального) к верхнему (L7, прикладному). Внутри уровней выделены поля данных. В квадратных скобках показываются косвенные показатели, которые в пакет непосредственно не записаны.
Рассмотрим пакет с ответом DNS («standard query response» в сводке). Уровни:
Frame — условный уровень, на котором Wireshark отображает сведения об интерфейсе, с которого был захвачен пакет, с времени захвата.
Ethernet II — канальный уровень (L2). Его свойств немного:
MAC-адреса отправителя (Src) и получателя (Dst). Они показаны как 6 байт в hex (так они записаны в пакете), а также с префиксом-названием производителя оборужования, потому что диапазоны адресов приписаны к ним.
Протокол следующего уровня (L3) в виде кода (так записано в пакете) и по названию (из справочника).
Internet Protocol Version 4 — сетевой уровень (L3), пакет IPv4. Среди его свойств есть IP-адрес отправителя (Src) и получателя (Dst). Можно убедиться, что они совпадают с собственным адресом машины и адресом сервера DNS, установленного в начале ЛР.
User Datagram Protocol — транспортный уровень (L4). На этом уровне определяется, какому приложению предназначен пакет, по номерам портов: отправителя (Src port) по получателя (Dst port). В данном случае пакет отправлен сервером DNS, который работает на порту 53, а получен клиентом DNS на порту со случайным большим номером.
Domain Name System (response) — прикладной уровень (L7). Собственно сообщение-ответ на запрос, какой IP у lab.facelessmen.org
. Стоит отметить:
поле [Request In: …] — ссылку на пакет с запросом, к которому относится рассматриваемый ответ;
поле Transaction ID, одинаковое в запросе и ответе, чтобы клиент мог отправить несколько запросов, а затем связать ответы с ними — фактически это поле играет роль сеансового (L5) уровня, хотя отдельного протокола под это не выделено.
В области разбора пакета выделите последовательно L2, L3, L4, L7 и проследите в области содержимого пакета, что они расположены последовательно — это и есть инкапсуляция уровней.
В области содержимого пакета выберите несколько байт, чтобы увидеть, каким полям и каких уровней они соответствуют.
При исследованиях трафика, особенно сообща с другими специалистами, бывает полезно добавить к пакетам текстовые комментарии. Для этого нужно использовать пункт Packet comment… контекстного меню пакета в списке.
look at me
».По комментариям можно пакеты искать (фильтровать):
pkt_comment
или frame.comment
выбирает все пакеты с комментариями;frame.comment contains "look"
выбирает пакеты, комментарий к которым содержит подстроку look
.http || dns || icmp
.Хотя он одинаков по сути с фильтром захвата, но сообщает Wireshark, что нас интересуют не просто пакеты через порт 80 по протоколу TCP, а именно сообщения HTTP (они же, но на уровне L7). В результате количество пакетов в списке сократилось: остались только несущие сообщения, а служебные скрыты.
В открывшемся окне показаны данные, переданные клиентом серверу (подсвечены красным) и от сервера клиенту (подсвечены синим). Как можно наблюдать:
Протокол имеет текстовый формат. Для случаев, когда это не так, имеется возможность переключить просмотр в режим отображения байт (Hex Dump).
Помимо непосредственно текста страницы передается немало служебных данных.
Обратите внимание, что фильтр отображения изменился на tcp.stream eq 0
: число в конце (0
в примере) — порядковый номер сеанса из всех захваченных. Соответственно, пропала фильтрация только пакетов с сообщениями HTTP. Если просмотреть пакеты, в большинстве нет данных выше Transmission Control Protocol (TCP) — это служебные пакеты L4+L5, нужные для установления, поддержки и завершения сеанса. Они будут рассмотрены на последующих ЛР.
Верните предыдущий фильтр отображения.
Они сохраняются в выпадающем списке поля фильтра. После выбора нужно применить фильтр, нажав Enter или кнопку Apply.
Иногда отдельные пакеты не представляют большого интереса, зато можно сделать выводы по статистике трафика. Опробуем важнейшие средства из меню Statistics. В каждом пункте нужно открыть соответствующий диалог и ознакомиться с его содержимым и возможностями.
Protocol Hierarchy — сводка, какие протоколы и насколько часто встречаются в захваченном трафике. Позволяет сразу обнаружить сетевую активность, которой быть не должно, или наоборот.
Conversations — сеансы в широком смысле, то есть не только L5, но и обмены данными, например, по протоколу DNS.
Endpoints — уникальные адреса и порты участников.
Packet Lengths — гистограмма распределения длин пакетов. Полезна для выявления аномальной активности или для оптимизации настроек сетевого ПО и аппаратуры.
IO Graph — график пакетов или байт в секунду. Полезен для анализа нагрузки и обнаружения времени атак. Сохраните его как рисунок lab01-tools-iograph.png
.
Flow Graph… — диаграмма последовательности переданных пакетов. Постройте ее для отображаемых пакетов (Displayed packets) всех видов (General flow) с отображением сетевых адресов (Network source/destination addresses). Сохраните результат в текстовый файл lab01-tools-flowgraph.txt
.
Далеко не всегда пакеты захватываются в Wireshark, сразу же анализируются и забываются. Гораздо чаще захват происходит:
tcpdump
, встроенными средствами оборудования).Анализ же выполняется отдельно, иногда не одним человеком и по несколько раз. Очевидно, для этого нужно сохранять захваченные пакеты в файл, чтобы передавать его и анализировать трафик offline.
lab01-tools.pcapng
.Здесь необходимо обратить внимание на формат файла:
Wireshark/… *.pcapng
— современный формат Wireshark: позволяет сохранять комментарии к пакетам, расширяем в будущем, однако не поддерживается многими небольшими утилитами для обработки записей трафика.
Wireshark/tcpdump/… *.pcap
— классический формат. Не вполне универсален и не расширяем, зато поддерживается всеми средствами обработки записей.
То же с «nanosecond precision» — времена прохождения пакетов записываются с точностью до наносекунд, что бывает нужно на быстрых интерфейсах.
Wireshark позволяет открыть файл в одном формате и сохранить в другом.
В аналогичном диалоге File → Export specified packets… можно выбрать, какие пакеты сохранять: все, отображаемые или с выбранными номерами.
Иногда нужно экспортировать не пакеты, а результаты их разбора, то есть, по сути, область списка пакетов, область разбора пакета или обе сразу. Для этого применяется пункты меню из группы File → Export packet dissections: можно экспортировать данные как в текстовом виде для чтения (…as “Plain Text” file), так и в структурированных видах.
В открывшемся диалоге можно выбрать, что сохранять:
lab01-tools-export.txt
.На сайте Wireshark есть познавательный сборник записей трафика разных протоколов.
Примечание. Во всех вопросах «привести пример» означат открыть запись трафика в Wireshark и продемонстрировать требуемое.
Может ли быть настроен IP-адрес, но не настроен шлюз по умолчанию? Если да, к чему это приведет; если нет, почему?
Может ли быть настроен IP-адрес, но не выбран сервер DHCP? Если да, в каком случае и на что это повлияет; если нет, почему?
Может ли быть настроен IP-адрес, но не настроен сервер DNS? Если да, к чему это приведет; если нет, почему?
Если не настроено статического адреса и не работает DHCP, получит ли интерфейс адрес (при настройках, наблюдавшихся в ЛР), и если да, какой?
Можно ли с компьютера под управлением Windows с помощью ping
проверить доступность компьютера под управленим Linux? А наоборот?
Верно ли, что если не приходят ответы на ping
, сервер недоступен по сети? Если да, приведите пример из ЛР; если нет, в каком случае?
Может ли IP-адрес не иметь доменных имен? А наоборот?
Можно ли настройкой машины с IP-адресом добиться, чтобы этот адрес нельзя было найти по доменному имени? Если да, в каком случае; если нет, почему?
Возможно ли по IP-адресу узнать его доменные имена?
Можно ли с помощью Wireshark перехватить трафик, идущий непосредственно между двумя другими машинами (без удаленного доступа к этим машинам)?
Как с помощью Wireshark захватить трафик и через кабель, и через Wi-Fi?
Как в Wireshark ограничить перечень захватываемых пакетов? Приведите пример не из ЛР.
Как в Wireshark отфильтровать захваченные пакеты? Приведите пример не из ЛР.
Исследователю нужно проанализировать задержки между пакетами, то есть время, прошедшее между появлением соседних захваченных пакетов. Как быстро получить в Wireshark эти сведения?
Как в Wireshark просмотреть, представление интересующего поля протокола в содержимом пакета (в виде байт)? Продемонстрируйте на примере.
Как в Wireshark определить, к какому полю и какого протокола относится произвольбый байт в содержимом пакета? Продемонстрируйте на примере.
Как в Wireshark, имея захваченный трафик, найти IP-адреса всех участников и отфильтровать только пакеты, связанные с определенным адресом?
Как в Wireshark, имея захваченный трафик, найти все сеансы TCP в нем и отфильтровать только пакеты, участвующие в одном из них?
Администратору известно, что в трафике его сервера в основном HTTP, некоторый объем DNS и на порядок меньше ICMP, чем DNS. Как в Wireshark, захватив этот трафик, быстро проверить, что соотношения протоколов в норме?
Требуется проанализировать запись трафика, содержащую начало DDoS-атаки, при которой трафика внезапно стало на порядок больше нормы. Как в Wireshark быстро найти момент начала атаки? (Запись начинается раньше.)
Администратору известно, что в нормальном трафике размеры пакетов в основном менее 400 байт, хотя иногда встречаются и больше (до 1500 байт). При конкретной атаке направляется много пакетов длиной около 1000 байт. Как в Wireshark быстро проверить, была ли атака за время записи?
В каких случаях имеет смысл сохранять захваченные пакеты в *.pcap
, а в каких — в .pcapng
? Что делать, если нужен файл *.pcap
, а имеется *.pcapng
?