Встраивание сервиса VPN в операционные системы BSD UNIX

© Панасенко Сергей, 2002.

В предыдущей статье были рассмотрены способы встраивания подсистемы VPN в операционные системы Windows NT/2000. В продолжение данной темы – описание возможностей реализации VPN для UNIX-систем.

Операционные системы семейства Microsoft Windows не предоставляют понятных и хорошо документированных способов перехвата сетевого трафика. В данном смысле встраивать какую-либо дополнительную функциональность в UNIX-системы существенно проще: во-первых, многие из них поставляются в исходных кодах на языке С, что позволяет квалифицированным программистам обходиться вообще без документации; во-вторых, они сопровождаются электронным справочником man, содержащим подробное описание как системных вызовов и библиотечных функций ОС, так и прикладных утилит. Причем, в отличие от встроенной в Windows справочной информации, которая ориентирована на пользователя, справочник man предоставляет все, что необходимо именно разработчику.
Рассмотрим операционные системы семейства BSD UNIX, абсолютное большинство из которых поставляются с исходными текстами ядра.

Сетевая архитектура BSD UNIX

Последовательность действий сетевых модулей BSD UNIX при отправке информации в сеть (см. рис. 1) такова:

Несомненно, есть много общего в реализации стека TCP/IP в различных операционных системах, поскольку поведение сетевых модулей должно соответствовать достаточно определенным стандартам. Однако, принципиальное отличие UNIX-систем от Windows состоит в том, что работа сетевой подсистемы здесь более прозрачна. Довольно легко проследить процесс обработки конкретных данных и постепенное "наслаивание" на них пакетных заголовков различных уровней стека "сверху-вниз". Соответственно, несравнимо проще найти наиболее удобные точки перехвата сетевого трафика.

Возможные точки перехвата

Перехват данных можно осуществлять практически на любом уровне стека TCP/IP:

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

Защита отправляемых данных

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

Конкретная реализация зависит от задач, для решения которых разрабатывается VPN-модуль. Существует масса спорных вопросов обработки IP-пакетов, например:

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

Прием данных

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

Дополнительные замечания

Поскольку BSD UNIX имеет в своем составе firewall ipfw, предоставляющий широкие возможности фильрации IP-пакетов, при встраивании в функции ip_output и ip_input достаточно реализовать шифрование и контроль целостности данных, положившись в части фильтрации на ipfw. Однако, выше описана только методика перехвата сетевого трафика, для реализации полноценного VPN-модуля придется сделать еще, как минимум, следующее:

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

 

Литература
  1. Робачевский А. Операционная система UNIX. – Санкт-Петербург, БХВ. – 1997.
  2. Мамаев М., Петренко С. Технологии защиты информации в Интернете. – Санкт-Петербург, Питер. – 2002.
  3. www.freebsd.org.ru/security.

 

Названия рисунков:
1. Обработка данных сетевыми модулями BSD UNIX.
2. Структуры буферов сокета.

Алгоритмы шифрования...

Rambler's Top100

Перейти на главную страницу

Карта сайта

Список статей