birmaga.ru
добавить свой файл

1


Федеральное агентство по образованию РФ

Брянский государственный технический университет
Кафедра «Информатика и программное обеспечение»
Курсовая работа

по курсу

«Сети ЭВМ и телекоммуникации»
Тема: «Разработка простейшего сетевого сниффера»
Выполнил студент группы 05-САПР:

Горохов А.Н.

Защищено с оценкой: _________

Преподаватель: Трубаков А.О.


Брянск 2008

З А Д А Н И Е

на курсовую работу по курсу "Сети ЭВМ”

Студент Горохов А.Н. Группа 05-САПР

Тема: Разработка простейшего сетевого сниффера

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

Слово sniffer (дословно с английского это можно перевести как "нюхач" или "вынюхиватель") в самом общем смысле суть некое прослушивающее устройство, внедренное в сеть для перехвата передаваемых по ней данных. Все-таки логичней было бы утверждать, что сниффинг - это совокупность мер по перехвату траффика. В рамках же конкретного продукта могут быть реализованы следующие вещи: захват пакетов (packet capturing). На этом этапе мы получаем некий (mashine readable) дамп данных, обычно разделенный по границам кадров (пакетов).

В начале 1990-х сниффер широко применялся хакерами для захвата пользовательских логинов и паролей. Широкое распространение хабов позволяло захватывать трафик без больших усилий в больших сегментах сети.

Снифферы применяются как в благих, так и в деструктивных целях.

1.ПРИМЕНЕИЕ СНИФФЕРОВ

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


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

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

• Troubleshooting (обнаружение проблем и узких мест сети). В расширенном режиме, когда сниффер работает в некоммутируемом сегменте или на шлюзе, мы можем получить практически полную картину событий, происходящих в нашей сети: интенсивность трафика по времени, по рабочим станциям, по протоколам, количество ошибок разных типов. Кроме того, в обоих режимах, мы можем "разгребать" более специфические проблемы, когда, скажем, у конкретной станции ни в какую не получается организовать некое взаимодействие по сети, и это при том, что внешне сеть выглядит вполне работоспособной. Особенно полезен сниффер в случаях, когда сетевое ПО плохо документировано или использует свои закрытые (недокументированные), зачастую подозрительные технологии (протоколы). Например: ICQ, Europe Online. Под подозрительными технологиями ПО следует понимать ситуации, когда вы предполагаете наличие в программе закладки или иной недокументированной функциональности. Например, ходили слухи, что клиентская часть знаменитого cDc Back Orifice также является троянской лошадкой и посылает некие сведения хозяевам - авторам ПО. Установка BO Client "на прослушивание" показала, что слухи не соответствуют действительности. Не менее полезен сниффер для отладки вашего собственного ПО


• Протоколирование сетевого трафика. Многие организации включают в политику безопасности эту технологию. Если компания обеспечивает своих сотрудников оборудованием, подключением к локальным и глобальным сетям, она вправе требовать надлежащего использования этих ресурсов. Вторая важная причина для протоколирования трафика - обнаружение попыток несанкционированного доступа и других зловредностей - DoS-атак например. Имея такие программы, администратор с 100-процентной точностью может знать, что происходит в его сетевых владениях.

Теперь поговорим о нелегальной стороне сниффинга:

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

• Более меркантильное подслушивание. Чаще всего злоумышленника интересует некий материал, с помощью которого можно продвинуться в нелегком деле по взламыванию чужих систем и сетей. Речь идет, главным образом, о перехвате имен пользователей и паролей, проходящих по сети в незашифрованном (plain text) виде, т.е. в виде простого текста. В частности, это касается паролей к telnet, POP, IMAP, NNTP, IRC, к веб – приложениям, не использующим шифрование и т.п.

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


2. ВЫБОР СРЕДСТВ И МЕТОДОВ РАЗРАБОТКИ

Существуют два подхода к реализации снифферов:


  1. захват пакетов на уровне драйвера

  2. захват пакетов на уровне приложения

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

Чаще всего используются:

  •         "родной" драйвер от Microsoft (находится в Device Driver Kit для операционной системы, можно интегрировать в свои программы, большинство снифферов под Windows используют именно его). Устанавливать его не надо - он обычно ставится вместе со сниффером;

  •         WinPCap - специализированный драйвер, написанная в Политехническом институте Турина. Используется например, Каином, EtherSnoop, NMAP. Также находится в каталоге "Снифферы";

  •         LibNET - драйвер, портированный с *nix. Обычно используется такими же портированными программами. Также имеется в этом каталоге.

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

Кратко проанализировав основные подходы к программированию, выбираем второй подход, т.к. он проще в реализации и не нуждается в использовании внешних библиотек. Язык программирования выбираем Delphi7,

так как я неплохо владею данным языком программирования и в нем имеются все средства для выполнения данного проекта.


3.АНАЛИЗ СТРУКТУРЫ ИСПОЛЬЗУЕМЫХ ПРОТОКОЛОВ

