На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » Хакеры и безопасность » Защита данных
Разделы в "Защита данных":
Криптография

Сниффер: щит и меч

Принцип работы сниффера.

Сниффер - это программа, которая позволяет перехватывать сетевой трафик. Когда говорят о снифферах, то обычно проводят аналогию с прослушиванием  телефонных разговоров. Подключившись к телефонной сети, можно перехватить беседу людей. Примерно также в компьютерных сетях можно перехватывать информацию, которой обмениваются компьютеры. Прослушивание возможно благодаря особенности архитектуры сети Ethernet (IEEE 802.3). Архитектура большинства локальных сетей основана на технологии Ethernet (ether - эфир, network - сеть), в которой все устройства подключены к одной среде передачи данных и совместно её используют. Топология сети Ethernet - линейная или звездообразная, а скорость передачи данных 10, 100 и 1000 Мбит/сек. Ethernet - это широковещательная сеть, в которой все узлы могут принимать все сообщения через единую магистраль. Используя эту особенность Ethernet, отпадает необходимость несанкционированного подключения к сегменту сети, т.е. не требуется резать кабели. Компьютер, с которого предполагается прослушивать, уже подключен к некоторому сегменту сети.

Сниффер может анализировать только то, что проходит через его сетевую карту. Внутри одного сегмента сети Ethernet все пакеты рассылаются всем машинам, из-за этого возможно перехватывать чужую информацию. Использование коммутаторов (switch, switch-hub) и их грамотная конфигурация уже является защитой от прослушивания. Между сегментами информация передаётся через коммутаторы. Коммутация пакетов - форма передачи, при которой данные, разбитые на отдельные пакеты, могут пересылаться из исходного пункта в пункт назначения разными маршрутами. Так что если кто-то в другом сегменте посылает внутри его какие-либо пакеты, то в ваш сегмент коммутатор эти данные не отправит.

Прослушивающие программы или пакетные анализаторы относятся к классу утилит двойного назначения. С одной стороны снифферы - мощное оружие, с помощью которого можно осуществить пассивную сетевую атаку. Эти программы могут представлять собой серьезную угрозу, поскольку могут перехватывать и расшифровывать имена и пароли пользователей, конфиденциальную информацию, нарушать работу отдельных компьютеров и сети в целом. Известно, что в большинстве протоколов передачи данных (FTP, POP, HTTP, telnet) секретная информация между клиентом и сервером передаётся открытым текстом. Поэтому злоумышленнику не составляет большого труда получить доступ к чужой информации. Достаточно раздобыть программу-сниффер, настроить её фильтры и ждать, когда жертва будет подключаться к серверу. С другой стороны снифферы помогают системным администраторам осуществлять диагностику сети и отслеживать атаки компьютерных хулиганов. Кроме того, они служат для проверки и детального анализа правильности конфигурации сетевого программного обеспечения. Иными словами - щит и меч.

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

Информация передаётся по сети, и получает её каждое устройство этой сети. По умолчанию сетевая плата компьютера видит только то, что предназначено именно для неё. Однако прослушивающие программы устанавливают её в режим приёма всех пакетов - promiscuous mode. В основе многих снифферов были и есть сетевые драйверы и библиотеки (libpcap, libnet), которые осуществляют большую часть работы. Дело в том, что для переключения сетевой платы в promiscuous mode требуется низкоуровневое программирование её портов. В многозадачной ОС такую работу могут выполнить только драйверы уровня ядра системы (kernel-mode drivers). Первые программы такого типа были созданы для операционных систем Unix. Для установки вручную сетевого интерфейса в "неразборчивый" режим необходимо включить флаг PROMISC:

$ifconfig eth0 promisc;

для отключения promiscuous mode:

$ifconfig eth0 -promisc.

Вскоре снифферы перебрались в популярную ОС Windows, но их работа в этой системе также требовала сетевого драйвера, который переключал сетевую плату (NIC - network interface card) в специальный режим. До недавнего времени создание программ-снифферов было уделом квалифицированных специалистов. С появлением Windows2000 создать программу для прослушивания сегмента сети стало совсем просто.

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

Основы передачи данных в сети Ethernet.

