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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 24.01.2018
Размер файла 483,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

  • Введение

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

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

1. Постановка и анализ задачи

На данном этапе поставлена задача для подмены порта назначения на открытый в данном канале связи, в данном случае 53-ий порт, что соответствует DNS протоколу по умолчанию. Так как данная подмена имитирует простейшее DNS-туннелирование, необходимо рассмотреть их программные аналоги.

Рассмотрим современные утилиты по DNS-туннелированию.

Dnscat - утилита для туннелирования двух произвольных узлов, использующих выбранный DNS сервер. Программа основана на сетевой утилите NetCat и имеет следующие преимущества:

- проходит почти все фаерволы в сети;

- проходит большинство локально установленных сетевых экранов;

- это возможность установки соединения и передачи информации (текстовых сообщений или файлов) между двумя произвольными хостами интернета;

- возможность через уже установленное соединение, удаленно запускать команды системной оболочки (реализуется через опцию -e), а также перенаправлять при этом вывод запускаемых команд на инициирующий соединение хост;

- не использует прокси.

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

Утилита поставляется вместе с исходниками (сразу с клиентской и серверной частью), и может быть скомпилирована под Linux, FreeBSD и Windows.

Name Server Transfer Protocol (NSTX) - одна из самых известных и фундаментальных реализаций идеи DNS-туннелинга. Данный комплекс создаёт двунаправленный IP-туннель для передачи данных на базе любого легитимного транзитного DNS-трафика, что особенно удобно в общественных Wi-Fi сетях, где доступ к определённым ресурсам может быть заблокирован.

Heyoka - это выделяющийся на фоне аналогов инструментарий, который позволяет создавать двунаправленные TCP/IP туннели на основе использования всё того же DNS-трафика.

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

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

Вторая особенность - Heyoka полностью ориентирован на ОС Windows. У этой утилиты нет конфигурационных файлов, она полностью настраивается через консоль посредством аргументов командной строки. Один и тот же головной exe-файл может быть запущен как в режиме master, равно как и slave, позволяя пробрасывать любой трафик с локального на заданный удаленный порт.

Как и все предыдущие инструменты, Iodine позволяет передавать IPv4 через DNS-трафик. Основные отличия, которые делают его без сомнения очень интересной реализацией:

- впервые используются экспериментальные NULL-пакеты (NULL RDATA format из RFC 1035), что позволяет существенно ускорить трансфер данных, доведя размер одного пакета до 1Кб полезных данных;

- iodine спроектирован очень универсально - он прекрасно работает как на Win32-системах, так и практически на всех Unix-системах. Таким образом, это даёт возможность запустить клиента, например, в среде Windows, а принимающий сервер настроить уже под FreeBSD;

- пакет содержит достаточно хорошую встроенную систему безопасности - он использует аутентификацию на базе MD5-хеша, а также принимает пакеты только с тех IP-адресов, которые сначала прошли аутентификацию, отбрасывая любые другие, какие бы команды они не содержали;

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

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

Служба должна иметь все стандартные возможности службы, а именно: запуск вручную, приостановка и остановка работы службы. Так же немало важен тот факт, что служебные приложения в операционных системах Windows имеют специфическую установку. Поэтому необходимо, чтобы у пользователя была возможность как установить, так и удалить службу из диспетчера системных сервисов [4]. К тому же, пользователь должен иметь возможность выбирать, к пакетам каких IP адресов применять подмену портов. Для этого необходимо реализовать специальный файл-фильтр, содержащий в себе список IP адресов и подлежащий заполнению пользователем. Кроме того, необходимо чтобы пользователь имел возможность просматривать итог работы утилиты - реализация лог файла.

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

Все описанные выше возможности изображены на рисунке 1 в виде диаграммы вариантов использования.

Рисунок 1 - Диаграмма вариантов использования со стороны системы прослушки

В данной задаче наиболее важна скорость работы, т.к. служебная утилита обязана быстро отвечать на запросы от диспетчера системных сервисов, а так же не забирать ресурсы активных процессов системы. Именно поэтому в качестве средств реализации был выбран язык C\C++, так как он очень универсален и удобен в написании подобных утилит. В сравнении с его более новым С#, C\C++ обеспечивает прирост в производительности на 15-20%, несмотря на более сложную и долгую разработку [1].

Так же как вспомогательная библиотека для работы с сетью и перехвата сетевых пакетов выбрана WinPcap, так как она предоставляет широкий набор мощных функций, подходящий к поставленной задаче [2].

