Лучшие инструменты пен-тестера: сниферы и работа с пакетами. Что такое Intercepter-NG. Описание атаки ARP-spoofing

27.04.2019

Программа Wireshark станет отличным помощником для тех пользователей, кому требуется произвести детальный анализ сетевых пакетов, - трафика компьютерной сети. Сниффер легко взаимодействует с такими распространенными протоколами, как netbios, fddi, nntp, icq, x25, dns, irc, nfs, http, tcp, ipv6 и многими другими. Позволяет при анализе разделять сетевой пакет на соответствующие составляющие, согласно определенному протоколу, и выдавать на экран удобочитаемую информацию в числовом виде.
поддерживает огромное число разнообразных форматов передаваемой и получаемой информации, способен открывать файлы, которые находятся в пользовании других утилит. Принцип работы заключается в том, что сетевая карточка переходит в широковещательный режим и начинается перехват сетевых пакетов, которые находятся в зоне её видимости. Умеет работать как программа для перехвата пакетов wifi.

Как пользоваться wireshark

Программа занимается изучением содержимого информационных пакетов, которые проходят через сеть. Чтобы запустить и воспользоваться результатами работы сниффера не требуется никаких специфических знаний, просто нужно открыть ее в "Пуск" меню или кликнуть по значку на рабочем столе (её запуск ничем не отличается от любой другой Windows программы). Особая функция утилиты позволяет ей захватывать информационные пакеты, тщательно расшифровывать их содержимое и выдавать пользователю для анализа.

Запустив wireshark, Вы увидите на экране главное меню программы, которое расположено в верхней части окна. С помощью него и происходит управление утилитой. Если вам нужно загрузить файлы, которые хранят данные о пакетах, пойманных в предыдущих сессиях, а также сохранить данные о других пакетах, добытые в новом сеансе, то для этого вам потребуется вкладка "File".

Чтобы запустить функцию захвата сетевых пакетов, пользователь должен кликнуть на иконку "Capture", затем отыскать специальный раздел меню под названием "Interfaces", с помощью которого можно открыть отдельное окно "Wireshark Capture Interfaces", где должны будут показаны все доступные сетевые интерфейсы, через которые и будет произведен захват нужных пакетов данных. В том случае, когда программа (сниффер) способна обнаружить только один подходящий интерфейс, она выдаст на экран всю важную информацию о нем.

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

Имеется версия и для Linux систем.

Следует отметить, что сниффер крайне полезен для сетевых администраторов и службы компьютерной безопасности, ведь утилита позволяет определить потенциально незащищённые узлы сети – вероятные участки, которые могут быть атакованы хакерами.

Помимо своего прямого предназначения Wireshark может использоваться как средство для мониторинга и дальнейшего анализа сетевого трафика с целью организации атаки на незащищённые участки сети, ведь перехваченный трафик можно использовать для достижения различных целей.

В этой статье мы рассмотрим создание простого сниффера под ОС Windows.
Кому интересно, добро пожаловать под кат.

Введение

Цель: написать программу, которая будет захватывать сетевой трафик (Ethernet, WiFi), передающийся по протоколу IP.
Средства: Visual Studio 2005 или выше.
Подход, который здесь описан, не принадлежит лично автору и успешно применяется во многих коммерческих, а также категорически бесплатных программах (привет, GPL).
Сей труд предназначен прежде всего для новичков в сетевом программровании, которые, однако, имеют хотя бы базовые знания в области сокетов вообще, и windows-сокетов в частности. Здесь я часто буду писать общеизвестные вещи, потому что предметная область специфическая, если что-то пропустить - в голове будет каша.

Надеюсь, Вам будет интересно.

Теория (читать не обязательно, но желательно)