3.1.IP

На межсетевом уровне программа использует протокол IP. Функция данного протокола состоит в передаче пакета через набор объединенных компьютерных сетей. Это осуществляется посредством передачи пакетов от одного модуля Internet к другому до тех пор, пока не будет достигнут получатель. Пакеты направляются с одного модуля Internet на другой через конкретные компьютерные сети, основанные на интерпретации Internet адресов. А сетевая карта переведенная в режим promiscuous mode будет считывать все пакеты проходящее через её интерфейс. Пришедший пакет состоит из Ip-заголовка плюс полезные данные(в которые могут быть включены заголовки верхних уровней). Ip-заголовок имеет вид



Рис.1. Ip-заголовок

3.2.ICMP

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

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

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


ICMP-заголовок имеет следующий вид



Рис.2. ICMP-заголовок

3.3.ТCP

Протокол управления передачей (TCP) предназначен для использования в качестве надежного протокола общения между хост-компьютерами в коммуникационных компьютерных сетях с коммутацией пакетов, а также в системах, объединяющих такие сети. Предполагается, что программа протокола TCP является модулем операционной системы. Клиенты обращаются к протоколу TCP в значительной степени так же, как если бы они обращались к файловой системе. Сам протокол TCP может обращаться к другим функциям операционной системы, к примеру, для управления структурами данных. Для запросов со стороны пользователя к протоколу TCP интерфейс TCP/пользователь обеспечивает открытие и закрытие соединения, посылку и получение данных или же получение статуса соединения. Эти запросы похожи на другие запросы программы пользователя к операционной системе, например, на запросы открытия, чтения и закрытия файла.

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

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


TCP-заголовок имеет вид



Рис.3. ТCP-заголовок

3.4.UDP

Данный протокол предоставляет прикладной программе процедуру для посылки сообщений другим программам, причем механизм протокола минимален. Протокол UDP ориентирован на транзакции, получение датаграмм и защита от дублирования не гарантированы. Приложения, требующие гарантированного получения потоков данных, должны использовать протокол управления пересылкой (Transmission Control Protocol - TCP).

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

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

UDP использует Internet Protocol для пеpедачи сообщения от одной мащины к дpугой и обеспечивает ту же самую ненадежную доставку сообщений, что и IP. UDP не использует подтвеpждения пpихода сообщений, не упоpядочивает пpиходящие сообщения и не обеспечивает обpатной связи для управления скоростью передачи инфоpмации между машинами. Поэтому, UDP-сообщения могут быть потеpяны, pазмножены или пpиходить не по поpядку. Кpоме того, пакеты могут пpиходить pаньше, чем получатель сможет обpаботать их. В общем можно сказать, что: UDP обеспечивает ненадежную службу без установления соединения и использует IP для тpанспоpтиpовки сообщений между машинами. Он предоставляет возможность указывать несколько мест доставки на одном компьютере.


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

UDP -заголовок имеет вид

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

Source Port

Destination Port


Length

Checksum

data octets ...


Рис.4. UDP –заголовок

4.АЛГОРИТМ РАБОТЫ ПРОГРАММЫ

Разработанная программа анализирует сетевой трафик протоколов TCP/IP. При реализации программы использовали принцип программирования без драйвера, так как этот принцип проще в реализации и позволяет производить анализ локального трафика.

Для проведения анализа протокола были созданы структуры, описывающие заголовки используемых протоколов (см. рис.1, рис.2, рис.3, рис.4). // ip заголовок

TIP_paket = record

ip_vDlin:UCHAR; // версия и длина заголовка

ip_serv:UCHAR; // тип сервиса

ip_Dlin:WORD; // длина всего пакета

ip_id: WORD; // Идентификация

ip_flag:WORD; // флаги и смещения

ip_Tlive:UCHAR; // время жизни пакета

ip_prot:UCHAR; // протокол

iph_xsum:WORD; // контрольная сумма

iph_source:DWORD; // IP-адрес отправителя

iph_dest:DWORD; // IP-адрес назначения

end;

// TCP Заголовок

TTCP_paket = record

sourcePort:WORD; // порт отправителя

destinationPort:WORD;// порт назначения

PosledNomer:DWORD; // номер последовательности

PodtNomer:DWORD; // номер подтверждения

dataoffset: UCHAR; // смещение на область данных

flags: UCHAR; // флаги

windows: WORD; // размер окна

ksum: WORD; // контрольная сумма

crochnoct:WORD; // срочность

end;

// Udp заголовок

TUDP_paket = record

sourcePort:WORD; // порт отправителя

destinationPort:WORD; // порт назначения

Dlin:WORD; // длина пакета

ksum:WORD; // контрольная сумма


end;

// ICMP заголовок

TICMP_paket = record

IcmpType : BYTE; // Тип пакета

IcmpCode : BYTE; // Код пакета

IcmpChecksum : WORD; // контрольная сумма

