Персональные инструменты
Вы здесь: Главная Блог Проблемы анализа гигабитного трафика на обычном оборудовании

Проблемы анализа гигабитного трафика на обычном оборудовании

Автор: Денис Гамаюнов at 2009-01-19 16:57 |

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

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

Но ещё раньше два умника - Мур и Гилдер - отметили два тренда в области компьютерного железа, вроде бы независимых: первый показал, что производительность вычислителей, доступных за одну и ту же сумму, удваивается каждый год; второй заметил, что за то же время развитие технологий передачи данных увеличивают суммарную пропускную способность сетей в три раза. И вовсе не за счёт того, что в мире строят так много сетей ежегодно.

Для безопасника это означает довольно печальный факт: рано или поздно наступит момент, когда никакой современный вычислитель не сможет обработать самый быстрый канал передачи данных при его 100%-й загрузке. Вопрос только в том, насколько далеко мы сейчас от этого момента. Может быть, он уже пройден?

Рассмотрим типичный для начала 2009 года сетевой канал Ethernet с пропускной способностью 1 Гбит/с. Размер самого маленького кадра, который можно по нему передать, составляет 64 байта. Битовые потоки никто вроде бы не анализирует, поэтому будем мерять всё в кадрах, пакетах и соединениях. Так вот, наибольшее число кадров за секунду через канал пролезет как раз при минимальном размере кадра, и в этом случае их будет 1 488 095 штук. То есть, если мы хотим успевать обрабатывать гигабитный трафик в режиме реального времени, то на обработку единичного пакета у нас есть в худшем случае не более 672 наносекунд. Это довольно-таки мало. Скажем, для процессора с тактовой частотой 2ГГц это примерно 1338 тактов на всё, включая служебные операции процессора, выполнение кода ядра ОС и собственно анализ кадра в соответствующем приложении.

На типовых процессорах (Intel Xeon или AMD Opteron) одни только накладные расходы на системный вызов составляют от 170 до 540 наносекунд, в зависимости от типа операционной системы, и это без учёта собственно полезных действий, выполняемых операционной системой во время системного вызова. А последовательность мьютексовых операций lock/unlock может стоить ещё около 350 наносекунд. Реально выполнение одного системного вызова приложением на том же AMD Opteron 2ГГц потребует не менее 1000 наносекунд, включая неустранимые затраты на ввод-вывод (кэширование из памяти на процессоре).

Отсюда следует как минимум один важный вывод: если анализирующее трафик приложение выполняет хотя бы один системный вызов на каждый пакет, оно никогда не сможет даже просто получить все пакеты с канала, не говоря уже о том, чтобы проанализировать и выполнить какие-то осмысленные действия. Популярная библиотека захвата пакетов libpcap, например, делает по-умолчанию не меньше 2-х системных вызова на пакет - read() для копирования его в свой буфер и ioctl() для получения времени прихода пакета.

Действия с Документом

subject ;-)

Автор: http://alexott-ru.blogspot.com/ Дата: 2009-01-20 00:11
ну тут на мой взгляд должно быть сочетание ядерных модулей для конкретной ОС с user space анализаторами. ядерный модуль должен выполнять предварительную фильтрацию на как можно более низком уровне, чтобы избежать передачи ненужных пакетов в user space.
кроме того, попытаться ускорить обработку данных можно с помощью custom hardware, например на FPGA, что часто позволяет добиться очень хороших результатов, несмотря на то, что это достаточно медленные элементы (http://ce.et.tudelft.nl/[…]/1370_564_RegExp_JVLSI_preprint.pdf).
Но для начала потребуется классификация задач, которые мы собираемся решать, и разложить их на конкретные операции

Ага

Автор: Денис Гамаюнов Дата: 2009-01-20 00:29
Я ещё напишу, как сейчас пытаются решить эту проблему без использования пилорамы (нарезка на меньшие потоки и анализ кластером). Про custom hardware тоже будет, но интереснее ведь на обычном, особенно если мы находимся в России, где сложно заказать мелкую партию ASIC-ов или купить последний навороченный FPGA типа Stratix IV.
Фильтрация в ядре хороша, но ведь теоретически возможны ситуации, когда канал забит на 100% мелкими пакетами, и все они релевантны. Возможность сбора всего потока без потерь в режиме реального времени и с сохранением достаточного количества процессорного времени для других приложений просто даёт больше свободы при разработки анализаторов, независимо от решаемой задачи.

Не все так плохо

Автор: http://lj.rossia.org/users/gevor/ Дата: 2009-01-21 02:01
(1) А процессоров может быть несколько, а ядер и того больше.
(2) Многое можно делать на уровне ядра, это будет экономить время
(3) Карточки могут быть весьма близко к процессору, на тех же AMD их можно прямо на HyperTransport ставить

Согласен

Автор: Денис Гамаюнов Дата: 2009-01-21 11:53
(1) В чистом виде много процессоров только увеличивают накладные расходы ОС; для получения выгоды надо специально под эту задачу придумать параллельную реализацию (конвейер?)
(2) Мы, например, так и делаем :-)
(3) Настолько близко, что процессор может адресовать память карточки? Если нет, то всё равно нужен цикл записи с карточки в ОЗУ и потом вытаскивать оттуда процессором.

Вопрос по коллекциям правил

Автор: http://ivbeg.livejournal.com/ Дата: 2009-01-23 17:06
Добрый день.

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

С уважением,
  Иван Бегтин

Своих регэкспов

Автор: Денис Гамаюнов Дата: 2009-01-28 11:04
А вы смотрели базы Snort, ClamAV? Этого мало для вашей задачи?
У нас для анализа используется специализированный автоматный язык, а регулярные выражения выполняют чисто служебные задачи типа разбора HTTP-ответов и т.п.