Реферат Комплекс сетевой защиты
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Гипероглавление:
1. Введение
2. Задача сетевой защиты и методы её решения
2. 1. Брандмауэр
2. 2. Фильтры пакетов – простые и кумулятивные
2. 3. Прокси-брандмауэры и сервера уровня соединения
2. 4. Шлюзы приложений и сервера прикладного уровня
2. 5. Системы обнаружения компьютерных атак (СОА)
2. 6. Классификация систем обнаружения атак (СОА)
2. 7. Варианты реакций на обнаруженную атаку
2. 8. Характеристики средств сетевой защиты
Достоинства пакетных фильтров:
Недостатки пакетных фильтров:
2. 9. Выводы
3. Постановка задачи
3. 1. Концепция программного средства
3. 2. Сетевое программирование под OC Windows
3. 3. Атакующие воздействия для программного средства
3. 3. 1. Атака Smurf
3. 3. 2. Атака Tribe Flood Network
3. 3. 3. Атака WinFreeze
3. 3. 4. Атака ICMP Flood
4. Модель системы
4. 1. Схема взаимодействия модулей системы
4. 2. Описание модулей
4. 3. Описание программных элементов
5. Сведения о реализации
6. Экспериментальная часть
7. Разработка документации
7. 1. Техническое задание
Введение
Основания для разработки
Назначение разработки
Программное средство должно быть динамически настраиваемым.
Требования к надежности
Условия эксплуатации
Требования к составу и параметрам технических средств
Требования к информационной и программной совместимости
Требования к маркировке и упаковке
Требования к транспортированию и хранению
Специальные требования
Требования к программной документации
Технико-экономические показатели
Стадии и этапы разработки
Порядок контроля и приемки
7.2. Руководство оператора
Назначение программы
Условия выполнения программы
Выполнение программы
Сообщения оператору
8. Бизнес-план
8. 2. Характеристика ПП
8. 3. Исследование и анализ рынка
8. 4. Производственный план
График безубыточности
9. Безопасность и экологичность проекта
9. 1. Введение
9. 2. Характеристика производственного помещения
9. 3. Производственная санитария
9. 4. Электробезопасность
9. 5. Пожаробезопасность
9. 6. Контроль над электромагнитным излучением
9. 7. Освещение
9. 8. Вентиляция
9. 9. Контроль шума
9. 10. Эргономичность
9. 11. Вывод
10. Заключение
11. Список литературы
Приложение
Файл http_plugin.cpp
Файл Packet.cpp
Файл Packet.h
Файл Raw_send.cpp
Файл http_conf.inf
Файл http_client.htm
СОДЕРЖАНИЕ
1. Введение 8
2. Задача сетевой защиты и методы её решения 10
2. 1. Брандмауэр 10
2. 2. Фильтры пакетов – простые и кумулятивные 11
2. 3. Прокси-брандмауэры и сервера уровня соединения 13
2. 4. Шлюзы приложений и сервера прикладного уровня 14
2. 5. Системы обнаружения компьютерных атак (СОА) 15
2. 6. Классификация систем обнаружения атак (СОА) 18
2. 7. Варианты реакций на обнаруженную атаку 19
2. 8. Характеристики средств сетевой защиты 22
2. 9. Выводы 26
3. Постановка задачи 28
3. 1. Концепция программного средства 28
3. 2. Сетевое программирование под OC Windows 29
3. 3. Атакующие воздействия для программного средства 32
3. 3. 1. Атака Smurf 33
3. 3. 2. Атака Tribe Flood Network 34
3. 3. 3. Атака WinFreeze 36
3. 3. 4. Атака ICMP Flood 38
4. Модель системы 39
4. 1. Схема взаимодействия модулей системы 46
47
4. 2. Описание модулей 48
4. 3. Описание программных элементов 49
5. Сведения о реализации 65
6. Экспериментальная часть 67
7. Разработка документации 76
7. 1. Техническое задание 76
7.2. Руководство оператора 80
8. Бизнес-план 82
8. 2. Характеристика ПП 82
8. 3. Исследование и анализ рынка 84
8. 4. Производственный план 86
График безубыточности 100
9. Безопасность и экологичность проекта 102
9. 1. Введение 103
9. 2. Характеристика производственного помещения 104
9. 3. Производственная санитария 105
9. 4. Электробезопасность 106
9. 5. Пожаробезопасность 107
9. 6. Контроль над электромагнитным излучением 110
9. 7. Освещение 112
9. 8. Вентиляция 114
9. 9. Контроль шума 115
9. 10. Эргономичность 117
9. 11. Вывод 119
10. Заключение 120
11. Список литературы 121
Приложение 122
Файл http_plugin.cpp 122
Файл Packet.cpp 135
Файл Packet.h 137
Файл Raw_send.cpp 139
Файл http_conf.inf 144
Файл http_client.htm 144
Файл http_icmp_form.htm 145
Файл http_icmp_reply.htm 146
Файл http_attack_form.htm 147
Файл http_attack_reply.htm 149
Файл Packet.cpp 150
Файл Packet.h 150
Файл pop3_conf.inf 150
Файл pop3_main.cpp 150
В современном мире происходит стремительное развитие компьютерной техники и компьютерных технологий. Важное место среди них занимают технологии вычислительных и информационных сетей. Создание и развитие Internet и World Wide Web привело к новому этапу развития информационного общества. Но, с другой стороны, развитие современных сетевых информационных технологий привело к росту числа компьютерных преступлений и связанных с ними хищений информации, а также материальных потерь.
Интернет и World Wide Web совместно открыли новую дверь, через которую хакеры могут удалённо атаковать домашние компьютеры и корпоративные сети и исследовать, копировать или уничтожать находящиеся в них данные. По оценкам экспертов, до 85% сетей, подключённых к Интернету, уязвимы для таких атак.
По результатам одного исследования, посвященного вопросам компьютерных преступлений, около 58% опрошенных пострадали от компьютерных взломов за последний год. Примерно 18% опрошенных из этого числа заявляют, что потеряли более миллиона долларов в ходе нападений, более 66% потерпели убытки в размере 50 тыс. долларов. Свыше 22% атак были нацелены на промышленные секреты или документы, представляющие интерес прежде всего для конкурентов.
С ростом Интернета и развитием технологий такие нападения распространяются всё шире. Сегодня можно говорить о том, что угроза извне становится проблемой мирового масштаба, касающейся любой компании, имеющей выход во внешние сети.
Информационная безопасность обеспечивается комплексом социально-правовых, морально-этических норм, а также техническими средствами. На техническом уровне для обеспечения защиты сетевых систем, безопасности удалённого доступа и создания надёжных политик безопасности применяются такие средства защиты локальных и корпоративных сетей, как межсетевые экраны (брандмауэры, файерволы, прокси-сервера) (МСЭ), а также более современные средства - системы обнаружения атак (СОА).
Проблема информационной защиты и безопасности локальных сетей важна и актуальна. Полностью она не решена и на сегодняшний день. Практически это одна из ключевых проблем развития информационного общества.
Рассматривая техническую проблему безопасности и защиты локальных и корпоративных сетей от атак извне, необходимо рассмотреть проблему сетевой защиты и методы её решения.
Межсетевой экран или брандмауэр (по-нем. brandmauer, по-англ. firewall, по-рус. граница огня) - это система или комбинация систем, позволяющих разделить сеть на две или более частей и реализовать набор правил, определяющих условия прохождения пакетов из одной части в другую. Чаще всего эта граница проводится между локальной сетью предприятия и INTERNET, хотя ее можно провести и внутри локальной сети предприятия. Брандмауэр, таким образом, пропускает через себя весь трафик. Для каждого проходящего пакета брандмауэр принимает решение пропускать его или отбросить. Для того чтобы брандмауэр мог принимать эти решения, ему необходимо определить набор правил. О том, как эти правила описываются и какие параметры используются при их описании, речь пойдет чуть позже.
Как правило, брандмауэры функционируют на какой-либо UNIX платформе - чаще всего это BSDI, SunOS, AIX, IRIX и т.д., реже - DOS, VMS, WNT, Windows NT. Из аппаратных платформ встречаются INTEL, Sun SPARC, RS6000, Alpha, HP PA-RISC, семейство RISC процессоров R4400-R5000. Помимо Ethernet, многие брандмауэры поддерживают FDDI, Token Ring, 100Base-T, 100VG-AnyLan, различные серийные устройства. Требования к оперативной памяти и объему жесткого диска зависят от количества машин в защищаемом сегменте сети.
Обычно в операционную систему, под управлением которой работает брандмауэр, вносятся изменения, цель которых - повышение защиты самого брандмауэра. Эти изменения затрагивают как ядро ОС, так и соответствующие файлы конфигурации. На самом брандмауэре не разрешается иметь счета пользователей (а значит и потенциальных дыр), только счет администратора. Некоторые брандмауэры работают только в однопользовательском режиме. Многие брандмауэры имеют систему проверки целостности программных кодов. При этом контрольные суммы программных кодов хранятся в защищенном месте и сравниваются при старте программы во избежание подмены программного обеспечения.
Все брандмауэры можно разделить на три типа:
Все три категории могут одновременно встретиться в одном брандмауэре.
Фильтр пакетов — это узел или маршрутизатор, который проверяет каждый пакет на соответствие правилам политики безопасности перед его отправкой в сеть и/ или узел назначения через соответствующий сетевой интерфейс.
Фильтры пакетов принимают решение о том, пропускать пакет или отбросить, просматривая IP-адреса, флаги или номера TCP портов в заголовке этого пакета. IP-адрес и номер порта - это информация сетевого и транспортного уровней соответственно, но пакетные фильтры используют и информацию прикладного уровня, т.к. все стандартные сервисы в TCP/IP ассоциируются с определенным номером порта.
Для описания правил прохождения пакетов составляются таблицы типа:
Поле "действие" может принимать значения пропустить или отбросить.
Тип пакета - TCP, UDP или ICMP. Флаги - флаги из заголовка IP-пакета.
Поля "порт источника" и "порт назначения" имеют смысл только для TCP и UDP пакетов.
В первую очередь, фильтры отбрасывают пакеты ICMP, UDP и входящие пакеты SYN/ACK, которые инициируют внутренний сеанс связи. Простые фильтры могут только фильтровать пакеты от узла-отправителя, узла-получателя и от порта-получателя. Более интеллектуальная разновидность фильтров может работать, основываясь на информации о входящем интерфейсе, порте-отправителе и даже анализировать состояния флагов заголовков. В качестве примера фильтров такого типа можно привести простые маршрутизаторы, такие как маршрутизаторы доступа любой серии фирмы Cisco или даже UNIX-станции с установленным демоном-брандмауэром. Если маршрутизатор сконфигурирован для работы с конкретным протоколом, внешние узлы могут использовать данный протокол для установления прямого соединения с внутренними узлами. Большинство маршрутизаторов могут формировать журнал аудита и генерировать сигналы тревоги при обнаружении враждебных действий.
Главным недостатком пакетных фильтров является сложность управления: когда правила становятся достаточно сложными, можно ненароком породить конфликтующие политики безопасности или пропустить нежелательные пакеты. Хакеры прекрасно осведомлены о многочисленных дырах в защите при использовании фильтров. Тем не менее применять фильтры пакетов имеет смысл, главным образом, на передней линии обороны перед брандмауэрами. В настоящее время многие брандмауэры содержат фильтры пакетов, тесно интегрированные в их ядро или в сетевую операционную систему (Internetworking Operating System, IOS).
Кумулятивные фильтры являются усовершенствованными версиями фильтров пакетов, исполняют те же самые функции, что и их предшественники, дополнительно отслеживая информацию о состоянии пакетов (такую, как номер последовательности в протоколе TCP). По существу, кумулятивные фильтры отслеживают информацию о сеансах связи. В качестве примера можно привести брандмауэры PIX фирмы Cisco, Fire Wall-1 фирмы Check Point Software и брандмауэр фирмы Watchguard.
Кумулятивный процесс определяется как анализ данных нижних уровней стека протоколов в целях сравнения текущей сессии с предыдущими с целью обнаружения подозрительной деятельности. В отличие от шлюзов уровня приложения, в кумулятивных фильтрах применяются определяемые пользователем правила, не зависящие от информации о самом приложении. Кроме того, кумулятивная защита меньше загружает процессор, чем анализ на уровне приложения. К сожалению, кумулятивные брандмауэры не распознают отдельные приложения и, следовательно, неспособны применять различные правила к различным приложениям.
Узел прокси-брандмауэра — это просто сервер с двумя сетевыми интерфейсными картами (Network Interface Card, NIC), который или передает пакет дальше, или его уничтожает, используя демоны прокси-сервера. Каждое приложение, работающее через такой шлюз, должно быть специально инсталлировано и работать через прокси. Прокси-сервер действует от имени одного или более серверов, обычно в качестве экрана, брандмауэра, кэша или их комбинации.
Термин шлюз часто применяется в качестве синонима прокси-сервера. Обычно прокси-сервер используется в компаниях и предприятиях для сбора всех запросов в Интернете, пересылке их Интернет-серверам, получения от них ответов и, наконец, пересылке ответов исходным адресатам внутри компании (с применением прокси-агентов, устанавливающих и завершающих соединение с удаленными узлами или серверами от имени пользователей).
Сервер уровня соединения представляет из себя транслятор TCP соединения. Пользователь образует соединение с определенным портом на брандмауэре, после чего последний производит соединение с местом назначения по другую сторону от брандмауэра. Во время сеанса этот транслятор копирует байты в обоих направлениях, действуя как провод.
Как правило, пункт назначения задается заранее, в то время как источников может быть много (соединение типа один - много). Используя различные порты, можно создавать различные конфигурации.
Такой тип сервера позволяет создавать транслятор для любого определенного пользователем сервиса, базирующегося на TCP, осуществлять контроль доступа к этому сервису, сбор статистики по его использованию.
Шлюзы приложений являются усиленной версией прокси-брандмауэров и, как и в случае прокси-брандмауэров, каждое приложение должно быть специально инсталлировано для работы через них. Разница заключается в том, что шлюзы приложений содержат встроенные модули, которые проверяют каждый запрос и ответ. Например, только загружаемые данные могут быть исходящим потоком по протоколу FTP. Шлюзы приложений просматривают все данные на уровне приложения стека протоколов и являются посредниками для внешних пользователей, перехватывая пакеты и пересылая их приложению. Таким образом, внешние пользователи не смогут установить связь напрямую в защищенной зоне. То, что брандмауэр фактически просматривает всю информацию приложения, означает, что он различает такие приложения, как FTP и SMTP. Вследствие этого шлюзы приложений обеспечивают защиту любого приложения, которое они поддерживают.
Брандмауэры с серверами прикладного уровня используют сервера конкретных сервисов (proxy server) - TELNET, FTP и т.д., запускаемые на брандмауэре и пропускающие через себя весь трафик, относящийся к данному сервису. Таким образом, между клиентом и сервером образуются два соединения: от клиента до брандмауэра и от брандмауэра до места назначения. Полный набор поддерживаемых серверов различается для каждого конкретного брандмауэра.
Использование серверов прикладного уровня позволяет решить важную задачу - скрыть от внешних пользователей структуру локальной сети, включая информацию в заголовках почтовых пакетов или службы доменных имен (DNS). Другим положительным качеством является возможность аутентификации на пользовательском уровне (напоминаю, что аутентификация - процесс подтверждения идентичности чего-либо; в данном случае это процесс подтверждения, действительно ли пользователь является тем, за кого он себя выдает).
При описании правил доступа используются такие параметры, как
Сервера прикладного уровня позволяют обеспечить наиболее высокий уровень защиты, т.к. взаимодействие с внешним миров реализуется через небольшое число прикладных программ, полностью контролирующих весь входящий и выходящий трафик.
Не будь уязвимостей в компонентах информационных систем, нельзя было бы реализовать многие атаки и, следовательно, традиционные системы защиты вполне эффективно справлялись бы с возможными атаками. Однако программы пишутся людьми, которым свойственно делать ошибки. Вследствие чего и появляются уязвимости, которые используются злоумышленниками для реализации атак. Однако это только полбеды. Если бы все атаки строились по модели "один к одному" (т. е. "один компьютер атакует один компьютер" ), то с некоторой натяжкой, но межсетевые экраны и другие защитные системы смогли бы противостоять и им. Но появились скоординированные атаки, против которых традиционные средства уже не так эффективны. И тут на сцене и появляются новые технологии - технологии обнаружения атак.
Технология обнаружения атак должна решать следующие задачи:
Очень часто системы обнаружения атак могут выполнять функции, существенно расширяющие спектр их применения. Например:
Лучшее использование времени и опыта специалистов в области информационной безопасности заключается в обнаружении и устранении причин реализации атак, скорее чем, в обнаружении самих атак. Устранив причины возникновения атак, т.е. обнаружив и устранив уязвимости, администратор тем самым устраняет и сам факт потенциальной реализации атак. Иначе атака будет повторяться раз за разом, постоянно требуя усилий и внимания администратора.
Существует большое число различных классификаций систем обнаружения атак, однако самой распространенной является классификация по принципу реализации:
Системы обнаружения атак, контролирующие отдельный компьютер, как правило, собирают и анализируют информацию из журналов регистрации операционной системы и различных приложений (Web-сервер, СУБД и т.д.). По такому принципу функционирует RealSecure OS Sensor. Однако в последнее время стали получать распространение системы, тесно интегрированные с ядром ОС, тем самым, предоставляя более эффективный способ обнаружения нарушений политики безопасности. Причем такая интеграция может быть реализовано двояко. Во-первых, могут контролироваться все системные вызовы ОС (так работает Entercept) или весь входящий/исходящий сетевой трафик (так работает RealSecure Server Sensor). В последнем случае система обнаружения атак захватывает весь сетевой трафик напрямую с сетевой карты, минуя операционную систему, что позволяет уменьшить зависимость от нее и тем самым повысить защищенность системы обнаружения атак.
Системы обнаружения атак уровня сети собирают информацию из самой сети, то есть из сетевого трафика. Выполняться эти системы могут на обычных компьютерах (например, RealSecure Network Sensor), на специализированных компьютерах (например, RealSecure for Nokia или Cisco Secure IDS 4210 и 4230) или интегрированы в маршрутизаторы или коммутаторы (например, CiscoSecure IOS Integrated Software или Cisco Catalyst 6000 IDS Module). В первых двух случаях анализируемая информация собирается посредством захвата и анализа пакетов, используя сетевые интерфейсы в беспорядочном (promiscuous) режиме. В последнем случае захват трафика осуществляется с шины сетевого оборудования.
Обнаружение атак требует выполнения одного из двух условий - или понимания ожидаемого поведения контролируемого объекта системы или знания всех возможных атак и их модификаций. В первом случае используется технология обнаружения аномального поведения, а во втором случае - технология обнаружения злоумышленного поведения или злоупотреблений. Вторая технология заключается в описании атаки в виде шаблона или сигнатуры и поиска данного шаблона в контролируемом пространстве (например, сетевом трафике или журнале регистрации). Эта технология очень похожа на обнаружение вирусов (антивирусные системы являются ярким примером системы обнаружения атак), т.е. система может обнаружить все известные атаки, но она мало приспособлена для обнаружения новых, еще неизвестных, атак. Подход, реализованный в таких системах, очень прост и именно на нем основаны практически все предлагаемые сегодня на рынке системы обнаружения атак.
Практически все системы обнаружения атак основаны на сигнатурном подходе.
Мало обнаружить атаку, - необходимо на нее соответствующим образом отреагировать. Именно варианты реагирования во многом определяют эффективность системы обнаружения атак. На сегодняшний день предлагаются следующие варианты реагирования:
Надо только учитывать, что объемы регистрируемой информации требуют, как правило, SQL-базу - MS SQL или Oracle.
Ряд брандмауэров позволяет также организовывать виртуальные корпоративные сети (Virtual Private Network), т.е. объединить несколько локальных сетей, включенных в INTERNET в одну виртуальную сеть. VPN позволяют организовать прозрачное для пользователей соединение локальных сетей, сохраняя секретность и целостность передаваемой информации с помощью шифрования. При этом при передаче по INTERNET шифруются не только данные пользователя, но и сетевая информация - сетевые адреса, номера портов и т.д.
Легкость администрирования является одним из ключевых аспектов в создании эффективной и надежной системы защиты. Ошибки при определении правил доступа могут образовать дыру, через которую может быть взломана система. Поэтому в большинстве брандмауэров реализованы сервисные утилиты, облегчающие ввод, удаление, просмотр набора правил. Наличие этих утилит позволяет также производить проверки на синтаксические или логические ошибки при вводе или редактирования правил. Как правило, эти утилиты позволяют просматривать информацию, сгруппированную по каким-либо критериям, например, все что относится к конкретному пользователю или сервису.
Еще одним важным компонентом брандмауэра является система сбора статистики и предупреждения об атаке. Информация обо всех событиях - отказах, входящих, выходящих соединениях, числе переданных байт, использовавшихся сервисах, времени соединения и т.д. - накапливается в файлах статистики. Многие брандмауэры позволяют гибко определять подлежащие протоколированию события, описать действия брандмауэра при атаках или попытках несанкционированного доступа - это может быть сообщение на консоль, почтовое послание администратору системы и т.д. Немедленный вывод сообщения о попытке взлома на экран консоли или администратора может помочь, если попытка оказалась успешной и атакующий уже проник в систему. В состав многих брандмауэров входят генераторы отчетов, служащие для обработки статистики. Они позволяют собрать статистику по использованию ресурсов конкретными пользователями, по использованию сервисов, отказам, источникам, с которых проводились попытки несанкционированного доступа и т.д.
Перечислим некоторые достоинства и недостатки рассмотренных средств сетевой защиты.
Достоинства серверов прикладного уровня:
Недостатки серверов прикладного уровня
Достоинства систем обнаружения атак:
Коммутация позволяет управлять крупномасштабными сетями, как несколькими небольшими сетевыми сегментами. В результате бывает трудно определить наилучшее место для установки системы, обнаруживающей атаки в сетевом трафике. Иногда могут помочь специальные порты (span ports) на коммутаторах, но не всегда. Обнаружение атак на уровне конкретного узла обеспечивает более эффективную работу в коммутируемых сетях, так как позволяет разместить системы обнаружения только на тех узлах, на которых это необходимо.
Системы сетевого уровня не требуют, чтобы на каждом хосте устанавливалось программное обеспечение системы обнаружения атак. Поскольку для контроля всей сети число мест, в которых установлены IDS невелико, то стоимость их эксплуатации в сети предприятия ниже, чем стоимость эксплуатации систем обнаружения атак на системном уровне. Кроме того, для контроля сетевого сегмента, необходим только один сенсор, независимо от числа узлов в данном сегменте.
Сетевой пакет, будучи ушедшим с компьютера злоумышленника, уже не может быть возвращен назад. Системы, функционирующие на сетевом уровне, используют "живой" трафик при обнаружении атак в реальном масштабе времени. Таким образом, злоумышленник не может удалить следы своей несанкционированной деятельности. Анализируемые данные включают не только информацию о методе атаки, но и информацию, которая может помочь при идентификации злоумышленника и доказательстве в суде. Поскольку многие хакеры хорошо знакомы с механизмами системной регистрации, они знают, как манипулировать этими файлами для скрытия следов своей деятельности, снижая эффективность систем системного уровня, которым требуется эта информация для того, чтобы обнаружить атаку.
Системы, функционирующие на уровне сети, обнаруживают подозрительные события и атаки по мере того, как они происходят, и поэтому обеспечивают гораздо более быстрое уведомление и реагирование, чем системы, анализирующие журналы регистрации. Например, хакер, инициирующий сетевую атаку типа "отказ в обслуживании" на основе протокола TCP, может быть остановлен системой обнаружения атак сетевого уровня, посылающей TCP-пакет с установленным флагом Reset в заголовке для завершения соединения с атакующим узлом, прежде чем атака вызовет разрушения или повреждения атакуемого узла. Системы анализа журналов регистрации не распознают атаки до момента соответствующей записи в журнал и предпринимают ответные действия уже после того, как была сделана запись. К этому моменту наиболее важные системы или ресурсы уже могут быть скомпрометированы или нарушена работоспособность системы, запускающей систему обнаружения атак на уровне узла. Уведомление в реальном масштабе времени позволяет быстро среагировать в соответствии с предварительно определенными параметрами. Диапазон этих реакций изменяется от разрешения проникновения в режиме наблюдения для того, чтобы собрать информацию об атаке и атакующем, до немедленного завершения атаки.
И, наконец, системы обнаружения атак, функционирующие на сетевом уровне, не зависят от операционных систем, установленных в корпоративной сети, так как они оперируют сетевым трафиком, которым обмениваются все узлы в корпоративной сети. Системе обнаружения атак все равно, какая ОС сгенерировала тот или иной пакет, если он в соответствие со стандартами, поддерживаемыми системой обнаружения. Например, в сети могут работать ОС Windows 98, Windows NT, Windows 2000 и XP, Netware, Linux, MacOS, Solaris и т.д., но если они общаются между собой по протоколу IP, то любая из систем обнаружения атак, поддерживающая этот протокол, сможет обнаруживать атаки, направленные на эти ОС.
Совместное применение систем обнаружения атак на уровне сети и уровне узла повысит защищенность вашей сети.
Рассмотрев основные виды сетевых атак и способов защиты от них, можно сделать определённые выводы:
В результате общего аналитического обзора технических проблем сетевой безопасности были сделаны определённые выводы. Так, неоспоримым выводом является важность и актуальность темы сетевой компьютерной безопасности. Практически это одна из ключевых проблем развития информационного общества.
Другим выводом является представление о том, что существующие на сегодняшний день технические средства сетевой безопасности достаточно совершенны, однако практически любое из них обладает определёнными недостатками, что в определённой мере делает возможным существование сетевых компьютерных атак.
Также на основании обзора можно сделать вывод о том, что наиболее совершенными на сегодняшний день средствами защиты и безопасности локальных компьютерных систем являются комплексные системы обнаружения атак (СОА).
На основании сделанных выводов можно сформулировать концептуальный план программного средства, которое будет создано в рамках данного дипломного проекта.
Системы обнаружения атак (СОА) определяются в англоязычной документации как NIDS – Network Intrusion Detection System. Большинство СОА создано для работы в ОС UNIX, потому что эта ОС обладает более развитым набором сетевых программных средств. Как правило, СОА представляют из себя анализаторы сетевых пакетов (чаще всего IP-пакетов), совмещённые с базой данных сигнатур атак. К таким системам относятся программы Shadow, Snort [9]. Существуют специальные организации, отслеживающие появление новых типов атак и описывающие их. СОА расширяемы за счёт пополнения встроенных баз данных сигнатур атак. Так, программа Snort обладает специализированным встроенным высокоуровневым языком написания правил [10], по которым оцениваются входящие пакеты и принимаются решения о наличии/отсутствии атаки. Программа Snort бесплатна и имеет открытые исходные коды. Однако она довольно сложна в применении и, кроме того, её настройка и настройка любой иной аналогичной программы на рынке СОА затруднена из-за того, что они требуют дополнительного приобретения специализированных отладочных генераторов сетевых атак (например, таких как TigerTools).
Таким образом, задача создания собственной системы обнаружения атак включает в себя следующие аспекты:
Поскольку наиболее распространённой в мире ОС является ОС Windows, то рассмотрим ключевой аспект создания СОА – создание генератора (анализатора) сетевых пакетов средствами ОС Windows.
Для этого существуют по крайней мере 2 варианта библиотек низкоуровневого сетевого программирования:
На базе этих двух вариантов реализовано множество низкоуровневых сетевых приложений для ОС Windows [5] – анализаторы, снифферы, СОА, и т.д. Наиболее ярко такая двойственная возможность реализации проявилась в программном продукте daSniff [8], который реализован обоими способами.
Оба подхода в реализации низкоуровневых сетевых приложений имеют свои достоинства и недостатки. Так, библиотека Windows Sockets v2.0 требует для низкоуровневых сетевых приложений права Администратора при работе под Windows 2000 и не способна в большинстве случаев перехватывать исходящие пакеты. Библиотека Windows Packet Capture Library не поддерживает Loopback Adapter.
Общим недостатком обоих вариантов реализации явлется то обстоятельство, что для отладки полноценного анализатора пакетов необходимо иметь как минимум два (а не один) компьютера, объединённых в локальную сеть. В случае отсутствия второго компьютера совершенно невозможно организовать отладочную атаку на проектируемую СОА для практически всех протоколов. Единственным (известным) исключением является протокол ICMP, реализованный с помощью библиотеки Windows Sockets v2.0. В этом случае возможно на одном и том же компьютере как генерировать отладочную атаку средствами протокола ICMP, так и перехватывать её. Все остальные протоколы (в случае использования только одного компьютера) на низком уровне позволяют (при использовании библиотеки Windows Sockets v2.0) лишь генерировать атаки, а перехватывать – только на высоком уровне (что практически не имеет смысла). И только применив второй компьютер (с библиотекой Windows Sockets v2.0), подключённый к первому по локальной сети, можно перехватывать атакующие пакеты на низком (а не на высоком) уровне.
Библиотека Windows Packet Capture Library [4] вообще не предполагает никаких вариантов одновременной работы на одном компьютере отладочного генератора атак вместе с системой обнаружения атак.
Теоретически можно попробовать обойти это принципиальное ограничение (требование наличия двух компьютеров, объединённых в локальную сеть) при помощи такого специализированного ПО, как Virtual PC (или VMWare для Linux) – программы, которая эмулирует несколько виртуальных компьютеров на одном. Однако подобная задача выходит за рамки данного дипломного проекта.
Другой аспект создания собственной СОА – это разработка и применение сигнатур атак. После создания низкоуровневого сетевого анализатора пакетов задача регистрации атак сводится к анализу полей входящих пакетов (IP) и их последовательности.
Для любой дипломной работы наибольший практический интерес представляет такой программный продукт, который может полноценно работать на одном компьютере (не требуя наличия нескольких компьютеров). Из этого краткого обзора средств реализации низкоуровневого сетевого программирования под ОС Windows видно, что единственным подходящим вариантом является клиент-серверная реализация системы «отладочный генератор атак – система обнаружения атак» на основе протокола ICMP, реализованного низкоуровневыми средствами библиотеки Windows Sockets v2.0. Только этот вариант из всех рассмотренных позволяет создать полноценную систему обнаружения атак, основанную на использовании протокола IP и ICMP. Ценность такой системы состоит в том, что впоследствии она может быть легко переделана под протоколы TCP и UDP (с подключением второго компьютера по локальной сети) из-за концептуального сходства формата полей протокола ICMP и протоколов TCP и UDP.
Библиотека Windows Sockets v2.0 [7] – это стандартное средство для программирования сетевых приложений для ОС MS Windows. Помимо стандартных и общеизвестных функций эта библиотека содержит также некоторые малоизвестные низкоуровневые возможности. Существуют некоторые удачные их описания [3] и примеры (см. программу «Ping» в [7]).
Для создания низкоуровнего сетевого ICMP-приложения необходимо ознакомиться в общих чертах с работой протокола IP [14], затем подробно изучить протокол IP [12] и протокол ICMP [13], а также изучить сетевые атаки на базе протокола ICMP [6].
Протокол ICMP – это служебный протокол, применяемый в основном для сообщений об ошибках и для настройки протоколов TCP и UDP. Он также применяется в известных утилитах Ping и Traceroute. Протокол ICMP – это протокол сетевого (третьего) уровня, также, как и протокол IP. Это проявляется тем, что для протокола ICMP не существует понятия «порт» и «вложенное сообщение» (в отличие от протоколов транспортного (четвёртого) уровня – TCP и UDP). Однако формат полей пакета концептуально тот же, что и для протоколов TCP и UDP – в пакете сначала идёт заголовок IP, затем – заголовок ICMP. ICMP-пакет не может нести полезное сообщение (в отличие от протоколов TCP и UDP), но зато он предусматривает поля «тип» и «код», каждое из которых может принимать значения от 0 до 127. Многие комбинации полей «тип» и «код» имеют предопределённое значение [3]. Все ICMP-сообщения делятся на 2 группы – ошибки и запросы [3]. Библиотека Windows Sockets v2.0 не может регистрировать ICMP-пакеты типа «ошибка», сгенерированные на том же компьютере, а только ICMP-пакеты типа «запрос» (также за некоторыми исключениями).
Разрабатываемое в рамках данной дипломной работы программное средство будет работать исключительно с протоколом ICMP, т.к. только этот протокол допускает полноценную работу с ним на одном компьютере. Поэтому мы рассмотрим сетевые атаки на базе протокола ICMP [6] и разработаем способы их обнаружения. К таким атакам относятся: лавинное затопление ICMP-пакетами, атака «Smurf», подмена IP-адреса и другие.
Атака Smurf (рис. 1) основана на использовании возможности протокола ICMP рассылать дейтаграммы по нескольким адресам. Ответить на один широковещательный эхо-запрос ICMP может большое количество хостов. Эта возможность используется для проведения атаки отказа в обслуживании на избранный хост или сеть.
Сначала злоумышленник должен сформировать широковещательный эхо-запрос ICMP к хостам атакуемой сети, подменив при этом действительный IP-адрес своего компьютера.
Рис. 1. Схема атаки Smurf
В качестве этого IP-адреса используется адрес атакуемого хоста (или сети). Чтобы запрос попал ко всем хостам сети, его должен пропустить внешний маршрутизатор. Успешным завершением атаки является отправка всеми работающими хостами эхо-ответов на адрес атакуемого хоста. Атакованный хост (или сеть, в которой он находится) может пострадать от такой внезапной активности и перестанет выполнять возложенные на него задачи при следующих условиях:
Вот еще одна причина, по которой следует запретить вхождение извне пакетов с широковещательным адресом — это не позволит использовать вашу сеть для распространения атаки Smurf.
Атака Tribe Flood Network (TFN) является еще одной атакой отказа в обслуживании, в которой используются ICMP-сообщения (рис. 2). В отличие от атаки Smurf, организуемой с одного компьютера с применением одной сети для ее распространения, атака TFN использует большое количество распределенных хостов. Эти хосты часто называют хостами-демонами. Поэтому термин распределенная атака отказа в обслуживании (DDoS) наиболее точно определяет использование нескольких рассредоточенных в Internet хостов для совместного осуществления атаки.
Рис. 2. Схема атаки Tribe Flood Network
Для проведения этой атаки требуется установка программы на ведущем компьютере - "мастере" TFN и на нескольких агентах— хостах-демонах TFN. Как правило, в качестве хостов-демонов используются скомпрометированные компьютеры. Мастер TFN дает хостам-демонам команду на атаку (часто одновременную) избранной цели. Взаимодействие между мастером и хостами-демонами осуществляется с помощью эхо-ответов ICMP. Демоны TFN могут организовать UDP-наводнение, SYN-наводнение, наводнение эхо-запросами ICMP или атаку Smurf.
Мастер информирует хосты-демоны о начале атаки с помощью эхо-ответов ICMP. При этом тип атаки определяется по значению поля идентификации в ICMP-заголовке эхо-ответа. В области данных такого эхо-ответа передаются необходимые аргументы.
Почему для организации атаки вместо эхо-запросов применяются эхо-ответы? Дело в том, что на многих узлах в целях обеспечения безопасности блокируются внешние эхо-запросы ICMP. В то же время, прохождение эхо-ответов часто разрешается. Это дает возможность локальным пользователям узнать о доступности внешних хостов, но весьма опасно с точки зрения рассылки неконтролируемых эхо-запросов ICMP.
Одновременное использование нескольких распределенных хостов для наводнения пакетами избранной цели позволит провести успешную атаку отказа в обслуживании против хоста или сети. Чтобы получить более подробную информацию об атаке TFN, зайдите на сайт www.cert.org и обратитесь к отчету об инциденте IN-99-07.
Атака WinFreeze, по существу, заставляет избранный компьютер атаковать самого себя.
router > victim.com: icmp: redirect 243.148.16.61 to host victim.com
router > victim.com: icmp: redirect 110.161.152.156 to host victim.com
router > victim.com: icmp: redirect 245.211.87.115 to host victim.com
router > victim.com: icmp: redirect 49.130.233.15 to host victim.com
router > victim.com: icmp: redirect 149.161.236.104 to host victim.com
router > victim.com: icmp: redirect 48.35.126.189 to host victim.com
router > victim.com: icmp: redirect 207.172.122.197 to host victim.com
router > victim.com: icmp: redirect 113.27.175.38 to host victim.com
router > victim.com: icmp: redirect 114.102.175.168 to host victim.com
С помощью ICMP-сообщения redirect хост-отправитель уведомляется о выборе для доставки сообщения неоптимального маршрутизатора и о необходимости добавить адрес оптимального маршрутизатора в таблицу маршрутизации. При наводнении этими ICMP-сообщениями о перенаправлении атака WinFreeze может вызвать отказ в обслуживании уязвимого хоста, работающего под управлением Windows NT. Атака выполняется в сети атакуемого компьютера, а ICMP-сообщения приходят от имени маршрутизатора этой сети. При получении массы сообщений redirect атакованный хост пытается внести изменения в таблицу маршрутизации, и ресурсы центрального процессора в основном тратятся на обработку поступающих пакетов.
В этом примере маршрутизатор router заставляет хост victim.com перенаправить отправляемые им (хостом) пакеты на самого себя. В результате при попытке внести многочисленные изменения в таблицу маршрутизации хост victim. com может не справиться с другими возложенными на него задачами.
Атака ICMP Flood представляет из себя лавинное затопление ICMP-пакетами. Как правило, обычные ICMP-пакеты поступают в локальную сеть извне не быстрее, чем один пакет в минуту. Непрерывное же поступление большого количества пакетов будет означать, скорее всего, атаку лавинным затоплением.
Это может привести к полной блокировке работы сервера.
Система обнаружения атак (СОА) представляет из себя клиент-серверную пару приложений – отладочный генератор атак (клиент) и, собственно, система обнаружения атак (сервер). Обе программы являются консольными Win32-приложениями на базе библиотеки Windows Sockets v2.0. Кроме того, предусмотрена система удалённого управления и администрирования клиентом на базе протокола HTTP и многопоточной структуры клиента. Это значит, что клиент запускает дополнительную нить (тред), в которой работает соответствующий HTTP-сервер, который и даёт возможность УДАЛЁННО и ДИНАМИЧЕСКИ администрировать и управлять им.
HTTP-сервер даёт возможность выбрать ручной и автоматический режимы генерации сетевых атак, а также динамически, во время работы программы, выбирать и проводить одну из предопределённых атак.
Также реализована система уведомления администратора сети об атаке – выдачей сообщения на консоль и посредством электронной почты. Сервер, как и клиент, имеет многопоточную архитектуру, и при начале работы запускает дополнительную нить (тред), в которой работает POP3-сервер, к которому может подключиться сторонняя почтовая программа и проверить наличие сообщения об атаке. Как только сервер регистрирует атаку, он сразу же помещает соответствующее сообщение в электронный почтовый ящик, откуда его можно получить при помощи сторонней почтовой программы. На рис. 3 представлена диаграмма задач, решаемых системой.
Рис. 3. Диаграмма задач, решаемых системой
На рисунке 4 приведена диаграмма классов и их взаимодействия.
Рис. 4. Диаграмма классов и их взаимодействия
На рисунке 5 приведена блок-схема алгоритма генерирования атак.
Клиент raw_send.exe
Возникновение временной нити при HTTP-запросе
Получение параметров от HTTP-клиента
Создание пакетов
Создание «сырого» сокета
Отправка пакета на сервер
Вывод на экран содержимого пакета
Рис. 5. Блок-схема алгоритма генерирования атак
На рисунке 6 приведена блок-схема алгоритма обнаружения атак.
Сервер raw_recv.exe
Запуск сервера
Определение пути к файлу
Загрузка библиотеки сокетов
Запуск нити с POP3-сервером
Создание и привязка «сырого» сокета
Приём ICMP-пакетов
Вывод на экран содержимого пакета
Да
Проверка на атаку
Нет
Формирование сообщения об атаке
Получение сообщения об атаке по электронной почте
Рис. 6. Блок-схема алгоритма обнаружения атак.
На рисунке 7 приведена блок-схема алгоритма извещения об атаках.
Клиент raw_send.exe
Создание конфигурационного объекта
Создание диспетчерского сокета
Переход в режим ожидания подключения
Приём подключения
Создание временной нити
Завершение подключения
Закрытие временной нити
Закрытие сервера
Рис. 7. Блок-схема алгоритма извещения об атаках.
На рисунке 8 приведена блок-схема алгоритма управления атаками.
Сервер raw_recv.exe
Создание виртуального сокета
Открытие файла отчёта
Ответ клиенту на его подключение
Переход к режиму транзакций
Приём сообщения
Обработка сообщения
Проверка сообщений Да Отправка сообщения
в почтовом ящике
Нет
Отправление ответа
Закрытие сервера
Рис. 8. Блок-схема алгоритма управления атаками.
Вся программная система представляет из себя клиент-серверную пару и состоит из четырёх основных модулей и множества вспомогательных.
Основные модули поделены между клиентом и сервером: и клиент, и сервер имеют по 2 основных модуля. И сервер, и клиент являются многопоточными приложениями, точнее, они содержат по 2 нити, при этом в каждой нити функционирует один основной модуль. Главная нить клиента (та, которая образуется при запуске) содержит HTTP-сервер, который порождает вспомогательную нить при начале каждого HTTP-подключения и закрывает её при его окончании – это стандартный приём для одновременной работы с множеством клиентов. Вспомогательная нить получает от пользователя параметры нужных последовательностей ICMP-пакетов и отправляет эти последовательности на сервер.
Главная нить сервера содержит модуль обнаружения атак, который и является ядром всей системы и сутью дипломной работы. Атаки – это в данном случае просто определённые последовательности ICMP-пакетов с определёнными значениями полей пакетов IP и ICMP. Едва ли существует какой-либо принципиально иной способ обнаружения атак. Вся сложность состоит в том, чтобы наиболее точно сформулировать правила, по которым будет выноситься решение о том, атака это или нет.
Вспомогательная нить сервера содержит POP3-сервер электронной почты, который стартует в начале работы сервера и даёт возможность получить сообщения об атаке при помощи программы MS Outlook Express. Когда главная нить сервера обнаруживает атаку, она формирует в почтовом ящике сервера соответствующее сообщение, откуда его забирает вспомогательная нить при взаимодействии с программой MS Outlook Express.
Все нити во всех приложениях системы не используют глобальные переменные для передачи параметров, а передают параметры путём вызова функций. Использование глобальных переменных является плохим программистским приёмом и допускается только для неменяющихся переменных.
Вспомогательные модули инкапсулируют отдельные логические части основных модулей.
Схема взаимодействия модулей системы приведена на рис. 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. Схема взаимодействия модулей системы
Клиент – 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::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] (массив строк-параметров для «сырого» сокета)
int param_index (количество строк в этом массиве)
CONF_HTTP conf (конфигурационный объект)
long connection_time (время подключения)
fstream report_file (в этот файл записывается всё, что сервер получает и отправляет)
SERVER(void) ( конструктор – обнуляет все поля объекта)
int recv_data(void) (получить информацию через сокет)
int send_data(void) (отправить информацию через сокет)
int shutdown_and_closesocket(void) (закрыть сокет)
void erase_buffer(void) (стереть буфер)
void set_buffer(char*) (заполнить буфер)
int ProcessClientQuery(void) (обработать клиентский запрос)
int ProcessControlString(char* c_string) (разбить строку параметров на отдельные лексемы)
void CreateQueryForm(char* temp_path) (считать в буфер с диска htm-файл (форму запроса) для отправки клиенту)
int ProcessHTTPCommand(void) (выполнить команду, полученную от HTTP-клиента)
SERVER& operator=(SERVER& right) (перегруженное присваивание из-за строк)
};
Описания функций:
DISPATCH_SERVER_SOCKET_HTTP::DISPATCH_SERVER_SOCKET_HTTP(CONF_HTTP& conf_ref) - конструктор диспетчерского сокета. Создаёт обычный (не «сырой») сокет, привязывает к адресу, устанавливает размер очереди на подключение,
int DISPATCH_SERVER_SOCKET_HTTP::accept_connect(void) – ожидает подключения HTTP-клиента, при подключении создаёт виртуальный сокет и новую нить, в которую его передаёт.
SERVER::SERVER(void) – конструктор класса.
int SERVER::shutdown_and_closesocket(void) – мягкое выключение и закрытие сокета.
void SERVER::erase_buffer(void) – стереть буфер
void SERVER::set_buffer(char* string) – заполнить буфер
int SERVER::recv_data(void) – побайтно получить информацию
int SERVER::send_data(void) – побайтно отправить информацию
SERVER& SERVER::operator=(SERVER& right) – перегруженное присваивание
void CONF_HTTP::Init(void) – инициализация конфигурационного объекта
CONF_HTTP::CONF_HTTP(void) – конструктор конфигурационного объекта
int SERVER::ProcessClientQuery(void) – обработка клиентского запроса и посылка HTTP-файла (формы запроса)
int SERVER::ProcessControlString(char* st) – разбивает строку запроса на отдельные лексемы
DWORD WINAPI ThreadFuncHTTP(SERVER* p_server) – главная нить, в которой работает HTTP-сервер, т.е. получает запрос, обрабатывает его и отправляет ответ.
char* substring(char* st,char s1,char s2,char* ret) – вспомогательная функция. Выделяет подстроку из строки, начиная с char s1 и заканчивая char s2.
char* getspos(char* search_string,char search_symbol) - вспомогательная функция. Возврашает номер позиции символа в строке.
void readcomment(fstream& file) - вспомогательная функция. Применяется для игнорирования комментариев при считывании конфигурационного файла.
void SERVER::CreateQueryForm(char* temp_path) - решает вопрос об отправке клиенту формы на основании его запроса.
int SERVER::ProcessHTTPCommand(void) – посылает атакующую последовательность пакетов по команде от HTTP-клиента.
Описание элементов сервера raw_send.exe:
Модуль Packet.h содержит следующие элементы:
Те же элементы, что и в файле packet.h клиента.
Модуль Packet.cpp cодержит следующие элементы:
Те же элементы, что и в файле packet.cpp клиента.
Модуль Raw_recv.cpp cодержит следующие элементы:
Описания функций:
main – инициализирует глобальную переменную – путь к исполняемому файлу, загружает библиотеку сокетов, запускает нить с почтовым POP3-сервером, создаёт «сырой» сокет, «привязывает» его к своему адресу, и переводит его в режим бесконечного приёма запросов.
int RAW_SOCKET::RecvPackets(void) – принимает входящие пакеты в бесконечном цикле, для каждого пакета выводит на экран его содержимое и проверяет его поля на предмет атаки.
int ICMP_PACKET::DetectAttack(void) – считывает поля полученного пакета и сверяет их с сигнатурами атак, принимая решение, атака это или нет. Если атака зарегистрирована, то функция выводит соответствующее сообщение на консоль сервера и формирует в почтовом ящике серевера соответствующее сообщение электронной почты, которое можно забрать, подключившись к POP3-серверу программой MS Outlook Express.
int make_message(char* filename) – формирует в почтовом ящике сообщение электронной почты.
Модуль Server.h cодержит следующие элементы:
1. Структура FILE_REF:
Представляет описание структуры - описателя файла-письма. Содержит поля:
char filename[MAX_PATH] (имя файла)
int filesize (размер файла)
bool del (признак удаления)
2. Класс MODE:
Представляет описание абстрактного объекта, описывающего режим соединения POP3-сервера. Содержит поля:
bool authorization_mode (флаг, который определяет, включён ли режим авторизации)
bool transaction_mode (флаг, который определяет, включён ли режим транзакции)
bool update_mode (флаг, который определяет, включён ли режим обновления)
MODE() (конструктор – обнуление всех полей)
void SetAuthorizationMode(void) (установить режим авторизации)
void SetTransactionMode(void) (установить режим транзакции)
void SetUpdateMode(void) (установить режим обновления)
bool IsAuthorizationMode(void) (узнать, выставлен ли флаг режима авторизации)
bool IsTransactionMode(void) (узнать, выставлен ли флаг режима транзакции)
bool IsUpdateMode(void) (узнать, выставлен ли флаг режима обновления)
3. Структура USER:
Представляет описание структуры - описателя файла-письма. Содержит поля:
char name[ADDRESS_MAX_LENGTH] (имя почтового ящика)
char domain[ADDRESS_MAX_LENGTH] (имя почтового домена)
char password[ADDRESS_MAX_LENGTH] (пароль на почтовый ящик)
bool lock (флаг, определяющий, заперт ли почтовый ящик)
4. Класс CONF:
Представляет описание абстрактного объекта, описывающего всю конфигурацию POP3-сервера. Содержит поля:
fstream conf_file (из этого файла при запуске программы считываем настройки POP3-сервера)
char ip_address[32] (ip-адрес этого сервера)
int port (порт, на который будем принимать POP3-запросы (обычно 110)
int echo( выводить ли на экран каждую POP3-транзакцию)
char Path[MAX_PATH] (путь к исполняемому файлу сервера)
char Domain[ADDRESS_MAX_LENGTH] (домен сервера (напр. "mailserver1.com")
FILE_REF file[MAX_USERS] (массив описателей для файлов – писем)
int f_index (его индекс)
int highest_number_accessed (непонятная хрень, смотрите RFC 1225)
int c_mes (номер обрабатываемого файла-письма для соответствующих команд)
int total_size (суммарный размер файлов-писем в почтовом ящике)
CONF(void) (конструктор, обнуляющий все поля)
void Init(void) (считать настройки сервера из файла "conf.inf")
void ProcessConfigCommands(void) (обработать команды настройки сервера)
int ParseMailDrop(char* user) (Название функции навеяно RFC 1225. Функция просматривает почтовый ящик, идентифицирует отдельные
файлы-письма, определяет размер каждого и общий их размер.)
// 7 функций для работы с пользователями
// кстати, "пользователь" - это папка с файлом "password.inf"
bool IsUserExistent(char* User) (Проверяем, существует ли такой пользователь)
int DeleteUser(void) (Удалить пользователя)
int AddUser(void) (Создать пользователя)
void Help(void) (Вывести на экран информацию о конфигурационных командах)
int ListUsers(void) (Вывести список пользователей)
char* GetPassword(char* user,char* password) (узнать текущий пароль)
void SetPassword(void) (установить новый пароль)
5. Класс DISPATCH_SERVER_SOCKET:
Представляет описание диспетчерского сокета POP3-сервера. Содержит поля:
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 (диспетчерский сокет POP3-сервера, виртуальный сокет для каждого POP3-подключения)
DWORD dwThreadID (идентификатор новой нити)
DISPATCH_SERVER_SOCKET(CONF& conf) (конструктор диспетчерского сокета, принимает конфигурационный объект)
CONF conf (конструктор конфигурационного объекта, обнуляет все поля)
int accept_connect(void) (принимает входящие подключения)
6. Класс SERVER_SOCKET:
Представляет описание виртуального сокета POP3-сервера (создаваемого для каждого подключения POP3-сервера и закрываемого при завершении подключения). Содержит поля:
char Buffer[SIZE_OF_BUFFER] (буфер для приёма/отправки почтовых транзакций)
SOCKET msg_server_socket (конструктор, инициализирующий поля)
int query (флаг, который разрешает/запрещает ответ на запрос)
int quit (флаг, который показывает, что сеанс почтовой связи окончен)
CONF conf (конструктор, инициализирующий поля)
long connection_time (время подлючения)
fstream report_file (в этот файл запишем всё, что сервер получает и отправляет)
USER user (почтовый ящик, из которого мы забираем почту за одно
подключение. Для обращения к каждому почтовому ящику клиент всегда
создаёт новое подключение, даже если эти ящики находятся на одном
сервере)
char forward_path[ADDRESS_MAX_LENGTH] (здесь не используется. Но могла бы (см. RFC-1225)
char reverse_path[ADDRESS_MAX_LENGTH] (здесь не используется. Но могла бы (см. RFC-1225)
fstream mes_file (сюда записываем сообщение, пришедшее серверу
за 1 почтовую транзакцию с клиентом. Может фактически содержать в себе несколько e-mail'ов)
char mes_path[MAX_PATH] (уникальное имя файла - сообщения)
MODE mode (конструктор, инициализирующий поля)
int not_this_command (счётчик нераспознавания принятой команды)
SERVER_SOCKET(void) (конструктор, инициализирующий поля)
int recv_data(void) (получить информацию через сокет)
int send_data(void) (отправить информацию через сокет)
int shutdown_and_closesocket(void) (мягко выключить сокет и закрыть его)
void erase_buffer(void) (стереть буфер)
void set_buffer(char*) (установить значение в буфере)
int ReplyOnClientConnection(void) (послать ответ клиенту на его подключение)
int ProcessClientQuery(void) (обработать запрос клиента)
SERVER_SOCKET& operator=(SERVER_SOCKET& right) (перегруженное присваивание из-за строк)
Модуль Server.cpp cодержит следующие элементы:
Описания функций:
DISPATCH_SERVER_SOCKET::DISPATCH_SERVER_SOCKET(CONF& conf_ref) - Инициализируем библиотеку WS2_32.DLL, Создаём базовый(диспетчерский) сокет сервера, настроенный на TCP, Записываем в адресную структуру IP адрес сервера и порт сервера, Связываем адрес сервера с базовым(диспетчерским) сокетом сервера, Переводим базовый(диспетчерский) сокет сервера на режим прослушивание/диспетчеризация сигналов на подключение и устанавливаем размер очереди одновременных обращений к серверу.
int DISPATCH_SERVER_SOCKET::accept_connect(void) - Ждём очередное подключение к серверу (функцией connect()) клиента и,
дождавшись, возвращаем виртуальный сокет сервера - для двухстороннего обмена сообщениями с данным клиентом. Выводим на экран время подключения клиента, его IP-адрес и порт. Для каждого подключившегося клиента создаём нить и передаём в неё адрес виртуального сокета сервера для двухстороннего обмена сообщениями с данным клиентом (нити нужны здесь для того, чтобы позволить серверу работать одновременно с несколькими клиентами).
SERVER_SOCKET::SERVER_SOCKET(void) - (конструктор, инициализирующий поля)
int SERVER_SOCKET::shutdown_and_closesocket(void) - (мягко выключить сокет и закрыть его)
void SERVER_SOCKET::erase_buffer(void) – стереть буфер
void SERVER_SOCKET::set_buffer(char* string) – установить значение буфера
int SERVER_SOCKET::recv_data(void) – получить информацию через сокет
int SERVER_SOCKET::send_data(void) – отправить информацию через сокет
SERVER_SOCKET& SERVER_SOCKET::operator=(SERVER_SOCKET& right) – перегруженное присваивание из-за строк
bool CONF::IsUserExistent(char* User) – существует ли пользователь (почтовый ящик)
int CONF::ListUsers(void) – перечислить пользователей (почтовые ящики)
int CONF::AddUser(void) – добавить пользователя (почтовый ящик)
int CONF::DeleteUser(void) – удалить пользователя (почтовый ящик)
void CONF::Init(void) – инициализация конфигурационного объекта
void CONF::ProcessConfigCommands(void) – обработка конфигурационных команд
void CONF::Help(void) – вывод на экран информации о конфигурационных командах
CONF::CONF(void) – конструктор, инициализирующий поля
char* CONF::GetPassword(char* user,char* password) – узнать пароль
void CONF::SetPassword(void) – установить пароль
Модуль pop3_main.cpp cодержит следующие элементы:
Описания функций:
DWORD WINAPI ThreadFunc(SERVER_SOCKET* p_server_socket) – вспомогательная нить, которая создаётся при каждом подключении к pop3-почтовому серверу и закрывается при завершении подключения. В этой нити происходит приём-передача почтового сервера.
DWORD WINAPI ThreadFuncPOP3(void) – вспомогательная нить, в которой работает pop3-почтовый сервер. Создаёт конфигурационный объект, инициализирует его, создаёт диспетчерский сокет, инициализируя его этим конфигурационным объектом, и переводит диспетчерский сокет в режим ожидания подключения.
Модуль pop3_module.cpp cодержит следующие элементы:
В этом модуле содержится всё алгоритмическое описание почтового POP3-сервера. Именно в этом модуле содержится вся алгоритмическая реализация RFC-1225.
Описания функций:
int SERVER_SOCKET::ReplyOnClientConnection(void) – отвечаем клиенту на его подключение (не на запрос клиента!)
int SERVER_SOCKET::ProcessClientQuery(void) – Уже имеем в буфере запрос клиента и обрабатываем его (выполняем всевозможные команды)
int CONF::ParseMailDrop(char* user) – название функции навеяно RFC 1225. Функция просматривает почтовый ящик, идентифицирует отдельные файлы-письма, определяет размер каждого и общий их размер.
MODE::MODE(void) – конструктор объекта режим соединения
void MODE::SetAuthorizationMode(void) – установить режим авторизации
void MODE::SetTransactionMode(void) – установить режим транзакции
void MODE::SetUpdateMode(void) – установить режим обновления
Система реализована как клиент-серверное Win32 консольное приложение на базе библиотеки Windows Sockets v2.0. Программа написана на языке С++ при помощи Microsoft Visual C++ v6.0 для ОС Windows. Управляющие HTM-файлы созданы при помощи htm-редактора MS FrontPage 98.
Для работы программного комплекса необходима операционная система не ниже чем Windows 2000 с правами Администратора, программы Microsoft Internet Explorer v5.0, Microsoft Outlook Express v5.0.
Для реализации дипломной работы выбран язык программирования Microsoft Visual C++ 6.0. MS Visual C++ предоставляет программистам удобный полнофункциональный инструмент, объединивший все средства, необходимые для создания приложения – редактор исходных текстов, менеджер проектов, инспектор объектов и ряд дополнительных утилит, включая встроенный отладчик, дизайнер меню и так далее. Обоснованием для выбора данного языка служат следующие предпосылки:
Программа выполнена в виде консольных, а не оконных приложений для удобства и простоты вывода текстовых сообщений, для сохранения наглядности исходного кода, а также в соответствии с традицией выполнения многих других низкоуровневых сетевых программ в виде консольных приложений (например, TCPdump, nmap, и пр.).
Управление по протоколу HTTP выбрано потому, что оно позволяет удалённое управление выполняющейся программой, в отличие от традиционных элементов управления оконных приложений.
Кроме того, HTTP-интерфейс даёт возможность программировать новые виды атак без перекомпиляции клиента.
Извещение администратора сети об атаках по электронной почте выбрано по аналогии с другими программами такого же класса. Это даёт возможность удалённо контролировать безопасность локальной сети в режиме реального времени.
Разрабатываемое в рамках данной дипломной работы программное средство будет работать исключительно с протоколом ICMP, т.к. только этот протокол допускает полноценную работу с ним на одном компьютере. Поэтому были воплощены несколько атак на базе протокола ICMP и разработаны механизмы их обнаружения. Генерирование атак осуществляется посредством управляющей консоли - HTTP-клиента. Были реализованы атаки:
Ниже приведены примеры работы клиент-серверной системы обнаружения атак. Клиент обозначен в примерах как raw_send.exe, а сервер – как raw_recv.exe. Приведены сообщения, выдаваемые системой на консоли.
1. Атака Smurf:
raw_send.exe:
The IP-header content:
Type of service: 0
Total packet length: 28
Unique identifier: 0
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 0
Source address: 127.0.0.1
Destination address: 127.0.0.255
The ICMP-header content:
Type: 0
Code: 8
Checksum: 65527
Unique identifier: 0
Sequence number: 0
Info sent to [127.0.0.255]:
6900280000-12810012700112700-108-1-90000
E ? ?? ж ?ж аа?
Number of bytes sent: 28
raw_recv.exe:
Type of service: 0
Total packet length: 28
Unique identifier: 177
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 15152
Source address: 127.0.0.1
Destination address: 127.0.0.255
The ICMP-header content:
Type: 0
Code: 8
Checksum: 65527
Unique identifier: 0
Sequence number: 0
Info received from [127.0.0.1]:
6900280-7900-1281594812700112700-108-1-90000
E ? ж ??;0ж ?ж аа?
Number of bytes received: 28
The Smurf attack detected !
2. Атака Tribe Flood Network:
raw_send.exe:
The IP-header content:
Type of service: 0
Total packet length: 28
Unique identifier: 0
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 0
Source address: 127.0.0.1
Destination address: 127.0.0.1
The ICMP-header content:
Type: 0
Code: 0
Checksum: 65535
Unique identifier: 0
Sequence number: 0
Info sent to [127.0.0.1]:
6900280000-12810012700112700100-1-10000
E ? ?? ж ?ж ? аа
Number of bytes sent: 28
raw_recv.exe:
Type of service: 0
Total packet length: 28
Unique identifier: 197
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 15386
Source address: 127.0.0.1
Destination address: 127.0.0.1
The ICMP-header content:
Type: 0
Code: 0
Checksum: 65535
Unique identifier: 0
Sequence number: 0
Info received from [127.0.0.1]:
6900280-5900-1281602612700112700100-1-10000
E ? + ??ж ?ж ? аа
Number of bytes received: 28
The Tribe Flood Network attack detected !
3. Атака WinFreeze:
raw_send.exe:
The IP-header content:
Type of service: 0
Total packet length: 28
Unique identifier: 0
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 0
Source address: 127.0.0.1
Destination address: 127.0.0.1
The ICMP-header content:
Type: 0
Code: 5
Checksum: 65530
Unique identifier: 0
Sequence number: 0
Info sent to [127.0.0.1]:
6900280000-12810012700112700105-1-60000
E ? ?? ж ?ж ? ?а+
Number of bytes sent: 28
raw_recv.exe:
Type of service: 0
Total packet length: 28
Unique identifier: 214
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 15369
Source address: 127.0.0.1
Destination address: 127.0.0.1
The ICMP-header content:
Type: 0
Code: 5
Checksum: 65530
Unique identifier: 0
Sequence number: 0
Info received from [127.0.0.1]:
6900280-4200-128160912700112700105-1-60000
E ? + ??< ж ?ж ? ?а+
Number of bytes received: 28
The WinFreeze attack detected !
4. Атака ICMP Flood:
raw_send.exe:
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
raw_recv.exe:
Type of service: 0
Total packet length: 28
Unique identifier: 329
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 15254
Source address: 127.0.0.1
Destination address: 127.0.0.1
The ICMP-header content:
Type: 0
Code: 2
Checksum: 65533
Unique identifier: 0
Sequence number: 0
Info received from [127.0.0.1]:
69002817300-128159-10612700112700102-1-30000
E ??I ??;?ж ?ж ? ?ад
Number of bytes received: 28
The ICMP Flood attack detected !
После этого можно получить сообщения об атаках по электронной почте при помощи программы MS Outlook Express v5.0. После этого можно их увидеть в папке «Входящие» (см. рис. 10):
Рис. 10. Сообщения об атаках в папке «Входящие» MS Outlook Express.
Разработанное программное средство – «Комплекс сетевой защиты» – относится к области защиты информации. Данная разработка является прямым логическим продолжением изучаемых в 9 семестре дисциплин на кафедре ПОВТ и АС (ДГТУ): «Защита данных и программного обеспечения» и «Принципы построения и услуги Интернет». Программное средство «Комплекс сетевой защиты» представляет из себя низкоуровневое сетевое приложение для ОС Windows – клиент-серверную пару приложений «отладочный генератор сетевых атак – система обнаружения сетевых атак».
Данная разработка является дипломной работой студента по специальности 220400 «Программное обеспечение АС и ВТ».
Тема разработки – «ПРОГРАММНАЯ РЕАЛИЗАЦИЯ КОМПЛЕКСА СЕТЕВОЙ ЗАЩИТЫ».
Организацией, утвердившей эту разработку, является Донской Государственный Технический Университет.
Данное программное средство предназначено для защиты локальной сети компьютеров, подключённой к сети Интернет, от сетевых атак из сети Интернет.
Программное средство устанавливается на отдельном компьютере под управлением ОС Windows 2000 в локальной сети.
Требования к программе или программному изделию
Требования к функциональным характеристикам
Программное средство не предъявляет особенных требований к эксплуатации. Оно способно работать в фоновом режиме. Требуется правильно администрировать правила безопасности в программном средстве.
Необходимо наличие локальной сети. Компьютер, на котором будет работать программное средство, обязан быть оборудованным сетевым адаптером.
Эксплуатироваться программное средство должно на выделенном в локальной сети компьютере под управлением операционной системы не ниже Windows 2000. Для работы программного средства требуются права Администратора в Windows 2000.
Программное средство должно включать инструкцию по эксплуатации и реквизиты разработчика.
Срок хранения товарного программного средства не ограничен. Способ транспортировки – любой.
Для полноценной работы программного средства необходимо иметь как минимум 2 компьютера, объединённых в локальную сеть.
Программная документация должна включать:
Экономическая эффективность программного средства составляет несколько тысяч рублей в год за счёт защиты информации в локальных сетях.
Предполагаемая годовая потребность – 3 тыс. шт.
Экономическое преимущество перед аналогичными отечественными и зарубежными разработками заключается в том, что данный программный продукт, в отличие от них, позволяет отказаться от покупки дополнительного ПО – генератора атак.
Во время приёмки готового изделия осуществляются контрольные прогоны программного средства с использованием разных наборов входных воздействий.
Были сгенерированы различные виды сетевых атак и опробованы различные стратегии реагирования на атаки.
Программное средство «Комплекс сетевой защиты» представляет из себя низкоуровневое сетевое приложение для ОС Windows – клиент-серверную пару приложений «отладочный генератор сетевых атак – система обнаружения сетевых атак».
Данное программное средство предназначено для защиты локальной сети компьютеров, подключённой к сети Интернет, от сетевых атак из сети Интернет.
Программное средство устанавливается на отдельном компьютере под управлением ОС Windows 2000 в локальной сети.
Эксплуатироваться программное средство должно на выделенном в локальной сети компьютере под управлением операционной системы не ниже Windows 2000. Для работы программного средства требуются права Администратора в Windows 2000.
Для полноценной работы программного средства необходимо иметь как минимум 2 компьютера, объединённых в локальную сеть.
Выполнение программы начинается с запуска серверной части программного средства – самой системы обнаружения атак.
После этого запускается клиентская часть – отладочный генератор сетевых атак.
Затем запускается управляющая клиентской частью консоль.
Теперь система готова к работе. Старт работы системы и динамическое управление её осуществляется посредством управляющей консоли. Работа системы заключается в генерации атак в ручном или в автоматическом режиме с управляющей консоли и наблюдением за реакцией серверной части – системы обнаружения атак.
На экранах клиентской и серверной части выводятся сообщения о форматах сетевых пакетов, о работе приложений, об ошибках, о регистрации атак и о прочих событиях безопасности.
8. 1. Концепция бизнеса
Разработанный программный продукт (ПП) - «Комплекс сетевой защиты» - с экономической точки зрения представляет из себя товар, рассчитанный на определённые категории потребителей. Он относится к классу IDS (Intrusion Detection Systems). Данный программный продукт призван восполнить имеющийся пробел на рынке средств сетевой защиты. Потенциальными покупателями являются предлагаемого ПП являются любые обладатели компьютеров, подключённых к Интернет – в основном, мелкие и средние организации, предприятия, а также индивидуальные пользователи.
Поскольку предлагаемый товар относится к программному обеспечению для работы с Интернет, то основной формой продажи будет являться система продаж через Интернет, учитывая тот факт, что практически все потенциальные потребители данной продукции имеют доступ к Интернет. Традиционная продажа через магазины будет только дополнительной формой. Продажа через Интернет требует наименьших капитальных вложений при максимальном охвате предложения и, кроме того, упрощает обслуживание и сопровождение товара.
Данный программный продукт - «Комплекс сетевой защиты» - относится к классу IDS (Intrusion Detection System – Система обнаружения вторжений). Он не является брандмауэром. Основными его достоинствами являются простота, расширяемость, возможность динамического управления, универсальность. Спрос на этот ПП потенциально очень широк – он (ПП) может быть применён на любом компьютере (сети компьютеров), подключённом к Интернет. Из средств массовой информации известно, что в последнее время всё активнее проявляют себя так называемые черви – программы, самостоятельно проникающие в компьютер во время подключения его к Интернет и приносящие многомиллионнные убытки. Развивая в дальнейшем данный ПП можно добиться успешного противодействия подобным враждебным проникновениям. Всё это возможно благодаря присущему этому ПП свойству расширяемости.
Характеризуя программный продукт, рассмотрим его с позиции маркетинговой ориентации:
Подавляющее большинство предлагаемых коммерческих средств сетевой защиты представляют из себя межсетевые экраны (брандмауэры, файерволы). К этой категории ПП относится продукция таких фирм, как Agnitum, Symantec, McAfee, Signal 9 Solutions, ForbiaSoft, IBM, Delta Design UK, Sygate Technologies, Zone Labs. Как видно, на рынке присутствует достаточное количество производителей коммерческих брандмауэров. Предлагаемый же ПП относится к классу IDS (Intrusion Detection System). Это более новое направление в развитии средств сетевой защиты. К этому классу относится продукция фирмы Securepoint (http://www.securepoint.cc/en/products-ids.html), а также такие известные программы, как Shadow и Snort (http://www.snort.org/). Предлагаемый ПП дополняет аналогичные системы.
Наиболее перспективным способом продажи данного ПП будет являться продажа лицензий на него через Интернет. Для этого потребуется арендовать хостинг на каком-либо сайте и на базе этого хостинга создать специализированый сайт, посвящённый этому ПП. На этом сайте будет необходимо организовать продажу лицензий на ПП, а также целый комплекс средств по сервисному обслуживанию, технической поддержке данного ПП. Кроме того, скорее всего потребуется провести специальные маркетинговые акции – например, продавать начальные версии программы по системе Shareware, применить систему скидок на новые версии, рассылать рекламные электронные письма, воспользовавшись для этого платными базами данных e-mail’ов, подключиться к баннерному обмену, организовать продажу по пластиковым карточкам Visa и MasterCard, а также наложенным платежом и, дополнительно, посредством WebMoney. В принципе, очень действенным способом является краткосрочная реклама по общероссийскому телевидению (Давайте вспомним Яндекс для примера).
Конечно, традиционные способы продажи коробочных версий через обычные магазины также не стоит сбрасывать со счетов.
Основным приоритетом для потребителя данной продукции будет служить её качество и функциональная пригодность, а не только возможная дешевизна. В самом деле, никто не станет покупать дешёвый товар, если известно, что он плох, а вот дорогой, но качественный товар покупать будут, если он хорошего качества. Понятие же дешевизны относительно, необходимо лишь стремиться к наилучшему соотношению «цена-качество».
Проведём сегментацию рынка потенциальных покупателей:
Таблица 1
Сегментация потенциальных пользователей
Итого объем продаж составит 7130 штук на рассматриваемый период.
В данном разделе определяются необходимые инвестиции для разработки и реализации ПП. Для этого произведём расчет единовременных и текущих затрат.
8. 4. 1. Расчет единовременных затрат
Единовременные затраты (Зк), связанных с разработкой данного ПП, будут состоять из капитальных затрат (К), включающих затраты на приобретение вычислительной техники (Квт), локальных вычислительных сетей (Клвс), выделенной Интернет-линии (Кинт), приобретение пакетов прикладных программ (Кппп) и операционных систем (Кос), а также затраты по подготовке кадров (Зпк):
Зк = К + Зпк = Квт + Клвс + Кинт + Кппп + Кос + Зпк, (4.1)
В состав затрат на приобретение ВТ, ЛВС, ППП, ОС включаются транспортные расходы и затраты на установку.
Затраты на подготовку кадров Зпк не учитываем.
Для разработки данного программного продукта принимаем решение закупить 5 компьютеров и объединить их в локальную сеть, подключённую к Интернет. Также потребуется арендовать постоянный канал Интернет-соединения у компании «РосТелеграф». В качестве поставщика выберем компанию «Санрайз», известную своими низкими ценами и выгодными дополнительными услугами. Также закупим необходимое программное обеспечение там же.
Таблица 2. Потребность в технических средствах.
Подсчитаем единовременные затраты:
Зк = 75 000 + 8 000 + 5 000 + 31 500 + 10 000 = 129 500
8. 4
. 2. Расчет текущих затрат на разработку ПП
Решение о величине потребности в инвестициях на разработку ПП принимаем, исходя из предполагаемой суммы единовременных и текущих затрат ( 3 ) и затрат на маркетинг, прочие коммерческие расходы и др. возможные расходы, связанные с реализацией разработанного ПП.
Для разработки ПП примем на работу 5 програмистов и 1 проектировщика-менеджера. Технический персонал нанимать не будем, т.к. будем привлекать для этого сторонних специалистов в случае необходимости. После принятия данного решения определяется оплата труда по категориям персонала.
Оплату труда будем производить на основе контракта, в котором обусловим оплату за весь выполняемый объем работ (Зпр ).
Таблица 3. Потребность в персонале и оплата его труда
Текущие затраты (себестоимость) (С) включают затраты на постановку задачи, разработку алгоритмов и программ, а также затраты, связанные с содержанием и эксплуатацией ВТ, оплатой Интернет-подключения, используемых при разработке ПП. Рассчитываем их по следующей формуле:
С = Зпр + Нз + Змаш + Зс + Зн + Зкр, (4.2)
где Зпр - затраты на заработную плату проектировщиков и программистов;
Зпр = 1 620 000 руб.
Нз - начисления на заработную плату проектировщиков и программистов
( Нз = 35,6 % от Зпр);
Нз = 36,5%*Зпр = 576 720 руб.
Змаш' - затраты, связанные с использованием машинного времени на разработку и отладку программ.
Змаш' = 0, т.к. мы приобрели свои компьютеры.
Зс - затраты на оплату работ, выполняемых сторонними организациями;
Зс = Зси * nm,
где Зси – ежемесячная оплата за Интернет,
nm – количество месяцев
Зс = 5 000 * 36 = 180 000
Зн - накладные расходы, связанные с проектированием и отладкой ПП, в том числе стоимость используемых материалов (бумаги, дискет, картриджей к принтерам и т.п.);
Зн = 150 - 200% от Зпр;
Зн = 150 % * Зпр = 150 % * 1 620 000 = 2 430 000
Принимаем решение не брать банковский кредит.
После расчета единовременных и текущих затрат составим общую таблицу потребности в инвестициях (табл. 4)
Таблица 4
Потребность в инвестициях на разработку ПП
8. 4. 3. Определение цены ПП
Рассчитав текущие затраты на разработку ПП (С), определим себестоимость одной копии ПП (С1) по формуле:
С1 = С/N+Зтир+Зсер, (4.4)
где N –объем продаж в натуральном выражении;
Зтир и Зсер – затраты на тиражирование и сервисное обслуживание в расчете на одну копию.
С1 = С/N+Зтир+Зсер = 4 936 220 / 7 130 + 70 + 50 = 692,3 + 70 + 50 = 812,3 руб.
Прибыль ( П 1) определяем, исходя из предполагаемой рентабельности ПП:
П1 = С1* Р/100, (4.5)
где Р - процент предполагаемой рентабельности, (ориентировочно Р = 20 - 35%).
П1 = С1* Р/100 = 812,3* 25/100 = 203,1 руб.
Определяем оптовую цену 1 копии ПП (Цо1) по следующей формуле:
Цо1 = С1+ П1 (4.6)
Цо1 = С1+ П1 = 812,3 + 203,1 = 1015,4 руб.
Затем рассчитывается цена продаж ПП ( Цпр):
Ц пр = Цо 1+ НДС, (4.7)
где НДС - налог на добавленную стоимость в соответствии с действующей ставкой на данный вид продукции. С учетом НДС (20%) цена продаж будет равна:
Ц пр = Цо 1+ НДС = 1015,4 * 120 % = 1218,5 руб.
Цена на комплект аналогичной продукции Kaspersky Anti-Haker составляет несколько тысяч рублей. Поскольку предлагаемый ПП является более простой системой, то принимаем окончательную цену продажи ПП – 1300 руб.
8.
5. План маркетинговых действий
Для достижения намеченного объёма продаж планируем ряд маркетинговых мероприятий. В первую очередь необходимо добиться высокого качества предлагаемой продукции и выгодных условий по обслуживанию и сопровождению предлагаемого товара. Затем приступить к рекламированию её разными способами. Оплатить статьи в специализированных компьютерных журналах и на таких же сайтах. Впоследствии можно провести кратковременную рекламу на телевидении. Также следует подключиться к системе баннерного обмена в Интернете. Будем бесплатно предлагать скачать демонстрационные версии программы. Организуем рассылку рекламного спама при помощи коммерческих баз данных адресов.
Кроме самих продаж, организуем систему технического обслуживания и сопровождения данного ПП.
8. 5. 1. Товарная политика
Для завоевания и удержания выбранного сегмента рынка будем выпускать не просто один ПП, а целую линейку продуктов, рассчитанную на разных покупателей, их потребности и платёжеспособность. Будем выпускать версии Lite, Special Edition, Professional, Industrial Edition, Personal Edition. Будем бесплатно предлагать скачать демонстрационные версии программы. Создадим систему User Extentions : это система, которая позволит пользователям создавать собственные плагины к программе и присылать их разработчикам с целью получения скидки на обновления программы.
8. 5. 2. Ценовая политика
Цена на продукцию будет динамически изменяемой. По мере устаревания предыдущих версий на них будет снижаться цена. Также мы будем проводить рекламные кампании с продажей ПП по сниженным ценам в течение определённого периода. Также на цену будет влиять система скидок. Цена на данный ПП будет различной для отечественных и зарубежных потребителей.
8. 5. 3. Сбытовая политика
Сбытовая стратегия будет состоять из рекламной деятельности, участия в специализированных выставках (в том числе зарубежных), создания и регулирования коммерческих связей через посредников, дилеров, агентов и пр. Кроме того, мы предложим сотрудничество компаниям, продающим сетевое аппаратное обеспечение с тем, чтобы те оснащали свою продукцию нашим ПП.
8. 5. 4. Сервисное обслуживание
Сервисное обслуживание ПП будет осуществляться по двум направлениям: во-первых, через коммерческую сеть агентов-посредников в разных городах, во-вторых через сайт в Интернете и круглосуточную телефонную линию технической помощи. Сервисное обслуживание будет предполагать предпродажный и послепродажный сервис.
Предпродажный сервис ориентирован на постоянное изучение и анализ требований потребителей с целью совершенствования качественных параметров предлагаемой продукции.
Послепродажный сервис предусматривает комплекс работ по обслуживанию (комплекс работ по установке ПП и обучению пользователя).
На своём сайте мы организуем специальную службу технической помощи для решения подобных вопросов и проблем.
8.
6. Потенциальные риски
Учёт потенциальных рисков особенно важен, и от глубины его проработки в значительной степени зависит доверие потенциальных инвесторов, кредиторов и партнеров по бизнесу.
Следует учитывать следующие виды рисков: производственные, коммерческие, финансовые и риски, связанные с форс – мажорными обстоятельствами.
Для учёта всевозможных рисков предпримем ряд соответствующих мер. Основными мерами будут являться чёткое соблюдение условий контракта, правил техники безопасности, заключение договоров со страховыми компаниями, создание резевного денежного фонда для покрытия экстренных расходов.
Производственные риски связаны с различными нарушениями в производственном процессе. Меры учёта: соблюдение правил техники безопасности, покупка оборудования надёжных марок, покупка источников бесперебойного питания.
Коммерческие риски связаны с реализацией продукции на товарном рынке (уменьшение размеров и емкости рынков, снижение платежеспособного спроса, появление новых конкурентов). Меры учёта: Наша компания-производитель не будет замыкаться лишь на производстве данного ПП, она будет по возможности диверсифицировать свои предложения.
Финансовые риски вызываются инфляционными процессами, всеобщими неплатежами, колебаниями валютных курсов пр. Меры учёта: Финансовые отношения будут вестись только с банками, заслуживающими доверия. В экономической деятельности предприятия будет использоваться иностранная валюта.
Риски, связанные с форс – мажорными обстоятельствами - это риски, обусловленные непредвиденными обстоятельствами (от смены политического курса страны до забастовок и землетрясений). Меры учёта: Заключение договоров со страховыми компаниями.
8.
7. Финансовый план
Расcчитаем финансовый план, содержащий обоснование экономической (коммерческой) эффективности затрат, произведенных в связи с разработкой и реализацией ПП.
Разработаем таблицу доходов и затрат, план кредитования, расчет безубыточности и дисконтного срока окупаемости.
Предполагаемые доходы от продаж (Qпр) определяются по формуле:
Qпр = Цпр*N, (7.1)
где Цпр - цена продажи ПП, руб;
N - объем продаж по периодам в соответствии с исследованиями рынка, шт.
Qпр = Цпр*N = 1 300 * 7 130 = 9 269 000 руб.
Издержки производства (И) включают, кроме текущих затрат, расходы на тиражирование, сервисное обслуживание, маркетинг, рекламу и некоторые виды налогов (на имущество, местные налоги и т.п.):
И = С1*N + Зм + Н, (7.2)
где С1 - себестоимость копии ПП;
Зм - затраты на маркетинг и коммерческие расходы
( Зм = от 20 до 25% от С1);
Н - налоги.
Налог на имущество Ни определяется в процентах от стоимости ВТ и ЛВС по действующей ставке ( Ни = 1-1,5% от стоимости ВТ и ЛВС ).
Прочие налоги Нпр составляют 5-7% от заработной платы персонала.
Расчеты производятся по годам и сводятся в табл. 3.
Ни = (Квт + Клвс + Кинт) * 1,5 % = (75 000 + 8 000 + 5 000) = 1 320 руб.
Нпр = Зпр * 7% = 45 000 * 7% = 3 150 руб.
Н = Ни + Нпр = 1 320 + 3 150 = 4 470 руб.
Зм = С1 * 25% = 812,3 * 25% = 203,1 руб.
И = С1*N + Зм + Н = С1*N + (Зм мес + Н мес)*n мес;
И = С1*N + (203,1 + 4 470)*n;
И = С1*N + 4673,1*n; С1 = 812,3 руб.
где n – количество месяцев
Таблица 5
Доходы и затраты
С1 = 812,3 руб.
Cрок окупаемости ПП определяется сроком окупаемости дополнительных капитальных вложений по формуле:
Ток = К/(П1*N), (7.3)
где К - Капитальные вложения, тыс. руб.;
П1 - Прогнозная чистая прибыль от реализации одного ПП, руб.;
N - Прогнозный годовой объем продаж ПП, шт.
Ток = (К*Nкв) / (П1*N) = (4 039 023 * 12) / (991,9 * 7 130) = 0,571 * 12 = 6,85 7 кв
Nкв – количество кварталов за 3 года
Срок окупаемости составил 7 кварталов с начала продажи продукции.
8. 8. Расчет безубыточности
Сделаем расчет безубыточности составляемого бизнес-плана.
Под безубыточностью в разработанном бизнес-плане понимается объем продаж ПП в натуральном выражении, при котором возможно покрытие всех расходов без получения прибыли. Расчет достижения безубыточности производится по следующей формуле:
Qкр =ФЗ/(Цпр-ПЗ1), (8.1) где
Qкр - критический объем продаж ПП, при котором будет достигнута безубыточность, шт.;
ФЗ - сумма условно-постоянных (фиксированных) затрат, тыс.руб.;
ПЗ1 - сумма условно-переменных затрат для одного ПП, тыс.руб.;
Цпр- цена продажи одного ПП, тыс.руб.
К ФЗ можно отнести накладные расходы(3н), затраты на маркетинг(Зм),налоги (налог на имущество и прочие налоги), т.е.
ФЗ =Зн + Зм + Н, (8.2)
К ПЗ можно отнести заработную плату на разработку одного ПП (Зпр1), начисления на заработную плату (Нз1), и затраты, связанные с использованием машинного времени на разработку и отладку программ (Змаш1), т.е.
ПЗ = Зпр1 +Нз1+ Змаш1 (8.3)
После расчета критического объема продаж строится график безубыточности
Проведём расчёт:
ФЗ = Зн + Зм + Н = 2 430 000 + 203,1 * 7 130 + 4 470 * 36 =
= 2 430 000 + 1 448 103 + 160 920 = 4 039 023 руб.
ПЗ = Зпр1 +Нз1+ Змаш1 = (1 620 000 + 576 720) / 7 130 = 308,1 руб.
Qкр =ФЗ/(Цпр-ПЗ1) = 4 039 023 / (1 300 – 308,1) = 4 039 023 / (1 300 – 308,1) = 4 072 шт. (всего 7130 шт.)
При разработке и сопровождении программного обеспечения следует учитывать вопросы безопасности и охраны труда.
Охрана труда - это свод законодательных актов и правил, соответствующих им гигиенических, организационных, технических, и социально-экономических мероприятий, обеспечивающих безопасность, сохранение здоровья и работоспособность человека в процессе труда (ГОСТ 12.0.002-80).
В данном разделе дипломного проектирования мы рассмотрим некоторые технические аспекты организации охраны труда. Обзор осуществим по следующей схеме:
Рассмотрим перечисленные аспекты более подробно.
Нормативное обеспечение охраны труда делится на:
Основой законодательного обеспечения безопасности является основной закон государства – Конституция РФ.
Кодекс законов о труде РФ
Устанавливаются права и обязанности работодателей и работников в отношении охраны труда; оговариваются ограничения к труду в особо тяжелых условиях некоторых групп населения (беременных женщин и т.д.)
Положение о порядке проведения аттестации рабочих мест по условиям труда.
(является приложением к постановлению Мин-ва труда и соц-го развития РФ, от 14.03.1997)
Аттестации подлежат все имеющиеся в организации рабочего места.
Нормативная основа проведения аттестации рабочих мест:
Согласно СН 512-78 (Инструкции по проектированию зданий и помещений для ЭВМ) и СанПиН 2. 2. 2. 542-96 (Гигиенические требования к видеодисплейным терминалам, персональным ЭВМ) здания ЭВМ следует помещать с наветренной стороны ветров преобладающего направления по отношению к соседним предприятиям, являющихся источниками выделений вредных веществ и пыли. Помещения ЭВМ должны располагаться не выше 5 этажа и не в подвалах.
Высота помещений для расположения ЭВМ - 3,6 м, в учебных заведениях - не менее 4 м, а для остальных помещений не менее 3,3 м. Естественное освещение должно осуществляться через светопроемы, ориентированные преимущественно на север и северо-восток. Площадь на одно рабочее место с ВДТ или ПЭВМ должна составлять не менее 6 м2, а объем - не менее 20 м3, а в учебных помещениях соответственно не менее 6 м2 на одно место и объем 24 м3. Перегородка между залом ЭВМ и помещением внешних запоминающих устройств должна быть несгораемой. В залах ЭВМ должно предусматриваться автоматическое пожаротушение. Включение установок автоматического пожаротушения должно осуществляться автоматически от извещателей, реагирующих на появление дыма, например ДИП-1.
Применение для тушения пожара воды, порошковых огнетушителей недопустимо - выводится из строя ЭВМ.
Здания и помещения для ЭВМ должны быть оборудованы системами центрального отопления, приточно-вытяжной вентиляции, хозяйственно-питьевого водопровода.
В нашем случае производственное помещение представляет из себя группу офисов, которые находятся в капитальном здании. К ним относятся комната программистов (5 компьютеров), офис менеджера, кабинет директора и пр. С точки зрения охраны труда наибольший интерес представляет комната программистов.
В этой комнате находится 5 компьютеров, объединённых в локальную сеть, подключённую к Интернет. Электропитание компьютеров осуществляется через обычную электросеть 220 В. В помещении предусмотрена система естественной вентиляции.
Производственная санитария - это система санитарно-технических гигиенических и организационных мероприятий, препятствующих воздействию на работающих вредных производственных факторов.
Производственная санитария включает оздоровление воздушной среды и нормализация параметров микроклимата в рабочей зоне, защиту рабочих от шума, вибрации, и обеспечение нормативов освещения, а также поддержание в соответствии с санитарными требованиями территории предприятия, основных и вспомогательных помещений (особенно важно в пищевом производстве).
Независимо от состояния природных метеорологических условий данной местности в дисплейных производственных помещениях и на рабочих местах должны быть созданы климатические условия (производственные, микроклимат) наиболее благоприятные для выполнения заданной работы. Климатические условия определяются сочетанием температуры, влажности и скорости перемещения воздуха, а также температуры окружающих поверхностей.
В соответствии с требованиями ГОСТ12.1.005-88 ССБТ нормируется оптимальные и допустимые условия микроклимата (температура воздуха, его влажность, а также скорость в рабочей зоне ).
В нашем случае в помещении, где осуществляется разработка программного обеспечения, микроклимат в помещении поддерживается: зимой – системой центрального водяного отопления, летом – системой кондиционирования воздуха. Освещённость – общая, лампами дневного света и индивидуальная – настольные лампы. Шум – вызван работой вентиляторов-охладителей в корпусах компьютеров. Вредные выделения – электромагнитные излучения от кинескопных мониторов, тепловыделения от компьютеров и людей, углекислый газ, водяной пар, выделяемые при дыхании людьми.
В соответствии с ГОСТ 12.1.019-79 под электробезопасностью понимают систему организационных и технических мероприятий и средств, обеспечивающих защиту людей от вредного и опасного воздействия электрического тока, электрической дуги и статического электричества.
Опасность поражения электрическим током характерна тем, что человек не может посредством своих органов чувств обнаружить на расстоянии наличие напряжения, и обнаруживает его в момент поражения. Действие электрического тока на человека может привести к двум видам поражений : электротравма и электроудар.
Согласно ГОСТ 21. 1. 019-79* элетробезопасность электроустановок обеспечивается:
Все меры обеспечения электробезопасности сводятся к трем путям:
К техническим способам относятся следующие, предусмотренные ПУЭ:
Для предупреждения электропоражений применяется рабочая изоляция токоведущих частей, кроме того применяется двойная изоляция - это изоляция металлических частей электрооборудования нормально не находящихся под напряжением. Повреждение изоляции является основной причиной многих несчастных случаев.
В нашем помещении каждый компьютер подключен к электросети с заземлением и молниезащитой. На входе в комнату программистов стоит общий электрорубильник с автоматическим предохранителем. Все электропровода обладают надёжной изоляцией. На стене помещения предусмотрена памятка о первой помощи при поражении электрическим током.
Пожаром называется неконтролируемое горение вне специального очага, наносящее материальный ущерб ( ГОСТ 12. 1. 004-76 ).
Пожарная безопасность ( ГОСТ 12717033-81 ) - состояние объекта, при котором с установленной вероятностью исключается возможность возникновения и развития пожара и воздействия на людей опасных факторов пожара, а также обеспечивается защита материальных ценностей.
Пожарная безопасность на предприятиях обеспечивается двумя системами: предотвращения пожара (организационные, технические меры и средства, обеспечивающие невозможность проникновения пожара) и системой пожарной защиты (предотвращение воздействия на людей опасных факторов пожара).
Все рабочие и служащие должны проходить специальную противопожарную подготовку: противопожарный инструктаж ( первичный и вторичный ) и занятия по пожарно-техническому минимуму по специальной программе.
Пожарная безопасность объектов народного хозяйства ( и электроустановок ), регламентируется Законом о пожарной безопасности, ГОСТами ССБТ, строительными нормами и правилами СНиП часть 2, межотраслевыми типовыми правилами пожарной безопасности, отраслевыми правилами пожарной безопасности, инструкциями пожарной безопасности на отдельных объектах, а с 1 января 1985 г. введен в действие Кодекс РФ об административных нарушениях ( КоАП см. Ведомости Совета РСФСР, 1984, N 27 ст. 909 ) где сведены конкретные составы административных правонарушений не несущие уголовной ответственности, виды, размеры взысканий; указаны лица и органы уполномоченные рассматривать дела об указанных нарушениях.
Система предотвращения пожара включает:
Система пожарной защиты предусматривает:
а) ограничение количества и надлежащее размещение горючих веществ,
б) применение негорючих и трудногорючих веществ и материалов,
в) изоляция горючей среды,
г) применение средств пожаротушения, д) предотвращение распространения пожара,
е) применение производственных объектов с регламентированными пределами огнестойкости и горючести.
ж) эвакуация людей при пожаре,
з) применение средств индивидуальной и коллективной защиты от огня,
и) применение средств пожарной сигнализации и средств извещения о пожаре, организация пожарной охраны объектов.
Для повышения пожаро- и взрывоопасности современных электронасыщенных предприятий играет большую роль правильный выбор и эксплуатация электрооборудования.
При проектировании и строительстве производственных зданий ( электромашинных помещений, трансформаторных подстанций ) необходимо учитывать категорию пожароопасности производства. Согласно СНиП 2-90-81 в зависимости от характеристики обращающихся в производстве веществ и их количества производства подразделяются по пожарной и взрывной опасности на шесть категорий: А, Б, В, Г, Д и Е.
На нашем предприятии принимаем следующие противопожарные меры: в комнате программистов предусматриваем огнетушитель, схему эвакуации при пожаре. На системе вентиляции устанавливаем противопожарный клапан. Под потолком проводим спринклерную систему пожаротушения вместе с системой пожарной сигнализации.
Дисплеи персональных компьютеров, выполненные на электронно-лучевых трубках (ЭЛТ), являются потенциальными источниками мягкого рентгеновского, ультрафиолетового (УФ), инфракрасного (ИК), видимого, радиочастотного, сверх- и низкочастотного ЭМИ.
Последствия регулярной работы с компьютером без применения защитных средств:
При нормировании ЭМП, как и других факторов окружающей среды, в населенных местах оценочным критерием их действия на организм служит не патологические, а функциональные изменения, при этом в качестве допустимого уровня ЭМП принимают подпороговые величины, которые не вызывают компенсаторного напряжения функциональных систем организма.
Таблица 6.
Предельно допустимые уровни ЭМП при круглосуточном непрерывном излучении
Выполнение рекомендаций по эксплуатации компьютеров позволяет значительно снизить вредные воздействия находящихся в эксплуатации ПЭВМ. В первую очередь, безопасность при работе с ПК может быть обеспечена за счет рационального размещения компьютеров в помещениях, правильной организации рабочего дня пользователей, а также за счет применения средств повышения контраста и защиты от бликов на экране, электромагнитных излучений и электростатического поля.
Продолжительность непрерывной работы с ПЭВМ не должна превышать 2 ч.
Если в помещении эксплуатируется более одного компьютера, то следует учесть, что на пользователя одного компьютера могут воздействовать излучения от других ПЭВМ, в первую очередь со стороны боковых, а также и задней стенки дисплея. Учитывая, что от излучения со стороны экрана дисплея можно защититься применением специальных фильтров, необходимо, чтобы пользователь размещался от боковых и задних стенок других дисплеев на расстоянии не менее 1 м.
На мониторы рекомендуется устанавливать защитные фильтры класса полной защиты (Total shield), которые обеспечивают практически полную защиту от всех вредных воздействий монитора в электромагнитном спектре и позволяют уменьшить блик от электронно-лучевой трубки, а также повысить читаемость символов.
На нашем предприятии предусматриваем следующие меры защиты от ЭМ излучения: устанавливаем на мониторы защитные экраны, планируем постепенный переход на ЖК-дисплеи, не излучающие вредные ЭМ-волны, устанавливаем обязательные 1-минутные перерывы каждые 2-3 часа работы программистов.
Свет, освещение относится к одному из основных внешних факторов, постоянно воздействующих на человека в процессе труда. Положительное влияние освещения на производительность труда и его качество не вызывает сомнения. Так, солнечное освещение увеличивает производительность труда в среднем на 10%, а искусственное на 13%, при этом возможность брака снижается на 20-25%.
Нормирование освещения внутри и вне зданий, мест производства работ, наружного освещения городов и др. населенных пунктов производится по СНиП 11-4-79 (строительные нормы и правила, часть II, глава 4, Естественное и искусственное освещение, М. , 1980).
Безопасность и здоровье условия труда в большой степени зависят от освещенности рабочих мест и помещений. Неудовлетворительное освещение утомляет не только зрение, но и вызывает утомление организма в целом. Неправильное освещение может быть причиной травматизма : плохо освещенные опасные зоны, слепящие лампы, резкие тени ухудшают или вызывают полную потерю зрения, ориентации. Неправильная эксплуатация осветительных установок в пожароопасных цехах может привести к взрыву, пожару и несчастным случаям.
Обычно пользуются естественными, искусственным и совмещенным (естественное и искусственное совместно) освещением.
Согласно санитарным нормам все помещения с постоянным пребыванием людей должны иметь естественное освещение.
Нормирование естественного освещения производится с помощью коэффициента естественного освещения КЕО - это отношение естественной освещенности данной точки внутри помещения к освещенности точки, находящейся под открытым небом, выраженное в %.
В СНиП 11-4-79 нормированные значения КЕО приведены для III пояса светового климата (Москва, Свердловск, Томск, Якутск, Охотск, Вологда - II пояс). Для остальных поясов нормированное значение КЕО определяется по соответствующим формулам.
Искусственное освещение осуществляется в темное время суток при помощи осветительных приборов, состоящих из светильников.
Искусственное освещение выполняется двух систем : общее и комбинированное (общее с местным). Для освещения помещений должны предусматриваться газоразрядные лампы (люминесцентные, металлогенные, натриевые, ксеновые), допускается применение ламп накаливания.
Эвакуационное освещение предусматривается :
а) в местах, опасных для прохода людей;
б) в проходах и на лестницах при числе эвакуирующихся более 50 чел;
в) по основным проходам помещений, в которой работает более 50 чел;
г) в лестничных клетках жилых домов, высотой 6 и более этажей и др. случаях по СНиП.
К специальным видам освещения относятся охранное и дежурное. Охранное освещение (при отсутствии специальных технических средств охраны) предусматривается вдоль границ территорий, охраняемых в ночное время : освещенность 0, 5 лк на уровне земли.
Важным средством обеспечения нормальных санитарно-гигиенических и метрологических условий в производственных помещениях является ВЕНТИЛЯЦИЯ - это организованный и регулируемый воздухообмен, обеспечивающий удаление из помещения загрязненного промышленными вредностями воздуха.
По способу подачи в помещение воздуха и удаления его, вентиляцию делят на :
- естественную;
- механическую;
- смешанную.
По назначению вентиляция может быть общеобменной и местной.
ЕСТЕСТВЕННАЯ вентиляция создает необходимый воздухообмен за счет разности плотности теплого и холодного воздуха, находящегося внутри помещения и более холодного снаружи, а также за счет ветра.
Организованный и регулируемый естественный воздухообмен называется АЭРАЦИЕЙ.
Различают БЕСКАНАЛЬНУЮ и КАНАЛЬНУЮ аэрацию. Первая осуществляется при помощи фрамуг (поступление воздуха) и вытяжных фонарей (выход воздуха), рекомендуется в помещениях большого объема и в цехах с большими избытками тепла. Канальная аэрация обычно устраивается в небольших помещениях и состоит из каналов в стенах, а на выходе каналов-на крышках-устанавливаются дефлекторы-устройства, создающие тягу при обдувании их ветром.
Естественная вентиляция экономична и проста в эксплуатации. Недостатками ее является то, что воздух не подвергается очистке и подогреву при поступлении, удаляемый воздух также не очищается и загрязняет атмосферу.
МЕХАНИЧЕСКАЯ вентиляция состоит из воздуховодов и побудителей движения (механических вентиляторов или эжекторов.
Воздухообмен осуществляется независимо от внешних метеорологических условий, при этом поступающий воздух может подогреваться или охлаждаться, подвергаться увлажнению либо осушению. Выбрасываемый воздух подвергается очистке.
Механическая общеобменная вентиляция может быть :
а) приточная ;
б) вытяжная ;
в) приточно-вытяжная.
Приточная система вентиляции производит забор воздуха через воздухозаборное устройство, затем воздух проходит через калорифер, где воздух нагревается и увлажняется и вентилятором подается по воздухопроводам в помещение через насадки для регулировки притока воздуха. Загрязненный воздух вытесняется через двери, окна, фонари, щели.
Вытяжная вентиляция удаляет загрязненный и перегретый воздух через воздухоотводы и очиститель, а свежий воздух поступает через окна, двери и неплотности конструкций.
Приточно-вытяжная система вентиляции состоит из приточной и вытяжной, работающих одновременно.
В нашем помещении предусмотрена система естественной вентиляции, совмещённая с кондиционером.
Шум наиболее неблагоприятный фактор, воздействующий на человека. В результате утомления из-за сильного шума увеличивается число ошибок при работе, повышается опасность возникновения травм и снижается производительность труда. Шум представляет собой механические колебания в упругих средах и телах, частоты лежат в диапазоне от 16-20 Гц до 11,2 кГц и которое способно воспринимать человеческое ухо. Шум состоит из огромного количества гармонических колебаний разных частот. Шумы различной частоты действуют на организм по-разному, что учитывается при нормировании шумов.
Нормирование уровней шума в производственных условиях осуществляется по ГОСТ 12. 1. 003-83 (шум, общие требования безопасности). Он устанавливает допустимые уровни дБ звукового давления на рабочих местах в определенных (октавных) полосах частот со среднегеометрическими частотами 63, 125, 250, 500, 1000, 2000, 4000, 8000 Гц. Например, рабочие места в производственных помещениях соответственно : 99, 92, 86, 83, 78, 76, 74 дБ или 85 дБА.
Для уменьшения уровней шума применяются технические, строительно-акустические и организационные мероприятия, а также средства индивидуальной защиты (ГОСТ 12. 4. 051-87 - Средства индивидуальной защиты органа слуха).
К этим мерам относятся :
1. Подавление шума в источниках
2. Предупреждение распространения шума - звукоизоляция и звукопоглощение.
3. Строительные и организационные меры.
В нашем помещении единственными источниками шума являются вентиляторы-охладители рабочих элементов компьютеров. Для борьбы с этим шумом мы поместили системные блоки компьютеров в специальные шумоизолирующие тумбы столов.
Эргономика – наука, которая охватывает очень широкий круг взаимосвязей человека, машины и рабочей среды. Она рассматривает физиологические, психологические, социальные, биологические, технические аспекты этих взаимосвязей.
Эргономические принципы при создании ПО:
1) Принцип минимального рабочего усилия.
2) Принцип максимального взаимопонимания.
3) Принцип минимального объема оперативной памяти пользователя.
4) Принцип минимального расстройства человека-оператора.
5) Принцип учета профессиональных навыков пользователя.
6) Принцип максимального различия человеческих характеров.
7) Принцип максимального контроля со стороны человека-оператора.
Средства отображения информации должны отвечать следующим техническим требованиям:
Качество зрительного восприятия определяется энергетическими, пространственными и временными характеристиками сигналов, поступающих к оператору. В соответствии с названными характеристиками сигналов выделяются группы основных параметров зрительного анализатора:
На комфортность работы оператора ЭВМ влияют организация рабочего места оператора, средства отображения информации, органы управления машиной. Они должны быть максимально удобны для человека, чтобы не создавать помех и чувства дискомфорта в процессе работы, а также способствовать наименьшей утомляемости.
Основным способом обеспечения условий комфорта оператора ЭВМ является организация его рабочего места. В этом вопросе не существует мелочей, так как любой, на первый взгляд, несущественный фактор в процессе длительного воздействия может вызвать состояние дискомфорта, отрицательно сказаться на результатах деятельности и, возможно, привести к заболеванию.
При взаимном расположении элементов рабочего места учитывается:
Контроль степени соответствия пространственно-компоновочных параметров рабочих мест с дисплеями эргономическим требованиям следует осуществить дифференциальным методом, при котором производятся измерения отдельных эргономических параметров рабочих мест и сравнение их с нормативными значениями.
В соответствии с проведённым обзором неблагоприятных факторов в сфере охраны труда и профилактике ЧС мы разработали и приняли комплексный набор мер по обеспечению безопасности производства на нашем предприятии-производителе программного обеспечения.
В дипломной работе было разработано программное средство «Комплекс сетевой защиты» в виде клиент-серверной пары на базе протокола ICMP. Таким образом, путём глубокого, непростого и недешёвого исследования проблемы, было найдено ЕДИНСТВЕННОЕ технически приемлемое решение реализации низкоуровневой (пакетной) клиент-серверной системы, способной полноценно (в полном объёме) функционировать НА ЕДИНСТВЕННОМ КОМПЬЮТЕРЕ (т.е. по схеме одновременной работы как клиента, так и сервера на одном и том же компьютере), не требуя для своей работы наличия локальной сети компьютеров. Естественно, что данная система может также работать и в локальной сети компьютеров. Единственным серьёзным ограничением данного программного средства является системное требование наличия ОС не ниже Windows 2000 и прав Администратора. Все остальные варианты реализации низкоуровневой (пакетной) клиент-серверной системы (см. [3] и [4]) показали свою неспособность полноценно функционировать на единственном компьютере, требуя для этого как минимум 2 компьютера, объединённых в локальную сеть, что делает невозможным тривиальную разработку.
Также были выявлены прочие скрытые ограничения операционной системы Windows 2000, относящиеся к низкоуровневому сетевому программированию.
Так как разработанное в дипломной работе программное средство способно полноценно функционировать на одном компьютере (не требуя наличия двух компьютеров, объединённых в локальную сеть), то его исходные коды могут быть использованы для разработки целого спектра лабораторных работ по целому ряду дисциплин, изучаемых студентами кафедры на 4 и 5 курсах, а именно по тем дисциплинам, в рамках которых изучаются локальные и глобальные сети. На базе этих исходных кодов можно создавать самые разнообразные сетевые приложения – анализаторы, снифферы, системы обнаружения атак и т.п. Это имело бы неоценимое значение для практического овладевания студентами того материала по низкоуровневым сетевым технологиям, который сейчас изучается ими сугубо теоретически и абстрактно.
1. Курс лекций «Защита информации в компьютерных системах» (Колесников Д.Г.) http://megapolis.aaanet.ru/kdg/protect/index.htm
2. Обнаружение хакерских атак (Дж. Чирилло) www.piter.com ISBN 5-318-00533-0
3. Network Programming for Microsoft Windows (Anthony Jones, Jim Ohlund) Microsoft Press http://irazin.ru/Some.htm
4. Windows Packet Capture Library http://winpcap.polito.it/
5. Windows Packet Capture Library (Links) http://winpcap.polito.it/misc/links.htm
6. Обнаружение нарушений безопасности в сетях (С. Норткатт, Новак Дж.) http://www.williamspublishing.com ISBN 5-8459-0526-5 (рус.)
7. MSDN 6.0/Platform SDK/Networking and Distributed Services/
Windows Sockets version 2 / Windows Sockets version 2 API / Reference
8. daSniff http://demosten.com/dasniff/
9. Snort http://www.snort.org/
10. Snort documentation http://www.snort.org/docs/
11. Телекоммуникационные технологии (v2.1) (Семенов Ю.А. (ГНЦ ИТЭФ) http://book.itep.ru/
12. RFC 791
13. RFC 792
14. Семейство протоколов TCP/IP (Брежнев А.Ф., Смелянский Р.Л.) http://www.yandex.ru
15. Пример «Ping» из MSDN, папка «Samples».
Исходные коды программного средства
// Модуль, где находится HTTP-плагин
#include
#include
#include
#include
#include "packet.h"
#define MAX_CONNECTIONS 5
#define SIZE_OF_BUFFER 8192
#define ADDRESS_MAX_LENGTH 64
char* getspos(char* search_string,char search_symbol);
// получить указатель на первое вхождение символа в строке
char* substring(char* st,char s1,char s2,char* ret);
// извлечь в ret подстроку из st, заключённую между символами s1 и s2
// (не включая s1 и s2 в возвращаемое значение)
void readcomment(fstream& file); // считать и выбросить комментарий
// из файла "conf.inf"
//////////////////////////////////////////////////////////////////////////
class CONF_HTTP
{ // здесь содержится вся конфигурация HTTP-сервера
public:
fstream conf_file; // из этого файла при запуске программы считываем
// настройки HTTP-сервера
char ip_address[32]; // ip-адрес этого сервера
int port; //порт, на который будем принимать HTTP-запросы (обычно 80)
int echo; // выводить ли на экран каждое действие
CONF_HTTP(void);
void ProcessConfigCommands(void);
void Init(void);
};
//////////////////////////////////////////////////////////////////////////
class DISPATCH_SERVER_SOCKET_HTTP
{
public:
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);
CONF_HTTP conf;
int accept_connect(void);
};
//////////////////////////////////////////////////////////////////////////
class SERVER // сложный класс, включающий в себя HTTP-сокет
{
public:
char Buffer[SIZE_OF_BUFFER];
SOCKET msg_server_socket;
int quit; // флаг, который показывает, что сеанс связи окончен
int block_reply;
PARAM param[100];
int param_index;
CONF_HTTP conf;
long connection_time;
fstream report_file; // в этот файл запишем всё, что сервер получает
// и отправляет
SERVER(void);
int recv_data(void);
int send_data(void);
int shutdown_and_closesocket(void);
void erase_buffer(void);
void set_buffer(char*);
int ProcessClientQuery(void);
int ProcessControlString(char* c_string);
void CreateQueryForm(char* temp_path); // считать в буфер с диска htm-файл (форму запроса) для отправки клиенту
int ProcessHTTPCommand(void);
SERVER& operator=(SERVER& right);
};
//////////////////////////////////////////////////////////////////////////
DWORD WINAPI ThreadFuncHTTP(SERVER* p_server);
//////////////////////////////////////////////////////////////////////////
DISPATCH_SERVER_SOCKET_HTTP::DISPATCH_SERVER_SOCKET_HTTP(CONF_HTTP& conf_ref)
{
// Инициализируем библиотеку WS2_32.DLL
if ((retval = WSAStartup(0x202,&wsaData)) != 0)
{cerr<<"WSAStartup failed with error "<
getch();WSACleanup();exit(-1);}
size_of_client_address = sizeof(client_address);
// Создаём базовый(диспетчерский) сокет сервера, настроенный на TCP
dispatch_server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (dispatch_server_socket == INVALID_SOCKET)
{cerr<<"socket() failed with error "<
getch();WSACleanup();exit(-1);}
// Записываем в адресную структуру IP адрес сервера и порт сервера
server_address.sin_family = AF_INET;
server_address.sin_port = htons(conf_ref.port);//Port MUST be in Network Byte Order
server_address.sin_addr.S_un.S_addr = inet_addr (conf_ref.ip_address);
// Связываем адрес сервера с базовым(диспетчерским) сокетом сервера
if (bind(dispatch_server_socket,(SOCKADDR*) &server_address,
sizeof(server_address))==SOCKET_ERROR)
{cerr<<"bind() failed with error "<
getch();WSACleanup();exit(-1);}
// Переводим базовый(диспетчерский) сокет сервера на режим
// прослушивание/диспетчеризация сигналов на подключение и устанавливаем
// размер очереди одновременных обращений к серверу
if (listen(dispatch_server_socket,MAX_CONNECTIONS)==SOCKET_ERROR)
{cerr<<"listen() failed with error "<
getch();WSACleanup();exit(-1);}
conf=conf_ref;
}
//////////////////////////////////////////////////////////////////////////
int DISPATCH_SERVER_SOCKET_HTTP::accept_connect(void)
{
//cout<<"Waiting for a client's connection..."<
//************************************************************************
while (true)
{
// Ждём очередное подключение к серверу (функцией connect()) клиента и,
// дождавшись, возвращаем виртуальный сокет сервера - для двухстороннего
// обмена сообщениями с данным клиентом
msg_server_socket = accept(dispatch_server_socket,
(SOCKADDR*) &client_address, &size_of_client_address);
// Если случилась ошибка ожидания клиента (кроме отсутствия вызова клиента), то:
if (msg_server_socket==INVALID_SOCKET)
{cerr<<"accept() failed with error "<
// Закрываем базовый(диспетчерский) сокет сервера
if (closesocket(dispatch_server_socket)==SOCKET_ERROR)
cerr<<"closesocket() failed with error "<
WSACleanup();return 0;}
// Выводим на экран время подключения клиента, его IP-адрес и порт
if ( client_address.sin_family == AF_INET) // если это TCP-клиент,то:
{
connection_time=time(0);
cout<<"Accepted HTTP-connection on: "<
<<"from IP address: "<
<
}
// Для каждого подключившегося клиента создаём нить и передаём в неё
// адрес виртуального сокета сервера для двухстороннего
// обмена сообщениями с данным клиентом (нити нужны здесь для того, чтобы
// позволить серверу работать одновременно с несколькими клиентами)
SERVER server;
server.msg_server_socket = msg_server_socket;
server.connection_time = connection_time;
server.conf=conf;
if (CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFuncHTTP,
(LPVOID)&server,0,&dwThreadID)==NULL)
cout<
}// end of while
//************************************************************************
// Закрываем базовый(диспетчерский) сокет сервера
if (closesocket(dispatch_server_socket)==SOCKET_ERROR)
cerr<<"closesocket() failed with error "<
// Освобождаем ресурсы с помощью библиотеки WS2_32.DLL
WSACleanup();
return 0;
};
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
SERVER::SERVER(void)
{
erase_buffer();
quit = 0;// Нужно ли закончить сеанс связи
connection_time = 0;
block_reply = 1;
ZeroMemory(param,sizeof(param));
param_index=0;
};
//////////////////////////////////////////////////////////////////////////
int SERVER::shutdown_and_closesocket(void)
{
cout<<"Terminating HTTP-connection."<
// Блокируем получение - отправку сообщений у виртуального сокета сервера
if (shutdown(msg_server_socket,SD_BOTH)==SOCKET_ERROR)
{cerr<<"shutdown() failed with error "<
// Закрываем виртуальный сокет сервера, связанный с данным клиентом
if (closesocket(msg_server_socket)==SOCKET_ERROR)
{cerr<<"closesocket() failed with error "<
return -1;}
return 0;
};
//////////////////////////////////////////////////////////////////////////
void SERVER::erase_buffer(void)
{
ZeroMemory(&Buffer,sizeof(Buffer));
}
//////////////////////////////////////////////////////////////////////////
void SERVER::set_buffer(char* string)
{
erase_buffer();
strcpy(Buffer,string);
}
//////////////////////////////////////////////////////////////////////////
int SERVER::recv_data(void)
{
erase_buffer();
// Ждём приёма сообщения от клиента
char ch;
int retval;
char S[]={"S: "};
for (int i=0; i
{
// Принимаем побайтно то, что клиент отправил как цельное сообщение
// (для того, чтобы мы могли распознавать отдельные команды)
retval = recv(msg_server_socket,&ch,sizeof(char),0 );
if (retval == SOCKET_ERROR)
{cerr<<"recv() failed: error "<
closesocket(msg_server_socket); return -1;}
else {Buffer[i]=ch; if (ch =='\n') break;};
};
if(conf.echo)
cout<<"S: "<
report_file.write(S,strlen(S));
report_file.write(Buffer,strlen(Buffer));
return 0;
};
//////////////////////////////////////////////////////////////////////////
int SERVER::send_data(void)
{
int retval;
char R[]={"R: "};
retval = send(msg_server_socket,Buffer,strlen(Buffer),0);// ни в коем
// случае не sizeof(Buffer)!
if (retval == SOCKET_ERROR)
{cerr<<"send() failed: error "<
if(conf.echo)
cout<<"R: "<
report_file.write(R,strlen(R));
report_file.write(Buffer,strlen(Buffer));
erase_buffer();
return 0;
};
//////////////////////////////////////////////////////////////////////////
SERVER& SERVER::operator=(SERVER& right)
{
if (&right!=this)
{
msg_server_socket = right.msg_server_socket;
connection_time = right.connection_time;
conf=right.conf;
}
return *this;
}
///////////////// Описание конфигурационного объекта /////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void CONF_HTTP::Init(void)
{
fstream empty_file;
conf_file.open("http_conf.inf",ios::in);
conf_file>>ip_address;
readcomment(conf_file);
conf_file>>port;
readcomment(conf_file);
conf_file>>echo;
readcomment(conf_file);
conf_file.close();
empty_file.open("http_report.txt",ios::trunc);
empty_file.close();
};
//////////////////////////////////////////////////////////////////////////
CONF_HTTP::CONF_HTTP(void)
{
ZeroMemory(ip_address,sizeof(ip_address));
port=0;
echo=false;
};
//////////////////////////////////////////////////////////////////////////
int SERVER::ProcessClientQuery(void)
{
if (!strncmp(Buffer,"GET /?",6))
{
char arg[MAX_PATH*10]={0};
substring(Buffer,'?','%',arg);
ProcessControlString(arg);
}
if (!strncmp(Buffer,"\r\n",2))
{
set_buffer("HTTP/1.1 200 OK\r\n");
fstream file;
char ch;
char temp_path[MAX_PATH]={0};
CreateQueryForm(temp_path); // Здесь решаем вопрос об отправке клиенту
// формы на основании его запроса
size_t i=strlen(Buffer);
file.open(temp_path,ios::in);
while(!file.eof())
{
file.read(&ch,1);
Buffer[i++]=ch;
}
quit=1;block_reply=0;
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
int SERVER::ProcessControlString(char* st)
{
//T01=ddddddddddddd&T02=ggggggggggggg&
size_t i;
int j=0;
int flag=0;
for(i=0;iразбиваем строку на подстроки
{
if(st[i]=='&') {flag=0;param_index++;j=0;}
if(flag==1) param[param_index].name[j++]=st[i];
if(st[i]=='=') flag=1;
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
// HTTP TCP/IP почтовый сервер для одновременной работы с MAX_CONNECTIONS
// клиентами
int echo_gl;
DWORD WINAPI ThreadFuncHTTP(SERVER* p_server)
{
SERVER server;
server = *p_server; //через перегруженное присваивание (из-за строк)
server.report_file.open("http_report.txt",ios::app);
int retval;
//*********************** Приём - передача сервера ***********************
while(true) {
retval = server.recv_data();
if (retval==-1) break; // если сокетная ошибка
retval = server.ProcessClientQuery();
// если критическая ошибка, то:
if (retval==-1) break;
// Если сервер принял команду об окончании сеанса соединения, то:
if (retval==1)
{
server.report_file.close();
cout<<"The HTTP-transaction successfully completed."<
return 1;
}
// отправляем ответ клиенту, если это был запрос, а не данные
if(!server.block_reply) server.send_data();
if(server.quit) break;
} //end of while
//******************** Конец приёма - передачи сервера *******************
server.shutdown_and_closesocket();
if(server.conf.echo)
for (int i=0;i
cout<<"Parametr #"<
server.ProcessHTTPCommand(); // Здесь на основе полученных от HTTP-клиента
// параметров производим запланированные
// действия
return 0;
}
//////////////////////////////// main ////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
int main(void)
{
CONF_HTTP conf;
conf.Init();
printf("The IP-packet generator.\n\nWaiting for HTTP-query...\n\n");
DISPATCH_SERVER_SOCKET_HTTP s(conf);
s.accept_connect();
return 0;
}
///////////////////////////// end of main ////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
char* substring(char* st,char s1,char s2,char* ret)
{
ZeroMemory(ret,sizeof(ret));
strncpy(ret,getspos(st,s1)+1,getspos(st,s2)-getspos(st,s1)-1);
return ret;
}
//////////////////////////////////////////////////////////////////////////
char* getspos(char* search_string,char search_symbol)
{
int count=0;
while(true)
{
if (count>200)
{
cout<<"The search symbol "<
getch();return NULL;
}
if (*search_string != search_symbol)
{search_string++; count++;} else break;
}// endwhile
return search_string;
}
//////////////////////////////////////////////////////////////////////////
void readcomment(fstream& file)
{
char empty[MAX_PATH]={0}; // буфер для считывания
ZeroMemory(empty,sizeof(empty));
file.getline(empty,sizeof(empty),10);
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void SERVER::CreateQueryForm(char* temp_path)
{
// Здесь решаем вопрос об отправке клиенту формы на основании его
// запроса
if(!strcmp(param[0].name,"send"))
{
if(!strcmp(param[1].name,"V1"))
strcpy(temp_path,"http_icmp_form.htm");
if(!strcmp(param[1].name,"V2"))
strcpy(temp_path,"http_attack_form.htm");
}
else
if(!strcmp(param[0].name,"icmp"))
strcpy(temp_path,"http_icmp_reply.htm");
else
if(!strcmp(param[0].name,"attack"))
strcpy(temp_path,"http_attack_reply.htm");
};
//////////////////////////////////////////////////////////////////////////
int SERVER::ProcessHTTPCommand(void)
{
if(!strcmp(param[0].name,"icmp")||!strcmp(param[0].name,"attack"))
{
send_icmp_sequence(param);
cout<<"It was done by the HTTP-client."<
}
return 0;
};
//////////////////////////////////////////////////////////////////////////
#include "packet.h"
void ICMP_PACKET::PrintPacket(void)
{
IP_HDR ipHdrRef;
ICMP_HDR icmpHdrRef;
struct in_addr addrRef;
printf("Prepared to send: %d bytes\n", iTotalSize);
ZeroMemory(&ipHdrRef,sizeof(ipHdrRef));
ZeroMemory(&icmpHdrRef,sizeof(icmpHdrRef));
ZeroMemory(&addrRef,sizeof(addrRef));
memcpy(&ipHdrRef, buf, sizeof(ipHdrRef));
memcpy(&icmpHdrRef, (buf + sizeof(ipHdrRef)), sizeof(icmpHdrRef));
printf("The IP-header content:\n\n");
printf("Type of service: %d\n", ipHdrRef.ip_tos);
printf("Total packet length: %d\n", ntohs(ipHdrRef.ip_totallength));
printf("Unique identifier: %d\n", ntohs(ipHdrRef.ip_id));
printf("Fragment offset field: %d\n", ntohs(ipHdrRef.ip_offset));
printf("Time to live: %d\n", ipHdrRef.ip_ttl);
printf("Encapsulated protocol number: %d\n", ipHdrRef.ip_protocol);
printf("Checksum: %d\n", ntohs(ipHdrRef.ip_checksum));
addrRef.S_un.S_addr = ipHdrRef.ip_srcaddr;
printf("Source address: %s\n", inet_ntoa(addrRef));
ZeroMemory(&addrRef,sizeof(addrRef));
addrRef.S_un.S_addr = ipHdrRef.ip_destaddr;
printf("Destination address: %s\n\n", inet_ntoa(addrRef));
printf("The ICMP-header content:\n\n");
printf("Type: %d\n", icmpHdrRef.i_type);
printf("Code: %d\n", icmpHdrRef.i_code);
printf("Checksum: %d\n", ntohs(icmpHdrRef.i_cksum));
printf("Unique identifier: %d\n", ntohs(icmpHdrRef.i_id));
printf("Sequence number: %d\n\n", ntohs(icmpHdrRef.i_seq));
};
//WSADATA wsd;
RAW_SOCKET::RAW_SOCKET(int proto) //IPPROTO_ICMP
{
int ret;
/*
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("WSAStartup() failed: %d\n", GetLastError());getchar();
exit(-1);
}
*/
// Creating a raw socket with an undefined (raw) protocol
s = WSASocket(AF_INET, SOCK_RAW, proto, NULL, 0,0);
if (s == INVALID_SOCKET)
{
printf("WSASocket() failed: %d\n", WSAGetLastError());getchar();
exit(-1);
}
// Enable the IP header include option
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));
if (ret == SOCKET_ERROR)
{
printf("setsockopt(IP_HDRINCL) failed: %d\n", WSAGetLastError());getchar();
exit(-1);
}
};
int RAW_SOCKET::BindSocket(u_long address)
{
SOCKADDR_IN local;
local.sin_family = AF_INET;
//local.sin_port = htons((short)iPort); // for UDP or TCP
local.sin_addr.s_addr = address;//htonl(INADDR_ANY);
//local.sin_addr.s_addr = inet_addr(szInterface);
if (bind(s, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR)
{
printf("bind() failed: %d\n", WSAGetLastError());getchar();
return -1;
}
return 0;
};
#pragma pack(1)
#define WIN32_LEAN_AND_MEAN // Windows Headers use this symbol
// to exclude rarely-used header files. Please refer to Windows.H
//to determine the files that will be excluded when this symbol is defined
#include
#include
#include
#include
#define MAX_MESSAGE 4068
#define MAX_PACKET 4096
#define ICMP_ECHO 8
#define MAX_ICMP_PACKET 1024 // Max ICMP packet size
//
// Setup some default values
//
#define DEFAULT_PORT_SEND //5001
//#define DEFAULT_PORT_RECV 5000
//#define DEFAULT_IP_SEND "127.0.0.1"
//#define DEFAULT_IP_RECV "127.0.0.1"
//#define DEFAULT_COUNT 1 //5
#define DEFAULT_MESSAGE "This is a test"
//char szInterface[32] = "10.0.0.1"; // Default interface to read datagrams from
//
// Define the IP header. Make the version and length field one
// character since we can't declare two 4 bit fields without
// the compiler aligning them on at least a 1 byte boundary.
//
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;
//
// Define the UDP header
//
typedef struct udp_hdr
{
u_short src_portno; // Source port number
u_short dst_portno; // Destination port number
u_short udp_length; // UDP packet length
u_short udp_checksum; // UDP checksum (optional)
} UDP_HDR, *PUDP_HDR;
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;
u_short checksum(u_short *buffer, int size);
typedef struct tag_param{char name[100];} PARAM;
//////////////////////////////////////////////////////////////////////////
class ICMP_PACKET
{
public:
char buf[MAX_PACKET],*ptr;
IP_HDR ipHdr;
ICMP_HDR icmpHdr;
u_short iTotalSize;
struct sockaddr_in remote; // IP addressing structures
void PrintPacket(void);
void FillFields(PARAM* param);
};
class RAW_SOCKET
{
public:
SOCKET s;
BOOL bOpt;
RAW_SOCKET(int proto);
int SendPackets(char* buf, u_short TotalSize,
struct sockaddr_in *p_remote, DWORD amount);
int BindSocket(u_long address);
int RecvPackets(void);
};
int send_icmp_sequence(PARAM* param);
#include "packet.h"
// Global variables
u_long dwToIP, // IP to send to
dwFromIP; // IP to send from (spoof)
u_short iToPort, // Port to send to
iFromPort; // Port to send from (spoof)
DWORD dwCount; // Number of times to send
char strMessage[MAX_MESSAGE]; // Message to send
void ICMP_PACKET::FillFields(PARAM* param)
{
u_short // Lots of sizes needed to fill
//iUdpSize, // the various headers with
iIPVersion,
iIPSize,
cksum = 0;
dwToIP = inet_addr(param[6].name);
dwFromIP = inet_addr(param[5].name);
ptr=NULL;
ZeroMemory(buf,MAX_PACKET);
//iTotalSize = sizeof(ipHdr) + sizeof(icmpHdr) + strlen(strMessage);
iTotalSize = sizeof(ipHdr) + sizeof(icmpHdr);
iIPVersion = 4;
iIPSize = sizeof(ipHdr) / sizeof(u_long);
//
// IP version goes in the high order 4 bits of ip_verlen. The
// IP header length (in 32-bit words) goes in the lower 4 bits.
//
ipHdr.ip_verlen = (iIPVersion << 4) | iIPSize;
ipHdr.ip_tos = atoi(param[2].name); //0 // IP type of service
ipHdr.ip_totallength = htons(iTotalSize); // Total packet len
ipHdr.ip_id = 0; // Unique identifier: set to 0
ipHdr.ip_offset = htons(atoi(param[3].name)); //0; // Fragment offset field
ipHdr.ip_ttl = atoi(param[4].name); //128; // Time to live
ipHdr.ip_protocol = 0x01; // Protocol(ICMP)
ipHdr.ip_checksum = 0 ; // IP checksum
ipHdr.ip_srcaddr = dwFromIP; // Source address
ipHdr.ip_destaddr = dwToIP; // Destination address
//
// Initalize the UDP header
//
//iUdpSize = sizeof(udpHdr) + strlen(strMessage);
/*
iUdpSize = sizeof(udpHdr);
udpHdr.src_portno = htons(iFromPort) ;
udpHdr.dst_portno = htons(iToPort) ;
udpHdr.udp_length = htons(iUdpSize) ;
udpHdr.udp_checksum = 0 ;*/
// Initalize the ICMP header
icmpHdr.i_type = (u_char)atoi(param[7].name); //0; //put here a number in the range 0-127 (except for
//the error numbers)
icmpHdr.i_code = (u_char)atoi(param[8].name); /* 0; put here a number in the range 0-127,
This way you can build your own ICMP-message types
for hundreds of different occasions.*/
icmpHdr.i_cksum = 0;
icmpHdr.i_id = htons(atoi(param[9].name)); //0;
icmpHdr.i_seq = htons(atoi(param[10].name)); //0;
icmpHdr.i_cksum = checksum((u_short*)&icmpHdr, sizeof(icmpHdr));
// Now assemble the IP and UDP headers along with the data
// so we can send it
ZeroMemory(buf, MAX_PACKET);
ptr = buf;
memcpy(ptr, &ipHdr, sizeof(ipHdr)); ptr += sizeof(ipHdr);
//memcpy(ptr, &udpHdr, sizeof(udpHdr)); ptr += sizeof(udpHdr);
memcpy(ptr, &icmpHdr, sizeof(icmpHdr)); ptr += sizeof(icmpHdr);
//memcpy(ptr, strMessage, strlen(strMessage));
// Apparently, this SOCKADDR_IN structure makes no difference.
// Whatever we put as the destination IP addr in the IP header
// is what goes. Specifying a different destination in remote
// will be ignored.
//
remote.sin_family = AF_INET;
//remote.sin_port = htons(iToPort);
remote.sin_addr.s_addr = dwToIP;
//PrintPacket();
};
int RAW_SOCKET::SendPackets(char* buf, u_short iTotalSize,
struct sockaddr_in *p_remote, DWORD dwCount)
{
DWORD i,j;
int ret;
((ICMP_PACKET*)buf)->PrintPacket();
for(i = 0; i < dwCount; i++)
{
ret = sendto(s, buf, iTotalSize, 0, (SOCKADDR *)p_remote,
sizeof(struct sockaddr_in));
if (ret == SOCKET_ERROR)
{
printf("sendto() failed: %d\n", WSAGetLastError());getchar();
break;
}
else
{
buf[ret] = '\0';
printf("Info sent to [%s]:\n",
inet_ntoa(p_remote->sin_addr));
for (j=0;j<(u_int)ret;j++) printf("%d", buf[j]);
printf("%c",'\n');
for (j=0;j<(u_int)ret;j++) printf("%c", buf[j]);
printf("\nNumber of bytes sent: %d\n", ret);
}
} // end for
return 0;
};
// Function: send_icmp_sequence
//
// Description:
// Create the raw socket and set the IP_HDRINCL option.
// Following this, assemble the IP and ICMP packet headers by
// assigning the correct values and calculating the checksums.
// Then fill in the data and send to its destination.
//
int send_icmp_sequence(PARAM* param)
{
ICMP_PACKET packet;
RAW_SOCKET raw_socket(IPPROTO_RAW);
//dwCount = DEFAULT_COUNT;
dwCount = atoi(param[1].name);
packet.FillFields(param);
raw_socket.SendPackets(packet.buf, packet.iTotalSize,
&packet.remote, dwCount);
closesocket(raw_socket.s) ;
// WSACleanup() ;
getchar();
return 0;
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Function: checksum
//
// Description:
// This function calculates the 16-bit one's complement sum
// for the supplied buffer.
// This function is taken from a MSDN v6.0 example (PING app example)
//
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);
}
//////////////////////////////////////////////////////////////////////////
127.0.0.1 ip-адрес, назначенный этому серверу (0.0.0.0-это INADDR_ANY)
8080 Порт приёма HTTP-запросов этого сервера
0 1/0-echo on/echo off
HTML 4.0 Transitional//EN">
<title>HTTP-Клиент для управления генератором
IP-пакетовtitle>
HTTP-Клиент для управления
1. Введение
2. Задача сетевой защиты и методы её решения
2. 1. Брандмауэр
2. 2. Фильтры пакетов – простые и кумулятивные
2. 3. Прокси-брандмауэры и сервера уровня соединения
2. 4. Шлюзы приложений и сервера прикладного уровня
2. 5. Системы обнаружения компьютерных атак (СОА)
2. 6. Классификация систем обнаружения атак (СОА)
2. 7. Варианты реакций на обнаруженную атаку
2. 8. Характеристики средств сетевой защиты
Достоинства пакетных фильтров:
Недостатки пакетных фильтров:
2. 9. Выводы
3. Постановка задачи
3. 1. Концепция программного средства
3. 2. Сетевое программирование под OC Windows
3. 3. Атакующие воздействия для программного средства
3. 3. 1. Атака Smurf
3. 3. 2. Атака Tribe Flood Network
3. 3. 3. Атака WinFreeze
3. 3. 4. Атака ICMP Flood
4. Модель системы
4. 1. Схема взаимодействия модулей системы
4. 2. Описание модулей
4. 3. Описание программных элементов
5. Сведения о реализации
6. Экспериментальная часть
7. Разработка документации
7. 1. Техническое задание
Введение
Основания для разработки
Назначение разработки
Программное средство должно быть динамически настраиваемым.
Требования к надежности
Условия эксплуатации
Требования к составу и параметрам технических средств
Требования к информационной и программной совместимости
Требования к маркировке и упаковке
Требования к транспортированию и хранению
Специальные требования
Требования к программной документации
Технико-экономические показатели
Стадии и этапы разработки
Порядок контроля и приемки
7.2. Руководство оператора
Назначение программы
Условия выполнения программы
Выполнение программы
Сообщения оператору
8. Бизнес-план
8. 2. Характеристика ПП
8. 3. Исследование и анализ рынка
8. 4. Производственный план
График безубыточности
9. Безопасность и экологичность проекта
9. 1. Введение
9. 2. Характеристика производственного помещения
9. 3. Производственная санитария
9. 4. Электробезопасность
9. 5. Пожаробезопасность
9. 6. Контроль над электромагнитным излучением
9. 7. Освещение
9. 8. Вентиляция
9. 9. Контроль шума
9. 10. Эргономичность
9. 11. Вывод
10. Заключение
11. Список литературы
Приложение
Файл http_plugin.cpp
Файл Packet.cpp
Файл Packet.h
Файл Raw_send.cpp
Файл http_conf.inf
Файл http_client.htm
СОДЕРЖАНИЕ
1. Введение 8
2. Задача сетевой защиты и методы её решения 10
2. 1. Брандмауэр 10
2. 2. Фильтры пакетов – простые и кумулятивные 11
2. 3. Прокси-брандмауэры и сервера уровня соединения 13
2. 4. Шлюзы приложений и сервера прикладного уровня 14
2. 5. Системы обнаружения компьютерных атак (СОА) 15
2. 6. Классификация систем обнаружения атак (СОА) 18
2. 7. Варианты реакций на обнаруженную атаку 19
2. 8. Характеристики средств сетевой защиты 22
2. 9. Выводы 26
3. Постановка задачи 28
3. 1. Концепция программного средства 28
3. 2. Сетевое программирование под OC Windows 29
3. 3. Атакующие воздействия для программного средства 32
3. 3. 1. Атака Smurf 33
3. 3. 2. Атака Tribe Flood Network 34
3. 3. 3. Атака WinFreeze 36
3. 3. 4. Атака ICMP Flood 38
4. Модель системы 39
4. 1. Схема взаимодействия модулей системы 46
47
4. 2. Описание модулей 48
4. 3. Описание программных элементов 49
5. Сведения о реализации 65
6. Экспериментальная часть 67
7. Разработка документации 76
7. 1. Техническое задание 76
7.2. Руководство оператора 80
8. Бизнес-план 82
8. 2. Характеристика ПП 82
8. 3. Исследование и анализ рынка 84
8. 4. Производственный план 86
График безубыточности 100
9. Безопасность и экологичность проекта 102
9. 1. Введение 103
9. 2. Характеристика производственного помещения 104
9. 3. Производственная санитария 105
9. 4. Электробезопасность 106
9. 5. Пожаробезопасность 107
9. 6. Контроль над электромагнитным излучением 110
9. 7. Освещение 112
9. 8. Вентиляция 114
9. 9. Контроль шума 115
9. 10. Эргономичность 117
9. 11. Вывод 119
10. Заключение 120
11. Список литературы 121
Приложение 122
Файл http_plugin.cpp 122
Файл Packet.cpp 135
Файл Packet.h 137
Файл Raw_send.cpp 139
Файл http_conf.inf 144
Файл http_client.htm 144
Файл http_icmp_form.htm 145
Файл http_icmp_reply.htm 146
Файл http_attack_form.htm 147
Файл http_attack_reply.htm 149
Файл Packet.cpp 150
Файл Packet.h 150
Файл pop3_conf.inf 150
Файл pop3_main.cpp 150
1. Введение
В современном мире происходит стремительное развитие компьютерной техники и компьютерных технологий. Важное место среди них занимают технологии вычислительных и информационных сетей. Создание и развитие Internet и World Wide Web привело к новому этапу развития информационного общества. Но, с другой стороны, развитие современных сетевых информационных технологий привело к росту числа компьютерных преступлений и связанных с ними хищений информации, а также материальных потерь.
Интернет и World Wide Web совместно открыли новую дверь, через которую хакеры могут удалённо атаковать домашние компьютеры и корпоративные сети и исследовать, копировать или уничтожать находящиеся в них данные. По оценкам экспертов, до 85% сетей, подключённых к Интернету, уязвимы для таких атак.
По результатам одного исследования, посвященного вопросам компьютерных преступлений, около 58% опрошенных пострадали от компьютерных взломов за последний год. Примерно 18% опрошенных из этого числа заявляют, что потеряли более миллиона долларов в ходе нападений, более 66% потерпели убытки в размере 50 тыс. долларов. Свыше 22% атак были нацелены на промышленные секреты или документы, представляющие интерес прежде всего для конкурентов.
С ростом Интернета и развитием технологий такие нападения распространяются всё шире. Сегодня можно говорить о том, что угроза извне становится проблемой мирового масштаба, касающейся любой компании, имеющей выход во внешние сети.
Информационная безопасность обеспечивается комплексом социально-правовых, морально-этических норм, а также техническими средствами. На техническом уровне для обеспечения защиты сетевых систем, безопасности удалённого доступа и создания надёжных политик безопасности применяются такие средства защиты локальных и корпоративных сетей, как межсетевые экраны (брандмауэры, файерволы, прокси-сервера) (МСЭ), а также более современные средства - системы обнаружения атак (СОА).
Проблема информационной защиты и безопасности локальных сетей важна и актуальна. Полностью она не решена и на сегодняшний день. Практически это одна из ключевых проблем развития информационного общества.
Рассматривая техническую проблему безопасности и защиты локальных и корпоративных сетей от атак извне, необходимо рассмотреть проблему сетевой защиты и методы её решения.
2. Задача сетевой защиты и методы её решения
2. 1. Брандмауэр
Межсетевой экран или брандмауэр (по-нем. brandmauer, по-англ. firewall, по-рус. граница огня) - это система или комбинация систем, позволяющих разделить сеть на две или более частей и реализовать набор правил, определяющих условия прохождения пакетов из одной части в другую. Чаще всего эта граница проводится между локальной сетью предприятия и INTERNET, хотя ее можно провести и внутри локальной сети предприятия. Брандмауэр, таким образом, пропускает через себя весь трафик. Для каждого проходящего пакета брандмауэр принимает решение пропускать его или отбросить. Для того чтобы брандмауэр мог принимать эти решения, ему необходимо определить набор правил. О том, как эти правила описываются и какие параметры используются при их описании, речь пойдет чуть позже.
Как правило, брандмауэры функционируют на какой-либо UNIX платформе - чаще всего это BSDI, SunOS, AIX, IRIX и т.д., реже - DOS, VMS, WNT, Windows NT. Из аппаратных платформ встречаются INTEL, Sun SPARC, RS6000, Alpha, HP PA-RISC, семейство RISC процессоров R4400-R5000. Помимо Ethernet, многие брандмауэры поддерживают FDDI, Token Ring, 100Base-T, 100VG-AnyLan, различные серийные устройства. Требования к оперативной памяти и объему жесткого диска зависят от количества машин в защищаемом сегменте сети.
Обычно в операционную систему, под управлением которой работает брандмауэр, вносятся изменения, цель которых - повышение защиты самого брандмауэра. Эти изменения затрагивают как ядро ОС, так и соответствующие файлы конфигурации. На самом брандмауэре не разрешается иметь счета пользователей (а значит и потенциальных дыр), только счет администратора. Некоторые брандмауэры работают только в однопользовательском режиме. Многие брандмауэры имеют систему проверки целостности программных кодов. При этом контрольные суммы программных кодов хранятся в защищенном месте и сравниваются при старте программы во избежание подмены программного обеспечения.
Все брандмауэры можно разделить на три типа:
Фильтры пакетов (packet filter) – простые и кумулятивные;
Прокси-брандмауэры и сервера уровня соединения (circuit gateways)
Шлюзы приложений и сервера прикладного уровня (application gateways)
Все три категории могут одновременно встретиться в одном брандмауэре.
2. 2. Фильтры пакетов – простые и кумулятивные
Фильтр пакетов — это узел или маршрутизатор, который проверяет каждый пакет на соответствие правилам политики безопасности перед его отправкой в сеть и/ или узел назначения через соответствующий сетевой интерфейс.
Фильтры пакетов принимают решение о том, пропускать пакет или отбросить, просматривая IP-адреса, флаги или номера TCP портов в заголовке этого пакета. IP-адрес и номер порта - это информация сетевого и транспортного уровней соответственно, но пакетные фильтры используют и информацию прикладного уровня, т.к. все стандартные сервисы в TCP/IP ассоциируются с определенным номером порта.
Для описания правил прохождения пакетов составляются таблицы типа:
Действие | тип пакета | адрес источн. | порт источн. | адрес назнач. | порт назнач. | флаги |
Поле "действие" может принимать значения пропустить или отбросить.
Тип пакета - TCP, UDP или ICMP. Флаги - флаги из заголовка IP-пакета.
Поля "порт источника" и "порт назначения" имеют смысл только для TCP и UDP пакетов.
В первую очередь, фильтры отбрасывают пакеты ICMP, UDP и входящие пакеты SYN/ACK, которые инициируют внутренний сеанс связи. Простые фильтры могут только фильтровать пакеты от узла-отправителя, узла-получателя и от порта-получателя. Более интеллектуальная разновидность фильтров может работать, основываясь на информации о входящем интерфейсе, порте-отправителе и даже анализировать состояния флагов заголовков. В качестве примера фильтров такого типа можно привести простые маршрутизаторы, такие как маршрутизаторы доступа любой серии фирмы Cisco или даже UNIX-станции с установленным демоном-брандмауэром. Если маршрутизатор сконфигурирован для работы с конкретным протоколом, внешние узлы могут использовать данный протокол для установления прямого соединения с внутренними узлами. Большинство маршрутизаторов могут формировать журнал аудита и генерировать сигналы тревоги при обнаружении враждебных действий.
Главным недостатком пакетных фильтров является сложность управления: когда правила становятся достаточно сложными, можно ненароком породить конфликтующие политики безопасности или пропустить нежелательные пакеты. Хакеры прекрасно осведомлены о многочисленных дырах в защите при использовании фильтров. Тем не менее применять фильтры пакетов имеет смысл, главным образом, на передней линии обороны перед брандмауэрами. В настоящее время многие брандмауэры содержат фильтры пакетов, тесно интегрированные в их ядро или в сетевую операционную систему (Internetworking Operating System, IOS).
Кумулятивные фильтры являются усовершенствованными версиями фильтров пакетов, исполняют те же самые функции, что и их предшественники, дополнительно отслеживая информацию о состоянии пакетов (такую, как номер последовательности в протоколе TCP). По существу, кумулятивные фильтры отслеживают информацию о сеансах связи. В качестве примера можно привести брандмауэры PIX фирмы Cisco, Fire Wall-1 фирмы Check Point Software и брандмауэр фирмы Watchguard.
Кумулятивный процесс определяется как анализ данных нижних уровней стека протоколов в целях сравнения текущей сессии с предыдущими с целью обнаружения подозрительной деятельности. В отличие от шлюзов уровня приложения, в кумулятивных фильтрах применяются определяемые пользователем правила, не зависящие от информации о самом приложении. Кроме того, кумулятивная защита меньше загружает процессор, чем анализ на уровне приложения. К сожалению, кумулятивные брандмауэры не распознают отдельные приложения и, следовательно, неспособны применять различные правила к различным приложениям.
2. 3. Прокси-брандмауэры и сервера уровня соединения
Узел прокси-брандмауэра — это просто сервер с двумя сетевыми интерфейсными картами (Network Interface Card, NIC), который или передает пакет дальше, или его уничтожает, используя демоны прокси-сервера. Каждое приложение, работающее через такой шлюз, должно быть специально инсталлировано и работать через прокси. Прокси-сервер действует от имени одного или более серверов, обычно в качестве экрана, брандмауэра, кэша или их комбинации.
Термин шлюз часто применяется в качестве синонима прокси-сервера. Обычно прокси-сервер используется в компаниях и предприятиях для сбора всех запросов в Интернете, пересылке их Интернет-серверам, получения от них ответов и, наконец, пересылке ответов исходным адресатам внутри компании (с применением прокси-агентов, устанавливающих и завершающих соединение с удаленными узлами или серверами от имени пользователей).
Сервер уровня соединения представляет из себя транслятор TCP соединения. Пользователь образует соединение с определенным портом на брандмауэре, после чего последний производит соединение с местом назначения по другую сторону от брандмауэра. Во время сеанса этот транслятор копирует байты в обоих направлениях, действуя как провод.
Как правило, пункт назначения задается заранее, в то время как источников может быть много (соединение типа один - много). Используя различные порты, можно создавать различные конфигурации.
Такой тип сервера позволяет создавать транслятор для любого определенного пользователем сервиса, базирующегося на TCP, осуществлять контроль доступа к этому сервису, сбор статистики по его использованию.
2. 4. Шлюзы приложений и сервера прикладного уровня
Шлюзы приложений являются усиленной версией прокси-брандмауэров и, как и в случае прокси-брандмауэров, каждое приложение должно быть специально инсталлировано для работы через них. Разница заключается в том, что шлюзы приложений содержат встроенные модули, которые проверяют каждый запрос и ответ. Например, только загружаемые данные могут быть исходящим потоком по протоколу FTP. Шлюзы приложений просматривают все данные на уровне приложения стека протоколов и являются посредниками для внешних пользователей, перехватывая пакеты и пересылая их приложению. Таким образом, внешние пользователи не смогут установить связь напрямую в защищенной зоне. То, что брандмауэр фактически просматривает всю информацию приложения, означает, что он различает такие приложения, как FTP и SMTP. Вследствие этого шлюзы приложений обеспечивают защиту любого приложения, которое они поддерживают.
Брандмауэры с серверами прикладного уровня используют сервера конкретных сервисов (proxy server) - TELNET, FTP и т.д., запускаемые на брандмауэре и пропускающие через себя весь трафик, относящийся к данному сервису. Таким образом, между клиентом и сервером образуются два соединения: от клиента до брандмауэра и от брандмауэра до места назначения. Полный набор поддерживаемых серверов различается для каждого конкретного брандмауэра.
Использование серверов прикладного уровня позволяет решить важную задачу - скрыть от внешних пользователей структуру локальной сети, включая информацию в заголовках почтовых пакетов или службы доменных имен (DNS). Другим положительным качеством является возможность аутентификации на пользовательском уровне (напоминаю, что аутентификация - процесс подтверждения идентичности чего-либо; в данном случае это процесс подтверждения, действительно ли пользователь является тем, за кого он себя выдает).
При описании правил доступа используются такие параметры, как
название сервиса,
имя пользователя,
допустимый временной диапазон использования сервиса,
компьютеры, с которых можно пользоваться сервисом,
схемы аутентификации.
Сервера прикладного уровня позволяют обеспечить наиболее высокий уровень защиты, т.к. взаимодействие с внешним миров реализуется через небольшое число прикладных программ, полностью контролирующих весь входящий и выходящий трафик.
2. 5. Системы обнаружения компьютерных атак (СОА)
Не будь уязвимостей в компонентах информационных систем, нельзя было бы реализовать многие атаки и, следовательно, традиционные системы защиты вполне эффективно справлялись бы с возможными атаками. Однако программы пишутся людьми, которым свойственно делать ошибки. Вследствие чего и появляются уязвимости, которые используются злоумышленниками для реализации атак. Однако это только полбеды. Если бы все атаки строились по модели "один к одному" (т. е. "один компьютер атакует один компьютер" ), то с некоторой натяжкой, но межсетевые экраны и другие защитные системы смогли бы противостоять и им. Но появились скоординированные атаки, против которых традиционные средства уже не так эффективны. И тут на сцене и появляются новые технологии - технологии обнаружения атак.
Технология обнаружения атак должна решать следующие задачи:
Распознавание известных атак и предупреждение о них соответствующего персонала.
"Понимание" зачастую непонятных источников информации об атаках.
Освобождение или снижение нагрузки на персонал, отвечающий за безопасность, от текущих рутинных операций по контролю за пользователями, системами и сетями, являющимися компонентами корпоративной сети.
Возможность управления средствами защиты не-экспертами в области безопасности.
Контроль всех действий субъектов корпоративной сети (пользователей, программ, процессов и т.д.).
Очень часто системы обнаружения атак могут выполнять функции, существенно расширяющие спектр их применения. Например:
Контроль эффективности межсетевых экранов. Например, установка системы обнаружения атак после межсетевого экрана (внутри корпоративной сети) позволяет обнаружить атаки, пропускаемые МСЭ и, тем самым, определить недостающие правила на межсетевом экране.
Контроль узлов сети с неустановленными обновлениями или узлов с устаревшим программным обеспечением.
Блокирование и контроль доступа к определенным узлам Internet. Хотя системам обнаружения атак далеко до межсетевых экранов и систем контроля доступа к различным URL, например, WEBsweeper, они могут выполнять частичный контроль и блокирование доступа некоторых пользователей корпоративной сети к отдельным ресурсам Internet, например, к Web-серверам порнографического содержания. Это бывает необходимо тогда, когда в организации нет денег на приобретение и межсетевого экрана и системы обнаружение атак, и функции МСЭ разносятся между системой обнаружения атак, маршрутизатором и proxy-сервером. Кроме того, системы обнаружения атак могут контролировать доступ сотрудников к серверам на основе ключевых слов. Например, sex, job, crack и т.д.
Контроль электронной почты. Системы обнаружения атак могут использоваться для контроля неблагонадежных сотрудников, использующих электронную почту для выполнения задач, не входящих в их функциональные обязанности, например, рассылка резюме. Некоторые системы могут обнаруживать вирусы в почтовых сообщениях и, хотя до настоящих антивирусных систем им далеко, они все же выполняют эту задачу достаточно эффективно.
Лучшее использование времени и опыта специалистов в области информационной безопасности заключается в обнаружении и устранении причин реализации атак, скорее чем, в обнаружении самих атак. Устранив причины возникновения атак, т.е. обнаружив и устранив уязвимости, администратор тем самым устраняет и сам факт потенциальной реализации атак. Иначе атака будет повторяться раз за разом, постоянно требуя усилий и внимания администратора.
2. 6. Классификация систем обнаружения атак (СОА)
Существует большое число различных классификаций систем обнаружения атак, однако самой распространенной является классификация по принципу реализации:
host-based, то есть обнаруживающие атаки, направленные на конкретный узел сети,
network-based, то есть обнаруживающие атаки, направленные на всю сеть или сегмент сети.
Системы обнаружения атак, контролирующие отдельный компьютер, как правило, собирают и анализируют информацию из журналов регистрации операционной системы и различных приложений (Web-сервер, СУБД и т.д.). По такому принципу функционирует RealSecure OS Sensor. Однако в последнее время стали получать распространение системы, тесно интегрированные с ядром ОС, тем самым, предоставляя более эффективный способ обнаружения нарушений политики безопасности. Причем такая интеграция может быть реализовано двояко. Во-первых, могут контролироваться все системные вызовы ОС (так работает Entercept) или весь входящий/исходящий сетевой трафик (так работает RealSecure Server Sensor). В последнем случае система обнаружения атак захватывает весь сетевой трафик напрямую с сетевой карты, минуя операционную систему, что позволяет уменьшить зависимость от нее и тем самым повысить защищенность системы обнаружения атак.
Системы обнаружения атак уровня сети собирают информацию из самой сети, то есть из сетевого трафика. Выполняться эти системы могут на обычных компьютерах (например, RealSecure Network Sensor), на специализированных компьютерах (например, RealSecure for Nokia или Cisco Secure IDS 4210 и 4230) или интегрированы в маршрутизаторы или коммутаторы (например, CiscoSecure IOS Integrated Software или Cisco Catalyst 6000 IDS Module). В первых двух случаях анализируемая информация собирается посредством захвата и анализа пакетов, используя сетевые интерфейсы в беспорядочном (promiscuous) режиме. В последнем случае захват трафика осуществляется с шины сетевого оборудования.
Обнаружение атак требует выполнения одного из двух условий - или понимания ожидаемого поведения контролируемого объекта системы или знания всех возможных атак и их модификаций. В первом случае используется технология обнаружения аномального поведения, а во втором случае - технология обнаружения злоумышленного поведения или злоупотреблений. Вторая технология заключается в описании атаки в виде шаблона или сигнатуры и поиска данного шаблона в контролируемом пространстве (например, сетевом трафике или журнале регистрации). Эта технология очень похожа на обнаружение вирусов (антивирусные системы являются ярким примером системы обнаружения атак), т.е. система может обнаружить все известные атаки, но она мало приспособлена для обнаружения новых, еще неизвестных, атак. Подход, реализованный в таких системах, очень прост и именно на нем основаны практически все предлагаемые сегодня на рынке системы обнаружения атак.
Практически все системы обнаружения атак основаны на сигнатурном подходе.
2. 7. Варианты реакций на обнаруженную атаку
Мало обнаружить атаку, - необходимо на нее соответствующим образом отреагировать. Именно варианты реагирования во многом определяют эффективность системы обнаружения атак. На сегодняшний день предлагаются следующие варианты реагирования:
Уведомление на консоль (включая резервную) системы обнаружения атак или на консоль интегрированной системы (например, межсетевого экрана).
Звуковое оповещение об атаке.
Генерация управляющих последовательностей SNMP для систем сетевого управления.
Генерация сообщения об атаке по электронной почте.
Дополнительные уведомления на пейджер или факс. Очень интересная, хотя и редко применяемая возможность. Оповещение об обнаружении несанкционированной деятельности посылается не администратору, а злоумышленнику. По мнению сторонников данного варианта реагирования, нарушитель, узнав, что его обнаружили, вынужден прекратить свои действия.
Обязательная регистрация обнаруживаемых событий. В качестве журнала регистрации могут выступать:
текстовый файл,
системный журнал (например, в системе Cisco Secure Integrated Software),
текстовый файл специального формата (например, в системе Snort),
локальная база данных MS Access,
SQL-база данных (например, в системе RealSecure).
Надо только учитывать, что объемы регистрируемой информации требуют, как правило, SQL-базу - MS SQL или Oracle.
Трассировка событий (event trace), т.е. запись их в той последовательности и с той скоростью, с которыми их реализовывал злоумышленник. Затем администратор в любое заданное время может прокрутить (replay или playback) необходимую последовательность событий с заданной скоростью (в реальном режиме времени, с ускорением или замедлением), чтобы проанализировать деятельность злоумышленника. Это позволит понять его квалификацию, используемые средства атаки и т.д.
Прерывание действий атакующего, т.е. завершение соединения. Это можно сделать, как:
перехват соединения (session hijacking) и посылка пакета с установленным флагом RST обоим участникам сетевого соединения от имени каждого из них (в системе обнаружения атак, функционирующей на уровне сети);
блокировка учетной записи пользователя, осуществляющего атаку (в системе обнаружения атак на уровне узла). Такая блокировка может быть осуществлена либо на заданный промежуток времени, либо до тех пор, пока учетная запись не будет разблокирована администратором. В зависимости от привилегий, с которыми запущена система обнаружения атак, блокировка может действовать как в пределах самого компьютера, на который направлена атака, так и в пределах всего домена сети.
Реконфигурация сетевого оборудования или межсетевых экранов. В случае обнаружения атаки на маршрутизатор или межсетевой экран посылается команда на изменение списка контроля доступа. Впоследствии все попытки соединения с атакующего узла будут отвергаться. Как и блокировка учетной записи злоумышленника, изменение списка контроля доступа может быть осуществлено или на заданный интервал времени или до того момента, как изменение будет отменено администратором реконфигурируемого сетевого оборудования.
Блокирование сетевого трафика так, как это реализовано в межсетевых экранах. Этот вариант позволяет ограничить трафик, а также адресатов, которые могут получить доступ к ресурсам защищаемого компьютера, позволяя выполнять функции доступные в персональных межсетевых экранах.
2. 8. Характеристики средств сетевой защиты
Ряд брандмауэров позволяет также организовывать виртуальные корпоративные сети (Virtual Private Network), т.е. объединить несколько локальных сетей, включенных в INTERNET в одну виртуальную сеть. VPN позволяют организовать прозрачное для пользователей соединение локальных сетей, сохраняя секретность и целостность передаваемой информации с помощью шифрования. При этом при передаче по INTERNET шифруются не только данные пользователя, но и сетевая информация - сетевые адреса, номера портов и т.д.
Легкость администрирования является одним из ключевых аспектов в создании эффективной и надежной системы защиты. Ошибки при определении правил доступа могут образовать дыру, через которую может быть взломана система. Поэтому в большинстве брандмауэров реализованы сервисные утилиты, облегчающие ввод, удаление, просмотр набора правил. Наличие этих утилит позволяет также производить проверки на синтаксические или логические ошибки при вводе или редактирования правил. Как правило, эти утилиты позволяют просматривать информацию, сгруппированную по каким-либо критериям, например, все что относится к конкретному пользователю или сервису.
Еще одним важным компонентом брандмауэра является система сбора статистики и предупреждения об атаке. Информация обо всех событиях - отказах, входящих, выходящих соединениях, числе переданных байт, использовавшихся сервисах, времени соединения и т.д. - накапливается в файлах статистики. Многие брандмауэры позволяют гибко определять подлежащие протоколированию события, описать действия брандмауэра при атаках или попытках несанкционированного доступа - это может быть сообщение на консоль, почтовое послание администратору системы и т.д. Немедленный вывод сообщения о попытке взлома на экран консоли или администратора может помочь, если попытка оказалась успешной и атакующий уже проник в систему. В состав многих брандмауэров входят генераторы отчетов, служащие для обработки статистики. Они позволяют собрать статистику по использованию ресурсов конкретными пользователями, по использованию сервисов, отказам, источникам, с которых проводились попытки несанкционированного доступа и т.д.
Перечислим некоторые достоинства и недостатки рассмотренных средств сетевой защиты.
Достоинства пакетных фильтров:
относительно невысокая стоимость;
гибкость в определении правил фильтрации;
небольшая задержка при прохождении пакетов.
Недостатки пакетных фильтров:
локальная сеть видна (маршрутизируется ) из INTERNET;
правила фильтрации пакетов трудны в описании, требуются очень хорошие знания технологий TCP и UDP;
при нарушении работоспособности брандмауэра все компьютеры за ним становятся полностью незащищенными либо недоступными;
аутентификацию с использованием IP-адреса можно обмануть использованием IP-спуфинга (атакующая система выдает себя за другую, используя ее IP-адрес);
отсутствует аутентификация на пользовательском уровне.
Достоинства серверов прикладного уровня:
локальная сеть невидима из INTERNET;
при нарушении работоспособности брандмауэра пакеты перестают проходить через брандмауэр, тем самым не возникает угрозы для защищаемых им машин;
защита на уровне приложений позволяет осуществлять большое количество дополнительных проверок, снижая тем самым вероятность взлома с использованием дыр в программном обеспечении;
аутентификация на пользовательском уровне;
может быть реализована система немедленного предупреждения о попытке взлома.
Недостатки серверов прикладного уровня
более высокая, чем для пакетных фильтров стоимость;
невозможность использовании протоколов RPC и UDP;
производительность ниже, чем для пакетных фильтров.
Достоинства систем обнаружения атак:
Коммутация позволяет управлять крупномасштабными сетями, как несколькими небольшими сетевыми сегментами. В результате бывает трудно определить наилучшее место для установки системы, обнаруживающей атаки в сетевом трафике. Иногда могут помочь специальные порты (span ports) на коммутаторах, но не всегда. Обнаружение атак на уровне конкретного узла обеспечивает более эффективную работу в коммутируемых сетях, так как позволяет разместить системы обнаружения только на тех узлах, на которых это необходимо.
Системы сетевого уровня не требуют, чтобы на каждом хосте устанавливалось программное обеспечение системы обнаружения атак. Поскольку для контроля всей сети число мест, в которых установлены IDS невелико, то стоимость их эксплуатации в сети предприятия ниже, чем стоимость эксплуатации систем обнаружения атак на системном уровне. Кроме того, для контроля сетевого сегмента, необходим только один сенсор, независимо от числа узлов в данном сегменте.
Сетевой пакет, будучи ушедшим с компьютера злоумышленника, уже не может быть возвращен назад. Системы, функционирующие на сетевом уровне, используют "живой" трафик при обнаружении атак в реальном масштабе времени. Таким образом, злоумышленник не может удалить следы своей несанкционированной деятельности. Анализируемые данные включают не только информацию о методе атаки, но и информацию, которая может помочь при идентификации злоумышленника и доказательстве в суде. Поскольку многие хакеры хорошо знакомы с механизмами системной регистрации, они знают, как манипулировать этими файлами для скрытия следов своей деятельности, снижая эффективность систем системного уровня, которым требуется эта информация для того, чтобы обнаружить атаку.
Системы, функционирующие на уровне сети, обнаруживают подозрительные события и атаки по мере того, как они происходят, и поэтому обеспечивают гораздо более быстрое уведомление и реагирование, чем системы, анализирующие журналы регистрации. Например, хакер, инициирующий сетевую атаку типа "отказ в обслуживании" на основе протокола TCP, может быть остановлен системой обнаружения атак сетевого уровня, посылающей TCP-пакет с установленным флагом Reset в заголовке для завершения соединения с атакующим узлом, прежде чем атака вызовет разрушения или повреждения атакуемого узла. Системы анализа журналов регистрации не распознают атаки до момента соответствующей записи в журнал и предпринимают ответные действия уже после того, как была сделана запись. К этому моменту наиболее важные системы или ресурсы уже могут быть скомпрометированы или нарушена работоспособность системы, запускающей систему обнаружения атак на уровне узла. Уведомление в реальном масштабе времени позволяет быстро среагировать в соответствии с предварительно определенными параметрами. Диапазон этих реакций изменяется от разрешения проникновения в режиме наблюдения для того, чтобы собрать информацию об атаке и атакующем, до немедленного завершения атаки.
И, наконец, системы обнаружения атак, функционирующие на сетевом уровне, не зависят от операционных систем, установленных в корпоративной сети, так как они оперируют сетевым трафиком, которым обмениваются все узлы в корпоративной сети. Системе обнаружения атак все равно, какая ОС сгенерировала тот или иной пакет, если он в соответствие со стандартами, поддерживаемыми системой обнаружения. Например, в сети могут работать ОС Windows 98, Windows NT, Windows 2000 и XP, Netware, Linux, MacOS, Solaris и т.д., но если они общаются между собой по протоколу IP, то любая из систем обнаружения атак, поддерживающая этот протокол, сможет обнаруживать атаки, направленные на эти ОС.
Совместное применение систем обнаружения атак на уровне сети и уровне узла повысит защищенность вашей сети.
2. 9. Выводы
Рассмотрев основные виды сетевых атак и способов защиты от них, можно сделать определённые выводы:
Несмотря на усилия разработчиков, практический любое программное средство защиты от сетевых атак обладает набором уязвимостей, воспользовавшись которыми, злоумышленник может атаковать защищаемую компьютерную сеть.
Значительное влияние на проблему обеспечения сетевой безопасности оказывает человеческий фактор.
Среди рассмотренных средств сетевой защиты наиболее совершенным и современным типом подобного средства является система обнаружения атак (СОА), которая является более лучшим выбором, чем межсетевой экран (МСЭ).
3. Постановка задачи
В результате общего аналитического обзора технических проблем сетевой безопасности были сделаны определённые выводы. Так, неоспоримым выводом является важность и актуальность темы сетевой компьютерной безопасности. Практически это одна из ключевых проблем развития информационного общества.
Другим выводом является представление о том, что существующие на сегодняшний день технические средства сетевой безопасности достаточно совершенны, однако практически любое из них обладает определёнными недостатками, что в определённой мере делает возможным существование сетевых компьютерных атак.
Также на основании обзора можно сделать вывод о том, что наиболее совершенными на сегодняшний день средствами защиты и безопасности локальных компьютерных систем являются комплексные системы обнаружения атак (СОА).
3. 1. Концепция программного средства
На основании сделанных выводов можно сформулировать концептуальный план программного средства, которое будет создано в рамках данного дипломного проекта.
Системы обнаружения атак (СОА) определяются в англоязычной документации как NIDS – Network Intrusion Detection System. Большинство СОА создано для работы в ОС UNIX, потому что эта ОС обладает более развитым набором сетевых программных средств. Как правило, СОА представляют из себя анализаторы сетевых пакетов (чаще всего IP-пакетов), совмещённые с базой данных сигнатур атак. К таким системам относятся программы Shadow, Snort [9]. Существуют специальные организации, отслеживающие появление новых типов атак и описывающие их. СОА расширяемы за счёт пополнения встроенных баз данных сигнатур атак. Так, программа Snort обладает специализированным встроенным высокоуровневым языком написания правил [10], по которым оцениваются входящие пакеты и принимаются решения о наличии/отсутствии атаки. Программа Snort бесплатна и имеет открытые исходные коды. Однако она довольно сложна в применении и, кроме того, её настройка и настройка любой иной аналогичной программы на рынке СОА затруднена из-за того, что они требуют дополнительного приобретения специализированных отладочных генераторов сетевых атак (например, таких как TigerTools).
Таким образом, задача создания собственной системы обнаружения атак включает в себя следующие аспекты:
Создание анализатора сетевых пакетов на третьем уровне модели OSI.
Создание базы данных правил регистрации атак.
Создание отладочной системы генерации атак.
Создание системы управления и регистрации.
3. 2. Сетевое программирование под OC Windows
Поскольку наиболее распространённой в мире ОС является ОС Windows, то рассмотрим ключевой аспект создания СОА – создание генератора (анализатора) сетевых пакетов средствами ОС Windows.
Для этого существуют по крайней мере 2 варианта библиотек низкоуровневого сетевого программирования:
Библиотека Windows Sockets v2.0 (Microsoft Corporation) [7].
Библиотека Windows Packet Capture Library (Torino Netgroup) [4].
На базе этих двух вариантов реализовано множество низкоуровневых сетевых приложений для ОС Windows [5] – анализаторы, снифферы, СОА, и т.д. Наиболее ярко такая двойственная возможность реализации проявилась в программном продукте daSniff [8], который реализован обоими способами.
Оба подхода в реализации низкоуровневых сетевых приложений имеют свои достоинства и недостатки. Так, библиотека Windows Sockets v2.0 требует для низкоуровневых сетевых приложений права Администратора при работе под Windows 2000 и не способна в большинстве случаев перехватывать исходящие пакеты. Библиотека Windows Packet Capture Library не поддерживает Loopback Adapter.
Общим недостатком обоих вариантов реализации явлется то обстоятельство, что для отладки полноценного анализатора пакетов необходимо иметь как минимум два (а не один) компьютера, объединённых в локальную сеть. В случае отсутствия второго компьютера совершенно невозможно организовать отладочную атаку на проектируемую СОА для практически всех протоколов. Единственным (известным) исключением является протокол ICMP, реализованный с помощью библиотеки Windows Sockets v2.0. В этом случае возможно на одном и том же компьютере как генерировать отладочную атаку средствами протокола ICMP, так и перехватывать её. Все остальные протоколы (в случае использования только одного компьютера) на низком уровне позволяют (при использовании библиотеки Windows Sockets v2.0) лишь генерировать атаки, а перехватывать – только на высоком уровне (что практически не имеет смысла). И только применив второй компьютер (с библиотекой Windows Sockets v2.0), подключённый к первому по локальной сети, можно перехватывать атакующие пакеты на низком (а не на высоком) уровне.
Библиотека Windows Packet Capture Library [4] вообще не предполагает никаких вариантов одновременной работы на одном компьютере отладочного генератора атак вместе с системой обнаружения атак.
Теоретически можно попробовать обойти это принципиальное ограничение (требование наличия двух компьютеров, объединённых в локальную сеть) при помощи такого специализированного ПО, как Virtual PC (или VMWare для Linux) – программы, которая эмулирует несколько виртуальных компьютеров на одном. Однако подобная задача выходит за рамки данного дипломного проекта.
Другой аспект создания собственной СОА – это разработка и применение сигнатур атак. После создания низкоуровневого сетевого анализатора пакетов задача регистрации атак сводится к анализу полей входящих пакетов (IP) и их последовательности.
Для любой дипломной работы наибольший практический интерес представляет такой программный продукт, который может полноценно работать на одном компьютере (не требуя наличия нескольких компьютеров). Из этого краткого обзора средств реализации низкоуровневого сетевого программирования под ОС Windows видно, что единственным подходящим вариантом является клиент-серверная реализация системы «отладочный генератор атак – система обнаружения атак» на основе протокола ICMP, реализованного низкоуровневыми средствами библиотеки Windows Sockets v2.0. Только этот вариант из всех рассмотренных позволяет создать полноценную систему обнаружения атак, основанную на использовании протокола IP и ICMP. Ценность такой системы состоит в том, что впоследствии она может быть легко переделана под протоколы TCP и UDP (с подключением второго компьютера по локальной сети) из-за концептуального сходства формата полей протокола ICMP и протоколов TCP и UDP.
Библиотека Windows Sockets v2.0 [7] – это стандартное средство для программирования сетевых приложений для ОС MS Windows. Помимо стандартных и общеизвестных функций эта библиотека содержит также некоторые малоизвестные низкоуровневые возможности. Существуют некоторые удачные их описания [3] и примеры (см. программу «Ping» в [7]).
Для создания низкоуровнего сетевого ICMP-приложения необходимо ознакомиться в общих чертах с работой протокола IP [14], затем подробно изучить протокол IP [12] и протокол ICMP [13], а также изучить сетевые атаки на базе протокола ICMP [6].
Протокол ICMP – это служебный протокол, применяемый в основном для сообщений об ошибках и для настройки протоколов TCP и UDP. Он также применяется в известных утилитах Ping и Traceroute. Протокол ICMP – это протокол сетевого (третьего) уровня, также, как и протокол IP. Это проявляется тем, что для протокола ICMP не существует понятия «порт» и «вложенное сообщение» (в отличие от протоколов транспортного (четвёртого) уровня – TCP и UDP). Однако формат полей пакета концептуально тот же, что и для протоколов TCP и UDP – в пакете сначала идёт заголовок IP, затем – заголовок ICMP. ICMP-пакет не может нести полезное сообщение (в отличие от протоколов TCP и UDP), но зато он предусматривает поля «тип» и «код», каждое из которых может принимать значения от 0 до 127. Многие комбинации полей «тип» и «код» имеют предопределённое значение [3]. Все ICMP-сообщения делятся на 2 группы – ошибки и запросы [3]. Библиотека Windows Sockets v2.0 не может регистрировать ICMP-пакеты типа «ошибка», сгенерированные на том же компьютере, а только ICMP-пакеты типа «запрос» (также за некоторыми исключениями).
3. 3. Атакующие воздействия для программного средства
Разрабатываемое в рамках данной дипломной работы программное средство будет работать исключительно с протоколом ICMP, т.к. только этот протокол допускает полноценную работу с ним на одном компьютере. Поэтому мы рассмотрим сетевые атаки на базе протокола ICMP [6] и разработаем способы их обнаружения. К таким атакам относятся: лавинное затопление ICMP-пакетами, атака «Smurf», подмена IP-адреса и другие.
3. 3. 1. Атака Smurf
Атака Smurf (рис. 1) основана на использовании возможности протокола ICMP рассылать дейтаграммы по нескольким адресам. Ответить на один широковещательный эхо-запрос ICMP может большое количество хостов. Эта возможность используется для проведения атаки отказа в обслуживании на избранный хост или сеть.
Сначала злоумышленник должен сформировать широковещательный эхо-запрос ICMP к хостам атакуемой сети, подменив при этом действительный IP-адрес своего компьютера.
Рис. 1. Схема атаки Smurf
В качестве этого IP-адреса используется адрес атакуемого хоста (или сети). Чтобы запрос попал ко всем хостам сети, его должен пропустить внешний маршрутизатор. Успешным завершением атаки является отправка всеми работающими хостами эхо-ответов на адрес атакуемого хоста. Атакованный хост (или сеть, в которой он находится) может пострадать от такой внезапной активности и перестанет выполнять возложенные на него задачи при следующих условиях:
нарушитель отправляет большое количество широковещательных эхо-запросов;
внешний узел (маршрутизатор) позволяет прохождение входящего трафика с указанием широковещательного адреса;
машрутизатор работает в крупной сети, хосты которой одновременно отправляют большое количество эхо-ответов (с другой стороны, того же результата можно добиться, использовав несколько машрутизаторов более мелких сетей);
канал, с помощью которого атакуемый узел соединен с Internet, имеет низкую пропускную способность. Точнее, количество одновременно отправленных пакетов должно превысить максимальную пропускную способность этого канала. Хотя можно "затопить" пакетами любое Internet-соединение при наличии достаточного трафика, но для соединений с меньшей пропускной способностью сделать это будет проще.
Вот еще одна причина, по которой следует запретить вхождение извне пакетов с широковещательным адресом — это не позволит использовать вашу сеть для распространения атаки Smurf.
3. 3. 2. Атака Tribe Flood Network
Атака Tribe Flood Network (TFN) является еще одной атакой отказа в обслуживании, в которой используются ICMP-сообщения (рис. 2). В отличие от атаки Smurf, организуемой с одного компьютера с применением одной сети для ее распространения, атака TFN использует большое количество распределенных хостов. Эти хосты часто называют хостами-демонами. Поэтому термин распределенная атака отказа в обслуживании (DDoS) наиболее точно определяет использование нескольких рассредоточенных в Internet хостов для совместного осуществления атаки.
Рис. 2. Схема атаки Tribe Flood Network
Для проведения этой атаки требуется установка программы на ведущем компьютере - "мастере" TFN и на нескольких агентах— хостах-демонах TFN. Как правило, в качестве хостов-демонов используются скомпрометированные компьютеры. Мастер TFN дает хостам-демонам команду на атаку (часто одновременную) избранной цели. Взаимодействие между мастером и хостами-демонами осуществляется с помощью эхо-ответов ICMP. Демоны TFN могут организовать UDP-наводнение, SYN-наводнение, наводнение эхо-запросами ICMP или атаку Smurf.
Мастер информирует хосты-демоны о начале атаки с помощью эхо-ответов ICMP. При этом тип атаки определяется по значению поля идентификации в ICMP-заголовке эхо-ответа. В области данных такого эхо-ответа передаются необходимые аргументы.
Почему для организации атаки вместо эхо-запросов применяются эхо-ответы? Дело в том, что на многих узлах в целях обеспечения безопасности блокируются внешние эхо-запросы ICMP. В то же время, прохождение эхо-ответов часто разрешается. Это дает возможность локальным пользователям узнать о доступности внешних хостов, но весьма опасно с точки зрения рассылки неконтролируемых эхо-запросов ICMP.
Одновременное использование нескольких распределенных хостов для наводнения пакетами избранной цели позволит провести успешную атаку отказа в обслуживании против хоста или сети. Чтобы получить более подробную информацию об атаке TFN, зайдите на сайт www.cert.org и обратитесь к отчету об инциденте IN-99-07.
3. 3. 3. Атака WinFreeze
Атака WinFreeze, по существу, заставляет избранный компьютер атаковать самого себя.
router > victim.com: icmp: redirect 243.148.16.61 to host victim.com
router > victim.com: icmp: redirect 110.161.152.156 to host victim.com
router > victim.com: icmp: redirect 245.211.87.115 to host victim.com
router > victim.com: icmp: redirect 49.130.233.15 to host victim.com
router > victim.com: icmp: redirect 149.161.236.104 to host victim.com
router > victim.com: icmp: redirect 48.35.126.189 to host victim.com
router > victim.com: icmp: redirect 207.172.122.197 to host victim.com
router > victim.com: icmp: redirect 113.27.175.38 to host victim.com
router > victim.com: icmp: redirect 114.102.175.168 to host victim.com
С помощью ICMP-сообщения redirect хост-отправитель уведомляется о выборе для доставки сообщения неоптимального маршрутизатора и о необходимости добавить адрес оптимального маршрутизатора в таблицу маршрутизации. При наводнении этими ICMP-сообщениями о перенаправлении атака WinFreeze может вызвать отказ в обслуживании уязвимого хоста, работающего под управлением Windows NT. Атака выполняется в сети атакуемого компьютера, а ICMP-сообщения приходят от имени маршрутизатора этой сети. При получении массы сообщений redirect атакованный хост пытается внести изменения в таблицу маршрутизации, и ресурсы центрального процессора в основном тратятся на обработку поступающих пакетов.
В этом примере маршрутизатор router заставляет хост victim.com перенаправить отправляемые им (хостом) пакеты на самого себя. В результате при попытке внести многочисленные изменения в таблицу маршрутизации хост victim. com может не справиться с другими возложенными на него задачами.
3. 3. 4. Атака ICMP Flood
Атака ICMP Flood представляет из себя лавинное затопление ICMP-пакетами. Как правило, обычные ICMP-пакеты поступают в локальную сеть извне не быстрее, чем один пакет в минуту. Непрерывное же поступление большого количества пакетов будет означать, скорее всего, атаку лавинным затоплением.
Это может привести к полной блокировке работы сервера.
4. Модель системы
Система обнаружения атак (СОА) представляет из себя клиент-серверную пару приложений – отладочный генератор атак (клиент) и, собственно, система обнаружения атак (сервер). Обе программы являются консольными Win32-приложениями на базе библиотеки Windows Sockets v2.0. Кроме того, предусмотрена система удалённого управления и администрирования клиентом на базе протокола HTTP и многопоточной структуры клиента. Это значит, что клиент запускает дополнительную нить (тред), в которой работает соответствующий HTTP-сервер, который и даёт возможность УДАЛЁННО и ДИНАМИЧЕСКИ администрировать и управлять им.
HTTP-сервер даёт возможность выбрать ручной и автоматический режимы генерации сетевых атак, а также динамически, во время работы программы, выбирать и проводить одну из предопределённых атак.
Также реализована система уведомления администратора сети об атаке – выдачей сообщения на консоль и посредством электронной почты. Сервер, как и клиент, имеет многопоточную архитектуру, и при начале работы запускает дополнительную нить (тред), в которой работает POP3-сервер, к которому может подключиться сторонняя почтовая программа и проверить наличие сообщения об атаке. Как только сервер регистрирует атаку, он сразу же помещает соответствующее сообщение в электронный почтовый ящик, откуда его можно получить при помощи сторонней почтовой программы. На рис. 3 представлена диаграмма задач, решаемых системой.
Рис. 3. Диаграмма задач, решаемых системой
На рисунке 4 приведена диаграмма классов и их взаимодействия.
Рис. 4. Диаграмма классов и их взаимодействия
На рисунке 5 приведена блок-схема алгоритма генерирования атак.
Клиент raw_send.exe
Возникновение временной нити при HTTP-запросе
Получение параметров от HTTP-клиента
Создание пакетов
Создание «сырого» сокета
Отправка пакета на сервер
Вывод на экран содержимого пакета
Рис. 5. Блок-схема алгоритма генерирования атак
На рисунке 6 приведена блок-схема алгоритма обнаружения атак.
Сервер raw_recv.exe
Запуск сервера
Определение пути к файлу
Загрузка библиотеки сокетов
Запуск нити с POP3-сервером
Создание и привязка «сырого» сокета
Приём ICMP-пакетов
Вывод на экран содержимого пакета
Да
Проверка на атаку
Нет
Формирование сообщения об атаке
Получение сообщения об атаке по электронной почте
Рис. 6. Блок-схема алгоритма обнаружения атак.
На рисунке 7 приведена блок-схема алгоритма извещения об атаках.
Клиент raw_send.exe
Создание конфигурационного объекта
Создание диспетчерского сокета
Переход в режим ожидания подключения
Приём подключения
Создание временной нити
Завершение подключения
Закрытие временной нити
Закрытие сервера
Рис. 7. Блок-схема алгоритма извещения об атаках.
На рисунке 8 приведена блок-схема алгоритма управления атаками.
Сервер raw_recv.exe
Создание виртуального сокета
Открытие файла отчёта
Ответ клиенту на его подключение
Переход к режиму транзакций
Приём сообщения
Обработка сообщения
Проверка сообщений Да Отправка сообщения
в почтовом ящике
Нет
Отправление ответа
Закрытие сервера
Рис. 8. Блок-схема алгоритма управления атаками.
4. 1. Схема взаимодействия модулей системы
Вся программная система представляет из себя клиент-серверную пару и состоит из четырёх основных модулей и множества вспомогательных.
Основные модули поделены между клиентом и сервером: и клиент, и сервер имеют по 2 основных модуля. И сервер, и клиент являются многопоточными приложениями, точнее, они содержат по 2 нити, при этом в каждой нити функционирует один основной модуль. Главная нить клиента (та, которая образуется при запуске) содержит HTTP-сервер, который порождает вспомогательную нить при начале каждого HTTP-подключения и закрывает её при его окончании – это стандартный приём для одновременной работы с множеством клиентов. Вспомогательная нить получает от пользователя параметры нужных последовательностей ICMP-пакетов и отправляет эти последовательности на сервер.
Главная нить сервера содержит модуль обнаружения атак, который и является ядром всей системы и сутью дипломной работы. Атаки – это в данном случае просто определённые последовательности ICMP-пакетов с определёнными значениями полей пакетов IP и ICMP. Едва ли существует какой-либо принципиально иной способ обнаружения атак. Вся сложность состоит в том, чтобы наиболее точно сформулировать правила, по которым будет выноситься решение о том, атака это или нет.
Вспомогательная нить сервера содержит POP3-сервер электронной почты, который стартует в начале работы сервера и даёт возможность получить сообщения об атаке при помощи программы MS Outlook Express. Когда главная нить сервера обнаруживает атаку, она формирует в почтовом ящике сервера соответствующее сообщение, откуда его забирает вспомогательная нить при взаимодействии с программой MS Outlook Express.
Все нити во всех приложениях системы не используют глобальные переменные для передачи параметров, а передают параметры путём вызова функций. Использование глобальных переменных является плохим программистским приёмом и допускается только для неменяющихся переменных.
Вспомогательные модули инкапсулируют отдельные логические части основных модулей.
Схема взаимодействия модулей системы приведена на рис. 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 :
Модули :
raw_send.cpp – содержит методы: сборки «вручную» ICMP-пакетов, отправки пакетов, подсчёта контрольной суммы.
packet.cpp - содержит методы: вывода на экран содержимого пакета, создания «сырого» сокета, «привязки» сырого сокета.
http_plugin.cpp – всё остальное: полное описание HTTP-сервера (инициализация, приём подключений, создание вспомогательной нити и её закрытие, закрытие), полное описание работы вспомогательной нити (приём, передача), расшифровка команд и вызов функций из других модулей.
HTM-файлы : удалённая консоль управления.
Сервер – raw_recv.exe :
Модули:
raw_recv.cpp – описание главной нити, запуск вспомогательной, создание «сырого» сокета, «привязка» его, получение пакетов, обнаружение атак, формирование сообщения электронной почты.
pop3_main.cpp – вспомогательная нить – POP3-сервер: создание, приём-передача, закрытие.
pop3_module.cpp – pop3-протокольная реализация сервера.
server.cpp – базовые функциии pop3-сервера.
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] (массив строк-параметров для «сырого» сокета)
int param_index (количество строк в этом массиве)
CONF_HTTP conf (конфигурационный объект)
long connection_time (время подключения)
fstream report_file (в этот файл записывается всё, что сервер получает и отправляет)
SERVER(void) ( конструктор – обнуляет все поля объекта)
int recv_data(void) (получить информацию через сокет)
int send_data(void) (отправить информацию через сокет)
int shutdown_and_closesocket(void) (закрыть сокет)
void erase_buffer(void) (стереть буфер)
void set_buffer(char*) (заполнить буфер)
int ProcessClientQuery(void) (обработать клиентский запрос)
int ProcessControlString(char* c_string) (разбить строку параметров на отдельные лексемы)
void CreateQueryForm(char* temp_path) (считать в буфер с диска htm-файл (форму запроса) для отправки клиенту)
int ProcessHTTPCommand(void) (выполнить команду, полученную от HTTP-клиента)
SERVER& operator=(SERVER& right) (перегруженное присваивание из-за строк)
};
Описания функций:
DISPATCH_SERVER_SOCKET_HTTP::DISPATCH_SERVER_SOCKET_HTTP(CONF_HTTP& conf_ref) - конструктор диспетчерского сокета. Создаёт обычный (не «сырой») сокет, привязывает к адресу, устанавливает размер очереди на подключение,
int DISPATCH_SERVER_SOCKET_HTTP::accept_connect(void) – ожидает подключения HTTP-клиента, при подключении создаёт виртуальный сокет и новую нить, в которую его передаёт.
SERVER::SERVER(void) – конструктор класса.
int SERVER::shutdown_and_closesocket(void) – мягкое выключение и закрытие сокета.
void SERVER::erase_buffer(void) – стереть буфер
void SERVER::set_buffer(char* string) – заполнить буфер
int SERVER::recv_data(void) – побайтно получить информацию
int SERVER::send_data(void) – побайтно отправить информацию
SERVER& SERVER::operator=(SERVER& right) – перегруженное присваивание
void CONF_HTTP::Init(void) – инициализация конфигурационного объекта
CONF_HTTP::CONF_HTTP(void) – конструктор конфигурационного объекта
int SERVER::ProcessClientQuery(void) – обработка клиентского запроса и посылка HTTP-файла (формы запроса)
int SERVER::ProcessControlString(char* st) – разбивает строку запроса на отдельные лексемы
DWORD WINAPI ThreadFuncHTTP(SERVER* p_server) – главная нить, в которой работает HTTP-сервер, т.е. получает запрос, обрабатывает его и отправляет ответ.
char* substring(char* st,char s1,char s2,char* ret) – вспомогательная функция. Выделяет подстроку из строки, начиная с char s1 и заканчивая char s2.
char* getspos(char* search_string,char search_symbol) - вспомогательная функция. Возврашает номер позиции символа в строке.
void readcomment(fstream& file) - вспомогательная функция. Применяется для игнорирования комментариев при считывании конфигурационного файла.
void SERVER::CreateQueryForm(char* temp_path) - решает вопрос об отправке клиенту формы на основании его запроса.
int SERVER::ProcessHTTPCommand(void) – посылает атакующую последовательность пакетов по команде от HTTP-клиента.
Описание элементов сервера raw_send.exe:
Модуль Packet.h содержит следующие элементы:
Те же элементы, что и в файле packet.h клиента.
Модуль Packet.cpp cодержит следующие элементы:
Те же элементы, что и в файле packet.cpp клиента.
Модуль Raw_recv.cpp cодержит следующие элементы:
Описания функций:
main – инициализирует глобальную переменную – путь к исполняемому файлу, загружает библиотеку сокетов, запускает нить с почтовым POP3-сервером, создаёт «сырой» сокет, «привязывает» его к своему адресу, и переводит его в режим бесконечного приёма запросов.
int RAW_SOCKET::RecvPackets(void) – принимает входящие пакеты в бесконечном цикле, для каждого пакета выводит на экран его содержимое и проверяет его поля на предмет атаки.
int ICMP_PACKET::DetectAttack(void) – считывает поля полученного пакета и сверяет их с сигнатурами атак, принимая решение, атака это или нет. Если атака зарегистрирована, то функция выводит соответствующее сообщение на консоль сервера и формирует в почтовом ящике серевера соответствующее сообщение электронной почты, которое можно забрать, подключившись к POP3-серверу программой MS Outlook Express.
int make_message(char* filename) – формирует в почтовом ящике сообщение электронной почты.
Модуль Server.h cодержит следующие элементы:
1. Структура FILE_REF:
Представляет описание структуры - описателя файла-письма. Содержит поля:
char filename[MAX_PATH] (имя файла)
int filesize (размер файла)
bool del (признак удаления)
2. Класс MODE:
Представляет описание абстрактного объекта, описывающего режим соединения POP3-сервера. Содержит поля:
bool authorization_mode (флаг, который определяет, включён ли режим авторизации)
bool transaction_mode (флаг, который определяет, включён ли режим транзакции)
bool update_mode (флаг, который определяет, включён ли режим обновления)
MODE() (конструктор – обнуление всех полей)
void SetAuthorizationMode(void) (установить режим авторизации)
void SetTransactionMode(void) (установить режим транзакции)
void SetUpdateMode(void) (установить режим обновления)
bool IsAuthorizationMode(void) (узнать, выставлен ли флаг режима авторизации)
bool IsTransactionMode(void) (узнать, выставлен ли флаг режима транзакции)
bool IsUpdateMode(void) (узнать, выставлен ли флаг режима обновления)
3. Структура USER:
Представляет описание структуры - описателя файла-письма. Содержит поля:
char name[ADDRESS_MAX_LENGTH] (имя почтового ящика)
char domain[ADDRESS_MAX_LENGTH] (имя почтового домена)
char password[ADDRESS_MAX_LENGTH] (пароль на почтовый ящик)
bool lock (флаг, определяющий, заперт ли почтовый ящик)
4. Класс CONF:
Представляет описание абстрактного объекта, описывающего всю конфигурацию POP3-сервера. Содержит поля:
fstream conf_file (из этого файла при запуске программы считываем настройки POP3-сервера)
char ip_address[32] (ip-адрес этого сервера)
int port (порт, на который будем принимать POP3-запросы (обычно 110)
int echo( выводить ли на экран каждую POP3-транзакцию)
char Path[MAX_PATH] (путь к исполняемому файлу сервера)
char Domain[ADDRESS_MAX_LENGTH] (домен сервера (напр. "mailserver1.com")
FILE_REF file[MAX_USERS] (массив описателей для файлов – писем)
int f_index (его индекс)
int highest_number_accessed (непонятная хрень, смотрите RFC 1225)
int c_mes (номер обрабатываемого файла-письма для соответствующих команд)
int total_size (суммарный размер файлов-писем в почтовом ящике)
CONF(void) (конструктор, обнуляющий все поля)
void Init(void) (считать настройки сервера из файла "conf.inf")
void ProcessConfigCommands(void) (обработать команды настройки сервера)
int ParseMailDrop(char* user) (Название функции навеяно RFC 1225. Функция просматривает почтовый ящик, идентифицирует отдельные
файлы-письма, определяет размер каждого и общий их размер.)
// 7 функций для работы с пользователями
// кстати, "пользователь" - это папка с файлом "password.inf"
bool IsUserExistent(char* User) (Проверяем, существует ли такой пользователь)
int DeleteUser(void) (Удалить пользователя)
int AddUser(void) (Создать пользователя)
void Help(void) (Вывести на экран информацию о конфигурационных командах)
int ListUsers(void) (Вывести список пользователей)
char* GetPassword(char* user,char* password) (узнать текущий пароль)
void SetPassword(void) (установить новый пароль)
5. Класс DISPATCH_SERVER_SOCKET:
Представляет описание диспетчерского сокета POP3-сервера. Содержит поля:
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 (диспетчерский сокет POP3-сервера, виртуальный сокет для каждого POP3-подключения)
DWORD dwThreadID (идентификатор новой нити)
DISPATCH_SERVER_SOCKET(CONF& conf) (конструктор диспетчерского сокета, принимает конфигурационный объект)
CONF conf (конструктор конфигурационного объекта, обнуляет все поля)
int accept_connect(void) (принимает входящие подключения)
6. Класс SERVER_SOCKET:
Представляет описание виртуального сокета POP3-сервера (создаваемого для каждого подключения POP3-сервера и закрываемого при завершении подключения). Содержит поля:
char Buffer[SIZE_OF_BUFFER] (буфер для приёма/отправки почтовых транзакций)
SOCKET msg_server_socket (конструктор, инициализирующий поля)
int query (флаг, который разрешает/запрещает ответ на запрос)
int quit (флаг, который показывает, что сеанс почтовой связи окончен)
CONF conf (конструктор, инициализирующий поля)
long connection_time (время подлючения)
fstream report_file (в этот файл запишем всё, что сервер получает и отправляет)
USER user (почтовый ящик, из которого мы забираем почту за одно
подключение. Для обращения к каждому почтовому ящику клиент всегда
создаёт новое подключение, даже если эти ящики находятся на одном
сервере)
char forward_path[ADDRESS_MAX_LENGTH] (здесь не используется. Но могла бы (см. RFC-1225)
char reverse_path[ADDRESS_MAX_LENGTH] (здесь не используется. Но могла бы (см. RFC-1225)
fstream mes_file (сюда записываем сообщение, пришедшее серверу
за 1 почтовую транзакцию с клиентом. Может фактически содержать в себе несколько e-mail'ов)
char mes_path[MAX_PATH] (уникальное имя файла - сообщения)
MODE mode (конструктор, инициализирующий поля)
int not_this_command (счётчик нераспознавания принятой команды)
SERVER_SOCKET(void) (конструктор, инициализирующий поля)
int recv_data(void) (получить информацию через сокет)
int send_data(void) (отправить информацию через сокет)
int shutdown_and_closesocket(void) (мягко выключить сокет и закрыть его)
void erase_buffer(void) (стереть буфер)
void set_buffer(char*) (установить значение в буфере)
int ReplyOnClientConnection(void) (послать ответ клиенту на его подключение)
int ProcessClientQuery(void) (обработать запрос клиента)
SERVER_SOCKET& operator=(SERVER_SOCKET& right) (перегруженное присваивание из-за строк)
Модуль Server.cpp cодержит следующие элементы:
Описания функций:
DISPATCH_SERVER_SOCKET::DISPATCH_SERVER_SOCKET(CONF& conf_ref) - Инициализируем библиотеку WS2_32.DLL, Создаём базовый(диспетчерский) сокет сервера, настроенный на TCP, Записываем в адресную структуру IP адрес сервера и порт сервера, Связываем адрес сервера с базовым(диспетчерским) сокетом сервера, Переводим базовый(диспетчерский) сокет сервера на режим прослушивание/диспетчеризация сигналов на подключение и устанавливаем размер очереди одновременных обращений к серверу.
int DISPATCH_SERVER_SOCKET::accept_connect(void) - Ждём очередное подключение к серверу (функцией connect()) клиента и,
дождавшись, возвращаем виртуальный сокет сервера - для двухстороннего обмена сообщениями с данным клиентом. Выводим на экран время подключения клиента, его IP-адрес и порт. Для каждого подключившегося клиента создаём нить и передаём в неё адрес виртуального сокета сервера для двухстороннего обмена сообщениями с данным клиентом (нити нужны здесь для того, чтобы позволить серверу работать одновременно с несколькими клиентами).
SERVER_SOCKET::SERVER_SOCKET(void) - (конструктор, инициализирующий поля)
int SERVER_SOCKET::shutdown_and_closesocket(void) - (мягко выключить сокет и закрыть его)
void SERVER_SOCKET::erase_buffer(void) – стереть буфер
void SERVER_SOCKET::set_buffer(char* string) – установить значение буфера
int SERVER_SOCKET::recv_data(void) – получить информацию через сокет
int SERVER_SOCKET::send_data(void) – отправить информацию через сокет
SERVER_SOCKET& SERVER_SOCKET::operator=(SERVER_SOCKET& right) – перегруженное присваивание из-за строк
bool CONF::IsUserExistent(char* User) – существует ли пользователь (почтовый ящик)
int CONF::ListUsers(void) – перечислить пользователей (почтовые ящики)
int CONF::AddUser(void) – добавить пользователя (почтовый ящик)
int CONF::DeleteUser(void) – удалить пользователя (почтовый ящик)
void CONF::Init(void) – инициализация конфигурационного объекта
void CONF::ProcessConfigCommands(void) – обработка конфигурационных команд
void CONF::Help(void) – вывод на экран информации о конфигурационных командах
CONF::CONF(void) – конструктор, инициализирующий поля
char* CONF::GetPassword(char* user,char* password) – узнать пароль
void CONF::SetPassword(void) – установить пароль
Модуль pop3_main.cpp cодержит следующие элементы:
Описания функций:
DWORD WINAPI ThreadFunc(SERVER_SOCKET* p_server_socket) – вспомогательная нить, которая создаётся при каждом подключении к pop3-почтовому серверу и закрывается при завершении подключения. В этой нити происходит приём-передача почтового сервера.
DWORD WINAPI ThreadFuncPOP3(void) – вспомогательная нить, в которой работает pop3-почтовый сервер. Создаёт конфигурационный объект, инициализирует его, создаёт диспетчерский сокет, инициализируя его этим конфигурационным объектом, и переводит диспетчерский сокет в режим ожидания подключения.
Модуль pop3_module.cpp cодержит следующие элементы:
В этом модуле содержится всё алгоритмическое описание почтового POP3-сервера. Именно в этом модуле содержится вся алгоритмическая реализация RFC-1225.
Описания функций:
int SERVER_SOCKET::ReplyOnClientConnection(void) – отвечаем клиенту на его подключение (не на запрос клиента!)
int SERVER_SOCKET::ProcessClientQuery(void) – Уже имеем в буфере запрос клиента и обрабатываем его (выполняем всевозможные команды)
int CONF::ParseMailDrop(char* user) – название функции навеяно RFC 1225. Функция просматривает почтовый ящик, идентифицирует отдельные файлы-письма, определяет размер каждого и общий их размер.
MODE::MODE(void) – конструктор объекта режим соединения
void MODE::SetAuthorizationMode(void) – установить режим авторизации
void MODE::SetTransactionMode(void) – установить режим транзакции
void MODE::SetUpdateMode(void) – установить режим обновления
5. Сведения о реализации
Система реализована как клиент-серверное Win32 консольное приложение на базе библиотеки Windows Sockets v2.0. Программа написана на языке С++ при помощи Microsoft Visual C++ v6.0 для ОС Windows. Управляющие HTM-файлы созданы при помощи htm-редактора MS FrontPage 98.
Для работы программного комплекса необходима операционная система не ниже чем Windows 2000 с правами Администратора, программы Microsoft Internet Explorer v5.0, Microsoft Outlook Express v5.0.
Для реализации дипломной работы выбран язык программирования Microsoft Visual C++ 6.0. MS Visual C++ предоставляет программистам удобный полнофункциональный инструмент, объединивший все средства, необходимые для создания приложения – редактор исходных текстов, менеджер проектов, инспектор объектов и ряд дополнительных утилит, включая встроенный отладчик, дизайнер меню и так далее. Обоснованием для выбора данного языка служат следующие предпосылки:
операционная система Windows и язык программирования Microsoft Visual C++ 6.0 более интегрированы, так как разработаны одной и той же фирмой;
компилятор языка Microsoft Visual C++ 6.0 предназначен для работы в операционной системе Windows;
обладает большей надежностью и гибкостью, чем другие компиляторы;
язык Microsoft Visual C++ 6.0 позволяет более эффективно использовать ресурсы системы.
упрощает использование функций и структур данных из MSDN.
Программа выполнена в виде консольных, а не оконных приложений для удобства и простоты вывода текстовых сообщений, для сохранения наглядности исходного кода, а также в соответствии с традицией выполнения многих других низкоуровневых сетевых программ в виде консольных приложений (например, TCPdump, nmap, и пр.).
Управление по протоколу HTTP выбрано потому, что оно позволяет удалённое управление выполняющейся программой, в отличие от традиционных элементов управления оконных приложений.
Кроме того, HTTP-интерфейс даёт возможность программировать новые виды атак без перекомпиляции клиента.
Извещение администратора сети об атаках по электронной почте выбрано по аналогии с другими программами такого же класса. Это даёт возможность удалённо контролировать безопасность локальной сети в режиме реального времени.
6. Экспериментальная часть
Разрабатываемое в рамках данной дипломной работы программное средство будет работать исключительно с протоколом ICMP, т.к. только этот протокол допускает полноценную работу с ним на одном компьютере. Поэтому были воплощены несколько атак на базе протокола ICMP и разработаны механизмы их обнаружения. Генерирование атак осуществляется посредством управляющей консоли - HTTP-клиента. Были реализованы атаки:
Атака Smurf
Атака Tribe Flood Network
Атака WinFreeze
Атака ICMP Flood
Ниже приведены примеры работы клиент-серверной системы обнаружения атак. Клиент обозначен в примерах как raw_send.exe, а сервер – как raw_recv.exe. Приведены сообщения, выдаваемые системой на консоли.
1. Атака Smurf:
raw_send.exe:
The IP-header content:
Type of service: 0
Total packet length: 28
Unique identifier: 0
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 0
Source address: 127.0.0.1
Destination address: 127.0.0.255
The ICMP-header content:
Type: 0
Code: 8
Checksum: 65527
Unique identifier: 0
Sequence number: 0
Info sent to [127.0.0.255]:
6900280000-12810012700112700-108-1-90000
E ? ?? ж ?ж аа?
Number of bytes sent: 28
raw_recv.exe:
Type of service: 0
Total packet length: 28
Unique identifier: 177
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 15152
Source address: 127.0.0.1
Destination address: 127.0.0.255
The ICMP-header content:
Type: 0
Code: 8
Checksum: 65527
Unique identifier: 0
Sequence number: 0
Info received from [127.0.0.1]:
6900280-7900-1281594812700112700-108-1-90000
E ? ж ??;0ж ?ж аа?
Number of bytes received: 28
The Smurf attack detected !
2. Атака Tribe Flood Network:
raw_send.exe:
The IP-header content:
Type of service: 0
Total packet length: 28
Unique identifier: 0
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 0
Source address: 127.0.0.1
Destination address: 127.0.0.1
The ICMP-header content:
Type: 0
Code: 0
Checksum: 65535
Unique identifier: 0
Sequence number: 0
Info sent to [127.0.0.1]:
6900280000-12810012700112700100-1-10000
E ? ?? ж ?ж ? аа
Number of bytes sent: 28
raw_recv.exe:
Type of service: 0
Total packet length: 28
Unique identifier: 197
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 15386
Source address: 127.0.0.1
Destination address: 127.0.0.1
The ICMP-header content:
Type: 0
Code: 0
Checksum: 65535
Unique identifier: 0
Sequence number: 0
Info received from [127.0.0.1]:
6900280-5900-1281602612700112700100-1-10000
E ? + ??ж ?ж ? аа
Number of bytes received: 28
The Tribe Flood Network attack detected !
3. Атака WinFreeze:
raw_send.exe:
The IP-header content:
Type of service: 0
Total packet length: 28
Unique identifier: 0
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 0
Source address: 127.0.0.1
Destination address: 127.0.0.1
The ICMP-header content:
Type: 0
Code: 5
Checksum: 65530
Unique identifier: 0
Sequence number: 0
Info sent to [127.0.0.1]:
6900280000-12810012700112700105-1-60000
E ? ?? ж ?ж ? ?а+
Number of bytes sent: 28
raw_recv.exe:
Type of service: 0
Total packet length: 28
Unique identifier: 214
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 15369
Source address: 127.0.0.1
Destination address: 127.0.0.1
The ICMP-header content:
Type: 0
Code: 5
Checksum: 65530
Unique identifier: 0
Sequence number: 0
Info received from [127.0.0.1]:
6900280-4200-128160912700112700105-1-60000
E ? + ??< ж ?ж ? ?а+
Number of bytes received: 28
The WinFreeze attack detected !
4. Атака ICMP Flood:
raw_send.exe:
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
Info sent to [127.0.0.1]:
6900280000-12810012700112700102-1-30000
E ? ?? ж ?ж ? ?ад
Number of bytes sent: 28
raw_recv.exe:
Type of service: 0
Total packet length: 28
Unique identifier: 329
Fragment offset field: 0
Time to live: 128
Encapsulated protocol number: 1
Checksum: 15254
Source address: 127.0.0.1
Destination address: 127.0.0.1
The ICMP-header content:
Type: 0
Code: 2
Checksum: 65533
Unique identifier: 0
Sequence number: 0
Info received from [127.0.0.1]:
69002817300-128159-10612700112700102-1-30000
E ??I ??;?ж ?ж ? ?ад
Number of bytes received: 28
The ICMP Flood attack detected !
После этого можно получить сообщения об атаках по электронной почте при помощи программы MS Outlook Express v5.0. После этого можно их увидеть в папке «Входящие» (см. рис. 10):
Рис. 10. Сообщения об атаках в папке «Входящие» MS Outlook Express.
7. Разработка документации
7. 1. Техническое задание
Введение
Разработанное программное средство – «Комплекс сетевой защиты» – относится к области защиты информации. Данная разработка является прямым логическим продолжением изучаемых в 9 семестре дисциплин на кафедре ПОВТ и АС (ДГТУ): «Защита данных и программного обеспечения» и «Принципы построения и услуги Интернет». Программное средство «Комплекс сетевой защиты» представляет из себя низкоуровневое сетевое приложение для ОС Windows – клиент-серверную пару приложений «отладочный генератор сетевых атак – система обнаружения сетевых атак».
Основания для разработки
Данная разработка является дипломной работой студента по специальности 220400 «Программное обеспечение АС и ВТ».
Тема разработки – «ПРОГРАММНАЯ РЕАЛИЗАЦИЯ КОМПЛЕКСА СЕТЕВОЙ ЗАЩИТЫ».
Организацией, утвердившей эту разработку, является Донской Государственный Технический Университет.
Назначение разработки
Данное программное средство предназначено для защиты локальной сети компьютеров, подключённой к сети Интернет, от сетевых атак из сети Интернет.
Программное средство устанавливается на отдельном компьютере под управлением ОС Windows 2000 в локальной сети.
Требования к программе или программному изделию
Требования к функциональным характеристикам
Программное средство должно быть способным полноценно функционировать на одном компьютере (при отсутствии локальной сети).
Программное средство должно быть способно обнаруживать сетевые атаки и уведомлять администратора сети об этом.
Программное средство должно содержать отладочный генератор атак.
Программное средство должно быть динамически настраиваемым.
Программное средство должно содержать средства генерации отчётов о событиях безопасности.
Требования к надежности
Программное средство должно, в свою очередь, само быть устойчивым к сетевым атакам. Архитектура программного средства должна включать элементы устойчивости и надёжности работы.
Условия эксплуатации
Программное средство не предъявляет особенных требований к эксплуатации. Оно способно работать в фоновом режиме. Требуется правильно администрировать правила безопасности в программном средстве.
Требования к составу и параметрам технических средств
Необходимо наличие локальной сети. Компьютер, на котором будет работать программное средство, обязан быть оборудованным сетевым адаптером.
Требования к информационной и программной совместимости
Эксплуатироваться программное средство должно на выделенном в локальной сети компьютере под управлением операционной системы не ниже Windows 2000. Для работы программного средства требуются права Администратора в Windows 2000.
Требования к маркировке и упаковке
Программное средство должно включать инструкцию по эксплуатации и реквизиты разработчика.
Требования к транспортированию и хранению
Срок хранения товарного программного средства не ограничен. Способ транспортировки – любой.
Специальные требования
Для полноценной работы программного средства необходимо иметь как минимум 2 компьютера, объединённых в локальную сеть.
Требования к программной документации
Программная документация должна включать:
Инструкцию по эксплуатации
Руководство оператора
Руководство системного программиста
Руководство программиста
Технико-экономические показатели
Экономическая эффективность программного средства составляет несколько тысяч рублей в год за счёт защиты информации в локальных сетях.
Предполагаемая годовая потребность – 3 тыс. шт.
Экономическое преимущество перед аналогичными отечественными и зарубежными разработками заключается в том, что данный программный продукт, в отличие от них, позволяет отказаться от покупки дополнительного ПО – генератора атак.
Стадии и этапы разработки
Общий анализ проблемы защиты информации.
Анализ выбранной области систем защиты информации.
Постановка технического задания.
Разработка модели системы.
Изготовление системы.
Приём и испытание системы.
Тиражирование.
Маркетинг и продажа.
Сопровождение и техническое обслуживание.
Порядок контроля и приемки
Во время приёмки готового изделия осуществляются контрольные прогоны программного средства с использованием разных наборов входных воздействий.
Были сгенерированы различные виды сетевых атак и опробованы различные стратегии реагирования на атаки.
7.2. Руководство оператора
Назначение программы
Программное средство «Комплекс сетевой защиты» представляет из себя низкоуровневое сетевое приложение для ОС Windows – клиент-серверную пару приложений «отладочный генератор сетевых атак – система обнаружения сетевых атак».
Данное программное средство предназначено для защиты локальной сети компьютеров, подключённой к сети Интернет, от сетевых атак из сети Интернет.
Программное средство устанавливается на отдельном компьютере под управлением ОС Windows 2000 в локальной сети.
Условия выполнения программы
Эксплуатироваться программное средство должно на выделенном в локальной сети компьютере под управлением операционной системы не ниже Windows 2000. Для работы программного средства требуются права Администратора в Windows 2000.
Для полноценной работы программного средства необходимо иметь как минимум 2 компьютера, объединённых в локальную сеть.
Выполнение программы
Выполнение программы начинается с запуска серверной части программного средства – самой системы обнаружения атак.
После этого запускается клиентская часть – отладочный генератор сетевых атак.
Затем запускается управляющая клиентской частью консоль.
Теперь система готова к работе. Старт работы системы и динамическое управление её осуществляется посредством управляющей консоли. Работа системы заключается в генерации атак в ручном или в автоматическом режиме с управляющей консоли и наблюдением за реакцией серверной части – системы обнаружения атак.
Сообщения оператору
На экранах клиентской и серверной части выводятся сообщения о форматах сетевых пакетов, о работе приложений, об ошибках, о регистрации атак и о прочих событиях безопасности.
8. Бизнес-план
8. 1. Концепция бизнеса
Разработанный программный продукт (ПП) - «Комплекс сетевой защиты» - с экономической точки зрения представляет из себя товар, рассчитанный на определённые категории потребителей. Он относится к классу IDS (Intrusion Detection Systems). Данный программный продукт призван восполнить имеющийся пробел на рынке средств сетевой защиты. Потенциальными покупателями являются предлагаемого ПП являются любые обладатели компьютеров, подключённых к Интернет – в основном, мелкие и средние организации, предприятия, а также индивидуальные пользователи.
Поскольку предлагаемый товар относится к программному обеспечению для работы с Интернет, то основной формой продажи будет являться система продаж через Интернет, учитывая тот факт, что практически все потенциальные потребители данной продукции имеют доступ к Интернет. Традиционная продажа через магазины будет только дополнительной формой. Продажа через Интернет требует наименьших капитальных вложений при максимальном охвате предложения и, кроме того, упрощает обслуживание и сопровождение товара.
8. 2. Характеристика ПП
Данный программный продукт - «Комплекс сетевой защиты» - относится к классу IDS (Intrusion Detection System – Система обнаружения вторжений). Он не является брандмауэром. Основными его достоинствами являются простота, расширяемость, возможность динамического управления, универсальность. Спрос на этот ПП потенциально очень широк – он (ПП) может быть применён на любом компьютере (сети компьютеров), подключённом к Интернет. Из средств массовой информации известно, что в последнее время всё активнее проявляют себя так называемые черви – программы, самостоятельно проникающие в компьютер во время подключения его к Интернет и приносящие многомиллионнные убытки. Развивая в дальнейшем данный ПП можно добиться успешного противодействия подобным враждебным проникновениям. Всё это возможно благодаря присущему этому ПП свойству расширяемости.
Характеризуя программный продукт, рассмотрим его с позиции маркетинговой ориентации:
по замыслу;
в реальном исполнении;
с подкреплением спроса;
преимущества у пользователя.
По замыслу | Пользователь получает возможность защиты своего компьютера (сети компьютеров), подключённого к сети Интернет. ПП обнаруживает внешние враждебные воздействия, приходящие извне |
В реальном исполнении | Программное обеспечение “Комплекс сетевой защиты”, предоставляющее защиту компьютера в Интернет Возможные модули: «сервер» - защищаемый компьютер «клиент» - служебный генератор атак, необходимый для настройки «журнал регистрации» - генерация всевозможных отчётов «консоль управления» - модуль удалённой настройки «сервера» |
С подкреплением спроса | Программный продукт предназначен для частных лиц, малых и средних предприятий. Применим во всех областях, где требуется защита хранимой информации от враждебного воздействия из сети Интернет. Предоставляются дополнительные услуги: скидки на обновления программы, услуги по обслуживанию, круглосуточный бесплатный сервисный телефон |
Преимущества у пользователя | Программа проста, модульна, расширяема. Ключевые факторы: ПП восполняет некоторые пробелы на рынке аналогичных товаров |
8. 3. Исследование и анализ рынка
Подавляющее большинство предлагаемых коммерческих средств сетевой защиты представляют из себя межсетевые экраны (брандмауэры, файерволы). К этой категории ПП относится продукция таких фирм, как Agnitum, Symantec, McAfee, Signal 9 Solutions, ForbiaSoft, IBM, Delta Design UK, Sygate Technologies, Zone Labs. Как видно, на рынке присутствует достаточное количество производителей коммерческих брандмауэров. Предлагаемый же ПП относится к классу IDS (Intrusion Detection System). Это более новое направление в развитии средств сетевой защиты. К этому классу относится продукция фирмы Securepoint (http://www.securepoint.cc/en/products-ids.html), а также такие известные программы, как Shadow и Snort (http://www.snort.org/). Предлагаемый ПП дополняет аналогичные системы.
Наиболее перспективным способом продажи данного ПП будет являться продажа лицензий на него через Интернет. Для этого потребуется арендовать хостинг на каком-либо сайте и на базе этого хостинга создать специализированый сайт, посвящённый этому ПП. На этом сайте будет необходимо организовать продажу лицензий на ПП, а также целый комплекс средств по сервисному обслуживанию, технической поддержке данного ПП. Кроме того, скорее всего потребуется провести специальные маркетинговые акции – например, продавать начальные версии программы по системе Shareware, применить систему скидок на новые версии, рассылать рекламные электронные письма, воспользовавшись для этого платными базами данных e-mail’ов, подключиться к баннерному обмену, организовать продажу по пластиковым карточкам Visa и MasterCard, а также наложенным платежом и, дополнительно, посредством WebMoney. В принципе, очень действенным способом является краткосрочная реклама по общероссийскому телевидению (Давайте вспомним Яндекс для примера).
Конечно, традиционные способы продажи коробочных версий через обычные магазины также не стоит сбрасывать со счетов.
Основным приоритетом для потребителя данной продукции будет служить её качество и функциональная пригодность, а не только возможная дешевизна. В самом деле, никто не станет покупать дешёвый товар, если известно, что он плох, а вот дорогой, но качественный товар покупать будут, если он хорошего качества. Понятие же дешевизны относительно, необходимо лишь стремиться к наилучшему соотношению «цена-качество».
Проведём сегментацию рынка потенциальных покупателей:
Таблица 1
Сегментация потенциальных пользователей
Сегменты Рынка | Планируемый объем продаж по годам | |||||||
2005 г. | 2006 г. | 2007г. | Всего | |||||
1кв | 2кв | 3кв | 4кв | 1п/г | 2п/г | год | | |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Предприятия области | 50 | 60 | 70 | 70 | 400 | 500 | 1200 | 2350 |
Научные учреждения | 30 | 30 | 50 | 50 | 90 | 100 | 300 | 650 |
Финансовые организации | 50 | 70 | 90 | 100 | 700 | 800 | 2000 | 3810 |
Иностранные частные лица | 20 | 20 | 30 | 30 | 50 | 70 | 100 | 320 |
Итого: | 150 | 180 | 240 | 250 | 1240 | 1470 | 3600 | 7130 |
Итого объем продаж составит 7130 штук на рассматриваемый период.
8. 4. Производственный план
В данном разделе определяются необходимые инвестиции для разработки и реализации ПП. Для этого произведём расчет единовременных и текущих затрат.
8. 4. 1. Расчет единовременных затрат
Единовременные затраты (Зк), связанных с разработкой данного ПП, будут состоять из капитальных затрат (К), включающих затраты на приобретение вычислительной техники (Квт), локальных вычислительных сетей (Клвс), выделенной Интернет-линии (Кинт), приобретение пакетов прикладных программ (Кппп) и операционных систем (Кос), а также затраты по подготовке кадров (Зпк):
Зк = К + Зпк = Квт + Клвс + Кинт + Кппп + Кос + Зпк, (4.1)
В состав затрат на приобретение ВТ, ЛВС, ППП, ОС включаются транспортные расходы и затраты на установку.
Затраты на подготовку кадров Зпк не учитываем.
Для разработки данного программного продукта принимаем решение закупить 5 компьютеров и объединить их в локальную сеть, подключённую к Интернет. Также потребуется арендовать постоянный канал Интернет-соединения у компании «РосТелеграф». В качестве поставщика выберем компанию «Санрайз», известную своими низкими ценами и выгодными дополнительными услугами. Также закупим необходимое программное обеспечение там же.
Таблица 2. Потребность в технических средствах.
№ | Наименование технического средства и ПО | Тип или модель | Поставщик | Стоимость |
1 | 2 | 3 | 4 | 5 |
1 | Компьютер (5 шт) | INTEL P4 2,4 Ггц /2Гб/ 160Gb/ 3.5”/128 Mb DDR /DVD -ROM/RW/ 48x /17” iIyama | Санрайз | 15 000 х 5 = 75 000 |
2 | Выделенная Интернет-линия | ADSL | РосТелеграф | 8 000 |
3 | Оборудование для локальной сети | Сетевые карты, концентратор, провода | Сетевая лаборатория | 5 000 |
4 | Операционная система | MS Windows XP | Санрайз | 6 300 * 5 = 31 500 |
5 | Программное обеспечение | MS Visual C++ v7.0 | Санрайз | 2 000 * 5 = 10 000 |
ИТОГО | | | | 129 500 |
Подсчитаем единовременные затраты:
Зк = 75 000 + 8 000 + 5 000 + 31 500 + 10 000 = 129 500
8. 4
. 2. Расчет текущих затрат на разработку ПП
Решение о величине потребности в инвестициях на разработку ПП принимаем, исходя из предполагаемой суммы единовременных и текущих затрат ( 3 ) и затрат на маркетинг, прочие коммерческие расходы и др. возможные расходы, связанные с реализацией разработанного ПП.
Для разработки ПП примем на работу 5 програмистов и 1 проектировщика-менеджера. Технический персонал нанимать не будем, т.к. будем привлекать для этого сторонних специалистов в случае необходимости. После принятия данного решения определяется оплата труда по категориям персонала.
Оплату труда будем производить на основе контракта, в котором обусловим оплату за весь выполняемый объем работ (Зпр ).
Таблица 3. Потребность в персонале и оплата его труда
Категория персонала | Количество сотрудников | Зарплата сотрудников, руб/мес. | Время работы сотрудников, мес. | Заработная плата, руб. |
Программист | 5 | 7 000 * 5 | 36 | 1 260 000 |
Проектировщик | 1 | 10 000 | ||
360 000 | ||||
ИТОГО | | | ||
1 620 000 |
Текущие затраты (себестоимость) (С) включают затраты на постановку задачи, разработку алгоритмов и программ, а также затраты, связанные с содержанием и эксплуатацией ВТ, оплатой Интернет-подключения, используемых при разработке ПП. Рассчитываем их по следующей формуле:
С = Зпр + Нз + Змаш + Зс + Зн + Зкр, (4.2)
где Зпр - затраты на заработную плату проектировщиков и программистов;
Зпр = 1 620 000 руб.
Нз - начисления на заработную плату проектировщиков и программистов
( Нз = 35,6 % от Зпр);
Нз = 36,5%*Зпр = 576 720 руб.
Змаш' - затраты, связанные с использованием машинного времени на разработку и отладку программ.
Змаш' = 0, т.к. мы приобрели свои компьютеры.
Зс - затраты на оплату работ, выполняемых сторонними организациями;
Зс = Зси * nm,
где Зси – ежемесячная оплата за Интернет,
nm – количество месяцев
Зс = 5 000 * 36 = 180 000
Зн - накладные расходы, связанные с проектированием и отладкой ПП, в том числе стоимость используемых материалов (бумаги, дискет, картриджей к принтерам и т.п.);
Зн = 150 - 200% от Зпр;
Зн = 150 % * Зпр = 150 % * 1 620 000 = 2 430 000
Принимаем решение не брать банковский кредит.
После расчета единовременных и текущих затрат составим общую таблицу потребности в инвестициях (табл. 4)
Таблица 4
Потребность в инвестициях на разработку ПП
Наименование статей затрат | Формула для расчета | Сумма |
1 | 2 | 3 |
1.Единовременные затраты (Зк) | Зк = К + Зпк = Квт + Клвс + Кинт + Кппп + Кос + Зпк | 129 500 |
1.1.Капитальные вложения (К) | Зк | - |
1.1.1. Затраты на приобретение ВТ (Квт) | Кк * n | 15000 х 5 = 75 000 |
1.1.2. Затраты на приобретение (дооборудование) ЛВС и Интернет (Клвс + Кинт) | Клвс + Кинт | 8 000 + 5 000 = 13 000 |
1.1.3. Затраты на приобретение пакетов прикладных программ и операционных систем (Кпп) | (Кос + Кппп) * 5 | (6 300 + 2 000) * 5 = 41 500 |
1.2. Затраты на подготовку кадров (Зпк) | - | 0 |
2. Текущие затраты (С) | | |
2.1. Затраты на заработную плату (Зпр) | - | 1 620 000 |
2.2. Начисления на заработную плату (Нз) | Нз = 36,5%*Зпр | 576 720 |
2.3. Затраты, связанные с использованием машинного времени (Змаш) | - | - |
2.4. Затраты на оплату работ сторонним организациям (Зс) | Зси * nm | 180 000 |
2.5. Накладные расходы (Зн) | Зн = 150 % * Зпр | 2 430 000 |
2.6. Проценты за пользование коммерческим кредитом (Зкр) | З= | 0 |
Итого затрат (З) | | 4 936 220 |
8. 4. 3. Определение цены ПП
Рассчитав текущие затраты на разработку ПП (С), определим себестоимость одной копии ПП (С1) по формуле:
С1 = С/N+Зтир+Зсер, (4.4)
где N –объем продаж в натуральном выражении;
Зтир и Зсер – затраты на тиражирование и сервисное обслуживание в расчете на одну копию.
С1 = С/N+Зтир+Зсер = 4 936 220 / 7 130 + 70 + 50 = 692,3 + 70 + 50 = 812,3 руб.
Прибыль ( П 1) определяем, исходя из предполагаемой рентабельности ПП:
П1 = С1* Р/100, (4.5)
где Р - процент предполагаемой рентабельности, (ориентировочно Р = 20 - 35%).
П1 = С1* Р/100 = 812,3* 25/100 = 203,1 руб.
Определяем оптовую цену 1 копии ПП (Цо1) по следующей формуле:
Цо1 = С1+ П1 (4.6)
Цо1 = С1+ П1 = 812,3 + 203,1 = 1015,4 руб.
Затем рассчитывается цена продаж ПП ( Цпр):
Ц пр = Цо 1+ НДС, (4.7)
где НДС - налог на добавленную стоимость в соответствии с действующей ставкой на данный вид продукции. С учетом НДС (20%) цена продаж будет равна:
Ц пр = Цо 1+ НДС = 1015,4 * 120 % = 1218,5 руб.
Цена на комплект аналогичной продукции Kaspersky Anti-Haker составляет несколько тысяч рублей. Поскольку предлагаемый ПП является более простой системой, то принимаем окончательную цену продажи ПП – 1300 руб.
8.
5. План маркетинговых действий
Для достижения намеченного объёма продаж планируем ряд маркетинговых мероприятий. В первую очередь необходимо добиться высокого качества предлагаемой продукции и выгодных условий по обслуживанию и сопровождению предлагаемого товара. Затем приступить к рекламированию её разными способами. Оплатить статьи в специализированных компьютерных журналах и на таких же сайтах. Впоследствии можно провести кратковременную рекламу на телевидении. Также следует подключиться к системе баннерного обмена в Интернете. Будем бесплатно предлагать скачать демонстрационные версии программы. Организуем рассылку рекламного спама при помощи коммерческих баз данных адресов.
Кроме самих продаж, организуем систему технического обслуживания и сопровождения данного ПП.
8. 5. 1. Товарная политика
Для завоевания и удержания выбранного сегмента рынка будем выпускать не просто один ПП, а целую линейку продуктов, рассчитанную на разных покупателей, их потребности и платёжеспособность. Будем выпускать версии Lite, Special Edition, Professional, Industrial Edition, Personal Edition. Будем бесплатно предлагать скачать демонстрационные версии программы. Создадим систему User Extentions : это система, которая позволит пользователям создавать собственные плагины к программе и присылать их разработчикам с целью получения скидки на обновления программы.
8. 5. 2. Ценовая политика
Цена на продукцию будет динамически изменяемой. По мере устаревания предыдущих версий на них будет снижаться цена. Также мы будем проводить рекламные кампании с продажей ПП по сниженным ценам в течение определённого периода. Также на цену будет влиять система скидок. Цена на данный ПП будет различной для отечественных и зарубежных потребителей.
8. 5. 3. Сбытовая политика
Сбытовая стратегия будет состоять из рекламной деятельности, участия в специализированных выставках (в том числе зарубежных), создания и регулирования коммерческих связей через посредников, дилеров, агентов и пр. Кроме того, мы предложим сотрудничество компаниям, продающим сетевое аппаратное обеспечение с тем, чтобы те оснащали свою продукцию нашим ПП.
8. 5. 4. Сервисное обслуживание
Сервисное обслуживание ПП будет осуществляться по двум направлениям: во-первых, через коммерческую сеть агентов-посредников в разных городах, во-вторых через сайт в Интернете и круглосуточную телефонную линию технической помощи. Сервисное обслуживание будет предполагать предпродажный и послепродажный сервис.
Предпродажный сервис ориентирован на постоянное изучение и анализ требований потребителей с целью совершенствования качественных параметров предлагаемой продукции.
Послепродажный сервис предусматривает комплекс работ по обслуживанию (комплекс работ по установке ПП и обучению пользователя).
На своём сайте мы организуем специальную службу технической помощи для решения подобных вопросов и проблем.
8.
6. Потенциальные риски
Учёт потенциальных рисков особенно важен, и от глубины его проработки в значительной степени зависит доверие потенциальных инвесторов, кредиторов и партнеров по бизнесу.
Следует учитывать следующие виды рисков: производственные, коммерческие, финансовые и риски, связанные с форс – мажорными обстоятельствами.
Для учёта всевозможных рисков предпримем ряд соответствующих мер. Основными мерами будут являться чёткое соблюдение условий контракта, правил техники безопасности, заключение договоров со страховыми компаниями, создание резевного денежного фонда для покрытия экстренных расходов.
Производственные риски связаны с различными нарушениями в производственном процессе. Меры учёта: соблюдение правил техники безопасности, покупка оборудования надёжных марок, покупка источников бесперебойного питания.
Коммерческие риски связаны с реализацией продукции на товарном рынке (уменьшение размеров и емкости рынков, снижение платежеспособного спроса, появление новых конкурентов). Меры учёта: Наша компания-производитель не будет замыкаться лишь на производстве данного ПП, она будет по возможности диверсифицировать свои предложения.
Финансовые риски вызываются инфляционными процессами, всеобщими неплатежами, колебаниями валютных курсов пр. Меры учёта: Финансовые отношения будут вестись только с банками, заслуживающими доверия. В экономической деятельности предприятия будет использоваться иностранная валюта.
Риски, связанные с форс – мажорными обстоятельствами - это риски, обусловленные непредвиденными обстоятельствами (от смены политического курса страны до забастовок и землетрясений). Меры учёта: Заключение договоров со страховыми компаниями.
8.
7. Финансовый план
Расcчитаем финансовый план, содержащий обоснование экономической (коммерческой) эффективности затрат, произведенных в связи с разработкой и реализацией ПП.
Разработаем таблицу доходов и затрат, план кредитования, расчет безубыточности и дисконтного срока окупаемости.
Предполагаемые доходы от продаж (Qпр) определяются по формуле:
Qпр = Цпр*N, (7.1)
где Цпр - цена продажи ПП, руб;
N - объем продаж по периодам в соответствии с исследованиями рынка, шт.
Qпр = Цпр*N = 1 300 * 7 130 = 9 269 000 руб.
Издержки производства (И) включают, кроме текущих затрат, расходы на тиражирование, сервисное обслуживание, маркетинг, рекламу и некоторые виды налогов (на имущество, местные налоги и т.п.):
И = С1*N + Зм + Н, (7.2)
где С1 - себестоимость копии ПП;
Зм - затраты на маркетинг и коммерческие расходы
( Зм = от 20 до 25% от С1);
Н - налоги.
Налог на имущество Ни определяется в процентах от стоимости ВТ и ЛВС по действующей ставке ( Ни = 1-1,5% от стоимости ВТ и ЛВС ).
Прочие налоги Нпр составляют 5-7% от заработной платы персонала.
Расчеты производятся по годам и сводятся в табл. 3.
Ни = (Квт + Клвс + Кинт) * 1,5 % = (75 000 + 8 000 + 5 000) = 1 320 руб.
Нпр = Зпр * 7% = 45 000 * 7% = 3 150 руб.
Н = Ни + Нпр = 1 320 + 3 150 = 4 470 руб.
Зм = С1 * 25% = 812,3 * 25% = 203,1 руб.
И = С1*N + Зм + Н = С1*N + (Зм мес + Н мес)*n мес;
И = С1*N + (203,1 + 4 470)*n;
И = С1*N + 4673,1*n; С1 = 812,3 руб.
где n – количество месяцев
Таблица 5
Доходы и затраты
Показатели | 2005 г. | 2006г. | 2007г. | ||||
1 кв. | 2 кв. | 3 кв. | 4 кв. | 1п/г | 2п/г | Год | |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
1. Доходы от продаж – (Qпр), тыс. руб. | 195 | 234 | 312 | 325 | 1612 | 1911 | 4680 |
2. Издержки производства (И), руб. | 135864,3 | 160233,3 | 208971,3 | 217094,3 | 1035290,6 | 1222119,6 | 2980357,2 |
3. Прибыль от реализации (стр.1-стр2), руб. | 59135,7 | 73766,7 | 103028,7 | 107905,7 | 576709,4 | 688880,4 | 1699642,8 |
4. Налог на прибыль (24% от стр.3), руб. | 14192,568 | 17704,008 | 24726,888 | 25897,368 | 138410,256 | 165331,296 | 407914,272 |
5.Чистая прибыль (стр.3.-стр.4), руб. | 44943,132 | 56062,692 | 78301,812 | 82008,332 | 438299,144 | 523549,104 | 1291728,528 |
Справочно: Планируемый объем продаж ПП (шт.) | 150 | 180 | 240 | 250 | 1240 | 1470 | 3600 |
С1 = 812,3 руб.
Cрок окупаемости ПП определяется сроком окупаемости дополнительных капитальных вложений по формуле:
Ток = К/(П1*N), (7.3)
где К - Капитальные вложения, тыс. руб.;
П1 - Прогнозная чистая прибыль от реализации одного ПП, руб.;
N - Прогнозный годовой объем продаж ПП, шт.
Ток = (К*Nкв) / (П1*N) = (4 039 023 * 12) / (991,9 * 7 130) = 0,571 * 12 = 6,85 7 кв
Nкв – количество кварталов за 3 года
Срок окупаемости составил 7 кварталов с начала продажи продукции.
8. 8. Расчет безубыточности
Сделаем расчет безубыточности составляемого бизнес-плана.
Под безубыточностью в разработанном бизнес-плане понимается объем продаж ПП в натуральном выражении, при котором возможно покрытие всех расходов без получения прибыли. Расчет достижения безубыточности производится по следующей формуле:
Qкр =ФЗ/(Цпр-ПЗ1), (8.1) где
Qкр - критический объем продаж ПП, при котором будет достигнута безубыточность, шт.;
ФЗ - сумма условно-постоянных (фиксированных) затрат, тыс.руб.;
ПЗ1 - сумма условно-переменных затрат для одного ПП, тыс.руб.;
Цпр- цена продажи одного ПП, тыс.руб.
К ФЗ можно отнести накладные расходы(3н), затраты на маркетинг(Зм),налоги (налог на имущество и прочие налоги), т.е.
ФЗ =Зн + Зм + Н, (8.2)
К ПЗ можно отнести заработную плату на разработку одного ПП (Зпр1), начисления на заработную плату (Нз1), и затраты, связанные с использованием машинного времени на разработку и отладку программ (Змаш1), т.е.
ПЗ = Зпр1 +Нз1+ Змаш1 (8.3)
После расчета критического объема продаж строится график безубыточности
Проведём расчёт:
ФЗ = Зн + Зм + Н = 2 430 000 + 203,1 * 7 130 + 4 470 * 36 =
= 2 430 000 + 1 448 103 + 160 920 = 4 039 023 руб.
ПЗ = Зпр1 +Нз1+ Змаш1 = (1 620 000 + 576 720) / 7 130 = 308,1 руб.
Qкр =ФЗ/(Цпр-ПЗ1) = 4 039 023 / (1 300 – 308,1) = 4 039 023 / (1 300 – 308,1) = 4 072 шт. (всего 7130 шт.)
График безубыточности
9. Безопасность и экологичность проекта
При разработке и сопровождении программного обеспечения следует учитывать вопросы безопасности и охраны труда.
Охрана труда - это свод законодательных актов и правил, соответствующих им гигиенических, организационных, технических, и социально-экономических мероприятий, обеспечивающих безопасность, сохранение здоровья и работоспособность человека в процессе труда (ГОСТ 12.0.002-80).
В данном разделе дипломного проектирования мы рассмотрим некоторые технические аспекты организации охраны труда. Обзор осуществим по следующей схеме:
Введение
Характеристика производственного помещения, обзор опасностей
Производственная санитария (микроклимат, освещённость, шум и вибрация, выделение ВВ).
Электробезопасность (схема электроснабжения, уровни напряжений, Возможные причины поражения током, системы защиты – заземление и зануление.).
Пожаробезопасность
Контроль ЭМ излучения
Освещение
Вентиляция
Контроль шума
Эргономичность
Устойчивость в ЧС
Вывод
Рассмотрим перечисленные аспекты более подробно.
9. 1. Введение
Нормативное обеспечение охраны труда делится на:
Законодательное обеспечение охраны труда.
Законодательное обеспечение экологической безопасности.
Законодательное обеспечение безопасности в чрезвычайных ситуациях.
Основой законодательного обеспечения безопасности является основной закон государства – Конституция РФ.
Кодекс законов о труде РФ
Устанавливаются права и обязанности работодателей и работников в отношении охраны труда; оговариваются ограничения к труду в особо тяжелых условиях некоторых групп населения (беременных женщин и т.д.)
Положение о порядке проведения аттестации рабочих мест по условиям труда.
(является приложением к постановлению Мин-ва труда и соц-го развития РФ, от 14.03.1997)
Аттестации подлежат все имеющиеся в организации рабочего места.
Нормативная основа проведения аттестации рабочих мест:
гигиенические критерии оценки условий труда по показателям вредности и опасности, утвержденные Госсанэпидемндзором РФ
система стандартов безопасности труда (ССБТ) ГОСТ 12.0.001.-79 (общие положения, определения)
12.1 – ГОСТ на опасные и вредные факторы
12.2 - ГОСТ безопасности оборудования
12.3 – безопасность технологических процессов;
12.4 – требования к коллективным и индивидуальным средствам защиты
санитарные правила и нормы.
9. 2. Характеристика производственного помещения
Согласно СН 512-78 (Инструкции по проектированию зданий и помещений для ЭВМ) и СанПиН 2. 2. 2. 542-96 (Гигиенические требования к видеодисплейным терминалам, персональным ЭВМ) здания ЭВМ следует помещать с наветренной стороны ветров преобладающего направления по отношению к соседним предприятиям, являющихся источниками выделений вредных веществ и пыли. Помещения ЭВМ должны располагаться не выше 5 этажа и не в подвалах.
Высота помещений для расположения ЭВМ - 3,6 м, в учебных заведениях - не менее 4 м, а для остальных помещений не менее 3,3 м. Естественное освещение должно осуществляться через светопроемы, ориентированные преимущественно на север и северо-восток. Площадь на одно рабочее место с ВДТ или ПЭВМ должна составлять не менее 6 м2, а объем - не менее 20 м3, а в учебных помещениях соответственно не менее 6 м2 на одно место и объем 24 м3. Перегородка между залом ЭВМ и помещением внешних запоминающих устройств должна быть несгораемой. В залах ЭВМ должно предусматриваться автоматическое пожаротушение. Включение установок автоматического пожаротушения должно осуществляться автоматически от извещателей, реагирующих на появление дыма, например ДИП-1.
Применение для тушения пожара воды, порошковых огнетушителей недопустимо - выводится из строя ЭВМ.
Здания и помещения для ЭВМ должны быть оборудованы системами центрального отопления, приточно-вытяжной вентиляции, хозяйственно-питьевого водопровода.
В нашем случае производственное помещение представляет из себя группу офисов, которые находятся в капитальном здании. К ним относятся комната программистов (5 компьютеров), офис менеджера, кабинет директора и пр. С точки зрения охраны труда наибольший интерес представляет комната программистов.
В этой комнате находится 5 компьютеров, объединённых в локальную сеть, подключённую к Интернет. Электропитание компьютеров осуществляется через обычную электросеть 220 В. В помещении предусмотрена система естественной вентиляции.
9. 3. Производственная санитария
Производственная санитария - это система санитарно-технических гигиенических и организационных мероприятий, препятствующих воздействию на работающих вредных производственных факторов.
Производственная санитария включает оздоровление воздушной среды и нормализация параметров микроклимата в рабочей зоне, защиту рабочих от шума, вибрации, и обеспечение нормативов освещения, а также поддержание в соответствии с санитарными требованиями территории предприятия, основных и вспомогательных помещений (особенно важно в пищевом производстве).
Независимо от состояния природных метеорологических условий данной местности в дисплейных производственных помещениях и на рабочих местах должны быть созданы климатические условия (производственные, микроклимат) наиболее благоприятные для выполнения заданной работы. Климатические условия определяются сочетанием температуры, влажности и скорости перемещения воздуха, а также температуры окружающих поверхностей.
В соответствии с требованиями ГОСТ12.1.005-88 ССБТ нормируется оптимальные и допустимые условия микроклимата (температура воздуха, его влажность, а также скорость в рабочей зоне ).
В нашем случае в помещении, где осуществляется разработка программного обеспечения, микроклимат в помещении поддерживается: зимой – системой центрального водяного отопления, летом – системой кондиционирования воздуха. Освещённость – общая, лампами дневного света и индивидуальная – настольные лампы. Шум – вызван работой вентиляторов-охладителей в корпусах компьютеров. Вредные выделения – электромагнитные излучения от кинескопных мониторов, тепловыделения от компьютеров и людей, углекислый газ, водяной пар, выделяемые при дыхании людьми.
9. 4. Электробезопасность
В соответствии с ГОСТ 12.1.019-79 под электробезопасностью понимают систему организационных и технических мероприятий и средств, обеспечивающих защиту людей от вредного и опасного воздействия электрического тока, электрической дуги и статического электричества.
Опасность поражения электрическим током характерна тем, что человек не может посредством своих органов чувств обнаружить на расстоянии наличие напряжения, и обнаруживает его в момент поражения. Действие электрического тока на человека может привести к двум видам поражений : электротравма и электроудар.
Согласно ГОСТ 21. 1. 019-79* элетробезопасность электроустановок обеспечивается:
конструкцией электроустановок;
техническими способами и средствами защиты;
организационными и техническими мероприятиями.
Все меры обеспечения электробезопасности сводятся к трем путям:
недопущение прикосновения и приближения на опасное расстояние к токоведущим частям, находящимся под напряжением;
снижение напряжения прикосновения;
уменьшение продолжительности воздействия электрического тока на пострадавшего.
К техническим способам относятся следующие, предусмотренные ПУЭ:
применение надлежащей изоляции и контроль за ее состоянием;
обеспечение недоступности токоведущих частей;
автоматическое отключение электроустановок в аварийных режимах - защитное отключение;
заземление или зануление корпусов электрооборудования;
выравнивание потенциалов;
применение разделительных трансформаторов;
защита от опасности при переходе напряжения с высокой стороны на низкую;
компенсация емкостной составляющей тока замыкания на землю;
применение низких напряжений.
Для предупреждения электропоражений применяется рабочая изоляция токоведущих частей, кроме того применяется двойная изоляция - это изоляция металлических частей электрооборудования нормально не находящихся под напряжением. Повреждение изоляции является основной причиной многих несчастных случаев.
В нашем помещении каждый компьютер подключен к электросети с заземлением и молниезащитой. На входе в комнату программистов стоит общий электрорубильник с автоматическим предохранителем. Все электропровода обладают надёжной изоляцией. На стене помещения предусмотрена памятка о первой помощи при поражении электрическим током.
9. 5. Пожаробезопасность
Пожаром называется неконтролируемое горение вне специального очага, наносящее материальный ущерб ( ГОСТ 12. 1. 004-76 ).
Пожарная безопасность ( ГОСТ 12717033-81 ) - состояние объекта, при котором с установленной вероятностью исключается возможность возникновения и развития пожара и воздействия на людей опасных факторов пожара, а также обеспечивается защита материальных ценностей.
Пожарная безопасность на предприятиях обеспечивается двумя системами: предотвращения пожара (организационные, технические меры и средства, обеспечивающие невозможность проникновения пожара) и системой пожарной защиты (предотвращение воздействия на людей опасных факторов пожара).
Все рабочие и служащие должны проходить специальную противопожарную подготовку: противопожарный инструктаж ( первичный и вторичный ) и занятия по пожарно-техническому минимуму по специальной программе.
Пожарная безопасность объектов народного хозяйства ( и электроустановок ), регламентируется Законом о пожарной безопасности, ГОСТами ССБТ, строительными нормами и правилами СНиП часть 2, межотраслевыми типовыми правилами пожарной безопасности, отраслевыми правилами пожарной безопасности, инструкциями пожарной безопасности на отдельных объектах, а с 1 января 1985 г. введен в действие Кодекс РФ об административных нарушениях ( КоАП см. Ведомости Совета РСФСР, 1984, N 27 ст. 909 ) где сведены конкретные составы административных правонарушений не несущие уголовной ответственности, виды, размеры взысканий; указаны лица и органы уполномоченные рассматривать дела об указанных нарушениях.
Система предотвращения пожара включает:
предотвращение образования горючей среды и внесения в нее источников зажигания;
поддержание температуры и давления горючей среды ниже максимально допустимых по горючести;
уменьшение размера горючей среды ниже максимально допустимого по горючести.
Система пожарной защиты предусматривает:
а) ограничение количества и надлежащее размещение горючих веществ,
б) применение негорючих и трудногорючих веществ и материалов,
в) изоляция горючей среды,
г) применение средств пожаротушения, д) предотвращение распространения пожара,
е) применение производственных объектов с регламентированными пределами огнестойкости и горючести.
ж) эвакуация людей при пожаре,
з) применение средств индивидуальной и коллективной защиты от огня,
и) применение средств пожарной сигнализации и средств извещения о пожаре, организация пожарной охраны объектов.
Для повышения пожаро- и взрывоопасности современных электронасыщенных предприятий играет большую роль правильный выбор и эксплуатация электрооборудования.
При проектировании и строительстве производственных зданий ( электромашинных помещений, трансформаторных подстанций ) необходимо учитывать категорию пожароопасности производства. Согласно СНиП 2-90-81 в зависимости от характеристики обращающихся в производстве веществ и их количества производства подразделяются по пожарной и взрывной опасности на шесть категорий: А, Б, В, Г, Д и Е.
На нашем предприятии принимаем следующие противопожарные меры: в комнате программистов предусматриваем огнетушитель, схему эвакуации при пожаре. На системе вентиляции устанавливаем противопожарный клапан. Под потолком проводим спринклерную систему пожаротушения вместе с системой пожарной сигнализации.
9. 6. Контроль над электромагнитным излучением
Дисплеи персональных компьютеров, выполненные на электронно-лучевых трубках (ЭЛТ), являются потенциальными источниками мягкого рентгеновского, ультрафиолетового (УФ), инфракрасного (ИК), видимого, радиочастотного, сверх- и низкочастотного ЭМИ.
Последствия регулярной работы с компьютером без применения защитных средств:
заболевания органов зрения (60 процентов пользователей);
болезни сердечно-сосудистой системы (60 процентов);
заболевания желудочно-кишечного тракта (40 процентов)
кожные заболевания (10 процентов);
различные опухоли.
При нормировании ЭМП, как и других факторов окружающей среды, в населенных местах оценочным критерием их действия на организм служит не патологические, а функциональные изменения, при этом в качестве допустимого уровня ЭМП принимают подпороговые величины, которые не вызывают компенсаторного напряжения функциональных систем организма.
Таблица 6.
Предельно допустимые уровни ЭМП при круглосуточном непрерывном излучении
Метрическое подразделение | Частоты | Длины волн | Предельно допустимый уровень |
Километровые волны низкие частоты | 30-330 кГц | 10-1 км | 25 В/м |
Гентометровые волны средние частоты | 0,3-3 МГц | 1-0,1 км | 15 В/м |
Декаметровые волны высокие частоты | 3-30 МГц | 100-10 м | 10 В/м |
Метровые золны очень высокие частоты | 30-300 МГц | 10-1 м | 3 В/м |
Дециметровые волны ультравысокие частоты | 300-3000 МГц | 1-0,1 м | 10 мквт/см2 |
Сантиметровые волны сверхвысокие частоты | 3-30 ГГц | 10-1 см | 10 мквт/см2 |
Выполнение рекомендаций по эксплуатации компьютеров позволяет значительно снизить вредные воздействия находящихся в эксплуатации ПЭВМ. В первую очередь, безопасность при работе с ПК может быть обеспечена за счет рационального размещения компьютеров в помещениях, правильной организации рабочего дня пользователей, а также за счет применения средств повышения контраста и защиты от бликов на экране, электромагнитных излучений и электростатического поля.
Продолжительность непрерывной работы с ПЭВМ не должна превышать 2 ч.
Если в помещении эксплуатируется более одного компьютера, то следует учесть, что на пользователя одного компьютера могут воздействовать излучения от других ПЭВМ, в первую очередь со стороны боковых, а также и задней стенки дисплея. Учитывая, что от излучения со стороны экрана дисплея можно защититься применением специальных фильтров, необходимо, чтобы пользователь размещался от боковых и задних стенок других дисплеев на расстоянии не менее 1 м.
На мониторы рекомендуется устанавливать защитные фильтры класса полной защиты (Total shield), которые обеспечивают практически полную защиту от всех вредных воздействий монитора в электромагнитном спектре и позволяют уменьшить блик от электронно-лучевой трубки, а также повысить читаемость символов.
На нашем предприятии предусматриваем следующие меры защиты от ЭМ излучения: устанавливаем на мониторы защитные экраны, планируем постепенный переход на ЖК-дисплеи, не излучающие вредные ЭМ-волны, устанавливаем обязательные 1-минутные перерывы каждые 2-3 часа работы программистов.
9. 7. Освещение
Свет, освещение относится к одному из основных внешних факторов, постоянно воздействующих на человека в процессе труда. Положительное влияние освещения на производительность труда и его качество не вызывает сомнения. Так, солнечное освещение увеличивает производительность труда в среднем на 10%, а искусственное на 13%, при этом возможность брака снижается на 20-25%.
Нормирование освещения внутри и вне зданий, мест производства работ, наружного освещения городов и др. населенных пунктов производится по СНиП 11-4-79 (строительные нормы и правила, часть II, глава 4, Естественное и искусственное освещение, М. , 1980).
Безопасность и здоровье условия труда в большой степени зависят от освещенности рабочих мест и помещений. Неудовлетворительное освещение утомляет не только зрение, но и вызывает утомление организма в целом. Неправильное освещение может быть причиной травматизма : плохо освещенные опасные зоны, слепящие лампы, резкие тени ухудшают или вызывают полную потерю зрения, ориентации. Неправильная эксплуатация осветительных установок в пожароопасных цехах может привести к взрыву, пожару и несчастным случаям.
Обычно пользуются естественными, искусственным и совмещенным (естественное и искусственное совместно) освещением.
Согласно санитарным нормам все помещения с постоянным пребыванием людей должны иметь естественное освещение.
Нормирование естественного освещения производится с помощью коэффициента естественного освещения КЕО - это отношение естественной освещенности данной точки внутри помещения к освещенности точки, находящейся под открытым небом, выраженное в %.
В СНиП 11-4-79 нормированные значения КЕО приведены для III пояса светового климата (Москва, Свердловск, Томск, Якутск, Охотск, Вологда - II пояс). Для остальных поясов нормированное значение КЕО определяется по соответствующим формулам.
Искусственное освещение осуществляется в темное время суток при помощи осветительных приборов, состоящих из светильников.
Искусственное освещение выполняется двух систем : общее и комбинированное (общее с местным). Для освещения помещений должны предусматриваться газоразрядные лампы (люминесцентные, металлогенные, натриевые, ксеновые), допускается применение ламп накаливания.
Эвакуационное освещение предусматривается :
а) в местах, опасных для прохода людей;
б) в проходах и на лестницах при числе эвакуирующихся более 50 чел;
в) по основным проходам помещений, в которой работает более 50 чел;
г) в лестничных клетках жилых домов, высотой 6 и более этажей и др. случаях по СНиП.
К специальным видам освещения относятся охранное и дежурное. Охранное освещение (при отсутствии специальных технических средств охраны) предусматривается вдоль границ территорий, охраняемых в ночное время : освещенность 0, 5 лк на уровне земли.
9. 8. Вентиляция
Важным средством обеспечения нормальных санитарно-гигиенических и метрологических условий в производственных помещениях является ВЕНТИЛЯЦИЯ - это организованный и регулируемый воздухообмен, обеспечивающий удаление из помещения загрязненного промышленными вредностями воздуха.
По способу подачи в помещение воздуха и удаления его, вентиляцию делят на :
- естественную;
- механическую;
- смешанную.
По назначению вентиляция может быть общеобменной и местной.
ЕСТЕСТВЕННАЯ вентиляция создает необходимый воздухообмен за счет разности плотности теплого и холодного воздуха, находящегося внутри помещения и более холодного снаружи, а также за счет ветра.
Организованный и регулируемый естественный воздухообмен называется АЭРАЦИЕЙ.
Различают БЕСКАНАЛЬНУЮ и КАНАЛЬНУЮ аэрацию. Первая осуществляется при помощи фрамуг (поступление воздуха) и вытяжных фонарей (выход воздуха), рекомендуется в помещениях большого объема и в цехах с большими избытками тепла. Канальная аэрация обычно устраивается в небольших помещениях и состоит из каналов в стенах, а на выходе каналов-на крышках-устанавливаются дефлекторы-устройства, создающие тягу при обдувании их ветром.
Естественная вентиляция экономична и проста в эксплуатации. Недостатками ее является то, что воздух не подвергается очистке и подогреву при поступлении, удаляемый воздух также не очищается и загрязняет атмосферу.
МЕХАНИЧЕСКАЯ вентиляция состоит из воздуховодов и побудителей движения (механических вентиляторов или эжекторов.
Воздухообмен осуществляется независимо от внешних метеорологических условий, при этом поступающий воздух может подогреваться или охлаждаться, подвергаться увлажнению либо осушению. Выбрасываемый воздух подвергается очистке.
Механическая общеобменная вентиляция может быть :
а) приточная ;
б) вытяжная ;
в) приточно-вытяжная.
Приточная система вентиляции производит забор воздуха через воздухозаборное устройство, затем воздух проходит через калорифер, где воздух нагревается и увлажняется и вентилятором подается по воздухопроводам в помещение через насадки для регулировки притока воздуха. Загрязненный воздух вытесняется через двери, окна, фонари, щели.
Вытяжная вентиляция удаляет загрязненный и перегретый воздух через воздухоотводы и очиститель, а свежий воздух поступает через окна, двери и неплотности конструкций.
Приточно-вытяжная система вентиляции состоит из приточной и вытяжной, работающих одновременно.
В нашем помещении предусмотрена система естественной вентиляции, совмещённая с кондиционером.
9. 9. Контроль шума
Шум наиболее неблагоприятный фактор, воздействующий на человека. В результате утомления из-за сильного шума увеличивается число ошибок при работе, повышается опасность возникновения травм и снижается производительность труда. Шум представляет собой механические колебания в упругих средах и телах, частоты лежат в диапазоне от 16-20 Гц до 11,2 кГц и которое способно воспринимать человеческое ухо. Шум состоит из огромного количества гармонических колебаний разных частот. Шумы различной частоты действуют на организм по-разному, что учитывается при нормировании шумов.
Нормирование уровней шума в производственных условиях осуществляется по ГОСТ 12. 1. 003-83 (шум, общие требования безопасности). Он устанавливает допустимые уровни дБ звукового давления на рабочих местах в определенных (октавных) полосах частот со среднегеометрическими частотами 63, 125, 250, 500, 1000, 2000, 4000, 8000 Гц. Например, рабочие места в производственных помещениях соответственно : 99, 92, 86, 83, 78, 76, 74 дБ или 85 дБА.
Для уменьшения уровней шума применяются технические, строительно-акустические и организационные мероприятия, а также средства индивидуальной защиты (ГОСТ 12. 4. 051-87 - Средства индивидуальной защиты органа слуха).
К этим мерам относятся :
1. Подавление шума в источниках
2. Предупреждение распространения шума - звукоизоляция и звукопоглощение.
3. Строительные и организационные меры.
В нашем помещении единственными источниками шума являются вентиляторы-охладители рабочих элементов компьютеров. Для борьбы с этим шумом мы поместили системные блоки компьютеров в специальные шумоизолирующие тумбы столов.
9. 10. Эргономичность
Эргономика – наука, которая охватывает очень широкий круг взаимосвязей человека, машины и рабочей среды. Она рассматривает физиологические, психологические, социальные, биологические, технические аспекты этих взаимосвязей.
Эргономические принципы при создании ПО:
1) Принцип минимального рабочего усилия.
2) Принцип максимального взаимопонимания.
3) Принцип минимального объема оперативной памяти пользователя.
4) Принцип минимального расстройства человека-оператора.
5) Принцип учета профессиональных навыков пользователя.
6) Принцип максимального различия человеческих характеров.
7) Принцип максимального контроля со стороны человека-оператора.
Средства отображения информации должны отвечать следующим техническим требованиям:
яркость свечения экрана не менее 100 Кд/м2;
минимальный размер точки растра не более 0.6 мм для цветного монитора;
контрастность изображения не менее 0.8;
частота регенерации изображения в текстовом режиме не менее 72 Гц;
количество точек растра на строку не менее 640;
наличие антибликового покрытия экрана;
размер экрана не менее 31 см по диагонали;
высота символов на экране не менее 3.8 мм;
расстояние от глаз оператора до экрана 40-80 см;
монитор должен быть оборудован поворотной подставкой, позволяющей перемещать его в горизонтальной и вертикальной в пределах 130-200 мм и изменять угол наклона экрана на 10-15.
Качество зрительного восприятия определяется энергетическими, пространственными и временными характеристиками сигналов, поступающих к оператору. В соответствии с названными характеристиками сигналов выделяются группы основных параметров зрительного анализатора:
энергетические - диапазон воспринимаемых яркостей, контраст, слепящая яркость;
пространственные - острота зрения, поле зрения, объем восприятия;
временные - латентный период реакции, время адаптации, критическая частота мельканий.
На комфортность работы оператора ЭВМ влияют организация рабочего места оператора, средства отображения информации, органы управления машиной. Они должны быть максимально удобны для человека, чтобы не создавать помех и чувства дискомфорта в процессе работы, а также способствовать наименьшей утомляемости.
Основным способом обеспечения условий комфорта оператора ЭВМ является организация его рабочего места. В этом вопросе не существует мелочей, так как любой, на первый взгляд, несущественный фактор в процессе длительного воздействия может вызвать состояние дискомфорта, отрицательно сказаться на результатах деятельности и, возможно, привести к заболеванию.
При взаимном расположении элементов рабочего места учитывается:
рабочая поза человека - оператора;
пространство для размещения оператора, позволяющее осуществлять все необходимые движения;
физические, зрительные и слуховые связи между оператором и оборудованием;
возможность обзора пространства за пределами рабочего места;
возможность ведения записей, размещения документации и материалов, используемых оператором.
Контроль степени соответствия пространственно-компоновочных параметров рабочих мест с дисплеями эргономическим требованиям следует осуществить дифференциальным методом, при котором производятся измерения отдельных эргономических параметров рабочих мест и сравнение их с нормативными значениями.
9. 11. Вывод
В соответствии с проведённым обзором неблагоприятных факторов в сфере охраны труда и профилактике ЧС мы разработали и приняли комплексный набор мер по обеспечению безопасности производства на нашем предприятии-производителе программного обеспечения.
10. Заключение
В дипломной работе было разработано программное средство «Комплекс сетевой защиты» в виде клиент-серверной пары на базе протокола ICMP. Таким образом, путём глубокого, непростого и недешёвого исследования проблемы, было найдено ЕДИНСТВЕННОЕ технически приемлемое решение реализации низкоуровневой (пакетной) клиент-серверной системы, способной полноценно (в полном объёме) функционировать НА ЕДИНСТВЕННОМ КОМПЬЮТЕРЕ (т.е. по схеме одновременной работы как клиента, так и сервера на одном и том же компьютере), не требуя для своей работы наличия локальной сети компьютеров. Естественно, что данная система может также работать и в локальной сети компьютеров. Единственным серьёзным ограничением данного программного средства является системное требование наличия ОС не ниже Windows 2000 и прав Администратора. Все остальные варианты реализации низкоуровневой (пакетной) клиент-серверной системы (см. [3] и [4]) показали свою неспособность полноценно функционировать на единственном компьютере, требуя для этого как минимум 2 компьютера, объединённых в локальную сеть, что делает невозможным тривиальную разработку.
Также были выявлены прочие скрытые ограничения операционной системы Windows 2000, относящиеся к низкоуровневому сетевому программированию.
Так как разработанное в дипломной работе программное средство способно полноценно функционировать на одном компьютере (не требуя наличия двух компьютеров, объединённых в локальную сеть), то его исходные коды могут быть использованы для разработки целого спектра лабораторных работ по целому ряду дисциплин, изучаемых студентами кафедры на 4 и 5 курсах, а именно по тем дисциплинам, в рамках которых изучаются локальные и глобальные сети. На базе этих исходных кодов можно создавать самые разнообразные сетевые приложения – анализаторы, снифферы, системы обнаружения атак и т.п. Это имело бы неоценимое значение для практического овладевания студентами того материала по низкоуровневым сетевым технологиям, который сейчас изучается ими сугубо теоретически и абстрактно.
11. Список литературы
1. Курс лекций «Защита информации в компьютерных системах» (Колесников Д.Г.) http://megapolis.aaanet.ru/kdg/protect/index.htm
2. Обнаружение хакерских атак (Дж. Чирилло) www.piter.com ISBN 5-318-00533-0
3. Network Programming for Microsoft Windows (Anthony Jones, Jim Ohlund) Microsoft Press http://irazin.ru/Some.htm
4. Windows Packet Capture Library http://winpcap.polito.it/
5. Windows Packet Capture Library (Links) http://winpcap.polito.it/misc/links.htm
6. Обнаружение нарушений безопасности в сетях (С. Норткатт, Новак Дж.) http://www.williamspublishing.com ISBN 5-8459-0526-5 (рус.)
7. MSDN 6.0/Platform SDK/Networking and Distributed Services/
Windows Sockets version 2 / Windows Sockets version 2 API / Reference
8. daSniff http://demosten.com/dasniff/
9. Snort http://www.snort.org/
10. Snort documentation http://www.snort.org/docs/
11. Телекоммуникационные технологии (v2.1) (Семенов Ю.А. (ГНЦ ИТЭФ) http://book.itep.ru/
12. RFC 791
13. RFC 792
14. Семейство протоколов TCP/IP (Брежнев А.Ф., Смелянский Р.Л.) http://www.yandex.ru
15. Пример «Ping» из MSDN, папка «Samples».
Приложение
Исходные коды программного средства
Файл http_plugin.cpp
// Модуль, где находится HTTP-плагин
#include
#include
#include
#include
#include "packet.h"
#define MAX_CONNECTIONS 5
#define SIZE_OF_BUFFER 8192
#define ADDRESS_MAX_LENGTH 64
char* getspos(char* search_string,char search_symbol);
// получить указатель на первое вхождение символа в строке
char* substring(char* st,char s1,char s2,char* ret);
// извлечь в ret подстроку из st, заключённую между символами s1 и s2
// (не включая s1 и s2 в возвращаемое значение)
void readcomment(fstream& file); // считать и выбросить комментарий
// из файла "conf.inf"
//////////////////////////////////////////////////////////////////////////
class CONF_HTTP
{ // здесь содержится вся конфигурация HTTP-сервера
public:
fstream conf_file; // из этого файла при запуске программы считываем
// настройки HTTP-сервера
char ip_address[32]; // ip-адрес этого сервера
int port; //порт, на который будем принимать HTTP-запросы (обычно 80)
int echo; // выводить ли на экран каждое действие
CONF_HTTP(void);
void ProcessConfigCommands(void);
void Init(void);
};
//////////////////////////////////////////////////////////////////////////
class DISPATCH_SERVER_SOCKET_HTTP
{
public:
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);
CONF_HTTP conf;
int accept_connect(void);
};
//////////////////////////////////////////////////////////////////////////
class SERVER // сложный класс, включающий в себя HTTP-сокет
{
public:
char Buffer[SIZE_OF_BUFFER];
SOCKET msg_server_socket;
int quit; // флаг, который показывает, что сеанс связи окончен
int block_reply;
PARAM param[100];
int param_index;
CONF_HTTP conf;
long connection_time;
fstream report_file; // в этот файл запишем всё, что сервер получает
// и отправляет
SERVER(void);
int recv_data(void);
int send_data(void);
int shutdown_and_closesocket(void);
void erase_buffer(void);
void set_buffer(char*);
int ProcessClientQuery(void);
int ProcessControlString(char* c_string);
void CreateQueryForm(char* temp_path); // считать в буфер с диска htm-файл (форму запроса) для отправки клиенту
int ProcessHTTPCommand(void);
SERVER& operator=(SERVER& right);
};
//////////////////////////////////////////////////////////////////////////
DWORD WINAPI ThreadFuncHTTP(SERVER* p_server);
//////////////////////////////////////////////////////////////////////////
DISPATCH_SERVER_SOCKET_HTTP::DISPATCH_SERVER_SOCKET_HTTP(CONF_HTTP& conf_ref)
{
// Инициализируем библиотеку WS2_32.DLL
if ((retval = WSAStartup(0x202,&wsaData)) != 0)
{cerr<<"WSAStartup failed with error "<
getch();WSACleanup();exit(-1);}
size_of_client_address = sizeof(client_address);
// Создаём базовый(диспетчерский) сокет сервера, настроенный на TCP
dispatch_server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (dispatch_server_socket == INVALID_SOCKET)
{cerr<<"socket() failed with error "<
getch();WSACleanup();exit(-1);}
// Записываем в адресную структуру IP адрес сервера и порт сервера
server_address.sin_family = AF_INET;
server_address.sin_port = htons(conf_ref.port);//Port MUST be in Network Byte Order
server_address.sin_addr.S_un.S_addr = inet_addr (conf_ref.ip_address);
// Связываем адрес сервера с базовым(диспетчерским) сокетом сервера
if (bind(dispatch_server_socket,(SOCKADDR*) &server_address,
sizeof(server_address))==SOCKET_ERROR)
{cerr<<"bind() failed with error "<
getch();WSACleanup();exit(-1);}
// Переводим базовый(диспетчерский) сокет сервера на режим
// прослушивание/диспетчеризация сигналов на подключение и устанавливаем
// размер очереди одновременных обращений к серверу
if (listen(dispatch_server_socket,MAX_CONNECTIONS)==SOCKET_ERROR)
{cerr<<"listen() failed with error "<
getch();WSACleanup();exit(-1);}
conf=conf_ref;
}
//////////////////////////////////////////////////////////////////////////
int DISPATCH_SERVER_SOCKET_HTTP::accept_connect(void)
{
//cout<<"Waiting for a client's connection..."<
//************************************************************************
while (true)
{
// Ждём очередное подключение к серверу (функцией connect()) клиента и,
// дождавшись, возвращаем виртуальный сокет сервера - для двухстороннего
// обмена сообщениями с данным клиентом
msg_server_socket = accept(dispatch_server_socket,
(SOCKADDR*) &client_address, &size_of_client_address);
// Если случилась ошибка ожидания клиента (кроме отсутствия вызова клиента), то:
if (msg_server_socket==INVALID_SOCKET)
{cerr<<"accept() failed with error "<
// Закрываем базовый(диспетчерский) сокет сервера
if (closesocket(dispatch_server_socket)==SOCKET_ERROR)
cerr<<"closesocket() failed with error "<
WSACleanup();return 0;}
// Выводим на экран время подключения клиента, его IP-адрес и порт
if ( client_address.sin_family == AF_INET) // если это TCP-клиент,то:
{
connection_time=time(0);
cout<<"Accepted HTTP-connection on: "<
<<"from IP address: "<
<
}
// Для каждого подключившегося клиента создаём нить и передаём в неё
// адрес виртуального сокета сервера для двухстороннего
// обмена сообщениями с данным клиентом (нити нужны здесь для того, чтобы
// позволить серверу работать одновременно с несколькими клиентами)
SERVER server;
server.msg_server_socket = msg_server_socket;
server.connection_time = connection_time;
server.conf=conf;
if (CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFuncHTTP,
(LPVOID)&server,0,&dwThreadID)==NULL)
cout<
}// end of while
//************************************************************************
// Закрываем базовый(диспетчерский) сокет сервера
if (closesocket(dispatch_server_socket)==SOCKET_ERROR)
cerr<<"closesocket() failed with error "<
// Освобождаем ресурсы с помощью библиотеки WS2_32.DLL
WSACleanup();
return 0;
};
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
SERVER::SERVER(void)
{
erase_buffer();
quit = 0;// Нужно ли закончить сеанс связи
connection_time = 0;
block_reply = 1;
ZeroMemory(param,sizeof(param));
param_index=0;
};
//////////////////////////////////////////////////////////////////////////
int SERVER::shutdown_and_closesocket(void)
{
cout<<"Terminating HTTP-connection."<
// Блокируем получение - отправку сообщений у виртуального сокета сервера
if (shutdown(msg_server_socket,SD_BOTH)==SOCKET_ERROR)
{cerr<<"shutdown() failed with error "<
// Закрываем виртуальный сокет сервера, связанный с данным клиентом
if (closesocket(msg_server_socket)==SOCKET_ERROR)
{cerr<<"closesocket() failed with error "<
return -1;}
return 0;
};
//////////////////////////////////////////////////////////////////////////
void SERVER::erase_buffer(void)
{
ZeroMemory(&Buffer,sizeof(Buffer));
}
//////////////////////////////////////////////////////////////////////////
void SERVER::set_buffer(char* string)
{
erase_buffer();
strcpy(Buffer,string);
}
//////////////////////////////////////////////////////////////////////////
int SERVER::recv_data(void)
{
erase_buffer();
// Ждём приёма сообщения от клиента
char ch;
int retval;
char S[]={"S: "};
for (int i=0; i
{
// Принимаем побайтно то, что клиент отправил как цельное сообщение
// (для того, чтобы мы могли распознавать отдельные команды)
retval = recv(msg_server_socket,&ch,sizeof(char),0 );
if (retval == SOCKET_ERROR)
{cerr<<"recv() failed: error "<
closesocket(msg_server_socket); return -1;}
else {Buffer[i]=ch; if (ch =='\n') break;};
};
if(conf.echo)
cout<<"S: "<
report_file.write(S,strlen(S));
report_file.write(Buffer,strlen(Buffer));
return 0;
};
//////////////////////////////////////////////////////////////////////////
int SERVER::send_data(void)
{
int retval;
char R[]={"R: "};
retval = send(msg_server_socket,Buffer,strlen(Buffer),0);// ни в коем
// случае не sizeof(Buffer)!
if (retval == SOCKET_ERROR)
{cerr<<"send() failed: error "<
if(conf.echo)
cout<<"R: "<
report_file.write(R,strlen(R));
report_file.write(Buffer,strlen(Buffer));
erase_buffer();
return 0;
};
//////////////////////////////////////////////////////////////////////////
SERVER& SERVER::operator=(SERVER& right)
{
if (&right!=this)
{
msg_server_socket = right.msg_server_socket;
connection_time = right.connection_time;
conf=right.conf;
}
return *this;
}
///////////////// Описание конфигурационного объекта /////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void CONF_HTTP::Init(void)
{
fstream empty_file;
conf_file.open("http_conf.inf",ios::in);
conf_file>>ip_address;
readcomment(conf_file);
conf_file>>port;
readcomment(conf_file);
conf_file>>echo;
readcomment(conf_file);
conf_file.close();
empty_file.open("http_report.txt",ios::trunc);
empty_file.close();
};
//////////////////////////////////////////////////////////////////////////
CONF_HTTP::CONF_HTTP(void)
{
ZeroMemory(ip_address,sizeof(ip_address));
port=0;
echo=false;
};
//////////////////////////////////////////////////////////////////////////
int SERVER::ProcessClientQuery(void)
{
if (!strncmp(Buffer,"GET /?",6))
{
char arg[MAX_PATH*10]={0};
substring(Buffer,'?','%',arg);
ProcessControlString(arg);
}
if (!strncmp(Buffer,"\r\n",2))
{
set_buffer("HTTP/1.1 200 OK\r\n");
fstream file;
char ch;
char temp_path[MAX_PATH]={0};
CreateQueryForm(temp_path); // Здесь решаем вопрос об отправке клиенту
// формы на основании его запроса
size_t i=strlen(Buffer);
file.open(temp_path,ios::in);
while(!file.eof())
{
file.read(&ch,1);
Buffer[i++]=ch;
}
quit=1;block_reply=0;
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
int SERVER::ProcessControlString(char* st)
{
//T01=ddddddddddddd&T02=ggggggggggggg&
size_t i;
int j=0;
int flag=0;
for(i=0;i
{
if(st[i]=='&') {flag=0;param_index++;j=0;}
if(flag==1) param[param_index].name[j++]=st[i];
if(st[i]=='=') flag=1;
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
// HTTP TCP/IP почтовый сервер для одновременной работы с MAX_CONNECTIONS
// клиентами
int echo_gl;
DWORD WINAPI ThreadFuncHTTP(SERVER* p_server)
{
SERVER server;
server = *p_server; //через перегруженное присваивание (из-за строк)
server.report_file.open("http_report.txt",ios::app);
int retval;
//*********************** Приём - передача сервера ***********************
while(true) {
retval = server.recv_data();
if (retval==-1) break; // если сокетная ошибка
retval = server.ProcessClientQuery();
// если критическая ошибка, то:
if (retval==-1) break;
// Если сервер принял команду об окончании сеанса соединения, то:
if (retval==1)
{
server.report_file.close();
cout<<"The HTTP-transaction successfully completed."<
return 1;
}
// отправляем ответ клиенту, если это был запрос, а не данные
if(!server.block_reply) server.send_data();
if(server.quit) break;
} //end of while
//******************** Конец приёма - передачи сервера *******************
server.shutdown_and_closesocket();
if(server.conf.echo)
for (int i=0;i
cout<<"Parametr #"<
server.ProcessHTTPCommand(); // Здесь на основе полученных от HTTP-клиента
// параметров производим запланированные
// действия
return 0;
}
//////////////////////////////// main ////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
int main(void)
{
CONF_HTTP conf;
conf.Init();
printf("The IP-packet generator.\n\nWaiting for HTTP-query...\n\n");
DISPATCH_SERVER_SOCKET_HTTP s(conf);
s.accept_connect();
return 0;
}
///////////////////////////// end of main ////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
char* substring(char* st,char s1,char s2,char* ret)
{
ZeroMemory(ret,sizeof(ret));
strncpy(ret,getspos(st,s1)+1,getspos(st,s2)-getspos(st,s1)-1);
return ret;
}
//////////////////////////////////////////////////////////////////////////
char* getspos(char* search_string,char search_symbol)
{
int count=0;
while(true)
{
if (count>200)
{
cout<<"The search symbol "<
getch();return NULL;
}
if (*search_string != search_symbol)
{search_string++; count++;} else break;
}// endwhile
return search_string;
}
//////////////////////////////////////////////////////////////////////////
void readcomment(fstream& file)
{
char empty[MAX_PATH]={0}; // буфер для считывания
ZeroMemory(empty,sizeof(empty));
file.getline(empty,sizeof(empty),10);
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void SERVER::CreateQueryForm(char* temp_path)
{
// Здесь решаем вопрос об отправке клиенту формы на основании его
// запроса
if(!strcmp(param[0].name,"send"))
{
if(!strcmp(param[1].name,"V1"))
strcpy(temp_path,"http_icmp_form.htm");
if(!strcmp(param[1].name,"V2"))
strcpy(temp_path,"http_attack_form.htm");
}
else
if(!strcmp(param[0].name,"icmp"))
strcpy(temp_path,"http_icmp_reply.htm");
else
if(!strcmp(param[0].name,"attack"))
strcpy(temp_path,"http_attack_reply.htm");
};
//////////////////////////////////////////////////////////////////////////
int SERVER::ProcessHTTPCommand(void)
{
if(!strcmp(param[0].name,"icmp")||!strcmp(param[0].name,"attack"))
{
send_icmp_sequence(param);
cout<<"It was done by the HTTP-client."<
}
return 0;
};
//////////////////////////////////////////////////////////////////////////
Файл Packet.cpp
#include "packet.h"
void ICMP_PACKET::PrintPacket(void)
{
IP_HDR ipHdrRef;
ICMP_HDR icmpHdrRef;
struct in_addr addrRef;
printf("Prepared to send: %d bytes\n", iTotalSize);
ZeroMemory(&ipHdrRef,sizeof(ipHdrRef));
ZeroMemory(&icmpHdrRef,sizeof(icmpHdrRef));
ZeroMemory(&addrRef,sizeof(addrRef));
memcpy(&ipHdrRef, buf, sizeof(ipHdrRef));
memcpy(&icmpHdrRef, (buf + sizeof(ipHdrRef)), sizeof(icmpHdrRef));
printf("The IP-header content:\n\n");
printf("Type of service: %d\n", ipHdrRef.ip_tos);
printf("Total packet length: %d\n", ntohs(ipHdrRef.ip_totallength));
printf("Unique identifier: %d\n", ntohs(ipHdrRef.ip_id));
printf("Fragment offset field: %d\n", ntohs(ipHdrRef.ip_offset));
printf("Time to live: %d\n", ipHdrRef.ip_ttl);
printf("Encapsulated protocol number: %d\n", ipHdrRef.ip_protocol);
printf("Checksum: %d\n", ntohs(ipHdrRef.ip_checksum));
addrRef.S_un.S_addr = ipHdrRef.ip_srcaddr;
printf("Source address: %s\n", inet_ntoa(addrRef));
ZeroMemory(&addrRef,sizeof(addrRef));
addrRef.S_un.S_addr = ipHdrRef.ip_destaddr;
printf("Destination address: %s\n\n", inet_ntoa(addrRef));
printf("The ICMP-header content:\n\n");
printf("Type: %d\n", icmpHdrRef.i_type);
printf("Code: %d\n", icmpHdrRef.i_code);
printf("Checksum: %d\n", ntohs(icmpHdrRef.i_cksum));
printf("Unique identifier: %d\n", ntohs(icmpHdrRef.i_id));
printf("Sequence number: %d\n\n", ntohs(icmpHdrRef.i_seq));
};
//WSADATA wsd;
RAW_SOCKET::RAW_SOCKET(int proto) //IPPROTO_ICMP
{
int ret;
/*
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("WSAStartup() failed: %d\n", GetLastError());getchar();
exit(-1);
}
*/
// Creating a raw socket with an undefined (raw) protocol
s = WSASocket(AF_INET, SOCK_RAW, proto, NULL, 0,0);
if (s == INVALID_SOCKET)
{
printf("WSASocket() failed: %d\n", WSAGetLastError());getchar();
exit(-1);
}
// Enable the IP header include option
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));
if (ret == SOCKET_ERROR)
{
printf("setsockopt(IP_HDRINCL) failed: %d\n", WSAGetLastError());getchar();
exit(-1);
}
};
int RAW_SOCKET::BindSocket(u_long address)
{
SOCKADDR_IN local;
local.sin_family = AF_INET;
//local.sin_port = htons((short)iPort); // for UDP or TCP
local.sin_addr.s_addr = address;//htonl(INADDR_ANY);
//local.sin_addr.s_addr = inet_addr(szInterface);
if (bind(s, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR)
{
printf("bind() failed: %d\n", WSAGetLastError());getchar();
return -1;
}
return 0;
};
Файл Packet.h
#pragma pack(1)
#define WIN32_LEAN_AND_MEAN // Windows Headers use this symbol
// to exclude rarely-used header files. Please refer to Windows.H
//to determine the files that will be excluded when this symbol is defined
#include
#include
#include
#include
#define MAX_MESSAGE 4068
#define MAX_PACKET 4096
#define ICMP_ECHO 8
#define MAX_ICMP_PACKET 1024 // Max ICMP packet size
//
// Setup some default values
//
#define DEFAULT_PORT_SEND //5001
//#define DEFAULT_PORT_RECV 5000
//#define DEFAULT_IP_SEND "127.0.0.1"
//#define DEFAULT_IP_RECV "127.0.0.1"
//#define DEFAULT_COUNT 1 //5
#define DEFAULT_MESSAGE "This is a test"
//char szInterface[32] = "10.0.0.1"; // Default interface to read datagrams from
//
// Define the IP header. Make the version and length field one
// character since we can't declare two 4 bit fields without
// the compiler aligning them on at least a 1 byte boundary.
//
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;
//
// Define the UDP header
//
typedef struct udp_hdr
{
u_short src_portno; // Source port number
u_short dst_portno; // Destination port number
u_short udp_length; // UDP packet length
u_short udp_checksum; // UDP checksum (optional)
} UDP_HDR, *PUDP_HDR;
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;
u_short checksum(u_short *buffer, int size);
typedef struct tag_param{char name[100];} PARAM;
//////////////////////////////////////////////////////////////////////////
class ICMP_PACKET
{
public:
char buf[MAX_PACKET],*ptr;
IP_HDR ipHdr;
ICMP_HDR icmpHdr;
u_short iTotalSize;
struct sockaddr_in remote; // IP addressing structures
void PrintPacket(void);
void FillFields(PARAM* param);
};
class RAW_SOCKET
{
public:
SOCKET s;
BOOL bOpt;
RAW_SOCKET(int proto);
int SendPackets(char* buf, u_short TotalSize,
struct sockaddr_in *p_remote, DWORD amount);
int BindSocket(u_long address);
int RecvPackets(void);
};
int send_icmp_sequence(PARAM* param);
Файл Raw_send.cpp
#include "packet.h"
// Global variables
u_long dwToIP, // IP to send to
dwFromIP; // IP to send from (spoof)
u_short iToPort, // Port to send to
iFromPort; // Port to send from (spoof)
DWORD dwCount; // Number of times to send
char strMessage[MAX_MESSAGE]; // Message to send
void ICMP_PACKET::FillFields(PARAM* param)
{
u_short // Lots of sizes needed to fill
//iUdpSize, // the various headers with
iIPVersion,
iIPSize,
cksum = 0;
dwToIP = inet_addr(param[6].name);
dwFromIP = inet_addr(param[5].name);
ptr=NULL;
ZeroMemory(buf,MAX_PACKET);
//iTotalSize = sizeof(ipHdr) + sizeof(icmpHdr) + strlen(strMessage);
iTotalSize = sizeof(ipHdr) + sizeof(icmpHdr);
iIPVersion = 4;
iIPSize = sizeof(ipHdr) / sizeof(u_long);
//
// IP version goes in the high order 4 bits of ip_verlen. The
// IP header length (in 32-bit words) goes in the lower 4 bits.
//
ipHdr.ip_verlen = (iIPVersion << 4) | iIPSize;
ipHdr.ip_tos = atoi(param[2].name); //0 // IP type of service
ipHdr.ip_totallength = htons(iTotalSize); // Total packet len
ipHdr.ip_id = 0; // Unique identifier: set to 0
ipHdr.ip_offset = htons(atoi(param[3].name)); //0; // Fragment offset field
ipHdr.ip_ttl = atoi(param[4].name); //128; // Time to live
ipHdr.ip_protocol = 0x01; // Protocol(ICMP)
ipHdr.ip_checksum = 0 ; // IP checksum
ipHdr.ip_srcaddr = dwFromIP; // Source address
ipHdr.ip_destaddr = dwToIP; // Destination address
//
// Initalize the UDP header
//
//iUdpSize = sizeof(udpHdr) + strlen(strMessage);
/*
iUdpSize = sizeof(udpHdr);
udpHdr.src_portno = htons(iFromPort) ;
udpHdr.dst_portno = htons(iToPort) ;
udpHdr.udp_length = htons(iUdpSize) ;
udpHdr.udp_checksum = 0 ;*/
// Initalize the ICMP header
icmpHdr.i_type = (u_char)atoi(param[7].name); //0; //put here a number in the range 0-127 (except for
//the error numbers)
icmpHdr.i_code = (u_char)atoi(param[8].name); /* 0; put here a number in the range 0-127,
This way you can build your own ICMP-message types
for hundreds of different occasions.*/
icmpHdr.i_cksum = 0;
icmpHdr.i_id = htons(atoi(param[9].name)); //0;
icmpHdr.i_seq = htons(atoi(param[10].name)); //0;
icmpHdr.i_cksum = checksum((u_short*)&icmpHdr, sizeof(icmpHdr));
// Now assemble the IP and UDP headers along with the data
// so we can send it
ZeroMemory(buf, MAX_PACKET);
ptr = buf;
memcpy(ptr, &ipHdr, sizeof(ipHdr)); ptr += sizeof(ipHdr);
//memcpy(ptr, &udpHdr, sizeof(udpHdr)); ptr += sizeof(udpHdr);
memcpy(ptr, &icmpHdr, sizeof(icmpHdr)); ptr += sizeof(icmpHdr);
//memcpy(ptr, strMessage, strlen(strMessage));
// Apparently, this SOCKADDR_IN structure makes no difference.
// Whatever we put as the destination IP addr in the IP header
// is what goes. Specifying a different destination in remote
// will be ignored.
//
remote.sin_family = AF_INET;
//remote.sin_port = htons(iToPort);
remote.sin_addr.s_addr = dwToIP;
//PrintPacket();
};
int RAW_SOCKET::SendPackets(char* buf, u_short iTotalSize,
struct sockaddr_in *p_remote, DWORD dwCount)
{
DWORD i,j;
int ret;
((ICMP_PACKET*)buf)->PrintPacket();
for(i = 0; i < dwCount; i++)
{
ret = sendto(s, buf, iTotalSize, 0, (SOCKADDR *)p_remote,
sizeof(struct sockaddr_in));
if (ret == SOCKET_ERROR)
{
printf("sendto() failed: %d\n", WSAGetLastError());getchar();
break;
}
else
{
buf[ret] = '\0';
printf("Info sent to [%s]:\n",
inet_ntoa(p_remote->sin_addr));
for (j=0;j<(u_int)ret;j++) printf("%d", buf[j]);
printf("%c",'\n');
for (j=0;j<(u_int)ret;j++) printf("%c", buf[j]);
printf("\nNumber of bytes sent: %d\n", ret);
}
} // end for
return 0;
};
// Function: send_icmp_sequence
//
// Description:
// Create the raw socket and set the IP_HDRINCL option.
// Following this, assemble the IP and ICMP packet headers by
// assigning the correct values and calculating the checksums.
// Then fill in the data and send to its destination.
//
int send_icmp_sequence(PARAM* param)
{
ICMP_PACKET packet;
RAW_SOCKET raw_socket(IPPROTO_RAW);
//dwCount = DEFAULT_COUNT;
dwCount = atoi(param[1].name);
packet.FillFields(param);
raw_socket.SendPackets(packet.buf, packet.iTotalSize,
&packet.remote, dwCount);
closesocket(raw_socket.s) ;
// WSACleanup() ;
getchar();
return 0;
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Function: checksum
//
// Description:
// This function calculates the 16-bit one's complement sum
// for the supplied buffer.
// This function is taken from a MSDN v6.0 example (PING app example)
//
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);
}
//////////////////////////////////////////////////////////////////////////
Файл http_conf.inf
127.0.0.1 ip-адрес, назначенный этому серверу (0.0.0.0-это INADDR_ANY)
8080 Порт приёма HTTP-запросов этого сервера
0 1/0-echo on/echo off
Файл http_client.htm
HTML 4.0 Transitional//EN">
<title>HTTP-Клиент для управления генератором
IP-пакетовtitle>