Лучшие инструменты пен-тестера: сниферы и работа с пакетами. Пишем простой сниффер под Windows

Лучшие инструменты пен-тестера: сниферы и работа с пакетами. Пишем простой сниффер под Windows

После покупки своего первого смартфона люди обычно замечают, что расходы на мобильную связь немного увеличиваются. Обычно это происходит за-за того, что «умный» телефон «ходит в Сеть» без ведома хозяина. Конечно, решить эту проблему просто - установить специальные утилиты для блокирования подключений к точкам доступа 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 пакетов, что заметно при пинге роутера.

Многим пользователям компьютерных сетей, в общем-то, незнакомо такое понятие как «сниффер». Что такое сниффер, попытаемся и определить, говоря простым языком неподготовленного пользователя. Но для начала все равно придется углубиться в предопределение самого термина.

Сниффер: что такое sniffer с точки зрения английского языка и компьютерной техники?

На самом деле определить сущность такого программного или программно-аппаратного комплекса вовсе несложно, если просто перевести термин.

Это название происходит от английского слова sniff (нюхать). Отсюда и значение русскоязычного термина «сниффер». Что такое sniffer в нашем понимании? «Нюхач», способный отслеживать использование сетевого трафика, а, проще говоря, шпион, который может вмешиваться в работу локальных или интернет-ориентированных сетей, извлекая нужную ему информацию на основе доступа через протоколы передачи данных TCP/IP.

Анализатор трафика: как это работает?

Оговоримся сразу: сниффер, будь он программным или условно-программным компонентом, способен анализировать и перехватывать трафик (передаваемые и принимаемые данные) исключительно через сетевые карты (Ethernet). Что получается?

Сетевой интерфейс не всегда оказывается защищенным файрволлом (опять же - программным или «железным»), а потому перехват передаваемых или принимаемых данных становится всего лишь делом техники.

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

Благие намерения и злоумышленные цели?

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

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

Виды снифферов

Но и по видам их можно разделить на несколько основных:

  • аппаратные;
  • программные;
  • аппаратно-программные;
  • онлайн-апплеты.

Поведенческое определение присутствия сниффера в сети

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

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

Онлайн-ресурсы

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

Наивные пользователи кликают по указанной гиперссылке, в результате чего активируется опознавание и передача внешнего IP-адреса злоумышленнику. При наличии соответствующего приложения он сможет не только просмотреть все данные, хранимые на компьютере, но и с легкостью поменять настройки системы извне, о чем локальный пользователь даже не догадается, приняв такое изменение за воздействие вируса. Да вот только сканер при проверке выдаст ноль угроз.

Как защититься от перехвата данных?

Будь то сниффер WiFi или любой другой анализатор, системы защиты от несанкционированного сканирования трафика все же есть. Условие одно: их нужно устанавливать только при условии полной уверенности в «прослушке».

Такие программные средства чаще всего называют «антиснифферами». Но если задуматься, это те же самые снифферы, анализирующие трафик, но блокирующие другие программы, пытающиеся получить

Отсюда законный вопрос: а стоит и устанавливать такое ПО? Быть может, его взлом со стороны хакеров нанесет еще больший вред, или оно само заблокирует то, что должно работать?

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

Вместо послесловия

Вот и все, что касается понятия «сниффер». Что такое sniffer, думается, уже многие сообразили. Напоследок вопрос остается в другом: насколько правильно такие вещи будет использовать рядовой пользователь? А то ведь среди юных юзеров иногда можно заметить склонность к компьютерному хулиганству. Они-то думают, что взломать чужой «комп» - это что-то вроде интересного соревнования или самоутверждения. К сожалению, никто из них даже не задумывается о последствиях, а ведь определить злоумышленника, использующего тот же онлайн-сниффер, очень просто по его внешнему IP, например, на сайте WhoIs. В качестве местоположения, правда, будет указана локация провайдера, тем не менее, страна и город определятся точно. Ну а потом дело за малым: либо звонок провайдеру с целью блокировки терминала, с которого производился несанкционированный доступ, либо подсудное дело. Выводы делайте сами.

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

Программа 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 к хосту и произвести мониторинг потоков трафика. Количество подключений ограничено двадцатью (код не мой, нашел на просторах сети и применял для экспериментов; удалять не стал - жалко)
Спасибо за внимание, проздравляю хабровчан и хабровчанок и всех-всех-всех с наступающим Рождеством!

Многие пользователи и не догадываются, что заполняя логин и пароль при регистрации или авторизации на закрытом Интернет-ресурсе и нажимая 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



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows