Цель работы

Требуется научиться:

Предполагается, что вы знаете:

Изученное в ходе ЛР пригодится:

Задание

Примечание. В задании встречаются протоколы и инструменты, которые еще не изучались (traceroute, ICMP, UDP, TCP, DNS) — в таких местах даны краткие пояснения, а подробности будут рассмотрены на последующих занятиях.

Определение сетевых настроек

  1. Просмотрите параметры сетевого подключения через GUI (графический интерфейс).

    Для этого дважды щелкните на значке сетевого подключения (на панели уведомлений в правом нижнем углу) и на вкладке «Поддержка» нажмите кнопку «Подробности…».

    Выделите все строки таблицы и занесите в отчет.

    Можно наблюдать:

  2. Просмотрите параметры сетевого подключения через командную строку.

    Для этого откройте командную строку (Пуск → Выполнить, ввести cmd), в ней выполните команду:

    ipconfig /all

    Саму команду и ее вывод скопируйте и занесите в отчет.

    Раздел «Настройка протокола IP для Windows» относится ко всей машине, а не к отдельным сетевым подключениям. В частности:

    Далее следуют разделы, описывающие сетевые подключения (обычно одно). Убедитесь, что показания в таком разделе соответствуют полученным из GUI. Присутствует и настройка, через GUI невидимая: «автонастройка включена» — она означает, что в случае, когда адрес не задан статически, а DHCP-сервер недоступен, интерфейс получит специальный адрес автоматической конфигурации.

  3. Проанализируйте полученные настройки.

Ping: проверка доступности узлов

Команда ping позволяет направить узло специальные запросы, на которые тот должен ответить, чтобы подтвердить свою доступность.

  1. В командной строке выполните:

    ping mpei.ru

    Сделайте то же самое для других адресов:

    Из показаний ping сведите в таблицу: символьный адрес узла, его IP-адрес и среднее время отклика.

  2. Выполните команду:

    ping mpei.ru

Как можно видеть, на запросы ping не получено ответов, потери 100 %. Это не означает, что узел недоступен (попробуйте зайти на сайт) — просто сервер или промежуточное устройство настроены не давать ответов на запросы, которые шлет ping. Это делается для безопасности: ping позволяет сканировать доступность узлов и сервисов на них, способен создать нагрузку на сервер.

Трассировка маршрутов прохождения трафика

Полезно бывает отследить маршрут (trace route) прохождения пакета до заданного узла. В Linux соответствующая программа называется traceroute, в Windows — tracert.

  1. Выполните команду:

    tracert lab.facelessmen.org

    Занесите команду и ее вывод в отчет.

Можно наблюдать два факта:

Разрешение символьных (доменных) имен в IP-адреса

Как известно, пакеты направляются на адреса сетевого уровня, в типичном случае — на IP-адреса, а люди пользуются символьными именами, например, mpei.ru. Разрешением (resolution, т. е. преобразованием) символьных имен в адреса занимается система доменных имен (Domain Name System — DNS). Сервер DNS содержит базу соответствия имен адресам; клиент запрашивает по протоколу DNS адрес для имени, сервер отвечает ему.

  1. Выполните команду:

    nslookup mpei.ru

    Занесите команду и ее вывод в отчет.

«Non-authoritative answer» означает, что ответ дан не официальным сервером DNS, обслуживающим вышестоящую зону — в случае mpei.ru, зону ru. — а промежуточным сервером DNS. Это нормально. Промежуточные сервера кэшируют (запоминают) ответы вышестоящих, чтобы снизить на них нагрузку и отвечать быстрее.

Кэшируют ответы DNS не только сервера, но и клиенты, в том числе локальная машина. Обычно это ускоряет работу и потому удобно, но для лабораторной работы или при проблемах с DNS кэшированный ответ мешает понять, что происходит. Можно сбросить кэш специальной командой:

ipconfig /flushdns

Wireshark: захват и анализ сетевого трафика

Все проходящие через машину сетевые пакеты можно захватить (capture) и пристально изучить. Это радикальный способ отладки программ, исследования протоколов и отслеживания проблем.

Программа Wireshark позволяет как захватить сетевой трафик, так и с удобством просмотреть его, исследовать в разных разрезах, собрать статистику.