Каждому устройству в сети Ethernet соответствует уникальный шестибайтовый MAC-адрес (Media Access Control). Единицей передачи данных в такой сети является кадр (frame), который имеет определённую структуру и несёт в себе информацию о получателе, отправителе и сами данные.

struct ETHERNET_FRAME

{

  unsigned char  dest[6];// MAC-адрес получателя

  unsigned char  src[6]; // MAC-адрес отправителя

  unsigned short type;   // версия: IPv4 0x0800, IPv6 0x86DD, ARP 0x0806

  unsigned char  data[]; // данные

};

Кадр может иметь размер от 60 до 1514 байт, из которых первые 14 байт являются служебными. Когда требуется передать большее количество данных, они разбиваются на фрагменты и последовательно направляются в сеть. Кадр передаётся по сети, и получает его каждое устройство этой сети. Значение поля структуры с именем type определяет тип и версию "полезного груза" в кадре. Завершающая секция кадра служит для проверки целостности передаваемых данных и использует код циклического контроля (CRC32 - cyclic redundancy check). Это чрезвычайно мощная хэш-функция для выявления искажённости числовых данных. Обычно она аппаратно реализована в сетевой плате.

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

Теперь обратим внимание на полезный груз, который несёт кадр, а именно поле структуры data[]. Чаще всего в качестве данных может быть IP-пакет или ARP-пакет. ARP (address resolution protocol) - это служебный вспомогательный протокол, который осуществляет динамическую трансляцию физических MAC-адресов в логические IP-адреса на основе широковещательной рассылки запросов.

struct ETHERNET_ARP

{

  unsigned short hrd;   // Тип аппаратуры (Ethernet), 0x0001.

  unsigned short pro;   // Протокол (IP), 0x0800.

  unsigned char  hln;   // Длина аппаратного адреса (MAC), 6 байт.

  unsigned char  pln;   // Длина адреса протокола IP, 4 байта.

  unsigned short op;    // Вид операции {Запрос, Ответ} = {1, 2}.

  unsigned char  sha[6];// Аппаратный адрес (MAC) отправителя.

  unsigned char  spa[4];// IP-адрес отправителя.

  unsigned char  tha[6];// Аппаратный адрес (MAC) получателя.

  unsigned char  tpa[4];// IP-адрес получателя.

};

Для доставки пакетов в сети нужно определить физический адрес узла назначения. Именно для этого существует ARP - протокол автоматического определения физических адресов (IP <=> MAC). Когда одному компьютеру нужно начать обмен данными с другим, он ищет MAC-адрес получателя соответствующий запрашиваему IP-адресу в своей ARP-таблице. Если для нужного IP-адреса не найден соответствующий MAC-адрес, то посылается широковещательный запрос ARP, содержащий искомый IP-адрес назначения, а MAC-адрес для широковещательной рассылки заполнен единицами FF:FF:FF:FF:FF:FF. Целевой хост узнает свой IP-адрес, обрабатывает запрос и посылает ответ. Система готова к пересылке данных по локальной сети.

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

struct IP6Header

{

  unsigned long  ver:4;   // Версия IP-протокола

  unsigned long  tclass:8;// Класс трафика

  unsigned long  label:20;// Метка потока

  unsigned short length;  // Длина пакета

  unsigned char  next;    // Next header (опции)

  unsigned char  hop;     // Hop-limit.

  unsigned char  src[16]; // 128-битный адрес отправителя

  unsigned char  dst[16]; //  Адрес получателя

};

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

typedef struct _IPHeader

{

  unsigned char  verlen;   // версия и длина заголовка

  unsigned char  tos;      // тип сервиса

  unsigned short length;   // длина всего пакета

  unsigned short id;       // Id

  unsigned short offset;   // флаги и смещения

  unsigned char  ttl;      // время жизни

  unsigned char  protocol; // протокол

  unsigned short xsum;     // контрольная сумма

  unsigned long  src;      // IP-адрес отправителя

  unsigned long  dest;     // IP-адрес назначения

}IPHeader;

