Как сделать сниффер ссылку

Снифер своими руками: отслеживание входящего трафика

title

Что мы будем делать

Пишем простой снифер

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

pic1

Теперь перейдем к рассмотрению кода. Полный исходник нашей программы и ее рабочий вариант можно скачать по ссылке в конце статьи. Напишем программу на Visual C++ 6.0. Выбор этой среды разработки обоснован тем, что она мне по душе.

Начинаем, естественно, с инициализации сокетов. Пусть это будет WinSock 2.2:

WSADATA wsadata;
WSAStartup(MAKEWORD(2, 2), &wsadata);

Затем создаем сам сокет:

SOCKET s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);

Получаем имя нашего локального хоста и информацию о нем:

CHAR szHostName[16];
gethostname(szHostName, sizeof szHostName);

HOSTENT *phe = gethostbyname(szHostName);

SOCKADDR_IN sa;
ZeroMemory(&sa, sizeof sa);
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = ((struct in_addr*)phe->h_addr_list[0])->s_addr;

Теперь необходимо привязать локальный адрес к нашему сокету:

DWORD flag = TRUE;
ioctlsocket(s, SIO_RCVALL, &flag);

Здесь мы включаем режим приема всех приходящих из Сети пакетов, указанием в качестве команды сокету SIO_RCVALL. Объявление этой константы находится в заголовочном файле Mstcpip.h. Переменная flag включает и выключает режим (TRUE/FALSE). В документации Microsoft про эту команду сказано следующее:

Enables a socket to receive all IP packets on the network. The socket handle passed to the WSAIoctl function must be of AF_INET address family, SOCK_RAW socket type, and IPPROTO_IP protocol. The socket also must be bound to an explicit local interface, which means that you cannot bind to
INADDR_ANY.

Заметим, что режим promiscuous включается только при активной системной плате или при выходе в Internet. В общем, он возможен, только когда есть какая-либо Сеть, будь то Internet или LAN. Если мы вызовем функцию ioctlsocket с параметром SIO_RCVALL на машине без сети, то получим ошибку.

Теперь попытаемся понять, почему наш снифер требует привилегий администратора. Microsoft пишет по этому поводу следующее:

Setting this ioctl requires Administrator privilege on the local computer. SIO_RCVALL is available in Windows 2000 and later versions of Windows.

Possible reason for the WSAEACCES error is that when the bind function is called (on Windows NT 4 SP4 or later), another application, service, or kernel mode driver is bound to the same address with exclusive access. Such exclusive access is a new feature of Windows NT 4 SP4 and later, and is implemented by using the SO_EXCLUSIVEADDRUSE option.

Т.е. мы могли бы просто вызвать setsockopt с параметром SO_EXCLUSIVEADDRUSE следующим образом:

BOOL bOptVal = TRUE;
setsockopt(s, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (char*)&bOptVal, sizeof(BOOL));

Но, поэкспериментировав с этим, я не пришел к положительному результату, т.е. по-прежнему нам требуются привилегии администратора.

Итак, режим promiscuous включен. Как же нам получить входящие IP пакеты? Очевидно, нужно постоянно вызывать функцию recv (в нашем случае) или WSARecv. Но создавать отдельный поток и делать бесконечный цикл было бы не очень удобно. Гораздо лучше для нас использовать асинхронные сокеты. Тем более, что у нас GUI-программа. Впишем следующий вызов функции WSAAsyncSelect в обработчик кнопки «Start» (эта кнопка не будет доступна, пока promiscuous mode не включен):

case IDC_BUTTON_START:
CHAR szFileName[_MAX_FNAME];

GetDlgItemText(hwndDlg, IDC_EDIT_LOG_FILENAME, szFileName, _MAX_FNAME);

hLogFile = CreateFile(szFileName, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, 0);
if (hLogFile == INVALID_HANDLE_VALUE) <
//.
> else <
//.

SetFilePointer(hLogFile, 0, NULL, FILE_END);

//Связываем событие FD_READ с окном
WSAAsyncSelect(s, hwndDlg, WM_RECV, FD_READ);

Здесь мы указываем функции, что окну с хендлом hwndDlg нужно отправить сообщение WM_RECV при наступлении события FD_READ для сокета s. Событие FD_READ приходит, когда сокет готов к чтению данных, т.е. когда приходят данные. Сообщение WM_RECV объявим следующим образом:

Читайте также:  Как сделать розовый фильтр

#define WM_RECV (WM_USER + 1)

В MSDN про вызов функции recv написано следующее:

Once the socket is bound and the ioctl set, calls to the WSARecv or recv functions return IP datagrams passing through the given interface. Note that you must supply a sufficiently large buffer.

Т.е. мы должны предоставить функции recv буффер достаточного размера. В нашем
снифере он будет равен 64 Кб. Теперь напишем обработчик сообщения
WM_RECV:

case WM_RECV:
if (WSAGETSELECTEVENT(lParam) == FD_READ) <
// Буфер размера 64 Кб
CHAR btBuffer[65536];

// Получаем входящие данные
if (recv(s, btBuffer, sizeof(btBuffer), 0) >= sizeof(IPHeader)) <
IPHeader* hdr = (IPHeader*)btBuffer;

// Вычисляем размер. Т.к. в сети принят прямой порядок байт,
// а не обратный, то придется поменять байты местами.
WORD size = (hdr->iph_length iph_length >> 8);

// Записываем данные
WriteFile(hLogFile, «—Packet begin—\r\n», 18, &dwWritten, 0);

if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_OPTION_LOG_TARGET_IP) == TRUE) <
IN_ADDR ia;

ia.s_addr = hdr->iph_dest;
CHAR *pszTargetIP = inet_ntoa(ia);

WriteFile(hLogFile, «To: «, 4, &dwWritten, 0);
WriteFile(hLogFile, pszTargetIP, lstrlen(pszTargetIP), &dwWritten, 0);
WriteFile(hLogFile, «\r\n», 2, &dwWritten, 0);
>

if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_OPTION_LOG_SENDER_IP) == TRUE) <
IN_ADDR ia;

ia.s_addr = hdr->iph_src;
CHAR *pszSourceIP = inet_ntoa(ia);

WriteFile(hLogFile, «From: «, 6, &dwWritten, 0);
WriteFile(hLogFile, pszSourceIP, lstrlen(pszSourceIP), &dwWritten, 0);
WriteFile(hLogFile, «\r\n», 2, &dwWritten, 0);
>

if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_OPTION_WRITE_PROTO_NAME) == TRUE) <
WriteFile(hLogFile, «Protocol: «, 10, &dwWritten, 0);

switch (hdr->iph_protocol) <
case IPPROTO_IP:
WriteFile(hLogFile, «IP\r\n», 4, &dwWritten, 0);
break;

case IPPROTO_ICMP:
WriteFile(hLogFile, «ICMP\r\n», 6, &dwWritten, 0);
break;

case IPPROTO_IGMP:
WriteFile(hLogFile, «IGMP\r\n», 6, &dwWritten, 0);
break;

case IPPROTO_GGP:
WriteFile(hLogFile, «GGP\r\n», 5, &dwWritten, 0);
break;

case IPPROTO_TCP:
WriteFile(hLogFile, «TCP\r\n», 5, &dwWritten, 0);
break;

case IPPROTO_PUP:
WriteFile(hLogFile, «PUP\r\n», 5, &dwWritten, 0);
break;

case IPPROTO_UDP:
WriteFile(hLogFile, «UDP\r\n», 5, &dwWritten, 0);
break;

case IPPROTO_IDP:
WriteFile(hLogFile, «IDP\r\n», 5, &dwWritten, 0);
break;

case IPPROTO_IPV6:
WriteFile(hLogFile, «IPv6\r\n», 6, &dwWritten, 0);
break;

case IPPROTO_ND:
WriteFile(hLogFile, «ND\r\n», 4, &dwWritten, 0);
break;

case IPPROTO_ICLFXBM:
WriteFile(hLogFile, «ICLFXBM\r\n», 9, &dwWritten, 0);
break;

case IPPROTO_ICMPV6:
WriteFile(hLogFile, «ICMPv6\r\n», 8, &dwWritten, 0);
break;
>
>

if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_OPTION_WRITE_PACKET_LEN) == TRUE) <
CHAR szTemp[17];

WriteFile(hLogFile, «Packet length: «, 15, &dwWritten, 0);
wsprintf(szTemp, «%d\r\n», size);
WriteFile(hLogFile, szTemp, lstrlen(szTemp), &dwWritten, 0);
>

SetDlgItemInt(hwndDlg, IDC_EDIT_LOG_SIZE, GetFileSize(hLogFile, NULL), FALSE);
>
>
return TRUE;

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

//Структура заголовка IP-пакета
typedef struct IPHeader <
UCHAR iph_verlen; // версия и длина заголовка
UCHAR iph_tos; // тип сервиса
USHORT iph_length; // длина всего пакета
USHORT iph_id; // Идентификация
USHORT iph_offset; // флаги и смещения
UCHAR iph_ttl; // время жизни пакета
UCHAR iph_protocol; // протокол
USHORT iph_xsum; // контрольная сумма
ULONG iph_src; // IP-адрес отправителя
ULONG iph_dest; // IP-адрес назначения
>IPHeader;

Теперь посмотрим на получившуюся программу в работе. Для тестирования ее работы я решил использовать подключение к интернету, а также виртуальную локальную сеть. Virtual LAN удобно использовать
когда нет реальной LAN, а работу своей программы необходимо протестировать. Виртуальную LAN довольно удобно настраивать с помощью VMware Workstation (у меня версия 5.5.0). Смоделируем локальную сеть путем установки на виртуальную машину системы Windows 2000 Pro. На хост-машине пусть будет Windows XP SP2. После настройки LAN менеджером виртуальных сетей в VMware, получаем локальную сеть из 2-х компьютеров.

pic2

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

Меня всегда интересовало, как выглядит сообщение при его отправке по локальной сети командой net send. Но нельзя забывать о том, что эта команда работает лишь при включенной службе Messenger. Попробуем послать с виртуальной машины (Windows 2000) сообщение на хост машину (Windows XP SP2) «This is my message!».

pic3

. и посмотрим в созданные нашим снифером логи:

Среди прочего мусора, мы видим, что сообщение прибыло в 3-ем пакете. А в 4-ом оно, видимо, завершилось.

Теперь попробуем вариант с Internet’ом. Зайдем на сайт www.google.ru и проверим почтовый ящик, находящийся на pop.mail.ru:

Из данного лога видно все HTML-содержимое главной страницы www.google.ru + содержимое *.gif файлов. Также мы видим ответы smtp- и pop3-сервера.

Читайте также:  Как сделать задние стеклоподъемники на приоре

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

Источник

Как сделать сниффер ссылку

f1a84b2e94806798422fef58b5f611c0

Практически каждый из нас пользуется услугами онлайн-магазинов, а значит рано или поздно рискует стать жертвой JavaScript-снифферов — специального кода, который злоумышленники внедряют на сайт для кражи данных банковских карт, адресов, логинов и паролей пользователей. Долгое время JS-снифферы оставались вне поля зрения антивирусных аналитиков, а банки и платежные системы не видели в них серьезной угрозы. И совершенно напрасно. Почти 400 000 жертв JS-сниффера, заразившего сайт и мобильное приложение авиакомпании British Airways, компрометация платежных данных американского дистрибутора билетов Ticketmaster и недавний инцидент с британским сайтом спортивного гиганта FILA свидетельствуют о необходимости изменить отношение к этой угрозе.

В первом аналитическом отчете, посвященном исследованию JavaScript-снифферов, эксперты Group-IB проанализировали 2440 зараженных онлайн-магазинов, посетители которых – суммарно около 1,5 миллионов человек в день – подвергались риску компрометации. Среди пострадавших оказываются не только пользователи, но и онлайн-магазины, платежные системы и банки, выпустившие скомпрометированные карты. Отчет Group-IB стал первым исследованием даркнет-рынка снифферов, их инфраструктуры и способов монетизации, приносящей их создателям миллионы долларов. Этим постом мы открываем цикл статей, посвященный анализу различных семейств снифферов.

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

Кампания с применением этого семейства снифферов началась в мае 2017 года, атаке подверглись сайты под управлением CMS и платформ Magento, Bigcommerce, Shopify.

429dc48d13cf7a9a493ed18a19b7e60f

84f147e8b90b69fa637d11b3b9488625

85c24dfc422609a2eb8164dc7102a97a

В ходе анализа одного из зараженных магазинов было установлено, что этот сайт подвергся заражению дважды: помимо вредоносного кода сниффера семейства ReactGet, был обнаружен код сниффера семейства ImageID. Данное пересечение может быть свидетельством того, что операторы, стоящие за использованием обоих снифферов, применяют схожие техники для внедрения вредоносного кода.

120e20e3e42e11872af5b9ed2960397f

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

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

67dab346038a332da972965105e10557

08963779ad5ee57588955ab3f9bf4322

cf123e86a91881fe10d9abe5b2487320

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

4413fa520fdd64bfab90e575e9bc26d9

aaf8c049d0801356bc16e9f2726dc372

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

Читайте также:  Как сделать гиперссылку в почте яндекс

Источник

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

Содержание статьи

Windows реализации снифферов

IRIS
— www.eeye.com
IRIS продукт известной фирмы
eEye. Представляет обширные возможности по фильтрации.
Меня в нем сильно
порадовало три фишки:
1.Protocol Distribution
2.Top hosts
3.Size
Distribution
Также имеется Packet Decoder. Он поддерживает развитую систему
логов. А доступные возможности фильтрации превосходят
все снифферы
обзора. Это Hardware Filter, который может ловить либо все
пакеты (Promiscious), либо с различными ограничениями
(например захватывать
только multicast пакеты или broadcast пакеты, либо только Mac фреймы).
Можно
фильтровать по определенным MAC/IP адресам, по портам,
по пакетам, содержащим
определенные символы. В общем неплохой
сниффак. Требует
50comupd.dll.

WinDUMP
Аналог TCPdump for Unix. Этот сниффак действует через
командную строку и представляет минимальные возможности по конфигурации и еще
требует библиотеку WinPcap. Мне не очень.