В данный момент подавляющее большинство современных информационных сетей базируются на фундаменте стека протоколов TCP/IP. Стек протоколов TCP/IP (англ. Transmission Control Protocol/Internet Protocol) - собирательное название для сетевых протоколов разных уровней, используемых в сетях. В настоящей статье нас будет интересовать в основном протокол IP - маршрутизируемый сетевой протокол, используемый для негарантированной доставки данных, разделяемых на так называемые пакеты (более верный термин – дейтаграмма) от одного узла сети к другому.
Особый интерес для нас представляют IP-пакеты, предназначенные для передачи информации. Это достаточно высокий уровень сетевой OSI-модели данных, когда можно обстрагироваться от устройства и среды передачи данных, оперируя лишь логическим представлением.
Совершенно логичным является то обстоятельство, что рано или поздно должны были появится инструменты для перехвата, контроля, учета и анализа сетевого трафика. Такие средства обычно называется анализаторами трафика, пакетными анализаторыми или снифферами (от англ. to sniff - нюхать). Это - сетевой анализатор трафика, программа или программно-аппаратное устройство, предназначенное для перехвата и последующего анализа, либо только анализа сетевого трафика, предназначенного для других узлов.

Практика (разговор по существу)

На данный момент создано достаточно много программного обеспечения для прослушивания трафика. Наиболее известный из них: Wireshark . Естественно, пожинать его лавры цель не стоит - нас интересует задача перехвата трафика методом обычного «прослушивания» сетевого интерфейса. Важно понимать, что мы не собираемся заниматься взломом и перехватывать чужой трафик. Нужно всего лишь просматривать и анализировать трафик, который проходит через наш хост.

Для чего это может понадобиться:

  1. Смотреть текущий поток трафика через сетевое соеднинение (входящий/исходящий/всего).
  2. Перенаправлять трафик для последующего анализа на другой хост.
  3. Теоретически, можно попытаться применить его для взлома WiFi-сети (мы ведь не собираемся этим заниматься?).
В отличие от Wireshark, который базируется на библиотеке libpcap/WinPcap, наш анализатор не будет использовать этот драйвер. Чего уж там, у нас вообще не будет драйвера, и свой NDIS(о ужас!) мы писать не собираемся. Про это можно прочитать в . Он будет просто пассивным наблюдателем, использующим только библиотеку WinSock. Использование драйвера в данном случае избыточно.

Как так? Очень просто.
Ключевым шагом в превращении простого сетевого приложения в сетевой анализатор является переключение сетевого интерфейса в режим прослушивания (promiscuous mode), что и позволит ему получать пакеты, адресованные другим интерфейсам в сети. Этот режим заставляют сетевую плату принимать все кадры, вне зависимости от того, кому они адресованы в сети.

Начиная с Windows 2000 (NT 5.0) создать программу для прослушивания сегмента сети стало очень просто, т.к. ее сетевой драйвер позволяет перевести сокет в режим приёма всех пакетов.

Включение неразборчивого режима
long flag = 1; SOCKET socket; #define SIO_RCVALL 0x98000001 ioctlsocket(socket, SIO_RCVALL, &RS_Flag);
Наша программа оперирует IP-пакетами, и использует библиотеку Windows Sockets версии 2.2 и «сырые» сокеты (raw sockets). Для того чтобы получить прямой доступ к IP-пакету, сокет нужно создавать следующим образом:
Создание сырого сокета
s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
Здесь вместо константы SOCK_STREAM (протокол TCP) или SOCK_DGRAM (протокол UDP), мы используем значение SOCK_RAW . Вообще говоря, работа с raw sockets интересна не только с точки зрения захвата трафика. Фактически, мы получаем полный контроль за формированием пакета. Вернее, формируем его вручную, что позволяет, например, послать специфический ICMP-пакет…

Идем дальше. Известно, что IP-пакет состоит из заголовка, служебной информации и, собственно, данных. Советую заглянуть сюда , чтобы освежит знания. Опишем в виде структуры IP-заголовок (спасибо отличной статье на RSDN ):