2. Анализ данных

программный доменный тунеллирование

В качестве исходных данных к службе используется только список IP адресов, на которые данные отправляются с подменёнными портами, т.е. предполагается наличие такой же службы на каждом из указанных пользователем IP адресов. Данный список формируется пользователем в текстовом файле в особом формате, поэтому об этом подробнее будет описано ниже. В качестве логической структуры данных выступают заголовки IP, TCP, UDP, а так же заголовок Ethernet фрейма [3]. Для того, чтобы разобрать пришедший на сетевой интерфейс поток данных необходимо описать структуры данных в конкретном языке программирования для вышеуказанных протоколов. Подробное описание и код данных структур описаны в разделе программной реализации.

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

- каждый IP адрес должен начинаться с новой строки;

- адрес должен представлять из себя запись в виде четырёх десятичных чисел значением от 0 до 255, разделённых точками.

При отсутствии адресов в данном файле служба прекратит свою работу на этапе запуска.

3. Программная реализация

На данном этапе были разработаны следующие структуры данных:

- структура заголовка Ethernet фрейма, показана на рисунке 2;

- структура заголовка IP пакета, показана на рисунке 3;

- структура заголовка TCP сегмента, показана на рисунке 4;

- структура заголовка UDP сегмента, показана на рисунке 5.

Рисунок 2 - Код структуры Ethernet фрейма

Рисунок 3 - Код структуры IP пакета

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

Рисунок 4 - Код структуры TCP сегмента

Рисунок 5 - Код структуры UDP сегмента

Для установки и удаления службы из диспетчера системных сервисов написан класс Service Installer. Он предназначен только для установки и удаления служб. Заголовочные файлы всех вышеописанных классов можно посмотреть в приложении А.

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

Если же нет совпадения со списком IP адресов из файла-фильтра, то происходит проверка на соответствие порта назначения рабочему порту (в данном случае 53). При успехе проверяются первые 16 бит данных, если они совпадают с уникальной последовательностью, то из пакета извлекаются следующие 16 бит (первоначальный порт назначения) и данным возвращается исходное значение, как и порту назначения. Таким образом осуществляется простейшее DNS-туннелирование.

4. Модульная структура программы

Модульная структура программы представлена в виде диаграммы компонентов на рисунке 7, описание приведено в таблице 1.

Рисунок 7 - Диаграмма компонентов

Таблица 1 - Описание компонентов программы

Компонент

Описание

CppWindowsService.cpp

Точка входа в программу

ServiceInstaller.h

Заголовочный файл класса установки службы

ServiceInstaller.cpp

Реализация класса установки службы

ServiceBase.h

Заголовочный файл базового класса службы

ServiceBase.cpp

Реализация базового класса службы

SampleService.h

Заголовочный файл класса службы подмены портов

SampleService.cpp

Реализация класса службы подмены портов

ThreadPool.h

Функции для работы с потоками

support.h

Заголовочный файл вспомогательных функций системы

support.cpp

Реализация вспомогательных функций системы

IPHeaders.h

Файл со структурами заголовков IP

IPHdrSupp.h

Заголовочный файл вспомогательных функций по работе с заголовками

IPHdrSupp.cpp

Реализация вспомогательных функций по работе с заголовками

5. Тестирование

Тестирование - это любая деятельность, направленная на обнаружение ошибок. На данном этапе было выявлено и устранено множество ошибок, вот их неполный список:

- неверная работа с буферами памяти, приводящая к некоректному результату в части возвращения пакета к исходному виду;

- ошибка при установке службы - неверные параметры пользователя системы;

- ошибки, связанные с особенностями инициализации необходимых библиотек;

- неверная работа с буфером сетевых устройств.

Тестирование службы проводилось как «ручным» методом, просмотром исходного кода, так и детерминированным тестированием, путём многократного выполнения программы.

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

6. Техническое задание

Служба подмена порта должна связать два узла в обмене сообщений, если ранее это было невозможно из-за фаервола.

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

Цели и задачи внедрения системы.

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

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

Требования к функциональным характеристикам со стороны системы прослушки сообщений.

- возможность прослушивать входящие и выходящие данные с сетевого узла;

- анализ приходящих пакетов;

- отправка полученных данных как в исходном виде, так и с подмененным портом;

- запись исходного порта пакета вместе с данными;

- восстановление исходного вида пакета.

Требования к надежности.

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

Требование к составу и параметрам технических средств.