Подробно IP протокол описан в RFC за номером 791. Для нас особый интерес представляют поля заголовка protocol, src и dest. Два последних поля - это хорошо известные IP-адреса отправителя и получателя пакета. Например, шестнадцатеричное значение адреса 0x0000140A соответствует 10.20.0.0.

Поскольку в сети постоянно циркулирует огромное количество пакетов, то их лучше отфильтровывать. Критериями фильтрации могут быть IP-адреса, тип вышестоящего протокола (TCP, UDP, ICMP, PUP), а также содержимое пакета. Функции фильтрации весьма полезны, так как не только ограничивают собираемую программой информацию действительно нужной, но и просто обеспечивают её нормальную работу. Вполне возможно, что при интенсивной загрузке локальной сети компьютер и программа-сниффер будут не способны обработать всю поступающую информацию. Отсутствие критериев для фильтрации или задание слишком большого числа вариантов для IP приводит к тому, что программа-перехватчик не успевает обрабатывать все пакеты. А если ещё записывать все пакеты на жёсткий диск, то последний может переполниться в считанные минуты. На этом факте основаны некоторые программы для борьбы с прослушиванием. Они посылают в сеть множество пакетов с поддельной информацией о паролях и т.д. В результате снифферы "захлёбываются" в огромном потоке дезинформации.

Драйвер сетевой платы (NIC) занимается приёмом и передачей кадров в сеть Ethernet. Максимальный размер IP-пакета, включая служебные данные, составляет 64 килобайта, а максимальный размер данных в кадре, как вы уже знаете, 1500 байт. При необходимости драйвер осуществляет фрагментацию и сборку IP-пакетов. Сетевая подсистема в ОС Windows основана на многоуровневой архитектуре, которую в 1978 году одобрила международная организация стандартов (см. врезку). Таким образом,  NIC-драйвер взаимодействует с драйверами вышестоящих протоколов.

Программа для прослушивания сегмента сети работает именно с IP-пакетами. Она использует библиотеку Windows Sockets версии 2.2 и функционирует под управлением Windows 2000 и более поздних систем. Программирование "сырых" сокетов (raw sockets) в системе Windows предыдущих версий было почти невозможно. Неудивительно, что долгое время программы такого типа создавались только под системы Unix и DOS. В таблице 1 перечислены версии WinSock и их возможности.

WinSock 1.1

Windows 98

WinSock 2.x

WinNT 4.0

WinSock 2.0

Windows 2000

WinSock 2.2

Raw ICMP

нет

да

да

да

Raw IP

нет

нет

нет

да

Raw TCP|UDP

нет

нет

нет

нет

 Таблица 1.

<ВРЕЗКА>

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

Современная архитектура сетевого программного обеспечения основана на семиуровневой модели OSI (Open Systems Interconnection). В основе модели лежит принцип абстракции, когда каждый компонент выполняет свои функции и предоставляет некоторый сервис вышестоящему уровню.

Слой (Layer)

Описание

Application

В этом слое находятся протоколы верхнего уровня, которые не зависят ни от среды передачи данных, ни от способа передачи данных. Это всем хорошо известные протоколы, например, HTTP (hyper text transfer protocol), FTP (file transfer protocol), POP (post office protocol) и др.

Presentation

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

Session

Сессии почти не используются и предназначены для связи рабочих станций с серверами.

Transport

Протокол передачи данных высокого уровня. Например, TCP обеспечивает гарантированную доставку информации в отличие от протокола UDP.

Network

Знаменитый третий уровень, обычно это IP (internet protocol). Здесь передаются пакеты, осуществляется их маршрутизация, сборка и фильтрация. Пакеты несут в себе информацию об отправителе и получателе.

Data Link

На этом уровне передаются кадры (порции информации) между компьютерами, коммутаторами и другими устройствами сети (Ethernet, ATM, Token Ring, PPP).

Physical

Физический канал передачи данных, в котором циркулируют электрические сигналы.

</ВРЕЗКА>

Структура программы для прослушивания сети.

Обладая базовыми знаниями можно смело приступить к написанию прослушивающей программы для Windows 2000. Каркас программы может состоять из нескольких частей:

·        Драйвер для приёма всех пакетов (уже установлен в ОС).

