Семинар 1: Работа с Wireshark
libPCAP (winPCAP)
Один из основных способов отладки сетевого взаимодействия - перехват и анализ сетевых пакетов. Основная
библиотека, используемая для этого - libpcap (winpcap). Она позволяет "записать" всё, что происходит в
канале передачи данных и сохранить это в файл формата .pcap (.pcapng). Утилита, входящая в состав этой
библиотеки, предназначенная для записи - tcpdump. Это консольная утилита и наглядной её не
назовёшь. Поэтому мы будем пользоваться инструментом с графическим интерфейсом - Wireshark.
Wireshark
Wireshark - очень мощный инструмент для анализа сетевого трафика. Может захватывать пакеты как онлайн, т.е. в режиме реального времени показывать, что происходит в канале связи, так и оффлайн, т.е. открывать и анализировать уже записанный трафик (файлы .pcap или .pcapng). Частый сценарий использования этого инструмента - это записать файл .pcap на сервере при помощи tcpdump, а затем анализ этого файла на рабочем компьютере или ноутбуке при помощи Wireshark. Wireshark может распознавать более 3000 протоколов, являясь DPI (deep packet inspection) т.е. анализируя вообще всё, до 7 уровня модели OSI включительно. Также для ряда протоколов возможно провести разжатие данных и дешифрование, если данных для этого достаточно.
Анализ полностью выполняется пассивно, т.е. на сам канал передачи Wireshark (как и libpcap, поверх которой он построен) никак не влияет.
Интерфейс
Слева вы можете видеть скриншот приветственного окна Wireshark. Под привычными всем меню "Файл", "Правка" и т.д. Можно видеть ряд кнопок, начинающихся с синего плавника. Синий плавник тут - своеобразный символ "play", означает начать запись. Правее неактивные сейчас кнопки - стоп и перезапуск захвата. 3 эти кнопки отвечают за захват трафика. При этом нужно выбрать интерфейс, на котором будет производиться захват. Это можно сделать либо через параметры (круглая кнопка с шестерёнкой), либо в нижней части экрана, у меня там интерфейсы "enp0s31f6", "Tunnel: ru2home", "any" и т.д.
Фильтры захвата
Для того чтобы не записывать вообще все подряд пакеты существуют фильтры захвата. Пакеты, которые не будут удовлетворять условиям такого фильтра записаны не будут.
В интерфейсе Wireshark такие фильтры указываются в поле "Capture ...using this filter" над списком интерфейсов.
Примеры таких фильтров:
host 172.18.5.4net 192.168.0.0/24dst net 192.168.0.0 mask 255.255.255.0port 53port not 53 and not arp
В это сложно поверить, но это компилируемые фильтры - Berkeley Packet Filter (BPF). Они будут преобразованы в байт-код машины внутри ядра операционной системы, которая будет обрабатывать пакеты. Эти фильтры можно задать только перед захватом пакетов.
Подробнее об этом можно почитать в мануале (man pcap-filter).
Это механизм фильтрации в libpcap, поэтому такими фильтрами можно пользоваться и в tcpdump.
Фильтры отображения
Помимо фильтров захвата в Wireshark есть фильтры отображения. Они работают только для уже захваченных пакетов, т.е. не влияют на то, что будет записано.
В интерфейсе Wireshark эти фильтры расположены под кнопками, начинающимися с синего плавника, там, где написано на скриншоте справа: "Примените фильтр отображения..."
Чтобы получить такую же картинку, как на скриншоте, нужно открыть файл, вот например.
Примеры таких фильтров:
ip.addr == 10.43.54.65ip.dst == 10.43.54.65ip.addr == 10.43.54.65 and ip.addr == 10.43.54.69!(ip.addr == 10.43.54.65)ip.src == 10.43.54.65 and tcp.dstport == 25tcphttphttp.request
Это интерпретируемые фильтры, они намного функциональнее фильтров захвата, но работают они на порядок медленнее и будут каждый раз применяться к каждому захваченному пакету при каждом изменении фильтра. Подробнее можно почитать в документации Wireshark.
Пакеты
В средней части окна Wireshark, если вы уже открыли файл или начали запить трафика, будут отображаться перехваченные пакеты (те, что будут удовлетворять условиям фильтров). На скриншоте выше можно видеть список пакетов, отмеченных разными цветами. В этой части отображается краткая информация по этим пакетам. На скриншоте виден номер пакета, время захвата, ip адреса источника (Source) и назначения (Destination) и протокол. Эти колонки настраиваемые, можно добавить свои.
Более подробная информация по отдельному пакету показана в нижней части. Нужно кликнуть по интересующему пакету (на скриншоте выше выбран первый пакет). Нижняя часть делится на 2. Слева показаны протоколы, которые распознаны в этом пакете сверху - протоколы более низкого уровня, снизу - протоколы более высокого уровня. (помните на лекции было что-то про инкапсуляцию?) Справа показаны байты, т.е. сырые данные этого пакета.
Раскрывая протоколы в левой части можно увидеть из каких полей они состоят, а в правой части будут подсвечиваться байты, которые относятся к этому полю или протоколу.
Wireshark может выполнять дешифрование и декомпрессию данных. В этом случае справа будет несколько вкладок: с исходными данными и с модифицированными. Аналогично и при фрагментации пакетов более высокого уровня по нескольким пакетам более низкого уровня. (пример - пакет номер 318, где пакет TLS был разбит на 45 фрагментов)
Сохранить только нужное
Иногда приходится записывать все пакеты и потом разбираться, что относится к какой проблеме (пример). Для таких случаев можно пользоваться меню "Файл" -> "Экспортировать указанные пакеты..." ("File" -> "Export Specified Packets..."). В открывшемся окне можно задать, какие именно пакеты нужно сохранить в отдельный файл. При этом самое удобное - сохранить отображаемые пакеты или выбранные.
Скриншот от mac os справа, для разнообразия.
Фрагментация
В лекции уже рассказывалось про фрагментацию, слева картинка про это. Если есть возможность передавать поток данных через тот или иной протокол - то можно выполнить дефрагментацию данных этого протокола в Wireshrak. (т.е. собрать "очень большой файл") Очень часто такое может помочь в анализе tcp.
Для сборки целого "Очень большого ..." нужно выбрать пакет и: Правой кнопкой мыши "Follow" -> "... Stream" ("Отслежиать" -> "... Поток"). Или "Analyze" -> "Follow" -> "... Stream" ("Анализ" -> "Отслежиать" -> "... Поток"). Примеры потоков: "TCP Stream", "TLS Stream", "HTTP Stream", etc...
Откроется отдельное окно, где можно будет посмотреть поток данных (т.е. склеенные данные множества пакетов в один поток данных). В старых версиях Wireshark в основном окне при этом будет применён фильтр для отображения пакетов этого потока. В новых версиях для этого нужно нажать кнопку "Apply as Filter" -> "Selected" или "Фильтровать этот поток".
Экспорт объектов
Часто бывает полезным, особенно, когда нужно достать файлы, которые передавались тем или иным образом. "Файл" -> "Экспортировать объекты" -> Протокол (например, HTTP). Покажет вам список файлов (объектов), которые были переданы посредством этого протокола. Можно пофильтровать и сохранить.
Telnet
Есть такой прикладной протокол telnet. Сегодня его не часто встретишь, но ранее его использовали для передачи
чего угодно поверх tcp. В одну сторону передаёт поток текста, в другую нажимаемые пользователем клавиши. В
частности, использовался для удалённого управления устройствами. Но можно и кино посмотреть:
telnet towel.blinkenlights.nl.
Если применить "Follow TCP Stream" для пакетов Telnet, то можно увидеть что нажимал пользователь, а что ему выводила система в ответ.
Задание на сегодня
Для максимального балла нужно выполнить оба и ответить на вопросы при сдаче.
Простое:
Произошёл взлом одного из наших серверов, все системы защиты были выведены из строя, пароли изменены. Всё, что у нас есть об этом инциденте - запись сетевого трафика в момент взлома. Для начала нужно получить новый пароль от сервера. Зная почерк злоумышленников, пароль будет в формате CTF{[0-9A-Z]}.
Сложное:
Самое время восстановить украденные данные (*.docx). Дамп трафика всё тот же. Секрет в формате CTF{}