Программа должна работать на компьютерах со следующими характеристиками:

Минимальные требования к компьютеру пользователя:

- процессор не ниже Intel Pentium 4;

- ОЗУ не менее 256 Mb;

- 20 Mb свободного дискового пространства;

- сетевая карта.

Оптимальные требования к компьютеру пользователя:

- процессор не ниже Intel Core 2 duo;

- ОЗУ не менее 512 Mb;

- 20 Mb свободного дискового пространства;

- сетевая карта.

Программная документация должна быть представлена руководством пользователя.

7. Руководство пользователя

Для начала работы службы пользователю необходимо:

- переместить в нужный каталог файлы «filter.txt» и «diploma.exe»;

- в выбранном каталоге у пользователя должны иметься все права чтение\запись и изменение;

- запустить файл «diploma.exe» из командной строки с параметром -install для установки службы в базу диспетчера системных сервисов, как показано на рисунке 8.

Рисунок 8 - Установка службы из командной строки

Все дальнейшие операции стандартны для любой службы Windows и производятся из окна управления компьютером раздела служб, показанного на рисунке 9. Выбрав из списка службу можно задать различные типы запуска или поменять другие стандартные параметры, как видно из рисунка 10.

Для удаления службы из базы диспетчера системных сервисов необходимо запустить приложение из командной строки с параметром -remove.

Рисунок 9 - Управление компьютером, службы

Рисунок 10 - Окно свойств службы

Заключение

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

- проверка отправляемого пакета на необходимость к подмене порта;

- отправка такого пакета уже с изменённым портом назначения;

- проверка принятого на сетевой интерфейс пакета на необходимость к возврату в исходный вид;

- возврат принятого пакета в изначальный вид и отправка на исходный порт назначения.

В дальнейшем хотелось бы добавить\улучшить следующие характеристики программы:

- возможность динамического подбора рабочего порта подмены в случаях с локальным кэширующим DNS сервером в корпоративной сети;

- считывание пришедших пакетов напрямую из сетевого интерфейса, а не получения их копии и работы с ними - это предотвратит «замусоривание» сети;

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

Литература

1. Прата С. Язык программирования С++. Лекции и упражнения. / С. Прата - Санкт-Петербург: Вильямс, 2012. - 1244с.

2. Использование WinPcap в своих приложениях/ CACE Technologies..

3. Сетевое программирование и не только / BinaryTides.

4. Сеть разработчиков Microsoft / Microsoft.

Приложение

Заголовочные файлы классов

//Класс ServiceBase

class CServiceBase

{

public:

// Register the executable for a service with the Service Control Manager

// (SCM). After you call Run(ServiceBase), the SCM issues a Start command,

// which results in a call to the OnStart method in the service. This

// method blocks until the service has stopped.

static BOOL Run(CServiceBase &service);

// Service object constructor. The optional parameters (fCanStop,

// fCanShutdown and fCanPauseContinue) allow you to specify whether the

// service can be stopped, paused and continued, or be notified when

// system shutdown occurs.

CServiceBase(PWSTR pszServiceName,

BOOL fCanStop = TRUE,

BOOL fCanShutdown = TRUE,

BOOL fCanPauseContinue = FALSE);

// Service object destructor.

virtual ~CServiceBase(void);

// Stop the service.

void Stop();

protected:

// When implemented in a derived class, executes when a Start command is

// sent to the service by the SCM or when the operating system starts

// (for a service that starts automatically). Specifies actions to take

// when the service starts.

virtual void OnStart(DWORD dwArgc, PWSTR *pszArgv);

// When implemented in a derived class, executes when a Stop command is

// sent to the service by the SCM. Specifies actions to take when a

// service stops running.

virtual void OnStop();

// When implemented in a derived class, executes when a Pause command is

// sent to the service by the SCM. Specifies actions to take when a

// service pauses.

virtual void OnPause();

// When implemented in a derived class, OnContinue runs when a Continue

// command is sent to the service by the SCM. Specifies actions to take

// when a service resumes normal functioning after being paused.

virtual void OnContinue();

// When implemented in a derived class, executes when the system is

// shutting down. Specifies what should occur immediately prior to the

// system shutting down.

virtual void OnShutdown();

// Set the service status and report the status to the SCM.

void SetServiceStatus(DWORD dwCurrentState,

DWORD dwWin32ExitCode = NO_ERROR,

DWORD dwWaitHint = 0);

// Log a message to the Application event log.

void WriteEventLogEntry(PWSTR pszMessage, WORD wType);

// Log an error message to the Application event log.

void WriteErrorLogEntry(PWSTR pszFunction,

DWORD dwError = GetLastError());

private:

// Entry point for the service. It registers the handler function for the

// service and starts the service.

static void WINAPI ServiceMain(DWORD dwArgc, LPWSTR *lpszArgv);

// The function is called by the SCM whenever a control code is sent to

// the service.

static void WINAPI ServiceCtrlHandler(DWORD dwCtrl);

// Start the service.

void Start(DWORD dwArgc, PWSTR *pszArgv);

// Pause the service.

void Pause();

// Resume the service after being paused.

void Continue();

// Execute when the system is shutting down.

void Shutdown();

// The singleton service instance.

static CServiceBase *s_service;

// The name of the service

PWSTR m_name;

// The status of the service

SERVICE_STATUS m_status;

// The service status handle

SERVICE_STATUS_HANDLE m_statusHandle; };

