Автор работы: Пользователь скрыл имя, 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
Все нити во всех приложениях системы не используют глобальные переменные для передачи параметров, а передают параметры путём вызова функций. Использование глобальных переменных является плохим программистским приёмом и допускается только для неменяющихся переменных.
Вспомогательные модули инкапсулируют отдельные логические части основных модулей.
Схема
взаимодействия модулей системы
приведена на рис. 9.
Сервер
– raw_recv.exe
Модуль
raw_recv.cpp
Модуль
pop3_main.cpp
Модуль pop3_module.cpp
Модуль server.cpp
Модуль packet.cpp
Программа MS Outlook Express
Рис. 9. Схема взаимодействия модулей системы
Клиент – raw_send.exe :
Модули :
Сервер – raw_recv.exe :
Модули:
Сетевое взаимодействие клиента и сервера осуществляется на базе т.н. «сырых» сокетов. «Сырые» сокеты (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::
Определение
функции RAW_SOCKET::
Определение функции 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] (массив строк-параметров для «сырого» сокета)