·        Буфер для накопления и обработки пакетов. Это может быть простейший массив из байтов, но лучше иметь интеллектуальный циклический буфер.

·        Анализатор пакетов - набор функций и критериев для управления фильтрацией.

·        Декодер-шифратор (сами догадаетесь, зачем он нужен).

·        Автоматизированный редактор пакетов, который по команде злоумышленника вносит некоторые изменения в пакет и отправляет его обратно в сеть.

В начале каждой программы, использующей Windows Sockets, находится код инициализации сетевой библиотеки (WSAStartup). Затем следует создание сокета, определение имени и IP-адреса компьютера (gethostbyname), с которого запущена программа. В заключение подготовительной стадии устанавливаются параметры сокета (bind). Теперь осталось переключить сокет в режим приёма всех пакетов. Управляющая функция ioctlsocket с параметром-командой SIO_RCVALL включает promiscuous  mode.

Далее следует бесконечный цикл, который остановится только после нажатия клавиши. Внутри цикла идёт приём (recv) и обработка IP-пакетов. Пакеты записываются в единственный буфер и никак не анализируются. Размер буфера (64 кб) подобран с расчётом, чтобы в нём поместился самый большой IP-пакет. В нашем случае нет никакого анализа сетевого трафика. Умный человек сам разберётся, что и как дальше делать.

 

#include <conio.h>

#include <winsock2.h>

#define MAX_PACKET_SIZE    0x10000

// Буфер для приёма данных

static BYTE Buffer[MAX_PACKET_SIZE]; // 64 Kb

void main()

{

  WSADATA     wsadata;   // Инициализация WinSock.

  SOCKET      s;         // Cлущающий сокет.

  char        name[128]; // Имя хоста (компьютера).

  HOSTENT*    phe;       // Информация о хосте.

  SOCKADDR_IN sa;        // Адрес хоста

  long        flag = 1;  // Флаг PROMISC Вкл/выкл.

  // инициализация

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

  s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );

  gethostname(name, sizeof(name));

  phe = gethostbyname( name );

  ZeroMemory( &sa, sizeof(sa) );

  sa.sin_family = AF_INET;

  sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;

  bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));

 

  // Включение promiscuous mode.

  ioctlsocket(s, SIO_RCVALL, &flag);

  // Приём IP-пакетов.

  while( !_kbhit() )

  {

    int count;

    count = recv( s, Buffer, sizeof(Buffer), 0 );

    // обработка IP-пакета

    if( count >= sizeof(IPHeader) )

    {

      IPHeader* hdr = (IPHeader *)Buffer;

      //что-то делаем с пакетом...

    }

  }

  // Конец работы.

  closesocket( s );

  WSACleanup();

}

Вот и всё. Для успешной компиляции следует подцепить библиотечный файл "ws2_32.lib". Теперь вам есть с чего начать создавать полезную программу. Для экономии места из текста программы удалены все проверки на возможные ошибки. Контроль за возвращаемыми значениями функций необходим для корректной работы программы в любых условиях. Осталось сказать, что весь материал предназначен исключительно для образовательных целей, и автор не несёт ответственности за ущерб, который может быть нанесён после прочтения этой статьи.

<ВРЕЗКА>

Методы защиты от прослушивания сети.

Многих волнует проблема безопасности передачи данных в сети. Проблема может быть решена различными способами. Первый и самый дорогостоящий - аппаратный метод, когда вместо дешёвых концентраторов устанавливаются коммутаторы (switch). Второй и более надёжный - шифрование сетевого трафика. Информацию можно будет перехватить сниффером, но прочитать её будет невозможно. Шифровать можно с помощью технологии SSL (secure sockets layer), которая встроена почти во все браузеры. Она почти всегда используется в электронной коммерции и вполне надёжна. Для работы с почтой следует шифровать сообщения средствами PGP (pretty good privacy) или Secure MIME. В локальных сетях можно включить шифрацию IP-трафика. В Windows 2000 эту работу выполняет встроенный протокол IP Secure. Следуя этим простым советам можно гарантировать конфиденциальность передаваемой информации.

</ВРЕЗКА>

М. Калашников

Принцип работы сниффера.

