Сниффер — что за зверь — Хакер

Введение

Цель:

написать программу, которая будет захватывать сетевой трафик (Ethernet, WiFi), передающийся по протоколу IP.

Средства:

Visual Studio 2005 или выше.

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

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

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

Описание структуры 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;

Главная функция алгоритма прослушивания будет выглядеть следующим образом:

Что делать, если сниффер уже установлен на компьютер

Чтобы обнаружить сниффер на компьютере, можно установить свой собственный сниффер и изучить весь трафик на уровне DNS в вашей сети, чтобы обнаружить любую подозрительную активность.

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

Основные настройки

Переходим в “Tools -> Options…”.

Включение неразборчивого режима

long flag = 1;
SOCKET socket;
#define SIO_RCVALL 0x98000001

ioctlsocket(socket, SIO_RCVALL, &RS_Flag);


Наша программа оперирует IP-пакетами, и использует библиотеку Windows Sockets версии 2.2 и «сырые» сокеты (raw sockets). Для того чтобы получить прямой доступ к IP-пакету, сокет нужно создавать следующим образом:

Для чего нужны снифферы?

Сниффер не всегда вредоносен. «Сниффер — общее название оборудования и программного обеспечения. Они могут предназначаться для балансировки трафика, а могут использоваться и злоумышленниками. Есть аппаратные и программные снифферы», — рассказал РБК Трендам эксперт по кибербезопасности «Лаборатории Касперского» Дмитрий Галов.

Есть четыре сферы, в которых люди используют сниффер в благих намерениях:

  1. Сетевые инженеры: чтобы оптимизировать сеть, они должны следить за трафиком.
  2. Системные администраторы: им необходимо наблюдать за трафиком, чтобы собирать данные о показателях, вроде пропускной способности сети.
  3. Специалисты по кибербезопасности: они могут заметить подозрительную активность в Сети, отслеживая ее. Аномальные всплески или различные типы трафика могут указывать на наличие вредоносного программного обеспечения или проникновения хакеров в систему.
  4. Корпорации. Работодатели могут использовать программное обеспечение для отслеживания своих сотрудников и выяснять, сколько времени в течение рабочего дня они тратят на работу и сколько — на развлечения.

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

В сентябре 2022 года выяснилось, что пользователи сайта и мобильного приложения British Airways подверглись кибератаке. Под угрозой оказались все клиенты международной авиакомпании, осуществившие бронирование авиабилетов на сайте или в приложении в период с 25 августа по 5 сентября 2022 года.

В целях обслуживания сети сниффер обеспечивает:

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

Незаконно сниффер используется для:

  • сбора личной информации, такой как имена пользователей, пароли, номера кредитных карт и т.д;
  • запись сообщений, вроде электронных писем;
  • подделки личных данных;
  • кражи денег.

Самые популярные модели снифферов:

  • WinSniffer — обладает множеством настраиваемых режимов, способен перехватывать пароли различных сервисов;
  • CommView — обрабатывает данные, передаваемые по локальной сети и в интернет, собирает сведения, связанные с модемом и сетевой картой, и расшифровывает их, что дает возможность видеть полный список соединений в сети и статистические сведения по IP;
  • ZxSniffer — компактный сниффер, известный малым объемом (0,3 МБ);
  • SpyNet — популярный анализатор, в основную функциональность которого входят перехват трафика и декодирование пакетов данных;
  • IRIS — имеет широкие возможности фильтрации, может перехватывать пакеты с заданными ограничениями.

Задача 1: запрет сайта

Запрещаем переход на адрес сайта содержащий строку.

Задача 10: выполнение скриптов для определенных ip

В данном примере меняем текст “Иванов” на “Петров” только для IP = “192.168.0.100”

// OnBeforeResponse
if (oSession.clientIP == '192.168.0.100')
{
		oSession.utilDecodeResponse();
		oSession.utilReplaceInResponse('Иванов','Петров');
}

Задача 11: меняем css-стили портала

Css-файлы веб-портала можно сохранить на локальном диске, отредактировать и настроить скрипт отдавать стили с локального диска, а не с портала.

// OnBeforeResponse	
if (oSession.uriContains("/banner.css"))
{
		oSession.LoadResponseFromFile("c:/scripts/banner.css");	
}

Задача 12: запрет put-команды и аналогичных

Запрет команды по ее типу: “PUT”, “DELETE”, etc.

Задача 13: изменение тела post-запроса

Изменить тело POST-запроса для заданного портала. При авторизации на данном портале вне зависимости от введенных пользователем данных на веб-портал отправятся данные из скрипта.

Задача 15: меняем cookie

Работа с Cookie: добавление, удаление, редактирование

// OnBeforeRequest - добавить в запрос Cookie
oSession.oRequest["Cookie"] = (oSession.oRequest["Cookie"]   ";mycookie=xxx");

// OnBeforeRequest - изменить значение Cookie 'JSESSIONID' на 'xxx'
oSession.oRequest['Cookie'] = oSession.oRequest['Cookie'].Replace("JSESSIONID=","ignoredCookie=")   ";JSESSIONID=xxx";

