1. Главная страница » Компьютеры » Packet capture как пользоваться

Packet capture как пользоваться

Автор: | 16.12.2019

ShareIT — поделись знаниями!

Полезно

Узнать IP — адрес компьютера в интернете

Онлайн генератор устойчивых паролей

Онлайн калькулятор подсетей

Калькулятор инсталляции IP — АТС Asterisk

Руководство администратора FreePBX на русском языке

Руководство администратора Cisco UCM/CME на русском языке

Навигация

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Популярное и похожее

Настройка Site-To-Site IPSec VPN на Cisco

Настройка Router-on-a-Stick на Cisco

Настройка доступа к Cisco по SSH

Повышаем безопасность коммутаторов и маршрутизаторов Cisco

Настройка Cisco Embedded Packet Capture

4 минуты чтения

Для захвата трафика можно использовать маршрутизаторы Cisco, при помощи утилиты Cisco Embedded Packet Capture, которая доступна, начиная с версии IOS 12.4.20T. В этой статье мы расскажем, как настроить EPC для захвата пакетов на роутере, сохранять их на flash памяти или экспортировать на ftp/tftp сервер для будущего анализа, при помощи анализатора пакетов, например, такого как Wireshark.

Давайте рассмотрим некоторые из основных функций, которые предлагает нам Embedded Packet Capture:

  • Экспорт пакетов в формате PCAP, обеспечивающий анализ с помощью внешних инструментов
  • Возможность задать различные параметры буфера захвата
  • Отображение буфера захвата
  • Захват IPv4 и IPv6 пакетов в пути Cisco Express Forwarding

Прежде чем начать конфигурацию Cisco EPC необходимо разобраться с двумя терминами, которые будут использоваться в процессе – Capture Buffer(буфер захвата) и Capture Point (точка захвата)

Capture buffer – это зона в памяти для хранения пакетных данных. Существует два типа буферов захвата Linear (линейный) и Circular (кольцевой):

  • Linear Capture Buffer – когда буфер захвата заполнен, он перестает захватывать данные
  • Circular Capture Buffer – когда буфер заполнен, он продолжает захватывать данные, перезаписывая старые данные

Capture Point – это точка транзита трафика, в которой фиксируется пакет. Тут определяется следующее:

  • IPv4 или IPv6
  • CEF (Cisco Express Forwarding) или Process-Switched
  • Интерфейс (например Fast Ethernet 0/0, Gigabit Ethernet 1/0)
  • Направление трафика: входящий (in), исходящий (out) или оба

Настройка Cisco Embedded Packet Capture

Рассмотрим настройку на примере нашей схемы, где мы хотим захватить входящие и исходящие пакеты на интерфейсе FastEthernet 0/0 от ПК с адресом 192.168.1.5 до веб-сервера wiki.merionet.ru с адресом 212.193.249.136

Первым делом мы создадим буфер, который будет хранить захваченные пакеты. Для этого используем команду monitor capture buffer [имя] size[размер] [тип] . Создадим буфер merionet_cap, размером 1024 килобайта (1 мегабайт, стандартный размер) и сделаем его линейным.

Далее мы можем настроить захват определенного трафика. В нашем случае нужно захватить трафик между 192.168.1.5 и 212.193.249.136. Это достигается при помощи списков контроля доступа ACL. Мы можем использовать стандартные или расширенные списки доступа в зависимости от требуемой детализации. Если список доступа не настроен, то захвачен будет весь трафик.

Наш список доступа включает трафик, исходящий от обоих хостов, потому что мы хотим захватить двунаправленный трафик. Если бы мы включили только один оператор ACL, тогда был бы зафиксирован только односторонний трафик. Теперь свяжем наш буфер с access-list’ом, при помощи команды monitor capture buffer [название_буфера] filter access-list [название_ACL]

Затем следующем шагом мы определяем, какой интерфейс будет точкой захвата. В нашем случае это FastEthernet 0/0, и мы будем захватывать как входящие, так и исходящие пакеты. Во время этой фазы конфигурации нам нужно предоставить имя для точки захвата.

Также очень важно ввести команду ip cef для обеспечения минимального влияния на процессор маршрутизатора, при помощи Cisco Express Forwarding. Если ip cef не включен, то появится сообщение IPv4 CEF is not enabled.

Используем команду monitor capture point ip cef [имя_точки] [интерфейс] [направление] .

Теперь мы связываем сконфигурированную точку захвата с буфером захвата командой monitor capture point associate [название_точки][название_буфера] . На этом этапе мы готовы начать сбор пакетов.

Чтобы начать сбор пакетов используем команду monitor capture point start [название_интерфейса] .