Сниффер - это программа, которая позволяет перехватывать сетевой трафик. Когда говорят о снифферах, то обычно проводят аналогию с прослушиванием  телефонных разговоров. Подключившись к телефонной сети, можно перехватить беседу людей. Примерно также в компьютерных сетях можно перехватывать информацию, которой обмениваются компьютеры. Прослушивание возможно благодаря особенности архитектуры сети Ethernet (IEEE 802.3). Архитектура большинства локальных сетей основана на технологии Ethernet (ether - эфир, network - сеть), в которой все устройства подключены к одной среде передачи данных и совместно её используют. Топология сети Ethernet - линейная или звездообразная, а скорость передачи данных 10, 100 и 1000 Мбит/сек. Ethernet - это широковещательная сеть, в которой все узлы могут принимать все сообщения через единую магистраль. Используя эту особенность Ethernet, отпадает необходимость несанкционированного подключения к сегменту сети, т.е. не требуется резать кабели. Компьютер, с которого предполагается прослушивать, уже подключен к некоторому сегменту сети.

Сниффер может анализировать только то, что проходит через его сетевую карту. Внутри одного сегмента сети Ethernet все пакеты рассылаются всем машинам, из-за этого возможно перехватывать чужую информацию. Использование коммутаторов (switch, switch-hub) и их грамотная конфигурация уже является защитой от прослушивания. Между сегментами информация передаётся через коммутаторы. Коммутация пакетов - форма передачи, при которой данные, разбитые на отдельные пакеты, могут пересылаться из исходного пункта в пункт назначения разными маршрутами. Так что если кто-то в другом сегменте посылает внутри его какие-либо пакеты, то в ваш сегмент коммутатор эти данные не отправит.

Прослушивающие программы или пакетные анализаторы относятся к классу утилит двойного назначения. С одной стороны снифферы - мощное оружие, с помощью которого можно осуществить пассивную сетевую атаку. Эти программы могут представлять собой серьезную угрозу, поскольку могут перехватывать и расшифровывать имена и пароли пользователей, конфиденциальную информацию, нарушать работу отдельных компьютеров и сети в целом. Известно, что в большинстве протоколов передачи данных (FTP, POP, HTTP, telnet) секретная информация между клиентом и сервером передаётся открытым текстом. Поэтому злоумышленнику не составляет большого труда получить доступ к чужой информации. Достаточно раздобыть программу-сниффер, настроить её фильтры и ждать, когда жертва будет подключаться к серверу. С другой стороны снифферы помогают системным администраторам осуществлять диагностику сети и отслеживать атаки компьютерных хулиганов. Кроме того, они служат для проверки и детального анализа правильности конфигурации сетевого программного обеспечения. Иными словами - щит и меч.

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

Информация передаётся по сети, и получает её каждое устройство этой сети. По умолчанию сетевая плата компьютера видит только то, что предназначено именно для неё. Однако прослушивающие программы устанавливают её в режим приёма всех пакетов - promiscuous mode. В основе многих снифферов были и есть сетевые драйверы и библиотеки (libpcap, libnet), которые осуществляют большую часть работы. Дело в том, что для переключения сетевой платы в promiscuous mode требуется низкоуровневое программирование её портов. В многозадачной ОС такую работу могут выполнить только драйверы уровня ядра системы (kernel-mode drivers). Первые программы такого типа были созданы для операционных систем Unix. Для установки вручную сетевого интерфейса в "неразборчивый" режим необходимо включить флаг PROMISC:

$ifconfig eth0 promisc;

для отключения promiscuous mode:

$ifconfig eth0 -promisc.

Вскоре снифферы перебрались в популярную ОС Windows, но их работа в этой системе также требовала сетевого драйвера, который переключал сетевую плату (NIC - network interface card) в специальный режим. До недавнего времени создание программ-снифферов было уделом квалифицированных специалистов. С появлением Windows2000 создать программу для прослушивания сегмента сети стало совсем просто.

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

Основы передачи данных в сети Ethernet.

Каждому устройству в сети Ethernet соответствует уникальный шестибайтовый MAC-адрес (Media Access Control). Единицей передачи данных в такой сети является кадр (frame), который имеет определённую структуру и несёт в себе информацию о получателе, отправителе и сами данные.