IcmpId : WORD;

IcmpSeq : WORD;

IcmpTimestamp : DWORD;

end;
Некоммутируемый Ethernet предполагает, что каждый сетевой интерфейс в принципе "слышит" весть траффик своего сегмента. Однако в нормальном режиме работы сетевой карты, прочитав первые 48 бит заголовка фрейма, станция сравнивает свой МАС-адрес с адресом получателя, указанном в фрейме. Если адрес чужой, станция перестает читать чужой фрейм. Таким образом в нормальном режиме вы можно перехватывать и анализировать только свой траффик. Для перехвата пакетов всех станций сегмента требуется перевести сетевую карту в режим под названием promiscuous mode, чтобы она продолжала читать не предназначенные ей пакеты.

В процедуре TForm1.FormCreate инициализируем Winsock и определяем ip-адрес машины на которой запущена программа.

Программа работает на уровне приложения, используя при работе библиотеку WinSock. После нажатия на кнопку «Пуск» создаем сокет: S:=socket(AF_INET, SOCK_RAW, IPPROTO_IP);Формируем адресное пространство, в поле Addr_in.sin_addr.s_addr записываем ip-адрес машины, введенный при запуске программы. Связываем сокет с заданным сетевым интерфейсом командой bind.

S:=socket(AF_INET, SOCK_RAW, IPPROTO_IP);

Addr_in.sin_family:= AF_INET;

Addr_in.sin_addr.s_addr :=inet_addr(PChar(Ip));

bind(S, Addr_in, SizeOf(sockaddr_in));

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

Разбор пакета производится в процедуре Razbor. В начале считываем ip-заголовок(см. рис1). После этого определяем, какому протоколу транспортного уровня принадлежит данный пакет. Для этого сравниваем значение поля ip_prot со следующими константами модуля WinSock: IPPROTO_ICMP, IPPROTO_TCP, IPPROTO_UDP, значения, которых соответственно определяют протоколы ICMP, TCP и UDP. В случае не совпадения выводим на экран: «тип пакета не определён». Затем считываем из массива Paket заголовки остальных протоколов.(см рис2,рис3,рис4.) После считывания заголовков считываем и выводим на экран следующую информацию о типе транспортного протокола, (IP-адресс)+порт отправителя и получателя, время жизни пакета и его размер. Так как в сети принят прямой порядок байтов, а не обратный, то пришлось поменять байты местами Для этого служит две функция, занимающиеся преобразованием из сетевого порядка байт в машинный и обратно htons.


После нажатия на кнопку «Стоп», закрываем сокет и работа снифера приостанавливается.

5.РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

Следует сразу принести изменения за не очень удачный выбор рабочего окна(см.рис5)



Рис.5. Рабочее окно программы

Проверьте, правильность вашего ip-адреса и нажмите на кнопку «пуск». После нажатия на кнопку «пуск» программа начнёт работать. В поле вывода появится информация о захваченных пакетах. В поле «Режим работы» появится надпись «Работаю». Кнопка «Пуск» переименуется в кнопку «Стоп», и теперь при нажатии на эту кнопку работа сниффера будет приостановлена. После нажатия на кнопку «Стоп», кнопка «Очистить» станет, активна, то есть можно будет очистить поле вывода и, нажатием на кнопку «Пуск» можно продолжить анализ сетевого трафика.

6.ТЕСТИРОВАНИЕ
Созданная в результате выполнения курсового проекта программа тестировалась при одновременном запуске программы и сниффера Wireshark (Ethreal). Перед началом тестирования сниффер Wireshark был настроен на преём ip-пакетов. Результат тестирования хороший. В целом результат работы созданной программы и сниффера Wireshark совпадают.

Рис.6. Результаты тестирования

Следует отметить, что в программе отсутствует защита от неверного ввода ip-адреса.

ЗАКЛЮЧЕНИЕ
Поставленная задача, разработка простейшего сниффера была выполнена, при этом в программе реализовано:


  • Прием пакетов стека потокола TCP/IP

  • Определение IP-адресов и портов отправителя и получателя

При этом программу возможно дополнить рядом функций:

  • Способность принимать большее количество протоколов


  • Создать фильтры отображения и захвата.

СПИСОК ЛИТЕРАТУРЫ


    1. Архангельский А.Я. Программирование в Delphi 7. – М.:ООО «Бином-Пресс», 2003 – 1153 с.:ил

    2. Йон Снейдер. Эффективное программирование TCP/IP. Питер ,2002-320 с.

    3. RFC 793 – « TRANSMISSION CONTROL PROTOCOL»

    4. RFC 768 – « USER DATAGRAM PROTOCOL»

    5. RFC 791 – «INTERNET PROTOCOL»

    6. RFC 792 – «INTERNET CONTROL MESSAGE PROTOCOL»

    7. http://www.soft-hack.net.ru/modules

    8. Русский перевод RFC http://info.internet.isi.edu/in-notes/rfc/files