Читайте также:  Jinga basco xs1 прошивка

Чтобы остановить процесс захвата используется команда monitor capture point stop [название_интерфейса] .

Полезные команды проверки:

  • show monitor capture buffer – показывает состояние буфера захвата
  • show monitor capture point – показывает состояние точки захвата
  • show monitor capture buffer [название_буфера] – показывает информацию о захваченных пакетах
  • show monitor capture buffer [название_буфера] dump – показывает содержание буфера

Экспорт данных

В большинстве случаев захваченные данные необходимо будет экспортировать в сетевой анализатор трафика (например, WireShark) для дополнительного анализа в удобном для пользователя интерфейсе. Захваченный буфер можно экспортировать в несколько местоположений, включая: flash: (на маршрутизаторе), ftp, tftp, http, https, scp и другие.

Для экспорта буфера используется команда monitor capture buffer[имя_буфера] export [адрес] .

После этого файл capture.pcap появится на нашем TFTP сервере, и мы можем открыть его в сетевом анализаторе.

Пожалуйста, расскажите почему?

Нам жаль, что статья не была полезна для вас 🙁 Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

Подпишитесь на нашу еженедельную рассылку, и мы будем присылать самые интересные публикации 🙂 Просто оставьте свои данные в форме ниже.

У меня не всегда есть возможность быстро отреагировать на какие-то изменения в работе сети, но вы можете помочь мне в разработке, собрав дамп процесса авторизации и отправив его мне. Дамп содержит всю необходимую для реализации алгоритма информацию, включая: параметры исходящих запросов, ответы сервера, Cookies и т.п.

1. Начальная настройка устройства

1.1. Необходимые приложения

  1. Packet Capture — MITM прокси, совмещённый с VPN. Позволяет собирать сетевые пакеты и вскрывать SSL шифрование. В нашем случае он используется для непосредственного сбора информации об алгоритме авторизации.
  2. Titanium Backup[ROOT] — инструмент для резервного копирования приложений. В нашем случае он требуется для упаковки информации, содержащейся в приложении Packet Capture.
  3. Любой веб-браузер, через который вы будете проходить авторизацию. Только не Firefox, т.к. он пересылает много лишнего мусора вместе с запросами. Лучше всего использовать Chrome.

TODO: Найти замену Titanium Backup, не требующую прав root и позволяющую быстро упаковать и распаковать данные любого приложения.

1.2. Настройка Packet Capture

Для того, чтобы данное приложение могло выполнять MITM атаку на трафик, нам нужно его добавить сертификат в список надёжных в Android. Сертификат уникален для каждого устройства, поэтому он не позволит другим проводить эту же атаку по отношению к вам.

Откройте приложение Packet Capture и частично пропустите начальную презентацию. На слайде "SSL Decryption" нажмите на кнопку "Install Certificate".

В появившемся диалоговом окне просто нажмите кнопку "ОК".

Готово! Теперь приложение сможет расшифровывать проходящий через него трафик.

Примечание: Android не очень любит, когда среди надёжных сертификатов находятся пользовательские, поэтому иногда может появляться уведомление "Сеть может отслеживаться администратором". Чтобы избавиться от этого предупреждения, нажмите на уведомление и в открывшемся окне удалите пользовательский сертификат, добавленный в этом шаге. При этом приложение Packet Capture потеряет возможность расшифровывать SSL трафик.

2. Создание дампа

Процедура создания дампа очень проста и состоит всего из двух шагов.

2.1. Запуск захвата пакетов

Откройте Packet Capture. Интерфейс этого приложения очень простой и состоит всего из нескольких элементов. Для начала захвата пакетов вам нужно нажать на зелёную кнопку "Play" с цифрой 1.

Далее нужно выбрать приложение, трафик которого вы хотите захватить. Захваченный трафик появится в главном меню Packet Capture.

Не забудьте остановить захват пакетов после завершения всех операций нажатием кнопки "Stop".

Вы можете просмотреть захваченные пакеты, нажав на собранный дамп. Если вас что-то не устраивает в этом дампе, его можно удалить смахиванием в сторону, а затем провести новый сбор данных. Учтите, что повторно пройти авторизацию в той же сети нельзя, поэтому вам либо придётся пересесть в другой вагон/автобус/. либо сменить MAC адрес на своём устройстве.

2.2. Прохождение авторизации в браузере

Откройте выбранный ранее браузер и зайдите на любой сайт, не использующий HTTPS (например, wi-fi.ru). Главная цель в этом шаге — получение начального перенаправления на страницу авторизации.