SniffitNT
Тоже требует WinPcap. Работа только как командной строкой,
так и в интерактивном режиме. Со
сложными опциями. Мне не очень.

ButtSniff
Обычный пакетный
сниффер созданный
известнейшей группой CDC(Cult of the Dead Cow). Фишка его в том,
что его можно использовать, как плагин к BO:)(Очень полезно:)).Работа из командной
строки.

Существуют еще множество снифферов,
таких как NatasX, NetXRay, CooperSniffer, LanExplorer, Net Analyzer и т.д.
Пойдем
дальне.

Unix’овые снифферы

Все снифферы данного обзора можно найти на

packetstorm.securify.com.

linux_sniffer
Linux_sniffer
требуется тогда, когда вы хотите
детально изучить сеть. Стандартная
компиляция. Выдает всякую шнягу дополнительно,
типа isn, ack, syn, echo_request (ping) и т.д.

Как видите, сниффит поддерживает множество
опций. Можно использовать сниффак в интерактивном режиме.
Сниффит хоть и
довольно полезная прога, но я ей не пользуюсь.
Почему? Потому что у Sniffit
большие проблемы с защитой. Для Sniffit’a уже вышли ремоутный рут и дос для
линукса и дебиана! Не каждый сниффер себе такое позволяет:).

READSMB
Сниффер READSMB вырезан из LophtCrack и портирован под
Unix (как ни странно:)). Readsmb перехватывает SMB
пакеты.

ftp.technotronic.com:
02:03:08.918959
195.170.212.151.1039 > 195.170.212.77.domain: 60946+ A?
ftp.technotronic.com.
(38)
02:03:09.456780 195.170.212.77.domain > 195.170.212.151.1039: 60946*
1/3/3 (165)
02:03:09.459421 195.170.212.151 > 209.100.46.7: icmp: echo
request
02:03:09.996780 209.100.46.7 > 195.170.212.151: icmp: echo
reply
02:03:10.456864 195.170.212.151 > 209.100.46.7: icmp: echo
request
02:03:10.906779 209.100.46.7 > 195.170.212.151: icmp: echo
reply
02:03:11.456846 195.170.212.151 > 209.100.46.7: icmp: echo
request
02:03:11.966786 209.100.46.7 > 195.170.212.151: icmp: echo
reply

В общем, снифф полезен для отладки сетей,
нахождения неисправностей и
т.д.

Dsniff
Dsniff требует libpcap, ibnet,
libnids и OpenSSH. Записывает только введенные команды, что очень удобно.
Вот пример лога коннекта
на unix-shells.com:

Вот
dsniff перехватил логин с паролем (stalsen/asdqwe123).
Install:
#./configure
#make
#make
install

Защита от снифферов

AntiSniff for Windows
Этот продукт выпустила известная группа
Lopht. Это был первый продукт в своем роде.
AntiSniff, как сказано в
описании:
«AntiSniff is a Graphical User Interface (GUI) driven tool for
detecting promiscuous Network Interface Cards (NICs) on your local network
segment». В общем, ловит карты в promisc режиме.
Поддерживает огромное
количество тестов (DNS test, ARP test, Ping Test, ICMP Time Delta
Test, Echo Test, PingDrop test). Можно сканить как одну машину,
так и сетку. Здесь имеется
поддержка логов. AntiSniff работает на win95/98/NT/2000,
хотя рекомендуемая
платформа NT. Но царствование его было недолгим и уже в скором
времени появился сниффер под названием AntiAntiSniffer:),
написанный Майком
Перри (Mike Perry) (найти его можно по адресу www.void.ru/news/9908/snoof.txt).Он
основан на LinSniffer (рассмотренный далее).

Unix sniffer detect:
Сниффер
можно обнаружить командой:

ppp0 Link
encap:Point-to-Point Protocol
inet addr:195.170.y.x
P-t-P:195.170.y.x Mask:255.255.255.255
UP POINTOPOINT PROMISC
RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:3281
errors:74 dropped:0 overruns:0 frame:74
TX packets:3398 errors:0
dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10

Как
видите интерфейс ppp0 стоит в PROMISC mode. Либо оператор
загрузил снифф для
проверки сети, либо вас уже имеют. Но помните,
что ifconfig можно спокойно
подменить, поэтому юзайте tripwire для обнаружения
изменений и всяческие проги
для проверки на сниффы.

AntiSniff for Unix.
Работает на
BSD, Solaris и
Linux. Поддерживает ping/icmp time test, arp test, echo test, dns
test, etherping test, в общем аналог AntiSniff’а для Win, только для
Unix:).
Install:
#make linux-all

Опции настолько просты, что no
comments.

Источник

Поделиться с друзьями
admin
О том как сделать своими руками
Adblock
detector