// OnBeforeRequest - удалить Cookie 'JSESSIONID'
oSession.oRequest['Cookie'] = oSession.oRequest['Cookie'].Replace("JSESSIONID=","ignoredCookie=");
// Всем удачи на полях сниффинга данных )

Задача 2: запрет загрузки ресурса

Запрещаем загрузку “.svg” файлов для заданного адреса сайта.

// OnBeforeRequest
if (oSession.uriContains("yastatic.net") && oSession.url.EndsWith(".svg"))
{
		oSession.host = 'na.derevnu.dedushke';
}

// или

// OnBeforeRequest
if (oSession.uriContains("yastatic.net") && oSession.url.EndsWith(".svg"))
{
		oSession.responseBodyBytes = new byte[0];
}

// OnBeforeResponse
if (oSession.uriContains("yastatic.net") && oSession.url.EndsWith(".svg"))
{
		oSession.ResponseBody = null;
}

Задача 3: переадресация запроса

Переадресация запроса на адрес сайта содержащий строку.

Задача 5: изменить текст в ответе

В данном примере меняем текст “Иванов” на “Петров”.

Задача 6: заменить ресурс веб-портала на локальный ресурс

Заменим картинку веб-портала на картинку расположенною на локальном диске.

// OnBeforeResponse
if (oSession.uriContains("/Static/app/img/world.svg"))
{
		oSession.LoadResponseFromFile("c:/scripts/lang.png");	
}

Задача 7: изменение свойств html-объектов

Например, есть картинка с заданными размерами в HTML и нужно эти размеры изменить.

// OnBeforeResponse
oSession.utilReplaceInResponse('/Static/app/img/world.svg" height="15" width="15" style="height: 15px','/Static/app/img/world.svg" height="1" width="1" style="height: 1px');

Задача 8: скрыть элементы по classname меняя css-файлы

В данном примере скрываем элементы зная их className в css-файле добавляя свойство “visibility: hidden;”

Задача 9: заставить страницу открываться в текущем окне

Пример: существует JavaScript, который открывает ссылку в новом окне. Нужно сделать чтобы ссылка открывалась в текущем окне.

Захватым все пакеты, которые попадут на наш сетевой интерфейс

while (true)
{
	IPHeader* hdr = RS_Sniff();
	// обработка IP-пакета
	if (hdr)
	{ 
		// печатаем заголовок в консоли
	}
}

Зачем это делать ?

Пример 1. Анализ трафика.Пользователи вашей сети пользуются вашим прокси-сервером. Вы можете увидеть на какие сайты заходят пользователи, запрещать дальнейшие переходы на эти сайты.

Пример 2. Сбор данных.Ваши пользователи пользуются через вас некоторыми веб-ресурсами. Например, они вводят vin-номер своего автомобиля на сайте дилера авто и получают в ответ данные этого автомобиля. Вы можете сохранять эти данные в свою базу данных.

Изменение данных запросов

В Fiddler существует инструмент “Fiddler ScriptEditor” (Редактор скриптов) для создания правил модификации трафика. Запуск редактора скриптов через “Ctrl R” или выбора пункта меню “Rules -> Customize Rules…”.

В редакторе скриптов есть два основных метода: “OnBeforeRequest” и “OnBeforeResponse”:

“OnBeforeRequest” – выполнение скриптов в этом методе происходит перед отправкой пакетов на веб-сервер.

“OnBeforeResponse” – выполнение скриптов в этом методе происходит после получения ответа от веб-сервера.

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

Как предотвратить утечку данных с помощью сниффера?

Если сниффер установлен на устройстве, то он уже имеет доступ к его данным. Чтобы предотвратить их утечку, Дмитрий Галов из «Лаборатории Касперского» рекомендует:

Как работают снифферы?

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

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

Перехватить трафик через сниффер можно следующими способами:

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

Копировальщик mifare 1k / сниффер

Детство. Вкусное и доброе.

Наши дни. Приехал к маме на дачу, на Родину, под вечер
Племяши там, отдыхают, бабушке помогают. Меня увидели, бегут к машине, тянут ручонки, здороваются, как мужики.
-Привет, чижики! Как дела?
-Хорошо! Грядки пропололи, полили все.
-Помогаете бабушке? Не лентяйничаете?
-Да.
-Ну, спрошу у нее.
Обнял маму, чай попили.
-Что, как шпана?
-Да молодцы, помогают.
Выхожу на улицу.
-Федька, Захар!
Прибежали.
-Червей накопайте сегодня и спать пораньше ложитесь. Завтра рано утром на озеро поедем. На карася.
-Урррраааа!
Достал из сарая удочки, нашел снасти. Перебрали вместе.
Мама подошла.
-Серега, если на рыбалку поедете, Володю ( мамин и отцов одноклассник и друг нашей семьи)возьми, а. Болеет, от рака лечится, на машине ездить своей боится, раз сознание за рулем потерял. Слава Богу, обошлось.
-Да возьму, не проблема.
Созвонился, договорились, что в 5 утра заеду за ним.
Утро и мы в путь. Забрали дядю Володю и на озеро. Не туда,куда с дедом ездили, на другое, дядя Володя посоветовал. Да не суть, главное же -РЫБАЛКА.
Солнышко встает. Озеро в дымке, цапли по берегам, утки, с утятками следом, плывут по своим делам, чайки ныряют за рыбой, дерутся, кричат друг на друга.
Через пару часов простая еда, собранная мамой в дорогу, чай сладкий и ароматный с листьями смородины и чабрецом.
А вечером будет жареный со сметаной карась. Клев есть, пусть и карась мелкий, не как давно, раньше. Так всегда кажется.
И довольные, даже СЧАСТЛИВЫЕ, глаза племяшей и дяди Володи.