Примечание. В лаборатории установлена Wireshark 1.10 — последняя версия, поддерживающая Windows XP; новейшая версия Wireshark — 2.4 (на февраль 2018).

Исследуем, что происходит в сети при заходе на web-страницу.

Захват пакетов

  1. Запустите Wireshark из меню «Пуск».

На главной странице доступны ссылки на справку («Online» справа), список недавних файлов («Files» по центру) и главный интересующий нас раздел «Capture». По существу, в нем можно выбрать, с каких сетевых интерфейсов (например: кабельного подключения, Wi-Fi) и какие именно данные захватывать.

  1. Откройте диалог «Capture options» и настройте захват пакетов, который относятся к заходу на web-страницу по основному сетевому интерфейсу.

Смысл фильтра захвата — отобрать только запрос страницы и ответ на него с собственно страницей (tcp port 80), запросы и ответы DNS (udp port 53), а также служебные сообщения ICMP (icmp), появляющиеся при некоторых ошибках.

  1. Откройте браузер. Если он уже открыт, закройте в нем все окна и вкладки, оставив единственную пустую.

    В противном случае будут захвачены не только те пакеты, которые требуется исследовать, и придется дополнительно их фильтровать.

  2. Очистите кэш браузера.

    В лаборатории установлен Internet Explorer 8, где это делается из меню Сервис → Удалить журнал обозревателя… с обязательно установленной галочкой Временные файлы интернета.

  3. Очистите кэш DNS.

  4. В Wireshark запустите захват пакетов кнопкой «Start» диалога настройки захвата. Вне диалога это делалось бы кнопкой «Start capture».

  5. В адресной строке браузера введите адрес:

    lab.facelessmen.org

    и нажмите выполните переход (нажмите Enter или кнопку).

В Wireshark должны появится два пакета DNS (выделяются голубым) и несколько пакетов HTTP (выделяются салатовым).

  1. Остановите захват пакетов красной кнопкой «Stop capture» слева вверху.

Просмотр пакетов

Рабочее окно Wireshark разделено на три области (сверху-вниз):

Области диссекции и содержимого пакета связаны. При выборе поля или уровня диссекции подсвечиваются соответствующие байты в содержимом. И наоборот — при щелчке на байте содержимого подсвечивается элемент диссекции, к которому этот байт относится.

Над списком пакетов есть поле фильтра, позволяющее дополнительно отобрать захваченные пакеты. В строке состояния внизу окна отображается общее число пакетов (packets) и количество отображаемых из них (displayed). Фильтр — логическое выражение, включающее свойства пакета. Список свойств можно увидеть в диалоге «Expression…» рядом с фильтром. Обратите внимание, что [синтаксис][wireshark/filter] этого фильтра (отображения) отличается от фильтра захвата: например, вместо tcp port 80 пишется tcp.port == 80.

Настройка отображения списка пакетов

В списке пакетов отображаются их основные свойства:

В зависимости от задачи бывает полезно видеть и другие поля. Добавим столбцы с портами и будем отображать порты в числовом виде в сводке.

  1. В диалоге Edit → Preferences… выберите раздел Columns.

  2. Добавьте столбец с портом отправителя: внизу в выпадающем списке выберите Src port (unresolved) и нажмите Add, переименуйте столбец, щелкнув по его мени в таблице. Перетащите его мышью перед столбцом Protocol.

  3. Сделайте то же самое для порта получателя Dest port (uresolved).

  4. Перейдите в раздел Name resolution и снимите галочку Resolve transport names.

  5. Закройте диалог кнопкой OK и убедитесь, что новые столбцы появились.

Вид времени прохождения можно менять в меню View → Time display format. Нужно понимать, что у Wireshark не всегда есть информация о том, в каком часовом поясе захвачен трафик (при анализе файлов — см. ниже), поэтому отображение абсолютного времени может быть со смещением.

Исследование пакетов

Результаты разбора сгруппированы по протоколам и упорядочены по уровням от нижнего (L2, канального) к верхнему (L7, прикладному). Внутри уровней выделены поля данных. В квадратных скобках показываются косвенные показатели, которые в пакет непосредственно не записаны.