Описание структуры IP-пакета
typedef struct _IPHeader { unsigned char ver_len; // версия и длина заголовка unsigned char tos; // тип сервиса unsigned short length; // длина всего пакета unsigned short id; // Id unsigned short flgs_offset; // флаги и смещение unsigned char ttl; // время жизни unsigned char protocol; // протокол unsigned short xsum; // контрольная сумма unsigned long src; // IP-адрес отправителя unsigned long dest; // IP-адрес назначения unsigned short *params; // параметры (до 320 бит) unsigned char *data; // данные (до 65535 октетов) }IPHeader;
Главная функция алгоритма прослушивания будет выглядеть следующим образом:
Функция захвата одного пакета
IPHeader* RS_Sniff() { IPHeader *hdr; int count = 0; count = recv(RS_SSocket, (char*)&RS_Buffer, sizeof(RS_Buffer), 0); if (count >= sizeof(IPHeader)) { hdr = (LPIPHeader)malloc(MAX_PACKET_SIZE); memcpy(hdr, RS_Buffer, MAX_PACKET_SIZE); RS_UpdateNetStat(count, hdr); return hdr; } else return 0; }
Здесь все просто: получаем порцию данных с помощью стандартной функции socket-функции recv , а затем копируем их в структуру типа IPHeader .
И, наконец, запускаем бесконечный цикл захвата пакетов:
Захватым все пакеты, которые попадут на наш сетевой интерфейс
while (true) { IPHeader* hdr = RS_Sniff(); // обработка IP-пакета if (hdr) { // печатаем заголовок в консоли } }
Немного оффтопика
Здесь и далее у некоторых важных функций и переменных автор сделал префкис RS_ (от Raw Sockets). Проект делал 3-4 года назад, и была шальная мысль написать полноценную библиотеку для работы с сырыми сокетами. Как это часто бывает, после получения сколь-нибудь значимых(для автора) результатов, энтузиазм угас, и дальше учебного примера дело не полшло.

В принципе, можно пойти дальше, и описать заголовки всех последующих протоколов, находящихся выше. Для этого необходимо анализировать поле protocol в структуре IPHeader . Посмотрите на пример кода (да, там должен быть switch, чёрт возьми!), где происходит раскрашивание заголовка в зависимости от того, какой протокол имеет пакет, инкапсулированный в IP:

/* * Выделение пакета цветом */ void ColorPacket(const IPHeader *h, const u_long haddr, const u_long whost = 0) { if (h->xsum) SetConsoleTextColor(0x17); // если пакет не пустой else SetConsoleTextColor(0x07); // пустой пакет if (haddr == h->src) { SetConsoleTextColor(BACKGROUND_BLUE | /*BACKGROUND_INTENSITY |*/ FOREGROUND_RED | FOREGROUND_INTENSITY); // "родной" пакет на отдачу } else if (haddr == h->dest) { SetConsoleTextColor(BACKGROUND_BLUE | /*BACKGROUND_INTENSITY |*/ FOREGROUND_GREEN | FOREGROUND_INTENSITY); // "родной" пакет на прием } if (h->protocol == PROT_ICMP || h->protocol == PROT_IGMP) { SetConsoleTextColor(0x70); // ICMP-пакет } else if(h->protocol == PROT_IP || h->protocol == 115) { SetConsoleTextColor(0x4F); // IP-in-IP-пакет, L2TP } else if(h->protocol == 53 || h->protocol == 56) { SetConsoleTextColor(0x4C); // TLS, IP with Encryption } if(whost == h->dest || whost == h->src) { SetConsoleTextColor(0x0A); } }

Однако это существенно выходит за рамки этой статьи. Для нашего учебного примера вполне достаточно будет посмотреть ip-адреса хостов, с которых и на которые идет трафик, и посчитать его количество в единицу времени(готовая программа в архиве в конце статьи).

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

Преобразование IP-заголовка в строку
inline char* iph2str(IPHeader *iph) { const int BUF_SIZE = 1024; char *r = (char*)malloc(BUF_SIZE); memset((void*)r, 0, BUF_SIZE); sprintf(r, "ver=%d hlen=%d tos=%d len=%d id=%d flags=0x%X offset=%d ttl=%dms prot=%d crc=0x%X src=%s dest=%s", BYTE_H(iph->ver_len), BYTE_L(iph->ver_len)*4, iph->tos, ntohs(iph->length), ntohs(iph->id), IP_FLAGS(ntohs(iph->flgs_offset)), IP_OFFSET(ntohs(iph->flgs_offset)), iph->ttl, iph->protocol, ntohs(iph->xsum), nethost2str(iph->src), nethost2str(iph->dest)); return r; }
На основании приведенных выше базовых сведений, получается вот такая небольшая программа (жуткое название ss, сокр. от англ. simple sniffer), реализующая локальное прослушивание IP-трафика. Интерфейс ее приведен ниже на рисунке.

Исходный и бинарный код предоставляю как есть, таким как он был несколько лет назад. Сейчас мне на него страшно смотреть, и все же, он вполне читабельный (конечно же, нельзя быть таким самоуверенным). Для компиляции будет достаточно даже Visual Studio Express 2005.

Что у нас получилось в итоге:

  • Сниффер работает в режиме пользователя, однако требует привилегии администратора.
  • Пакеты не фильтруются, отображаясь как есть (можно добавить настраиваемые фильтры - предлагаю подробно рассмотреть эту тему в следующей статье, если интересно).
  • WiFi-трафик тоже захватывается(все зависит от конкретной модели чипа, у Вас может и не работать, как у меня несколько лет назад), хотя есть AirPcap, которая чудесно это умеет делать, но стоит денег.
  • Весь поток дейтаграмм логируется в файл (см. архив, приложенный в конце статьи).
  • Программа работает в качестве сервера на порту 2000. Можно подключиться с помощью утилиты telnet к хосту и произвести мониторинг потоков трафика. Количество подключений ограничено двадцатью (код не мой, нашел на просторах сети и применял для экспериментов; удалять не стал - жалко)
Спасибо за внимание, проздравляю хабровчан и хабровчанок и всех-всех-всех с наступающим Рождеством!

После покупки своего первого смартфона люди обычно замечают, что расходы на мобильную связь немного увеличиваются. Обычно это происходит за-за того, что «умный» телефон «ходит в Сеть» без ведома хозяина. Конечно, решить эту проблему просто - установить специальные утилиты для блокирования подключений к точкам доступа GPRS/HSDPA либо купить безлимитный тариф на доступ в Интернет и забыть. Столкнувшись с описанной ситуацией, я в первую очередь заинтересовался и тем, что телефон ищет в Сети и, самое главное, что передает в Сеть. Последнее особенно актуально в связи с .

Для просмотра траффика, который смартфон отправляет в Сеть, понадобится специальная программа - сниффер .
Иногда ее можно просто установить на телефон. Это самый надежный способ, но он не всегда доступен.
Если на смартфоне есть Wi-Fi, то можно использовать дополнительные устройства - например, подключить его через Wi-Fi к роутеру или компьютеру со сниффером, или, если нет доступа к роутеру с Wi-Fi, подключить его к незащищенной Wi-Fi сети и анализировать весь траффик с третьего компьютера.

Рассмотрим самый типичный случай - домашнюю сеть, управляемую обычной точкой доступа с Wi-Fi (DSL-модем или роутер), параметры которой менять не хочется. Большинство домашних точек доступа работает под управлением Linux, к которому можно без проблем получить доступ, например, через telnet.
Данная заметка расскажет, как перенаправить весь траффик со смартфона (или вообще с любого другого хоста сети) на компьютер с Linux для изучения так, чтобы для исследуемого устройства это было незаметно.

Здесь не описываются принципы работы Netfilter или iproute2. Эту информацию легко найти в Интернет - в конце заметки есть ссылки, где можно об этом прочитать. Приведен всего лишь еще один способ элегантного применения этих средств, который, надеюсь, даст возможность почувствовать всю их мощь и простоту.

Итого мы имеем:

  1. Сеть с роутером на Linux и доступным на нем shell (например, для моего случая - модема от Стрима получение доступа описано ). IP-адрес в сети: 192.168.1.1.
  2. Компьютер с любым дистрибуивом Linux. Почему Linux? Да потому что практически все дистрибутивы Linux включают в себя утилиты iptables и iproute2 и сниффер tcpdump, с помощью которых можно решать почти все сетевые задачи. Но сниффером лучше пользоваться с GUI. Например, Wireshark. IP-адрес: 192.168.1.2.
  3. Собственно, исследуемое устройство - смартфон, подключенный к нашей сети. IP-адрес: 192.168.1.3.

План действий простой: используя iproute2, создаем на роутере отдельную таблицу маршрутизации и правило, которое будет использовать ее для всего траффика со смартфона. Укажем в таблице шлюз по умолчанию - хост со сниффером:

# Выполнять на роутере ROUTER=192.168.1.1 SLEUTH=192.168.1.2 SUSPECT=192.168.1.3 TABLE=14 ip rule add from $SUSPECT table $TABLE priority 5 ip route add default via $SLEUTH table $TABLE

Важно! Не допускается два правила с одинаковым приоритетом. Сначала нужно проверить, нет ли другого правила с таким же приоритетом: ip rule list

Число для priority желательно выбрать поменьше - чем меньше значение, тем выше приоритет. У меня первые четыре были заняты.
Таблицу ($TABLE) можно выбрать любую неиспользуемую. Используется ли таблица, можно посмотреть с помощью команды ip route list table $TABLE .

Хост со сниффером должен перенаправлять весь исследуемый траффик в Сеть. С этим легко справится NAT . Далее этот траффик легко пройдет через все тот же роутер и отправится по назначению - ведь теперь у IP-пакетов другой адрес отправителя и в нашу таблицу маршрутизации он не попадет:

# Выполнять на сниффере ROUTER=192.168.1.1 SLEUTH=192.168.1.2 SUSPECT=192.168.1.3 sysctl -w net.ipv4.ip_forward="1" iptables -I FORWARD -s $SUSPECT -j ACCEPT iptables -I FORWARD -d $SUSPECT -j ACCEPT iptables -t nat -I POSTROUTING -s $SUSPECT -j MASQUERADE

Вот, казалось бы, и всё. Можно запускать на компьютере сниффер и фильтровать траффик по IP-адресу 192.168.1.3.

Но у такой схемы есть существенный недостаток: на сниффер не попадет траффик, который предназначался самому роутеру. Например, DNS. Иногда, это важно, например, чтобы определить, что за сервер 74.125.39.188 (mtalk.google.com), на которых смартфон непрерывно что-то шлет. Для этого снова используем iptables. Судя по схеме из руководства по iptables, чтобы в результате маршрутизации этот траффик был перенаправлен (попал в правую ветвь), нужно изменить его адрес назначения в PREROTING:

# Выполнять на роутере iptables -t nat -I PREROUTING -s $SUSPECT -d $ROUTER -j DNAT --to-destination $SLEUTH

Команды, настраивающие перенаправление (таблицу FORWARD), пропустим - ведь на роутере оно уже должно работать в штатном режиме:)

На хосте-сниффере меняем адрес назначения назад:

# Выполнять на сниффере iptables -t nat -I PREROUTING -s $SUSPECT -d $SLEUTH -j DNAT --to-destination $ROUTER

Надо заметить, что на хосте-сниффере траффик попадет под маскарадинг (MASQUERADE), то есть у пакетов адрес источника тоже поменяется. В итоге пакеты должны перемещаться по следующей схеме (над стрелками указаны номера хостов отправителя и получателя пакета, последовательность - сверху вниз):

Однако, такой вариант не сработает в случае, когда компьютер и смартфон находятся в одном сегменте, и роутер выступает в роли сетевого моста . Тогда согласно таблице маршрутизации на хосте сниффера обратный траффик будет направлен прямо получателю, а ОС получателя - смартфона - должна проигнорировать его, потому что адрес отправителя будет не тот, с которым устанавливается соединение:

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

# Выполнять на сниффере TABLE=15 ip rule add to $SUSPECT table $TABLE priority 7 ip route add default via $ROUTER table $TABLE

Получая данный «проблемный» траффик, Netfilter роутера с помощью механизма определения состояний (модуля nf_conntrack), «узнаёт» в нем соединения, измененные с помощью DNAT и заменяет адрес получателя пакетов на исходный. Далее пакеты отправляется получателю как ни в чем не бывало.

Окончательный вариант скриптов:

# Выполнять на роутере ROUTER=192.168.1.1 SLEUTH=192.168.1.2 SUSPECT=192.168.1.3 TABLE=14 ip rule add from $SUSPECT table $TABLE priority 4 ip route add default via $SLEUTH table $TABLE iptables -t nat -I PREROUTING -s $SUSPECT -d $ROUTER -j DNAT --to-destination $SLEUTH

# Выполнять на сниффере ROUTER=192.168.1.1 SLEUTH=192.168.1.2 SUSPECT=192.168.1.3 sysctl -w net.ipv4.ip_forward="1" iptables -I FORWARD -s $SUSPECT -j ACCEPT iptables -I FORWARD -d $SUSPECT -j ACCEPT iptables -t nat -I POSTROUTING -s $SUSPECT -j MASQUERADE iptables -t nat -I PREROUTING -s $SUSPECT -d $SLEUTH -j DNAT --to-destination $ROUTER TABLE=15 ip rule add to $SUSPECT table $TABLE priority 5 ip route add default via $ROUTER table $TABLE

Примечания

  1. И на роутере, и на компьютере должны быть установлены пакеты iptables, iproute2, а в ядро должна быть включена поддержка netfilter и advanced routing. В большинстве дистрибутивов и в большинстве роутеров выполнено и то, и другое. Если ядро было сконфигурировано самостоятельно, то лучше перепроверить их наличие.
  2. Роутер, хост-сниффер и телефон могут находиться в разных сегментах сети. Главное, чтобы они были связаны, и весь траффик со смартфона проходил через роутер.
  3. В качестве смартфона в этой заметке может выступать любое другое устройство, способное выходить в Интрнет через Wi-Fi или Ethernet.
  4. Применение описанного метода для сбора и распространения конфиденциальной информации а также частной информации о жизни лица без его согласия НЕЗАКОННО! (Статьи 137, 138 УК РФ)
  5. Помните, что даже защищенные Wi-Fi сети могут быть небезопасными, если вы не уверены в том, что точка доступа полностью защищена от вмешательства посторонних лиц. Если это важно, используйте протоколы передачи данных, поддерживающие шифрование, например, HTTPS, XMPP (Jabber).
  6. Конечно же применение данного метода по отношению к компьютеру с полноценной ОС легко отслеживается и с помощью tracroute (tracert в Windows), или просто из-за уменьшения TTL пакетов, что заметно при пинге роутера.

Многие пользователи и не догадываются, что заполняя логин и пароль при регистрации или авторизации на закрытом Интернет-ресурсе и нажимая ENTER, эти данные легко могут перехватить. Очень часто они передаются по сети не в защищенном виде. Поэтому если сайт, на котором вы пытаетесь авторизоваться, использует HTTP протокол, то очень просто выполнить захват этого трафика, проанализировать его с помощью Wireshark и далее с помощью специальных фильтров и программ найти и расшифровать пароль.

Лучшее место для перехвата паролей - ядро сети, где ходит трафик всех пользователей к закрытым ресурсам (например, почта) или перед маршрутизатором для выхода в Интернет, при регистрациях на внешних ресурсах. Настраиваем зеркало и мы готовы почувствовать себя хакером.

Шаг 1. Устанавливаем и запускаем Wireshark для захвата трафика

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

Захват трафика начался.

Шаг 2. Фильтрация захваченного POST трафика

Открываем браузер и пытаемся авторизоваться на каком-либо ресурсе с помощью логина и пароля. По завершению процесса авторизации и открытия сайта мы останавливаем захват трафика в Wireshark. Далее открываем анализатор протоколов и видим большое количество пакетов. Именно на этом этапе большинство ИТ-специалистов сдаются, так как не знают, что делать дальше. Но мы знаем и нас интересуют конкретные пакеты, которые содержат POST данные, которые формируются на нашей локальной машине при заполнении формы на экране и отправляются на удаленные сервер при нажатии кнопки «Вход» или «Авторизация» в браузере.

Вводим в окне специальный фильтр для отображения захваченных пакетов: http. request. method == “ POST”

И видим вместо тысячи пакетов, всего один с искомыми нами данными.

Шаг 3. Находим логин и пароль пользователя

Быстрый клик правой кнопки мыши и выбираем из меню пункт Follow TCP Steam


После этого в новом окне появится текст, который в коде восстанавливает содержимое страницы. Найдем поля «password» и «user», которые соответствуют паролю и имени пользователя. В некоторых случаях оба поля будут легко читаемы и даже не зашифрованы, но если мы пытаемся захватить трафик при обращении к очень известным ресурсам типа: Mail.ru, Facebook, Вконтакте и т.д., то пароль будет закодирован:

HTTP/1.1 302 Found

Server: Apache/2.2.15 (CentOS)

X-Powered-By: PHP/5.3.3

P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"

Set-Cookie: password=; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/

Location: loggedin.php

Content-Length: 0

Connection: close

Content-Type: text/html; charset=UTF-8

Таким образом, в нашем случае:

Имя пользователя: networkguru

Пароль:

Шаг 4. Определение типа кодирования для расшифровки пароля

Заходим, например, на сайт http://www.onlinehashcrack.com/hash-identification.php#res и вводим наш пароль в окно для идентификации. Мне выдан был список протоколов кодирования в порядке приоритета:

Шаг 5. Расшифровка пароля пользователя

На данном этапе можем воспользоваться утилитой hashcat:

~# hashcat -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt

На выходе мы получили расшифрованным пароль: simplepassword

Таким образом, с помощью Wireshark мы можем не только решать проблемы в работе приложений и сервисов, но и также попробовать себя в роли хакера, осуществляя перехват паролей, которые пользователи вводят в веб-формах. Также можно узнавать и пароли к почтовым ящикам пользователей, используя незатейливые фильтры для отображения:

  • Протокол POP и фильтр выглядит следующим образом: pop.request.command == "USER" || pop.request.command == "PASS"
  • Протокол IMAP и фильтр будет: imap.request contains "login"
  • Протокол SMTP и потребуется ввод следующего фильтра: smtp.req.command == "AUTH"

и более серьезные утилиты для расшифровки протокола кодирования.

Шаг 6. Что делать, если трафик зашифрован и используется HTTPS?

Для ответа на этот вопрос есть несколько вариантов.

Вариант 1. Подключиться в разрыв соединения между пользователем и сервером и захватить трафик в момент установления соединения (SSL Handshake). В момент установки соединения можно перехватить сеансовый ключ.

Вариант 2. Вы можете расшифровать трафик HTTPS, используя файл журнала сеансовых ключей, записываемый Firefox или Chrome. Для этого браузер должен быть настроен на запись этих ключей шифрования в файл журнала (пример на базе FireFox), и вы должны получить этот файл журнала. По сути, необходимо похитить файл с ключом сессии с жесткого диска другого пользователя (что является незаконным). Ну а далее захватить трафик и применить полученный ключ для его расшифровки.

Уточнение. Мы говорим о веб-браузере человека, у которого пытаются украсть пароль. Если же мы подразумеваем расшифровку нашего собственного HTTPS трафика и хотим потренироваться, то эта стратегия будет работать. Если вы пытаетесь расшифровать HTTPS трафик других пользователей без доступа к их компьютерам, это не сработает - на то оно и шифрование, и личное пространство.

После получения ключей по варианту 1 или 2 необходимо прописать их в WireShark:

  1. Идем в меню Edit - Preferences - Protocols - SSL.
  2. Ставим флаг «Reassemble SSL records spanning multiple TCP segments».
  3. «RSA keys list» и нажимаем Edit.
  4. Вводим данные во все поля и прописываем путь в файлу с ключом

WireShark может расшифровывать пакеты, которые зашифрованы с использованием алгоритма RSA. В случае если используются алгоритмы DHE/ECDHE, FS, ECC, сниффер нам не помощник.

Вариант 3. Получить доступ к web-серверу, которым пользуется пользователь, и получить ключ. Но это является еще более сложной задачей. В корпоративных сетях с целью отладки приложений или контент фильтрации этот вариант реализуется на легальной основе, но не с целью перехвата паролей пользователей.

БОНУС

ВИДЕО: Wireshark Packet Sniffing Usernames, Passwords, and Web Pages

Что такое Intercepter-NG

Рассмотрим суть функционирования ARP на простом примере. Компьютер А (IP-адрес 10.0.0.1) и компьютер Б (IP-адрес 10.22.22.2) соединены сетью Ethernet. Компьютер А желает переслать пакет данных на компьютер Б, IP-адрес компьютера Б ему известен. Однако сеть Ethernet, которой они соединены, не работает с IP-адресами. Поэтому компьютеру А для осуществления передачи через Ethernet требуется узнать адрес компьютера Б в сети Ethernet (MAC-адрес в терминах Ethernet). Для этой задачи и используется протокол ARP. По этому протоколу компьютер А отправляет широковещательный запрос, адресованный всем компьютерам в одном с ним широковещательном домене. Суть запроса: «компьютер с IP-адресом 10.22.22.2, сообщите свой MAC-адрес компьютеру с МАС-адресом (напр. a0:ea:d1:11:f1:01)». Сеть Ethernet доставляет этот запрос всем устройствам в том же сегменте Ethernet, в том числе и компьютеру Б. Компьютер Б отвечает компьютеру А на запрос и сообщает свой MAC-адрес (напр. 00:ea:d1:11:f1:11) Теперь, получив MAC-адрес компьютера Б, компьютер А может передавать ему любые данные через сеть Ethernet.

Чтобы не было необходимости перед каждой отправкой данных задействовать протокол ARP, полученные MAC-адреса и соответствующие им IP адреса записываются в таблице на некоторое время. Если нужно отправить данные на тот же IP, то нет необходимости каждый раз опрашивать устройства в поисках нужного MAC.

Как мы только что увидели, ARP включает в себя запрос и ответ. MAC-адрес из ответа записывается в таблицу MAC/IP. При получении ответа он никак не проверяется на подлинность. Более того, даже не проверяется, был ли сделан запрос. Т.е. на целевые устройства можно прислать сразу ARP-ответ (даже без запроса), с подменёнными данными, и эти данные попадут в таблицу MAC/IP и они будут использоваться для передачи данных. Это и есть суть атаки ARP-spoofing , которую иногда называют ARP травлением, травлением ARP кэша.

Описание атаки ARP-spoofing

Два компьютера(узла) M и N в локальной сети Ethernet обмениваются сообщениями. Злоумышленник X, находящийся в этой же сети, хочет перехватывать сообщения между этими узлами. До применения атаки ARP-spoofing на сетевом интерфейсе узла M ARP-таблица содержит IP и MAC адрес узла N. Также на сетевом интерфейсе узла N ARP-таблица содержит IP и MAC узла M.

Во время атаки ARP-spoofing узел X (злоумышленник) отсылает два ARP ответа (без запроса) - узлу M и узлу N. ARP-ответ узлу M содержит IP-адрес N и MAC-адрес X. ARP-ответ узлу N содержит IP адрес M и MAC-адрес X.

Так как компьютеры M и N поддерживают самопроизвольный ARP, то, после получения ARP-ответа, они изменяют свои ARP таблицы, и теперь ARP-таблица M содержит MAC адрес X, привязанный к IP-адресу N, а ARP-таблица N содержит MAC адрес X, привязанный к IP-адресу M.

Тем самым атака ARP-spoofing выполнена, и теперь все пакеты(кадры) между M и N проходят через X. К примеру, если M хочет передать пакет компьютеру N, то M смотрит в свою ARP-таблицу, находит запись с IP-адресом узла N, выбирает оттуда MAC-адрес (а там уже MAC-адрес узла X) и передает пакет. Пакет поступает на интерфейс X, анализируется им, после чего перенаправляется узлу N.

Похожие статьи