Вторжение - нежелательный и неправомочный доступ к сетевым ресурсам.
IDS (intrusion detection system) анализирует сетевые пакеты и сравнивает результат
с имеющейся базой шаблонов (сигнатур, signature) известных сетевых атак. Обнаружив совпадение IDS может
поднять тревогу, выполнить автоматические защитные действия (отключить сетевой интерфейс),
запустить специализированную систему сбора доказательств. По типу мониторинга IDS разделяются на
сетевые IDS (NIDS, отслеживают весь сетевой трафик) в частности шлюзовые IDS
(на границе сетей); необходимо устанавливать в каждый сегмент (зеркалировать
весь трафик сегмента на коммутаторе на порт, который прослушивает IDS,
безадресная сетевая карта)
хостовые IDS (HIDS, локальный сетевой трафик, доступ к файлам, системные вызовы, журналы)
распределённые IDS (DIDS, удалённые сенсоры (NIDS и/или HIDS) и центральная управляющая станция),
обычно в сочетании с отдельной сетью (или VLAN, VPN) для связи сенсоров и управляющей станции
IDS приложений
По типу анализа IDS делятся на
поиск в базе шаблонов атак
обнаружение аномалий (база правил, описывающий нормальное и ненормальное поведение)
Пространство событий делится на наблюдаемую и ненаблюдаемую области в зависимости от
архитектуры сети и архитектуры IDS (коммутаторы, VLAN), проблем с производительностью, отказами и
распознаваемыми протоколами. Не все наблюдаемые события попадают в категорию собираемых данных.
Не все собираемые данные относятся к значимым событиям.
В значимые события попадают также ложные срабатывания (false positives)
и пропущенные атаки (false negative).
Без тонкой настройки IDS создаёт столько ложных срабатываний, что становится бесполезной.
Значимые события ранжируются по уровню серьёзности: важность цели, вероятность ущерба,
наличие защитных мер на уровне сети и системы.
Проблемы с наблюдаемостью в современных сетях: коммутаторы, VLAN.
RealSecure от ISS (сенсоры Internet Scanner, Network 10/100 и Gigabit Network;
менеджер событий Event Collector, база данных Enterprise Database (MS SQL),
консоль SiteProtector)
Snort - сетевая IDS с анализом по шаблонам (правилам)
и обнаружением аномалий (некоторые модули препроцессора).
Система с открытыми текстами (GNU, компания Sourcefire, 2.8.1 на 10 апреля 2008).
Доступ к базе шаблонов ограничен (желающие могут писать свои шаблоны или искать их в Интернет).
Пользователи делятся на:
подписчиков - платят деньги и имеют полный доступ
зарегистрированные (for free) пользователи - имеют доступ с 30-дневной задержкой
(Sourcefire VDB signatures)
остальные - имеют доступ к набору правил на момент выпуска версии
и "любительским" наборам (community signatures)
Может работать в режимах прослушивания сети, журналирования
сетевой активности и IDS. Шаблоны определяются набором правил обработки пакетов
и программ препроцессирования (дефрагментация, сборка TCP потока).
Новые шаблоны (правила) поддерживаются только в новой версии.
Правила делятся на типы и нумеруются (SID - Sensor ID).
Возможно написание своих подключаемых модулей. Графический интерфейс - Demarc/Puresecure
(Unix) и IDScenter (MS Windows).
Для работы требуется большой и быстрый диск (RAID) - 100GB;
много оперативной памяти (170MB на интерфейс для x86; 250MB - для x86-64);
быстрая сетевая карта (zero copy transfer, подсчёт контрольных сумм,
опрос вместо обработки прерываний, NAPI), желательно отдельная сетевая карта.
Поддерживаемые ОС (требуется libcap): Linux, FreeBSD, NetBSD, OpenBSD, MS Windows,
Sparc Solaris, x86 Mac OS X, PowerPC Mac OS X, PA-RISC HP-UX.
Входит в состав некоторых Live CD: Auditor, Trinux, Bootable Snort Project,
NST
(Network Security Toolkit, сконфигурированный Snort, MySQL и веб-интерфейс).
Snort - однопоточная система, для использования нескольких процессоров можно запускать
несколько копия с соответствующими фильтрами захвата.
Желательно привязать процесс
и обработчик прерываний к одному и тому же процессору.
Основные архитектурные компоненты (отражают путь пакета, являются
встраиваемыми модулями, кроме захвата):
захват пакетов (есть чтение из файла в формате tcpdump)
детектор (сопоставление с набором правил: заголовок правила задаёт действие в случае
совпадения (записать в журнал или выдать предупреждение), тип пакета,
IP источника и приёмника, номера портов; опция правила определяет шаблон для сраванения)
вывод (запись в файл в формате tcpdump, текстовый журнал, СУБД (MySQL, Postgres) и
выдача предупреждения (SMB, SNMP), syslog)
дополнительные утилиты для разбора журналов (SnortSnarf;
Snortplot.php; Swatch - обработка журналов и посылка e-mail;
Razorback
- графический интерфейс Gnome;
SneakyMan - графический конфигуратор)
убедиться в наличии libpcap (пакеты libpcap, libpcap-devel),
libpcre 4.0 и выше (пакеты pcre, pcre-devel),
libnet (пакет libnet), libipq для режима inline (iptables-devel)
configure хочет libnet версии 1.0, а у нас 1.1; причём это действительно важно,
иначе получаем ошибки компиляции; пришлось поставить libinet 1.0.2 для RHEL4
создать каталог /var/log/snort (собственник snort)
тестировать в режиме IDS: snort -c /etc/snort/snort.conf -g snort -u snort
исправить ошибки в настройке и правилах
если предполагается использование СУБД для хранения предупреждений,
то установить её (Postgres, MySQL, MS SQL, Oracle, другая ODBC-совместимая СУДБ)
и создать требуемые базы (snort), пользователя snort и таблицы (см. schemas/create_mysql),
поправить dbname в файле snort.conf
запуск при загрузке в /etc/rc.local:
snort -c /etc/snort/snort.conf -D -I -g snort -u snort -y -i eth0
убедиться в наличии libpcap (пакеты libpcap-0.9.4-8.1, libpcap-devel-0.9.4-8.1),
libpcre 4.0 и выше (пакеты pcre-6.6-1.1, pcre-devel-6.6-1.1),
libnet (пакет libnet-1.1.2.1-2.rf), libipq для режима inline (где взять?)
создать каталог /var/log/snort (собственник snort)
тестировать в режиме IDS: snort -c /etc/snort/snort.conf -g snort -u snort
исправить ошибки в настройке и правилах
если предполагается использование СУБД для хранения предупреждений,
то установить её (Postgres, MySQL, MS SQL, Oracle, другая ODBC-совместимая СУДБ)
и создать требуемые базы (snort), пользователя snort и таблицы (см. schemas/create_mysql),
поправить dbname в файле snort.conf
запуск при загрузке в /etc/rc.local:
snort -c /etc/snort/snort.conf -D -I -g snort -u snort -y -i eth0
Имя файла настройки задаётся ключом "-c". По умолчанию ищется
файл snort.conf в текущем каталоге. Каждая директива располагается в отдельной строке.
Комментарии начинаются с символа '#'. Директива "include" включает указанный файл
в обработку.
Директива "var" задаёт имя и значение переменной, которые будут
использоваться в дальнейшем. Для использования переменной необходимо добавить символ "$"
перед именем переменной (как в bash).
В поставляемом файле настройки используется некоторое количество переменных:
HOME_NET
Директива "config".
Директивы управления динамической загрузкой модулей.
Директива "preprocessor" позволяет задавать параметры модулей препроцессора.
Модуль flow реализует отслеживание состояний соединений.
Соединение характеризуется набором из IP адресов и портов отправителя и получателя.
Параметры: timeout, memcap (размер буфера для frag2), min_ttl, ttl_limit
(позволяет предупреждать при изменении TTL пакетов в потоке).
Модуль frag3 собирает пакеты из фрагментов, позволяет моделировать алгоритм
дефрагментации клиентского хоста.
Модуль stream4 собирает и просматривает TCP поток.
Модуль sfPortscan позволяет обнаружить сканирование портов.
Модуль perfmonitor позволяет собирать статистику загрузки и пропущенных пакетов.
Директива "действие" задаёт правило обработки.
По обычаю, такие директивы группируются по типу атаки в файлы в подкаталоге "rules"
и вставляются директивой "include".
Файл sid-msg.map содержит соответствие между номерами сообщений (SID)
и текстами сообщений.
Файл threshold.conf позволяет ограничить величину потока предупреждений
по количеству предупреждений за единицу времени или по IP и прореживать сообщения.
Файл gen-msg.map содержит список соответствия между сообщением
(см. строки вида '[119:4:1]') и компонентами Snort.
Ключи запуска (перебивают настройки в snort.conf;
в качестве параметра можно использовать
выражение в формате Berkeley Packet Filter (BPF), фильтрация пакетов на уровне ядра как в tcpdump):
-A {full | fast | unsock | none} (fast - заносить в журнал только время, сообщение,
IP-адреса и порты в одну строку; full - заносить также декодированный заголовок;
unsock - выводить сообщение в сокет)
-b (выводить в файл в формате tcpdump)
-c имя-конфигурационного-файла
-C (не выводить в шестнадцатеричном формате, только в текстовом)
-d (захватывать заголовки всех типов)
-D (запускать snort в фоновом режиме)
-e (захватывать заголовки канального уровня)
-E (выдавать предупреждения в журнал событий MS Windows)
-f (буферизация PCAP)
-F имя-файла-с-BPF-фильтром
-g имя-группы (сменить egid на указанный после запуска)
-G число (начальный номер при нумерации событий; полезно, если несколько snort
пишут в одну БД или журнал)
-h адрес-домашней-сети (например, 192.168.0.0/24;
используется для генерации имён файлов журнализации)
-i интерфейс (прослушивать пакеты на указанном интерфейсе; по умолчанию - первый;
при падении интерфейса snort завершает работу)
BASE - web-интерфейс для анализа журналов
(требует MySQL, Snort с поддержкой MySQL, http сервер с поддержкой php, php-gd, pcre,
php-mysql, php-pdo, php-pear-Image-GraphViz, graphviz, php-adodb)