Исследование отдельных пакетов (DNS)

Рассмотрим пакет с ответом DNS («standard query response» в сводке). Уровни:

  1. В области разбора пакета выделите последовательно L2, L3, L4, L7 и проследите в области содержимого пакета, что они расположены последовательно — это и есть инкапсуляция уровней.

  2. В области содержимого пакета выберите несколько байт, чтобы увидеть, каким полям и каких уровней они соответствуют.

При исследованиях трафика, особенно сообща с другими специалистами, бывает полезно добавить к пакетам текстовые комментарии. Для этого нужно использовать пункт Packet comment… контекстного меню пакета в списке.

  1. Добавьте к рассматриваемому пакету комментарий «look at me».

По комментариям можно пакеты искать (фильтровать):

Исследование сеансов (HTTP)

  1. Введите фильтр отображения: http || dns || icmp.

Хотя он одинаков по сути с фильтром захвата, но сообщает Wireshark, что нас интересуют не просто пакеты через порт 80 по протоколу TCP, а именно сообщения HTTP (они же, но на уровне L7). В результате количество пакетов в списке сократилось: остались только несущие сообщения, а служебные скрыты.

  1. Щелкнув по любому пакету HTTP (салатовому) правой кнопкой мыши, выберите в контекстном меню Follow TCP stream (проследить сеанс).

В открывшемся окне показаны данные, переданные клиентом серверу (подсвечены красным) и от сервера клиенту (подсвечены синим). Как можно наблюдать:

  1. Закройте окно слежения за сеансом.

Обратите внимание, что фильтр отображения изменился на tcp.stream eq 0: число в конце (0 в примере) — порядковый номер сеанса из всех захваченных. Соответственно, пропала фильтрация только пакетов с сообщениями HTTP. Если просмотреть пакеты, в большинстве нет данных выше Transmission Control Protocol (TCP) — это служебные пакеты L4+L5, нужные для установления, поддержки и завершения сеанса. Они будут рассмотрены на последующих ЛР.

  1. Верните предыдущий фильтр отображения.

    Они сохраняются в выпадающем списке поля фильтра. После выбора нужно применить фильтр, нажав Enter или кнопку Apply.

Анализ трафика

Иногда отдельные пакеты не представляют большого интереса, зато можно сделать выводы по статистике трафика. Опробуем важнейшие средства из меню Statistics. В каждом пункте нужно открыть соответствующий диалог и ознакомиться с его содержимым и возможностями.

  1. Protocol Hierarchy — сводка, какие протоколы и насколько часто встречаются в захваченном трафике. Позволяет сразу обнаружить сетевую активность, которой быть не должно, или наоборот.

  2. Conversations — сеансы в широком смысле, то есть не только L5, но и обмены данными, например, по протоколу DNS.

  3. Endpoints — уникальные адреса и порты участников.

  4. Packet Lengths — гистограмма распределения длин пакетов. Полезна для выявления аномальной активности или для оптимизации настроек сетевого ПО и аппаратуры.

  5. IO Graph — график пакетов или байт в секунду. Полезен для анализа нагрузки и обнаружения времени атак. Сохраните его как рисунок lab01-tools-iograph.png.

  6. Flow Graph… — диаграмма последовательности переданных пакетов. Постройте ее для отображаемых пакетов (Displayed packets) всех видов (General flow) с отображением сетевых адресов (Network source/destination addresses). Сохраните результат в текстовый файл lab01-tools-flowgraph.txt.

Сохранение данных

Далеко не всегда пакеты захватываются в Wireshark, сразу же анализируются и забываются. Гораздо чаще захват происходит:

Анализ же выполняется отдельно, иногда не одним человеком и по несколько раз. Очевидно, для этого нужно сохранять захваченные пакеты в файл, чтобы передавать его и анализировать трафик offline.

  1. Выберите пункт меню File → Save и сохраните запись трафика в файл lab01-tools.pcapng.

Здесь необходимо обратить внимание на формат файла:

Wireshark позволяет открыть файл в одном формате и сохранить в другом.