Все циклично и вкусно в жизни, надо просто этого ЗАХОТЕТЬ и поделиться с близкими. А они передадут дальше.
Улыбаюсь.
Хорошего всем дня! И Золотую Рыбку!

Пруфы есть(чо я не пикабушник что ль).

Немного оффтопика

Здесь и далее у некоторых важных функций и переменных автор сделал префкис 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-заголовка, необходимо реализовать функцию преобразования заголовка (но не данных) дейтаграммы в строку. В качестве примера реализации, можно предложить такой вариант:

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

На данный момент создано достаточно много программного обеспечения для прослушивания трафика. Наиболее известный из них:

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

чужой

трафик. Нужно всего лишь просматривать и анализировать трафик, который проходит через наш хост.

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

  1. Смотреть текущий поток трафика через сетевое соеднинение (входящий/исходящий/всего).
  2. Перенаправлять трафик для последующего анализа на другой хост.
  3. Теоретически, можно попытаться применить его для взлома WiFi-сети (мы ведь не собираемся этим заниматься?).

В отличие от Wireshark, который базируется на библиотеке libpcap/WinPcap, наш анализатор не будет использовать этот драйвер. Чего уж там, у нас вообще не будет драйвера, и свой NDIS(о ужас!) мы писать не собираемся. Про это можно прочитать в

. Он будет просто пассивным наблюдателем, использующим

только

библиотеку WinSock. Использование драйвера в данном случае избыточно.

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

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

Преобразование ip-заголовка в строку

На основании приведенных выше базовых сведений, получается вот такая небольшая программа (жуткое название ss, сокр. от англ. simple sniffer), реализующая локальное прослушивание IP-трафика. Интерфейс ее приведен ниже на рисунке.

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

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

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

Спасибо за внимание, проздравляю хабровчан и хабровчанок и всех-всех-всех с наступающим Рождеством!

Создание сырого сокета

s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);

Здесь вместо константы

SOCK_STREAM

(протокол TCP) или

SOCK_DGRAM

(протокол UDP), мы используем значение

SOCK_RAW

. Вообще говоря, работа с raw sockets интересна не только с точки зрения захвата трафика. Фактически, мы получаем полный контроль за формированием пакета. Вернее, формируем его вручную, что позволяет, например, послать специфический ICMP-пакет…

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

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

В данный момент подавляющее большинство современных информационных сетей базируются на фундаменте стека протоколов TCP/IP. Стек протоколов TCP/IP (англ. Transmission Control Protocol/Internet Protocol) — собирательное название для сетевых протоколов разных уровней, используемых в сетях.

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

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

Совершенно логичным является то обстоятельство, что рано или поздно должны были появится инструменты для перехвата, контроля, учета и анализа сетевого трафика. Такие средства обычно называется анализаторами трафика, пакетными анализаторыми или снифферами (от англ. to sniff — нюхать).

Установка сертификатов на windows устройствах

После того как сгенерированный сертификат скопирован на рабочий стол этот сертификат необходимо установить на каждое устройство которое будет использовать данный Fiddler в качестве прокси-сервера.

Для установки сертификата используем консоль управления MMC: в коммандной строке вводим команду “mmc”.

В меню файл выбираем “Добавить или удалить оснастку”. Из доступных оснасток выбираем “Сертификаты” и с помощью кнопки “Добавить” выбираем данную оснастку. Нажимаем “Ок” и выбираем “учетной записи компьютера”.

Это нужно чтобы открыть сертификаты которые установлены для всего компьютера, а затем установить сертификат Fiddler именно в это хранилище. Если открыть сертификаты “моей учетной записи пользователя”, то после установки сертификата Fiddler в это хранилище другие пользователи данного компьютера не смогут подключиться к Fiddler.

Установку сертификата производим в “Доверенные корневые центры сертификации”.

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

Функция захвата одного пакета

IPHeader* RS_Sniff()
{
	IPHeader *hdr;
	int count = 0;
	count = recv(RS_SSocket, (char*)&RS_Buffer[0], 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

И, наконец, запускаем бесконечный цикл захвата пакетов:

Похожее:  Разблокировка секретов Доступ в личный кабинет Маяка

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

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