Skip to content

Latest commit

 

History

History
605 lines (410 loc) · 39.4 KB

lab01-tools.md

File metadata and controls

605 lines (410 loc) · 39.4 KB
title institute lang geometry mainfont monofont fontsize colorlinks
Лабораторная работа № 1. Инструменты диагностики сетей
кафедра Управления и информатики НИУ «МЭИ»
ru-RU
top=2cm, bottom=2cm, left=3cm, right=2cm
PT Serif
PT Mono
12pt
blue

Цель работы

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

  • определять сетевые настройки машины;
  • проверять доступность удаленных узлов и маршруты до них;
  • захватывать, анализировать и сохранять сетевой трафик.

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

  • об уровнях и протоколах сетевого взаимодействия, модель OSI (лекция 1);
  • что такое IP-адрес и маска подсети, как их вычислять (СПО, ЛР по Linux);
  • что такое DNS (там же).

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

  • в учебе — для отладки программ на последующих ЛР;
  • на практике — для поиска причин и источников неполадок (troubleshooting).

Задание

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

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

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

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

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

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

* физический адрес — адрес канального уровня (L2), он же MAC-адрес;
* IP-адрес — адрес сетевого уровня (L3);
* маску подсети, с помощью которой IP-адрес делится на адрес сети
    (префикс) и номер узла в ней;
* основной шлюз — IP-адрес машины, через которую направляются пакеты
    во внешнюю сеть;
* DHCP-сервер — IP-адрес машины, с помощью которой был получен IP-адрес
    данной, то есть выполнена динамическая конфигурация IP;
* время, когда аренда получена — то есть выдан динамический IP —
    и когда аренда истекает — то есть понадобится снова обратиться
    к DHCP-серверу за новым адресом;
* DNS-сервер — IP-адрес машины, к которой данная будет обращаться
    при необходимости разрешить (преобразовать) символьное имя
    (например, `mpei.ru`) в IP-адрес.

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

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

    ipconfig /all

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

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

* по имени компьютера можно обратиться к нему *в локальной сети*,
    однако эта возможность специфична для Windows и может быть выключена;
* IP-маршрутизация (обычно выключена) определяет, будет ли данный узел
    пересылать пакеты, которые предназначены не ему.

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

Убедитесь, что показания в таком разделе соответствуют полученным из GUI
(кроме автонастройки адреса, которую проверять через GUI не нужно).

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

* Из IP-адреса и маски подсети определите и запишите адрес сети.
* Находится ли шлюз по умолчанию в той же сети? Если нет, то в какой?
* Находится ли сервер DHCP в той же сети?
* Находится ли сервер DNS в той же сети?

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

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

(@) В командной строке выполните:

    ping mpei.ru

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

* собственного IP-адреса машины (полученного в предыдущем разделе);
* основного шлюза;
* сервера DNS;
* `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-адреса

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

(@) Выполните команду:

    nslookup facelessmen.org

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

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

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

ipconfig /flushdns

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

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

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

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

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

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

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

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

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

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

* В поле «Capture filter» введите выражение:

    `(dst <IP> and tcp port 80) or (udp port 53) or icmp`

    При вводе замените `<IP>` на IP-адрес `lab.facelessmen.org`,
    который можно получить через `nslookup`.

* Не закрывайте диалог.

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

(@) Очистите кэш браузера.

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

(@) Очистите кэш DNS. Иногда очистка через ipconfig не срабатывает, так как браузер имеет свой кэш DNS — тогда браузер нужно перезапускать.

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

(@) В адресной строке браузера введите адрес:

    lab.facelessmen.org

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

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

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

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

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

  • Список пакетов со столбцами их свойств и подсветкой в зависимости от типа.

  • Результат разбора пакета (dissection — термин Wireshark), то есть структурированное представление пакета, разобранного в соответствии с протоколами.

  • Содержимое пакета в виде байт в шестнадцатеричном виде (hex) и соответствующего им текста. Числа 0000, 0010 и т. д. по левому краю — смещения от начала пакета в hex, то есть 0, 16 и т. д.

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

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

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

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

  • номер пакета;
  • время прохождения (по умолчанию — в секундах от начала захвата);
  • IP-адреса источника (source) и получателя (destination);
  • протокол верхнего уровня;
  • полная длина;
  • краткая сводка (info), отражающая суть пакета.

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

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

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

В этом же диалоге можно удалять ненужные столбцы кнопкой *Remove.*

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

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

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

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

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

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

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

Рассмотрим пакет с ответом 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)

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

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

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

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

  • Протокол имеет текстовый формат. Для случаев, когда это не так, имеется возможность переключить просмотр в режим отображения байт (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 — график пакетов или байт в секунду. Полезен для анализа нагрузки и обнаружения времени атак. Если на графике не наблюдается активности, можно уменьшить Tink interval. Сохраните график как рисунок lab01-tools-iograph.png.

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

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

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

  • в то время, когда наблюдается интересующий трафик;
  • на той машине (устройстве), где это возможно;
  • не обязательно Wireshark (tcpdump, встроенными средствами оборудования).

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

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

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

  • Wireshark/tcpdump/… *.pcap (packet capture) — классический формат. Не вполне универсален и не расширяем, зато поддерживается всеми средствами обработки записей трафика.

  • Wireshark/… *.pcapng (pcap next generation) — современный формат Wireshark: позволяет сохранять комментарии к пакетам, расширяем в будущем, однако не поддерживается многими небольшими утилитами для обработки записей трафика.

  • То же с «nanosecond precision» — времена прохождения пакетов записываются с точностью до наносекунд, что бывает нужно на быстрых интерфейсах.

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

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

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

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

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

  • packet summary — строку из списка пакетов;
  • packet details — результат разбора в текстовом виде;
  • packet bytes — содержимое пакета как байты в шестнадцатеричном виде.

(@) Сохраните только список пакетов, без результатов их разбора, как текстовый файл 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?

Литература