В аналогичном диалоге File → Export specified packets… можно выбрать, какие пакеты сохранять: все, отображаемые или с выбранными номерами.

  1. Убедитесь, что файл сохранился, и закройте Wireshark. Выберите файл в «Проводнике» и откройте его в Wireshark.

Иногда нужно экспортировать не пакеты, а результаты их разбора, то есть, по сути, область списка пакетов, область разбора пакета или обе сразу. Для этого применяется пункты меню из группы File → Export packet dissections: можно экспортировать данные как в текстовом виде для чтения (…as “Plain Text” file), так и в структурированных видах.

В открывшемся диалоге можно выбрать, что сохранять:

  1. Сохраните только список пакетов как текстовый файл lab01-tools-export.txt.

На сайте Wireshark есть познавательный сборник записей трафика разных протоколов.

Контрольные вопросы

Примечание. Во всех вопросах «привести пример» означат открыть запись трафика в Wireshark и продемонстрировать требуемое.

  1. Может ли быть настроен IP-адрес, но не настроен шлюз по умолчанию? Если да, к чему это приведет; если нет, почему?

  2. Может ли быть настроен IP-адрес, но не выбран сервер DHCP? Если да, в каком случае и на что это повлияет; если нет, почему?

  3. Может ли быть настроен IP-адрес, но не настроен сервер DNS? Если да, к чему это приведет; если нет, почему?

  4. Если не настроено статического адреса и не работает DHCP, получит ли интерфейс адрес (при настройках, наблюдавшихся в ЛР), и если да, какой?

  5. Можно ли с компьютера под управлением Windows с помощью ping проверить доступность компьютера под управленим Linux? А наоборот?

  6. Верно ли, что если не приходят ответы на ping, сервер недоступен по сети? Если да, приведите пример из ЛР; если нет, в каком случае?

  7. Может ли IP-адрес не иметь доменных имен? А наоборот?

  8. Можно ли настройкой машины с IP-адресом добиться, чтобы этот адрес нельзя было найти по доменному имени? Если да, в каком случае; если нет, почему?

  9. Возможно ли по IP-адресу узнать его доменные имена?

  10. Можно ли с помощью Wireshark перехватить трафик, идущий непосредственно между двумя другими машинами (без удаленного доступа к этим машинам)?

  11. Как с помощью Wireshark захватить трафик и через кабель, и через Wi-Fi?

  12. Как в Wireshark ограничить перечень захватываемых пакетов? Приведите пример не из ЛР.

  13. Как в Wireshark отфильтровать захваченные пакеты? Приведите пример не из ЛР.

  14. Исследователю нужно проанализировать задержки между пакетами, то есть время, прошедшее между появлением соседних захваченных пакетов. Как быстро получить в Wireshark эти сведения?

  15. Как в Wireshark просмотреть, представление интересующего поля протокола в содержимом пакета (в виде байт)? Продемонстрируйте на примере.

  16. Как в Wireshark определить, к какому полю и какого протокола относится произвольбый байт в содержимом пакета? Продемонстрируйте на примере.

  17. Как в Wireshark, имея захваченный трафик, найти IP-адреса всех участников и отфильтровать только пакеты, связанные с определенным адресом?

  18. Как в Wireshark, имея захваченный трафик, найти все сеансы TCP в нем и отфильтровать только пакеты, участвующие в одном из них?

  19. Администратору известно, что в трафике его сервера в основном HTTP, некоторый объем DNS и на порядок меньше ICMP, чем DNS. Как в Wireshark, захватив этот трафик, быстро проверить, что соотношения протоколов в норме?

  20. Требуется проанализировать запись трафика, содержащую начало DDoS-атаки, при которой трафика внезапно стало на порядок больше нормы. Как в Wireshark быстро найти момент начала атаки? (Запись начинается раньше.)

  21. Администратору известно, что в нормальном трафике размеры пакетов в основном менее 400 байт, хотя иногда встречаются и больше (до 1500 байт). При конкретной атаке направляется много пакетов длиной около 1000 байт. Как в Wireshark быстро проверить, была ли атака за время записи?

  22. В каких случаях имеет смысл сохранять захваченные пакеты в *.pcap, а в каких — в .pcapng? Что делать, если нужен файл *.pcap, а имеется *.pcapng?

Литература