Очень желательно использовать режим инкогнито. Во-первых это обезопасит ваши данные (мне они не нужны, но меня и взломать могут), а во-вторых такое подключение будет чистым и мне будет проще понять, откуда что берётся.

Читайте также:  107 Iq это нормально

После того, как страница авторизации открылась, выполните привычную процедуру входа в сеть. Packet Capture зафиксирует весь диалог с сервером и позволит мне реализовать подобный алгоритм в коде.

3. Упаковка и отправка собранных данных

В Packet Capture отсутствует встроенная функция экспорта, поэтому придётся использовать средства резервного копирования. Вместо экспорта отдельных дампов упакуем всё приложение целиком при помощи Titanium Backup.

Откройте Titanium Backup. Во всех появляющихся диалоговых окнах нужно нажать "ОК" (только в первый раз).

Перейдите во вкладку "Резервные копии" и найдите Packet Capture в списке приложений вручную или при помощи поиска по запросу "packet".

Нажмите на строку с Packet Capture для открытия диалогового окна создания резервной копии.

Нажмите кнопку "Сохранить".

Теперь зажмите ту же строку с Packet Capture до появления следующего диалогового окна.

Выберите пункты "Передать последнюю резервную копию. " → "Только данные (простой импорт)".

Для кого эта статья: Для понимания этой статьи необходим минимум знаний по сетям. Например , что такое пакет , как он отсылается ,network layers и т.д. Также должны иметь место быть базовые знания по си. Если вы c/c++ master, то это просто супер.

man 3 pcap Вам нужен компилятор и библиотека libpcap. Мы сконцентрируемя на одном слое — Ethernet datalink layer. Если вы используете несколько сетевых интерфейсов , например token ring, вы должны будете использовать другие хидеры — datalink headers. Все примеры этой статьи были оттестированы на линуксе с ядром 2.2.14. Будет ли это компилироваться и работать на других версиях — автор ничего не гарантирует.

Intro: Сразу возникает несколько вопросов: "Что мы подразумеваем под захватом пакетов ?!" и "Что такое libpcap!?"

  • Packet Capture, означает просто "grab packets" или "захват пакетов".
    Нам нужно понять , как мы можем использовать возможности операционной системы для этого. Рассмотрим сетевую карту , которая принимает пакеты из сети. Ось должна определить , какого типа этот пакет, поставить ему в соответствие Ethernet header. Пусть это UDP packet.Ему ставится в соответствие UDP-хидер , и пакет загружается приложением, которому он был послан. Т.о. мы можем захватить любой пакет и глянуть на его хидер. Мы можем узнать порт, на который он пришел, хост , с которого он пришел, и т.д.
  • libpcap "обеспечивает независимый от реализации захват пакетов на основе свойств операционной системы (Stevens, UNP page. 707). libpcap — это библиотека , которую мы собираемся использовать для захвата пакетов с сетевой карты напрямую. Тут есть несколько подходов: BPF (Berkeley Packet Filter), DLPI (Data Link Provider Interface) и SOCKET_PACKET type sockets (Linux only).

Getting Started Итак , у нас есть сетевая карта. Рассмотрим первую программу:

Если запустить эту программу , то она может распечатать примерно следующее:

DEV: eth0
NET: 192.168.12.0
MASK: 255.255.255.0

Если ваше DEV не eth0, не eth1 и т.д. , то вас ждут проблемы.

В этой программе мы попросили libpcap распечатать некоторые спецификации сетевого интерфейса.
Так , в Unix eth0 — сетевая карта номер 1. И мы будем грабить именно это устройство.

Capturing Our First Packet

Итак , мы определили интерфейс и готовы к захвату пакетов. Рассмотрим пример — testpcap1.c:

Если вы соблюдаете все правила , то вывод должен быть типа:

destination address — в данном случае должен быть гейтом. Проверим роутинг: теперь наберем команду arp для получения адреса ethernet:

Обратите внимание на то , что адрес гейта — 192.168.1.1 -соответствует destination address пакета. Все пакеты , посылаемые с вашей машины , если они не прдназначены для конкретной машины, посылаются через гейт.А откуда наш компьютер знает адрес гейта? Хороший вопрос. Компьютер должен знать адрес гейта по определению. Это же нам показала команда arp, которая берет его из специальной внутренней таблицы-кеша, в которой каждый ip-адрес поставлен в соответствие hardware-адресу.

Этот Hardware-адрес получается с использованием Address Resolution Protocol или ARP. ARP описан в RFC826. Когда вы посылаете пакет, ядро проверяет arp cache , если там destination address.

