РАСШИРЕНИЕ ФУНКЦИЙ СИСТЕМЫ МОНИТОРИНГА ПОВЕДЕНИЯ

advertisement
РАСШИРЕНИЕ ФУНКЦИЙ СИСТЕМЫ МОНИТОРИНГА ПОВЕДЕНИЯ
ТРАНСПОРТНОГО ПРОТОКОЛА НА УРОВНЕ ЯДРА ОС LINUX
В.А. Пономарев, В.Н. Ковалев, Ю.А. Богоявленский, О.Ю. Богоявленская
ГОУ ВПО Петрозаводский государственный университет (ПетрГУ), г. Петрозаводск
Тел.: (8142) 71-10-15, e-mail: vadim@cs.karelia.ru, kovalev@cs.karelia.ru, ybgv@cs.karelia.ru,
olbgvl@cs.karelia.ru
Быстрое развитие прикладных сетевых услуг в вузах (дистанционные курсы, библиотечные системы,
административное управление и т.п.) требуют как постоянного анализа текущей производительности
транспортного уровня сетевой инфраструктуры, так и повышенного внимания к проблемам ее безопасности. В
таких условиях возрастает актуальность разработки аналитических моделей [1] и инструментальных средств
мониторинга этого уровня, на котором большинство трафика передается с помощью протокола TCP [2, 3].
Поведение реализаций этого протокола оказывает определяющее влияние на устойчивость, надежность и
производительность при передаче данных. В докладе представлено современное состояние системы GetTCP [4],
являющийся таким инструментальным средством, а также проект архитектуры ее следующей версии.
GetTCP служит для получения содержимого служебных структур данных и значений переменных реализации
протокола TCP в ядре (версия 2.6) ОС Linux. Такими служебными переменными являются, например, размер
скользящего окна, который используется при отправке каждого сегмента TCP, или усредненное значение
времени кругового оборота. С помощью широко известных утилит, таких как tcpdump [5], получить точные
значения этих переменных невозможно.
С точки зрения безопасности GetTCP является исчерпывающим решением, позволяющим интегрировать в
ОС все возможные функции защиты на уровне TCP. С точки зрения анализа производительности и
моделирования поведения TCP система предоставляет исследователю и администратору все необходимые
данные.
Основными компонентами архитектуры GetTCP являются:
• загружаемый модуль ядра ОС Linux, задачей которого является получение внутренних переменных ядра и
подготовка их к передаче на пользовательский уровень;
• утилита, работающая в пользовательском адресном пространстве, которая выполняет получение данных
от модуля ядра ОС Linux и запись полученных данных в файл;
• утилита, служащая для преобразования сохраненных данных в удобный для дальнейшей обработки вид
(например, в текстовый).
Более подробно основные архитектурные решения GetTCP, а также влияние GetTCP на производительность
системы, на которой ведутся измерения, описаны в [4]. Проведенный эксперимент по определению реактивности
показал, что для 94% отправляемых сегментов данных вносимая задержка не превышает 0,33 мкс.
Первоначально GetTCP была реализована для дистрибутива ОС Linux openSUSE 10.1 и ядра 2.6.16. При
этом для передачи данных из адресного пространства ядра в пользовательское адресное пространство
использовалась файловая система RelayFS [6]. Она была предназначена именно для эффективной передачи
данных из ядра на пользовательский уровень.
В последующих версиях ядра ОС Linux файловая система RelayFS подверглась изменениям и была
преобразована в Relay API. Поэтому при переходе на дистрибутив openSUSE 10.2 с ядром версии 2.6.18 система
GetTCP была модифицирована для использования нового API и файловой системы DebugFS, после чего была
использована для проверки адекватности модели [1], а также для экспериментов по обнаружению т.н. low-rate
атак [7] на транспортном уровне.
Текущая версия GetTCP не предназначена для поставки внешним пользователям, поэтому было принято
решение модифицировать ее архитектуру так, чтобы обеспечить произвольное задание набора
перехватываемых данных, упростить управление системой и разработать простое руководство пользователя.
В частности, в текущей версии системы GetTCP необходимо перекомпилировать все ее компоненты при
изменении:
• набора перехватываемых данных;
• размеров и количества подбуферов в пространстве ядра;
• других рабочих параметров системы.
Кроме того, установка системы требует внесения изменений в исходный код ядра и его перекомпиляции.
Для решения указанных проблем в архитектуре следующей версии планируется:
• обеспечить динамическое изменение набора перехватываемых системой GetTCP данных с определением
его в конфигурационном файле;
• реализовать транслятор конфигурационного файла во внутреннее представление;
• обеспечить преобразование бинарных данных, сохраняемых системой, в текстовую форму на основе
этого же конфигурационного файла.
Система GetTCP является инструментом, позволяющим получить все данные, необходимые для
исследования поведения реализации TCP ядра ОС Linux в различных условиях. Ведется работа по устранению
ряда недостатков GetTCP и преобразованию GetTCP из экспериментальной системы, пригодной для
использования только разработчиком, в прототип программного продукта.
Литература
1. О.Ю. Богоявленская, Анализ случайного потока, генерируемого транспортным протоколом в сети
передачи данных, "Автоматика и телемеханика", N12, 2003, с.56-65.
2. Postel, J., Transmission Control Protocol, STD7, RFC793, September 1981.
3. Allman, M., Paxon V., Stevens W., TCP Congestion Control, RFC2581.
4. Система мониторинга поведения транспортного протокола на уровне ядра операционной системы,
В.А. Пономарев, О.Ю. Богоявленская, Ю.А. Богоявленский, материалы II Международной научной конференции
по проблемам безопасности и противодействия терроризму МаБИТ-06.
5. Tcpdump, http://www.tcpdump.org.
6. High-Speed Data Relay Filesystem, http://www.opersys.com/relayfs.
7. Aleksandar Kuzmanovic, Edward W. Knightly, Low-Rate TCP-Targeted Denial of Service Attacks (The Shrew vs.
the Mice and Elephants), ACM SIGCOMM 2003, http://www.sigcomm.org/sigcomm2003/papers/p75-kuzmanovic.pdf.
Download