struct ETHERNET_FRAME

{

  unsigned char  dest[6];// MAC-адрес получателя

  unsigned char  src[6]; // MAC-адрес отправителя

  unsigned short type;   // версия: IPv4 0x0800, IPv6 0x86DD, ARP 0x0806

  unsigned char  data[]; // данные

};

Кадр может иметь размер от 60 до 1514 байт, из которых первые 14 байт являются служебными. Когда требуется передать большее количество данных, они разбиваются на фрагменты и последовательно направляются в сеть. Кадр передаётся по сети, и получает его каждое устройство этой сети. Значение поля структуры с именем type определяет тип и версию "полезного груза" в кадре. Завершающая секция кадра служит для проверки целостности передаваемых данных и использует код циклического контроля (CRC32 - cyclic redundancy check). Это чрезвычайно мощная хэш-функция для выявления искажённости числовых данных. Обычно она аппаратно реализована в сетевой плате.

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

Теперь обратим внимание на полезный груз, который несёт кадр, а именно поле структуры data[]. Чаще всего в качестве данных может быть IP-пакет или ARP-пакет. ARP (address resolution protocol) - это служебный вспомогательный протокол, который осуществляет динамическую трансляцию физических MAC-адресов в логические IP-адреса на основе широковещательной рассылки запросов.

struct ETHERNET_ARP

{

  unsigned short hrd;   // Тип аппаратуры (Ethernet), 0x0001.

  unsigned short pro;   // Протокол (IP), 0x0800.

  unsigned char  hln;   // Длина аппаратного адреса (MAC), 6 байт.

  unsigned char  pln;   // Длина адреса протокола IP, 4 байта.

  unsigned short op;    // Вид операции {Запрос, Ответ} = {1, 2}.

  unsigned char  sha[6];// Аппаратный адрес (MAC) отправителя.

  unsigned char  spa[4];// IP-адрес отправителя.

  unsigned char  tha[6];// Аппаратный адрес (MAC) получателя.

  unsigned char  tpa[4];// IP-адрес получателя.

};

Для доставки пакетов в сети нужно определить физический адрес узла назначения. Именно для этого существует ARP - протокол автоматического определения физических адресов (IP <=> MAC). Когда одному компьютеру нужно начать обмен данными с другим, он ищет MAC-адрес получателя соответствующий запрашиваему IP-адресу в своей ARP-таблице. Если для нужного IP-адреса не найден соответствующий MAC-адрес, то посылается широковещательный запрос ARP, содержащий искомый IP-адрес назначения, а MAC-адрес для широковещательной рассылки заполнен единицами FF:FF:FF:FF:FF:FF. Целевой хост узнает свой IP-адрес, обрабатывает запрос и посылает ответ. Система готова к пересылке данных по локальной сети.

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

struct IP6Header

{

  unsigned long  ver:4;   // Версия IP-протокола

  unsigned long  tclass:8;// Класс трафика

  unsigned long  label:20;// Метка потока

  unsigned short length;  // Длина пакета

  unsigned char  next;    // Next header (опции)

  unsigned char  hop;     // Hop-limit.

  unsigned char  src[16]; // 128-битный адрес отправителя

  unsigned char  dst[16]; //  Адрес получателя

};

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

typedef struct _IPHeader

{

  unsigned char  verlen;   // версия и длина заголовка

  unsigned char  tos;      // тип сервиса

  unsigned short length;   // длина всего пакета

  unsigned short id;       // Id

  unsigned short offset;   // флаги и смещения

  unsigned char  ttl;      // время жизни

  unsigned char  protocol; // протокол

  unsigned short xsum;     // контрольная сумма

  unsigned long  src;      // IP-адрес отправителя

  unsigned long  dest;     // IP-адрес назначения

}IPHeader;

Подробно IP протокол описан в RFC за номером 791. Для нас особый интерес представляют поля заголовка protocol, src и dest. Два последних поля - это хорошо известные IP-адреса отправителя и получателя пакета. Например, шестнадцатеричное значение адреса 0x0000140A соответствует 10.20.0.0.

