Комплекс сетевой защиты

Автор работы: Пользователь скрыл имя, 17 Сентября 2011 в 20:38, дипломная работа

Описание работы

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

Содержание работы

1. Введение 8
2. Задача сетевой защиты и методы её решения 10
2. 1. Брандмауэр 10
2. 2. Фильтры пакетов – простые и кумулятивные 11
2. 3. Прокси-брандмауэры и сервера уровня соединения 13
2. 4. Шлюзы приложений и сервера прикладного уровня 14
2. 5. Системы обнаружения компьютерных атак (СОА) 15
2. 6. Классификация систем обнаружения атак (СОА) 17
2. 7. Варианты реакций на обнаруженную атаку 19
2. 8. Характеристики средств сетевой защиты 21
2. 9. Выводы 25
3. Постановка задачи 27
3. 1. Концепция программного средства 27
3. 2. Сетевое программирование под OC Windows 28
3. 3. Атакующие воздействия для программного средства 31
3. 3. 1. Атака Smurf 31
3. 3. 2. Атака Tribe Flood Network 33
3. 3. 3. Атака WinFreeze 34
3. 3. 4. Атака ICMP Flood 36
4. Модель системы 37
4. 1. Схема взаимодействия модулей системы 44
4. 2. Описание модулей 46
4. 3. Описание программных элементов 47
5. Сведения о реализации 62
6. Экспериментальная часть 64
7. Разработка документации 73
7. 1. Техническое задание 73
7.2. Руководство оператора 76
8. Бизнес-план 78
8. 2. Характеристика ПП 78
8. 3. Исследование и анализ рынка 80
8. 4. Производственный план 82
График безубыточности 96
9. Безопасность и экологичность проекта 97
9. 1. Введение 98
9. 2. Характеристика производственного помещения 99
9. 3. Производственная санитария 100
9. 4. Электробезопасность 101
9. 5. Пожаробезопасность 102
9. 6. Контроль над электромагнитным излучением 104
9. 7. Освещение 107
9. 8. Вентиляция 108
9. 9. Контроль шума 110
9. 10. Эргономичность 111
9. 11. Вывод 113
10. Заключение 114
11. Список литературы 115
Приложение 116
Файл http_plugin.cpp 116
Файл Packet.cpp 128
Файл Packet.h 130
Файл Raw_send.cpp 132
Файл http_conf.inf 137
Файл http_client.htm 137
Файл http_icmp_form.htm 138
Файл http_icmp_reply.htm 139
Файл http_attack_form.htm 140
Файл http_attack_reply.htm 142
Файл Packet.cpp 142
Файл Packet.h 142
Файл pop3_conf.inf 142
Файл pop3_main.cpp 143

Файлы: 1 файл

Пояснительная записка.doc

— 1.00 Мб (Скачать файл)

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

     Вспомогательные модули инкапсулируют отдельные логические части основных модулей.

     Схема взаимодействия модулей системы  приведена на рис. 9. 

     Сервер  – raw_recv.exe                                        Клиент – raw_send.exe       

        Модуль  raw_recv.cpp                                            Модуль raw_send.cpp

         

     

        Модуль  pop3_main.cpp                                         Модуль packet.cpp

     

     

       Модуль pop3_module.cpp                                     Модуль http_plugin.cpp 

     

     

        Модуль server.cpp                                                  HTM-броузер для

                                                                                          управления 

     

       Модуль packet.cpp

          

           

            Программа MS Outlook Express

 

Рис. 9.  Схема взаимодействия модулей системы

 

4. 2.  Описание модулей

 

     Клиент  – raw_send.exe :

     Модули :

    1. raw_send.cpp – содержит методы: сборки «вручную» ICMP-пакетов, отправки пакетов, подсчёта контрольной суммы.
    2. packet.cpp - содержит методы: вывода на экран содержимого пакета, создания «сырого» сокета, «привязки» сырого сокета.
    3. http_plugin.cpp – всё остальное: полное описание HTTP-сервера (инициализация, приём подключений, создание вспомогательной нити и её закрытие, закрытие), полное описание работы вспомогательной нити (приём, передача), расшифровка команд и вызов функций из других модулей.
    4. HTM-файлы : удалённая консоль управления.
 

    Сервер  – raw_recv.exe :

    Модули:

    1. raw_recv.cpp – описание главной нити, запуск вспомогательной, создание «сырого» сокета, «привязка» его, получение пакетов, обнаружение атак, формирование сообщения электронной почты.
    2. pop3_main.cpp – вспомогательная нить – POP3-сервер: создание, приём-передача, закрытие.
    3. pop3_module.cpp – pop3-протокольная реализация сервера.
    4. server.cpp – базовые функциии pop3-сервера.
    5. packet.cpp – печать пакета, создание «сырого» сокета, «привязка» его.

 

