новости
статьи
.save ass…

ICE (Intrusion Countermeasures Electronics) – достойная альтернатива iptables

В первой части статьи автор знакомит читателей с основами функционирования Linux-файрволла (netfilter), а во второй – описывает собственную разработку - ICE (Intrusion Countermeasures Electronics). Этот продукт, ранее называвшийся ipfilter, может служить неплохой альтернативой стандартному интерфейсу к netfilter – хорошо знакомой всем нам утилите iptables.

введение

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

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

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

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

прохождение пакетов на сетевом уровне

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

В Linux существуют 3 системные таблицы:

– nat. Таблица nat используется главным образом для преобразования сетевых адресов (Network Address Translation). Через эту таблицу проходит только первый пакет из потока, а преобразование адресов применяется ко всем последующим пакетам автоматически. Это одна из причин не выполнять в этой таблице какую-либо фильтрацию. Цепочка PREROUTING используется для внесения изменений в пакеты на входе в файрвол. Цепочка OUTPUT используется для преобразования пакетов, созданных приложениями внутри файрвола, перед принятием решения о маршрутизации. Следует обратить внимание на то, что в настоящее время эта цепочка не работает. И последняя цепочка в этой таблице - POSTROUTING, которая используется для преобразования пакетов перед выдачей их во внешнюю среду.

- mangle. Эта таблица используется для внесения изменений в заголовки пакетов. Примером может служить изменение поля TTL, TOS или MARK. Важная особенность: в действительности поле MARK не изменяется /* по правде говоря, такого поля в заголовках IP, TCP или UDP не предусмотрено ;) - прим. ред. */, но в памяти ядра заводится структура, которая сопровождает данный пакет все время его прохождения через машину, так что другие правила и приложения на данной машине (и только на данной машине) могут использовать это поле в своих целях. Таблица имеет пять цепочек: PREROUTING, POSTROUTING, INPUT, OUTPUT и FORWARD.

PREROUTING используется для внесения изменений на входе в файрвол, перед первым принятием решения о маршрутизации. POSTROUTING используется для внесения изменений на выходе из файрвола, после последнего принятия решения о маршрутизации, INPUT - для внесения изменений в пакеты перед тем как они будут переданы локальному приложению внутри файрвола, OUTPUT - для внесения изменений в пакеты, поступающие от приложений внутри файрвола, FORWARD - для внесения изменений в транзитные пакеты после первого принятия решения о маршрутизации, но перед последним принятием решения о маршрутизации. Таблица mangle ни в коем случае не должна использоваться для преобразования сетевых адресов или маскарадинга (Network Address Translation, Masquerading), поскольку для этих целей имеется таблица nat.
– filter. Таблица filter используется главным образом для фильтрации пакетов. Например, здесь мы можем выполнить DROP, LOG, ACCEPT или REJECT без каких либо сложностей, как в других таблицах. Имеются три встроенных цепочки. Цепочка FORWARD используется для фильтрации пакетов, идущих транзитом через файрвол. Цепочку INPUT проходят пакеты, которые предназначены локальным приложениям (файрволу). Цепочка OUTPUT используется для фильтрации исходящих пакетов, сгенерированных приложениями на самом файрволе.

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

особенности разработанной системы

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

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

– возможность загрузки правил по сетевому соединению. На машине файрвола запускается сервис, который прослушивает сетевой интерфейс (отдельный или тот же, что подвергается мониторингу) на наличие подключения от клиента, который способен послать правила по сети;

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

Помимо этого продукт обладает следующими дополнительными возможностями:

– авторизация доступа к определенным возможностям программы. Различным пользователям предоставляются различные средства для работы и различные привилегии на запуск тех или иных сервисов;

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

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

Разработанное программное обеспечение состоит из двух взаимодействующих частей:

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

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

системный сервис

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

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

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

клиентское приложение

Модуль аутентификации и авторизации отвечает за операции определения подлинности пользователя и его полномочий по выполнению различных операций. Этот модуль обладает минимальной взаимосвязью с остальными модулями для осуществления максимальной безопасности. Для аутентификации пользователей в нем использован подход, классический для UNIX. Поскольку части системы взаимодействуют через сеть, присутствует модуль поддержки данного взаимодействия. Этот модуль работает в тесном взаимодействии с модулем шифрования сетевого канала для осуществления безопасности при сетевом подключении и отвечает за все операции, необходимые для обмена информацией по сети: открытие, ожидание, закрытие соединения, прием и передача данных.Организация работы в клиентской системе осуществляется при непосредственном взаимодействии с пользователем. Интерфейс реагирует на выбор пользователем определенной операции, которая затем выполняется системой. Функция предоставления эргономичного, обладающего многофункциональной кнопочной панелью пользовательского интерфейса реализуется отдельным модулем, связанным с другими частями системы, который в данный момент находится на стадии разработки.

средства реализации


Программное обеспечение разработано с использованием С/С++ и gcc 3.x. Для шифрования данных выбрана библиотека OpenSSL, причиной чего послужила ее хорошая документированность и достаточно активное использование в проектах Open Source. Для шифрования канала использовано блочное шифрование - режим DES-CBC3-MD5. В результате алгоритм DES используется трижды с тремя различными 56-битными ключами, обеспечивая достаточную стойкость к атакам (тройной DES в режиме CBC, хэш MD5, 168-битный ключ сессии).

Для реализации сетевой части приложения выбрана библиотека ACE. На выбор повлиял тот факт, что данная библиотека обладает универсальным механизмом построения фрэймворка сетевых приложений, обладает гибким механизмом организации событийности в системе. В ACE используется объектно- ориентированная декомпозиция, дизайн интерфейсов, паттерны, инкапсулирующие данные, а так же ряд классических возможностей языка C++, что послужило основной причиной отхода от чистого С в проекте. Для загрузки правил в ядро использована библиотека libiptc, значительно упрощающая работу с функциями ядра, обеспечивающими фильтрацию. В настоящий момент эта библиотека является единственной альтернативой использованию сложного и громоздкого механизма поддержки фильтрации, реализованного в ядре Linux.

Для реализации пользовательского интерфейса было решено воспользоваться библиотекой wxWidgets. wxWidgets под Linux поддерживает несколько оконных библиотек более низкого уровня, таких как GTK+, Motiff, Xlib, что позволяет обеспечить "родной" внешний вид приложения для пользователей в различных рабочих средах.

работа с правилами фильтрации

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

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

# комментарий
<опция> <значение> # комментарий


Хорошо иллюстрирует это следующий пример:

# main option
pid /var/run/iptice.pid # describe process pid file


Формат файла, хранящего список правил фильтрации, еще проще. За исключением начинающихся с символа # строк-комментариев, каждая строка файла воспринимается как правило фильтрации.

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

- поступающие от пользователя команды запуска и останки системной службы;

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

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

Как уже упоминалось, в качестве основы для правил фильтрации взяты правила iptables. Формат правил имеет следующий вид:

команда [параметры] -j действие


Пример строки правила:

-A INPUT -p TCP -j ACCEPT # simple rule


заключение

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

Домашняя страница проекта расположена по адресу silentchaos.info.



Дмитрий Яцушкевич, ООО "АУКТ-ИСОФТ", daermon@mail.ru
обсудить статью
© сетевые решения
.
.