Поскольку в сети постоянно циркулирует огромное количество пакетов, то их лучше отфильтровывать. Критериями фильтрации могут быть IP-адреса, тип вышестоящего протокола (TCP, UDP, ICMP, PUP), а также содержимое пакета. Функции фильтрации весьма полезны, так как не только ограничивают собираемую программой информацию действительно нужной, но и просто обеспечивают её нормальную работу. Вполне возможно, что при интенсивной загрузке локальной сети компьютер и программа-сниффер будут не способны обработать всю поступающую информацию. Отсутствие критериев для фильтрации или задание слишком большого числа вариантов для IP приводит к тому, что программа-перехватчик не успевает обрабатывать все пакеты. А если ещё записывать все пакеты на жёсткий диск, то последний может переполниться в считанные минуты. На этом факте основаны некоторые программы для борьбы с прослушиванием. Они посылают в сеть множество пакетов с поддельной информацией о паролях и т.д. В результате снифферы "захлёбываются" в огромном потоке дезинформации.

Драйвер сетевой платы (NIC) занимается приёмом и передачей кадров в сеть Ethernet. Максимальный размер IP-пакета, включая служебные данные, составляет 64 килобайта, а максимальный размер данных в кадре, как вы уже знаете, 1500 байт. При необходимости драйвер осуществляет фрагментацию и сборку IP-пакетов. Сетевая подсистема в ОС Windows основана на многоуровневой архитектуре, которую в 1978 году одобрила международная организация стандартов (см. врезку). Таким образом,  NIC-драйвер взаимодействует с драйверами вышестоящих протоколов.

Программа для прослушивания сегмента сети работает именно с IP-пакетами. Она использует библиотеку Windows Sockets версии 2.2 и функционирует под управлением Windows 2000 и более поздних систем. Программирование "сырых" сокетов (raw sockets) в системе Windows предыдущих версий было почти невозможно. Неудивительно, что долгое время программы такого типа создавались только под системы Unix и DOS. В таблице 1 перечислены версии WinSock и их возможности.

WinSock 1.1

Windows 98

WinSock 2.x

WinNT 4.0

WinSock 2.0

Windows 2000

WinSock 2.2

Raw ICMP

нет

да

да

да

Raw IP

нет

нет

нет

да

Raw TCP|UDP

нет

нет

нет

нет

 Таблица 1.

<ВРЕЗКА>

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

Современная архитектура сетевого программного обеспечения основана на семиуровневой модели OSI (Open Systems Interconnection). В основе модели лежит принцип абстракции, когда каждый компонент выполняет свои функции и предоставляет некоторый сервис вышестоящему уровню.

Слой (Layer)

Описание

Application

В этом слое находятся протоколы верхнего уровня, которые не зависят ни от среды передачи данных, ни от способа передачи данных. Это всем хорошо известные протоколы, например, HTTP (hyper text transfer protocol), FTP (file transfer protocol), POP (post office protocol) и др.

Presentation

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

Session

Сессии почти не используются и предназначены для связи рабочих станций с серверами.

Transport

Протокол передачи данных высокого уровня. Например, TCP обеспечивает гарантированную доставку информации в отличие от протокола UDP.

Network

Знаменитый третий уровень, обычно это IP (internet protocol). Здесь передаются пакеты, осуществляется их маршрутизация, сборка и фильтрация. Пакеты несут в себе информацию об отправителе и получателе.

Data Link

На этом уровне передаются кадры (порции информации) между компьютерами, коммутаторами и другими устройствами сети (Ethernet, ATM, Token Ring, PPP).

Physical

Физический канал передачи данных, в котором циркулируют электрические сигналы.

</ВРЕЗКА>

Структура программы для прослушивания сети.

Обладая базовыми знаниями можно смело приступить к написанию прослушивающей программы для Windows 2000. Каркас программы может состоять из нескольких частей:

·        Драйвер для приёма всех пакетов (уже установлен в ОС).

·        Буфер для накопления и обработки пакетов. Это может быть простейший массив из байтов, но лучше иметь интеллектуальный циклический буфер.

·        Анализатор пакетов - набор функций и критериев для управления фильтрацией.