4. 3.  Описание программных  элементов

 

Сетевое взаимодействие клиента и сервера  осуществляется на базе т.н. «сырых»  сокетов. «Сырые» сокеты (raw sockets) [3, глава 13] – это просто специальный режим обычных сокетов. Обычные сокеты работают между пятым и шестым уровнем модели OSI, скрывая от пользователя низкоуровневые операции. «Сырые» сокеты работают на третьем уровне модели OSI – на сетевом уровне (это протокол IP), позволяя «вручную» формировать (или читать при приёме) всё содержимое IP-пакета – сам IP-заголовок и всё, что вложено в IP-пакет (в данном случае – ICMP-пакет).

«Сырой» сокет создаётся вызовом функции  

SOCKET s;

s = WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0,0); 

В Windows 2000 «cырые» сокеты относятся к вопросам безопасности, так как могут быть использованы во вред, и поэтому для их создания необходимы права Администратора.

Кроме создания, необходимо также установить режим включения заголовка IP_HDRINCL: 

BOOL bOpt;

bOpt = TRUE; // If TRUE (while setting IP_HDRINCL), IP header is

                   // submitted with data to be sent and

                   // returned from data that is read.

ret = setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&bOpt, sizeof(bOpt)); 

Опция IP_HDRINCL реализована только начиная с Windows 2000. 

 

Описание элементов  клиента raw_send.exe: 

Модуль  Packet.h содержит следующие элементы:

Директиву #pragma pack(1) – выравнивание полей структур на границу 1 байта.

1.  Структура, описывающая пакет IP:

typedef struct ip_hdr

{

    u_char  ip_verlen;          // IP version & length

    u_char  ip_tos;              // IP type of service

    u_short ip_totallength;    // Total length

    u_short ip_id;                // Unique identifier

    u_short ip_offset;          // Fragment offset field

    u_char  ip_ttl;                // Time to live

    u_char  ip_protocol;       // Protocol(TCP,UDP etc)

    u_short ip_checksum;    // IP checksum

    u_int   ip_srcaddr;          // Source address

    u_int   ip_destaddr;        // Destination address

} IP_HDR, *PIP_HDR, FAR* LPIP_HDR; 

2.  Структура, описывающая  пакет ICMP:

typedef struct icmp_hdr

{

    BYTE   i_type;

    BYTE   i_code;                 // Type sub code

    USHORT i_cksum;

    USHORT i_id;

    USHORT i_seq;

} ICMP_HDR, *PICMP_HDR;

Смысл и значения этих полей соответствуют описанию протоколов IP [12] и ICMP [13].  

3.  Класс ICMP_PACKET:

Представляет  описание одного ICMP-пакета. Содержит структуры IP_HDR и ICMP_HDR, символьный буфер, адресную структуру (адрес назначения) для пакета и две простые функции типа SET/GET для установки/считывания полей пакета - PrintPacket и FillFields. 

4.  Класс RAW_SOCKET:

Представляет  описание «сырого» сокета. Содержит поле типа «сокет», логическую переменную для  выставления опций, две простые  функции типа SEND/RECEIVE для отправки/получения пакетов, функцию привязки сокета к IP-адресу, и конструктор, который принимает тип создаваемого сокета (Создавая «сырой» сокет определённого протокола – неопределённый, ICMP, UDP, IP, и пр.).  

Модуль  Packet.cpp cодержит следующие элементы:

Определение функции ICMP_PACKET::PrintPacket – распечатка полей полей пакета ICMP.

Конструктор «сырого» сокета RAW_SOCKET::RAW_SOCKET. Он создаёт  «сырой» сокет путём указания идентификатора «SOCK_RAW» и нужного  протокола (получаемого как параметр) [3]. Также конструктор выставляет у создаваемого «сырого» сокета опцию «IP_HDRINCL», означающую «включать IP-заголовок пакета при создании/получении пакета» [3].