Продолжение приложения А

//Класс SampleService

class CSampleService : public CServiceBase

{

public:

CSampleService(PWSTR pszServiceName,

BOOL fCanStop = TRUE,

BOOL fCanShutdown = TRUE,

BOOL fCanPauseContinue = FALSE);

virtual ~CSampleService(void);

protected:

virtual void OnStart(DWORD dwArgc, PWSTR *pszArgv);

virtual void OnStop();

void ServiceWorkerThread(void);

private:

BOOL m_fStopping;

HANDLE m_hStoppedEvent;

};

//Класс ServiceInstaller

class ServiceInstaller

{

public:

void InstallService(PWSTR pszServiceName,

PWSTR pszDisplayName,

DWORD dwStartType,

PWSTR pszDependencies,

PWSTR pszAccount,

PWSTR pszPassword);

void UninstallService(PWSTR pszServiceName);

};

Размещено на Allbest.ru


Подобные документы

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

    презентация [104,2 K], добавлен 25.10.2013

  • Назначение и сущность системы доменных имен (DNS) и службы имен Интернет для Windows (WINS). Запросы, зоны и инструменты DNS. Служебные программы командной строки. Установка и настройка DNS-сервера. Записи ресурсов узлов, псевдонимов и размещения службы.

    презентация [553,6 K], добавлен 10.11.2013

  • Исследование сетевой операционной системы. Определение набора веб-приложений, которые объединены в рамках единого пользовательского интерфейса, напоминающего классические десктопные системы. Рассмотрение сетевых утилит операционной системы Windows.

    отчет по практике [255,1 K], добавлен 20.10.2021

  • Понятие сети ЭВМ и программного обеспечения компьютерных сетей. Локальные, корпоративные и глобальные вычислительные сети. Технологии сетевых многопользовательских приложений. Сетевые ОС NetWare фирмы Novell. Назначение службы доменных имен DNS.

    учебное пособие [292,6 K], добавлен 20.01.2012

  • Принципы идентификации компьютеров в глобальной сети Internet. Алгоритм и листинг программы "Domain name, IP" для определения IP-адресов и доменных имен в сети института. Проектирование программного продукта в среде разработки Delphi для Windows.

    дипломная работа [586,5 K], добавлен 24.07.2014

  • Исследование особенностей проектирования и реализации автоматизированной системы "Учет товаров в сети продуктовых магазинов". Анализ требований к функциональным характеристикам, параметрам технических средств и надежности. Разработка моделей базы данных.

    курсовая работа [1,2 M], добавлен 24.11.2013

  • Виды протоколов - стандартов, определяющих формы представления и способы пересылки сообщений, процедуры их интерпретации, правила совместной работы оборудования в сетях. Корневые серверы DNS, обеспечивающие работу системы доменных имен Интернета.

    презентация [1,4 M], добавлен 14.05.2017

  • Разработка программы – сетевого эмулятора, позволяющего представить в графическом виде топологию маршрутизируемой сети. Сравнительный анализ существующих программных эмуляторов сетей и сетевого оборудования. Моделирование протоколов маршрутизации.

    дипломная работа [512,2 K], добавлен 26.09.2014

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

    курсовая работа [276,4 K], добавлен 31.05.2019

  • Описание экспертной системы по подбору кадров. Требования к функциональным характеристикам программы. Состав и параметры технических средств ЭВМ. Структура входных данных. Руководство программиста и пользователя. Тестирование программного средства.

    курсовая работа [897,0 K], добавлен 13.11.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.