·        Декодер-шифратор (сами догадаетесь, зачем он нужен).

·        Автоматизированный редактор пакетов, который по команде злоумышленника вносит некоторые изменения в пакет и отправляет его обратно в сеть.

В начале каждой программы, использующей Windows Sockets, находится код инициализации сетевой библиотеки (WSAStartup). Затем следует создание сокета, определение имени и IP-адреса компьютера (gethostbyname), с которого запущена программа. В заключение подготовительной стадии устанавливаются параметры сокета (bind). Теперь осталось переключить сокет в режим приёма всех пакетов. Управляющая функция ioctlsocket с параметром-командой SIO_RCVALL включает promiscuous  mode.

Далее следует бесконечный цикл, который остановится только после нажатия клавиши. Внутри цикла идёт приём (recv) и обработка IP-пакетов. Пакеты записываются в единственный буфер и никак не анализируются. Размер буфера (64 кб) подобран с расчётом, чтобы в нём поместился самый большой IP-пакет. В нашем случае нет никакого анализа сетевого трафика. Умный человек сам разберётся, что и как дальше делать.

 

#include <conio.h>

#include <winsock2.h>

#define MAX_PACKET_SIZE    0x10000

// Буфер для приёма данных

static BYTE Buffer[MAX_PACKET_SIZE]; // 64 Kb

void main()

{

  WSADATA     wsadata;   // Инициализация WinSock.

  SOCKET      s;         // Cлущающий сокет.

  char        name[128]; // Имя хоста (компьютера).

  HOSTENT*    phe;       // Информация о хосте.

  SOCKADDR_IN sa;        // Адрес хоста

  long        flag = 1;  // Флаг PROMISC Вкл/выкл.

  // инициализация

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

  s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );

  gethostname(name, sizeof(name));

  phe = gethostbyname( name );

  ZeroMemory( &sa, sizeof(sa) );

  sa.sin_family = AF_INET;

  sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;

  bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));

 

  // Включение promiscuous mode.

  ioctlsocket(s, SIO_RCVALL, &flag);

  // Приём IP-пакетов.

  while( !_kbhit() )

  {

    int count;

    count = recv( s, Buffer, sizeof(Buffer), 0 );

    // обработка IP-пакета

    if( count >= sizeof(IPHeader) )

    {

      IPHeader* hdr = (IPHeader *)Buffer;

      //что-то делаем с пакетом...

    }

  }

  // Конец работы.

  closesocket( s );

  WSACleanup();

}

Вот и всё. Для успешной компиляции следует подцепить библиотечный файл "ws2_32.lib". Теперь вам есть с чего начать создавать полезную программу. Для экономии места из текста программы удалены все проверки на возможные ошибки. Контроль за возвращаемыми значениями функций необходим для корректной работы программы в любых условиях. Осталось сказать, что весь материал предназначен исключительно для образовательных целей, и автор не несёт ответственности за ущерб, который может быть нанесён после прочтения этой статьи.

<ВРЕЗКА>

Методы защиты от прослушивания сети.

Многих волнует проблема безопасности передачи данных в сети. Проблема может быть решена различными способами. Первый и самый дорогостоящий - аппаратный метод, когда вместо дешёвых концентраторов устанавливаются коммутаторы (switch). Второй и более надёжный - шифрование сетевого трафика. Информацию можно будет перехватить сниффером, но прочитать её будет невозможно. Шифровать можно с помощью технологии SSL (secure sockets layer), которая встроена почти во все браузеры. Она почти всегда используется в электронной коммерции и вполне надёжна. Для работы с почтой следует шифровать сообщения средствами PGP (pretty good privacy) или Secure MIME. В локальных сетях можно включить шифрацию IP-трафика. В Windows 2000 эту работу выполняет встроенный протокол IP Secure. Следуя этим простым советам можно гарантировать конфиденциальность передаваемой информации.

</ВРЕЗКА>

Константин Максимов
Industrial safety

Рассылки Subscribe.Ru
Все о защите данных на Идваре
Другие разделы
Криптография
Прочие опасности
Вирусы
Хакеры
Киберпреступность
Уязвимость ПО
Новое в разделе
Защита данных
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100