Определение функции RAW_SOCKET::BindSocket – «привязать»  сокет к определённому адресу (используется только для серевера).     

Модуль  Raw_send.cpp содержит следующие элементы:

Определение функции ICMP_PACKET::FillFields – формирование полей пакета ICMP. Функция принимает аргумент – массив строк, полученный от HTTP-консоли, в котором содержится предопределённое количество строк, описывающих все необходимые параметры создаваемых пакетов, которые потом будут отправлены серверу в виде атакующей последовательности пакетов. Формирование полей пакетов осуществляется примерно так, как описано в [3] и в [15]: заполняются поля IP-заголовка, поля ICMP-заголовка, вычисляется контрольная сумма для ICMP-пакета, затем заполненные структуры последовательно копируются в символьный буфер. После заполняется структура struct sockaddr_in remote – туда записывается адрес сервера. Эта структура потом будет передана в функцию «отправить пакеты».

Определение функции RAW_SOCKET::SendPackets – отправка ICMP-пакетов на сервер. Принимает буфер с сформированным пакетом, количество пакетов, отправляет пакеты.

Определение функции send_icmp_sequence – центральная функция во всём клиенте. Вызывается при каждом HTTP-подключении. Получает параметры из HTTP-клиента, создаёт объекты «ICMP_PACKET» и «RAW_SOCKET», заполняет поля пакетов, отправляет их на сервер и закрывает «сырой» сокет после этого.

Определение функции checksum (взятая из [15]). Может быть использована для протоколов IP, UDP, TCP, ICMP:

 

u_short checksum(u_short *buffer, int size)

{

    u_long cksum=0; 

    while (size > 1)

    {

        cksum += *buffer++;

        size  -= sizeof(u_short);  

    }

    if (size)

    {

        cksum += *(u_char*)buffer;  

    }

    cksum = (cksum >> 16) + (cksum & 0xffff);

    cksum += (cksum >>16);  

    return (u_short)(~cksum);

}

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

Модуль  http_plugin.cpp содержит следующие элементы: 

1.  Класс CONF_HTTP: 

Представляет  описание абстрактного конфигурационного  объекта, содержащего всю конфигурацию HTTP-сервера. Содержит поля:

fstream conf_file (из этого файла при запуске программы считываем настройки HTTP-сервера),

char ip_address[32] (ip-адрес этого сервера),

int port (порт, на который будем принимать  HTTP-запросы (обычно 80),

int echo (выводить  ли на экран каждое действие)

CONF_HTTP –  конструктор, обнуляющий поля

ProcessConfigCommands – изменение конфигурации с  клавиатуры

Init – считывание конфигурационных параметров из файла «http_conf» при запуске системы. 
 

2.  Класс DISPATCH_SERVER_SOCKET_HTTP: 

Представляет  описание диспетчерского сокета, принимающего HTTP-подключения. Содержит поля:

long connection_time (время подключения клиента)

struct sockaddr_in server_address,client_address (адресные структуры сервера и клиента)

int retval,size_of_client_address (количество принятых/отправленных байтов, размер адресной структуры)

WSADATA wsaData (стартовая сокетная структура)

SOCKET dispatch_server_socket, msg_server_socket (диспетчерский сокет, виртуальный сокет подключения)

DWORD dwThreadID (идентификатор нити)

DISPATCH_SERVER_SOCKET_HTTP (конструктор, принимающий конфигурационный объект)

CONF_HTTP conf (конфигурационный объект)

int accept_connect(void) (принимает запрос на подключение) 

3.  Класс SERVER: 

Представляет  описание виртуального сокета, создаваемого при каждом HTTP-подключении и закрываемого при его окончании. Содержит поля:

char Buffer[SIZE_OF_BUFFER] (буфер для приёма/отправки сообщения)

SOCKET msg_server_socket (виртуальный сокет, создаваемый на один сеанс) 

int quit (флаг, который показывает, что сеанс  связи окончен)

int block_reply (флаг – блокировать/не блокировать ответ)

PARAM param[100] (массив строк-параметров для «сырого» сокета)

Информация о работе Комплекс сетевой защиты