Давайте удалим destination address из кеша: После чего компьютер пытается сделать широковещательный запрос — broadcast (ff:ff:ff:ff:ff:ff), пытаясь отыскать IP 192.168.1.1.

Допустим наша сетка имеет пропускную способность в 10Mb/s.

Первое поле ETH_ALEN есть destination ethernet address пакета. Второе поле ETH_ALEN — источник. Третье поле — тип пакета. id-шники протоколов из net/ethernet.h
Нам итересен прежде всего IP и немного ARP.

Читайте также:  Glc coupe bmw x4 сравнение по разгону

Writing a Basic Packet Capture Engine

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

Рассмотрим следующий библиотечный метод pcap :

  • int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)

Он будет использован нами как один из базовых. Во время цикла pcap_loop(..) будет происходить захват пакетов, которые будут передаваться в callback function типа pcap_handler.
Здесь представляют интерес аргументы 2 и 3, хидер для pcap packet и константа u_char.

В качестве примера напишем программу , которая захватывает в цикле n пакетов.

Allright then, lets give her a whirl!

Как вы видите , my_callback(. ) была вызвана 7 раз. Весь анализ пакетов мы положили внутрь my_callback. Но это не совсем правильное решение. Первая проблема в том , что pcap_loop(..) может подвиснуть в случае отсутствия пакетов. Было бы неплохо установить тайм-аут на чтение. Одним из параметров функции pcap_open_live(..) является тайм-аут в милли-секундах. Функция pcap_loop игнорирует этот аргумент, но pcap_dispatch(..) нет! Смотрите описание pcap_dispatch() в man page

************
pcap_dispatch() используется для сбора пакетов. cnt — определяет максимальное число пакетов. cnt = -1 говорит о том , что все пакеты возвращаются в одном буфере. cnt = 0 обрабатывает пакеты до тех пор , пока не произойдет ошибка. callback — подпрограмма , вызываемая 3-м аргументом:u_char — указатель на нее, туда входит структура pcap_pkthdr и данные. pcap_dispatch() возвращает число прочитанных пакетов. -1 означает ошибку, для ее вывода можно использовать pcap_perror() или pcap_geterr().
************

Нам неинтересны все пакеты,гуляющие по сети. Что нужно для того , чтобы захватить пакеты , зная номер хоста и номер порта ? Использовать pcap_compile(..) и pcap_setfilter(. ).

Мы можем захватить все пакеты и отсортировать их. Но трафик может быть нешуточным. В библиотеке libpcap есть интерфейс,позволяющий определить точно , какие пакеты нас интересуют. Для этого нужно передать фильтр в форме строки функции pcap_compile(). Есть волшебная программа tcpdump и ее man page. Как правило,эта программа стоит по умолчанию везде. Tcpdump — это фактически враппер для libpcap. tcpdump man page явно описывает синтаксис и семантику языка фильтров. Вот часть этого мана:

Используем эту информацию в качестве отправной точки. Допустим,в моей локальной сетке 2 машины — линуксовая и виндовая, которые соединены через хаб. Если я сетевую карту на линуксовой машине установлю в promiscuous mode, я смогу увидеть весь трафик,идущий через виндовую машину.

Рассмотрим следующую программу :

Эта программа принимает строку от пользователя, компилирует ее и устанавливает ее в качестве фильтра- при этом нужно сделать запрос на google.com:

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

Похоже, и тут мы попали в точку. Теперь неплохо бы расшифровать полученную информацию. В следующем разделе рассмотрим анализ пакетов.

Packet Analysis

В этом разделе мы затронем тему выделения информации. Для этого неплохо бы знать соответственные RFC: RFC 791 (IP),RFC 768 (UDP),RFC 826 (ARP),RFC 792 (ICMPv4) и конечно RFC 793 (TCPv4).

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

Следующая программа будет построена на основе предыдущих, с небольшим изменением callback function, которая передается в pcap_loop() или pcap_dispatch(). Рассмотрим следующий пример:

Эта программа будет использована в качестве заготовки для дальнейших программ. Вы могли заметить, что я передаю u_char* ( NULL) в pcap_loop(). Это делается для передачи первого аргумента. Итак, нам нужно прочитать тело TCP packets.

Важнейшим элементом любого хидера является тип пакета. Структура struct ether_header из net/ethernet.h:

Это дает нам возможность конвертации ethernet headers в читаемый ascii. конвертация ethernet address в HOSTNAME Кое-что тут было позаимствовано из небезизвестного Steven’s-а. А вот и callback function для управления ethernet headers, распечатки source и destination — адресов:

В исходниках вы найдете пример disect1.c.

Давайте теперь подробнее посмотрим на IP-хидер:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code