|
Bog BOS: Snort - система обнаружения и предупреждения вторжений (IDS)
|
Последнее изменение файла: 2008.04.10
Скопировано с www.bog.pp.ru: 2024.11.21
Bog BOS: Snort - система обнаружения и предупреждения вторжений (IDS)
Snort - система обнаружения и предупреждения вторжений (IDS).
Вторжение - нежелательный и неправомочный доступ к сетевым ресурсам.
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.
Требования к консоли управления:
- быстродействие и удобство эксплуатации
- фильтрация ложных срабатываний
- фильтры визуализации и сортировка
- возможность поиечать события
- корреляция событий
- возможость изменения уровня детализации
- отчёты
Сетевые и распределённые IDS:
- Snort
- RealSecure от ISS (сенсоры Internet Scanner, Network 10/100 и Gigabit Network;
менеджер событий Event Collector, база данных Enterprise Database (MS SQL),
консоль SiteProtector)
- Cisco: IDS-сенсоры 4200, Appliance Sensor
Хостовые IDS и агенты DIDS:
- OSSEC (от Sourcefire, разработчика Snort)
- Cisco PIX
CheckPoint
- RealSecure System Scanner и Desktop
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)
- препроцессор (модули: сборка TCP потока (stream4, frag3);
отслеживание обмена (flow);
сканирования портов (sfPortscan), дефрагментация, RPC, HTTP, ...)
- детектор (сопоставление с набором правил: заголовок правила задаёт действие в случае
совпадения (записать в журнал или выдать предупреждение), тип пакета,
IP источника и приёмника, номера портов; опция правила определяет шаблон для сраванения)
- вывод (запись в файл в формате tcpdump, текстовый журнал, СУБД (MySQL, Postgres) и
выдача предупреждения (SMB, SNMP), syslog)
- дополнительные утилиты для разбора журналов (SnortSnarf;
Snortplot.php; Swatch - обработка журналов и посылка e-mail;
Razorback
- графический интерфейс Gnome;
SneakyMan - графический конфигуратор)
Последовательность установки (в /usr/local)
- обеспечить синхронизацию времени по NTP
- убедиться в наличии libpcap (пакеты libpcap, libpcap-devel),
libpcre 4.0 и выше (пакеты pcre, pcre-devel),
libnet (пакет libnet), libipq для режима inline (iptables-devel)
- развернуть архив
- ./configure --enable-64bit-gcc --enable-decoder-preprocessor-rules --enable-targetbased --enable-timestats --enable-ppm --enable-inline
- configure хочет libnet версии 1.0, а у нас 1.1; причём это действительно важно,
иначе получаем ошибки компиляции; пришлось поставить libinet 1.0.2 для RHEL4
- make
- make install
- /usr/local/lib/snort_dynamicengine/ (libsf_engine.*)
- /usr/local/lib/snort_dynamicpreprocessor/ (libsf_dcerpc_preproc.*,
libsf_dns_preproc.*, libsf_ftptelnet_preproc.*, libsf_smtp_preproc.*,
libsf_ssh_preproc.*, libsf_ssl_preproc.*, lib_sfdynamic_preprocessor_example.*)
- /usr/local/lib/snort_dynamicrules/
- /usr/local/bin/snort
- /usr/local/man/man8/snort.8
- /usr/local/share/doc/snort/
- тестирование в режиме прослушивания: snort -dev
- загрузить для начала бесплатный набор правил для незарегистрированных пользователей
и народный (Community-Rules-CURRENT.tar.gz) в /etc/snort/
- /etc/snort/rules/web-misc.rules несовместим с новой версией snort, можно поправить
- /etc/snort/rules/community-smtp.rules и community-web-misc.rules несовместимы с новой версией snort
- настройка
- скопировать snort.conf, classification.config, reference.config, threshold.conf,
unicode.map, gen-msg.map, sid-msg.map в /etc/snort/
- скопировать preproc_rules в /etc/snort
- настроить значения переменных на свою сеть
- var HOME_NET $eth1_ADDRESS # адреса, которым мы доверяем
- # var HOME_NET any # не доверяем никому
- var EXTERNAL_NET $eth0_ADDRESS # откуда ждём атаки
- # var EXTERNAL_NET !$HOME_NET
- var DNS_SERVERS [192.168.0.1,192.168.0.2]
- var SMTP_SERVERS ...
- var HTTP_SERVERS ...
- var SQL_SERVERS ...
- var TELNET_SERVERS ...
- var SNMP_SERVERS ...
- прописать путь к правилам (var RULE_PATH)
- настройки предупреждений декодера (config)
- настроить загружаемые библиотеки (ничего не менять)
- настроить препроцессоры
- настроить модули вывода
- output alert_syslog: источник-syslog уровень-важности
- настроить правила
- создать пользователя и группу snort
- создать каталог /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
Последовательность установки (в /usr/local)
- обеспечить синхронизацию времени по NTP
- убедиться в наличии 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 (где взять?)
- развернуть архив
- ./configure [--enable-linux-smp-stats]
- make
- make install
- /usr/local/lib/snort_dynamicengine/ (libsf_engine.*)
- /usr/local/lib/snort_dynamicpreprocessor/ (libsf_dcerpc_preproc.*,
libsf_dns_preproc.*, libsf_ftptelnet_preproc.*, libsf_smtp_preproc.*,
libsf_ssh_preproc.*)
- /usr/local/bin/snort
- /usr/local/man/man8/snort.8
- тестирование в режиме прослушивания: snort -dev
- загрузить для начала бесплатный набор правил для незарегистрированных пользователей
и народный (Community-Rules-CURRENT.tar.gz) в /etc/snort/
- настройка
- скопировать snort.conf, classification.config, reference.config, threshold.conf,
unicode.map, generators, gen-msg.map, sid-msg.map в /etc/snort/snort.conf
- настроить значения переменных на свою сеть
- var HOME_NET $eth1_ADDRESS # адреса, которым мы доверяем
- # var HOME_NET any # не доверяем никому
- var EXTERNAL_NET $eth0_ADDRESS # откуда ждём атаки
- # var EXTERNAL_NET !$HOME_NET
- var DNS_SERVERS [192.168.0.1,192.168.0.2]
- var SMTP_SERVERS ...
- var HTTP_SERVERS ...
- var SQL_SERVERS ...
- var TELNET_SERVERS ...
- var SNMP_SERVERS ...
- прописать путь к правилам (var RULE_PATH)
- настройки предупреждений декодера (config)
- настроить загружаемые библиотеки (ничего не менять)
- настроить препроцессоры
- настроить модули вывода
- output alert_syslog: источник-syslog уровень-важности
- настроить правила
- создать пользователя и группу snort
- создать каталог /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).
В поставляемом файле настройки используется некоторое количество переменных:
Директива "config".
Директивы управления динамической загрузкой модулей.
Директива "preprocessor" позволяет задавать параметры модулей препроцессора.
Модуль flow реализует отслеживание состояний соединений.
Соединение характеризуется набором из IP адресов и портов отправителя и получателя.
Параметры: timeout, memcap (размер буфера для frag2), min_ttl, ttl_limit
(позволяет предупреждать при изменении TTL пакетов в потоке).
Модуль frag3 собирает пакеты из фрагментов, позволяет моделировать алгоритм
дефрагментации клиентского хоста.
Модуль stream4 собирает и просматривает TCP поток.
Модуль sfPortscan позволяет обнаружить сканирование портов.
Модуль perfmonitor позволяет собирать статистику загрузки и пропущенных пакетов.
Директива "output" задаёт параметры модулей вывода. Типы вывода:
- alert_syslog
- log_tcpdump
- database
- unified: alert_unified, log_unified
- log_unified
- alert_prelude
Директива "ruletype" позволяет задать новый тип правила и привязать его
к модулю (модулям) вывода. Формат:
ruletype имя-нового-типа-правил
{
type тип-правила
output ...
output ...
...
}
Предопределённые типы правил (действия):
- alert - генерация предупреждения и запись пакета в журнал
- log - запись сообщения в журнал
- pass - пропустить пакет
- activate - alert и создание динамического правила
- drop - указание для iptables
выбросить пакет и сделать запись в журнал
- reject - указание для iptables
выбросить пакет, послать в ответ сообщение об ошибке и сделать запись в журнал
- sdrop - указание для iptables
выбросить пакет
Директива "действие" задаёт правило обработки.
По обычаю, такие директивы группируются по типу атаки в файлы в подкаталоге "rules"
и вставляются директивой "include".
Файл sid-msg.map содержит соответствие между номерами сообщений (SID)
и текстами сообщений.
Файл threshold.conf позволяет ограничить величину потока предупреждений
по количеству предупреждений за единицу времени или по IP и прореживать сообщения.
Файл gen-msg.map содержит список соответствия между сообщением
(см. строки вида '[119:4:1]') и компонентами Snort.
Файл classification.config задать классификацию
и приоритет (low, medium, high) каждому сообщению.
Ключи запуска (перебивают настройки в 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 завершает работу)
- -I (выводить имя интерфейса в предупреждениях)
- -k режим-проверки-контрольных-сумм (all, noip, notcp, noudp, noicmp, none)
- -K режим-записи-пакетов (pcap - в формате tcpdump, ascii, none)
- -l имя-каталога (по умолчанию - /var/log/snort; сюда выводятся
предупреждения и пакеты в текстовом формате)
- -L имя-файла (в этот файл записываются предупреждения в бинарном формате;
по умолчанию, к имени "snort.log" добавляется текущее время)
- -m umask (umask для создаваемых файлов)
- -M (выводить сообщения - не предупреждения - в syslog)
- -n максимальное-число-пакетов
- -N (не записывать пакеты в журнал; предупреждения генерируются)
- -o (изменить порядок применения правил - правила Pass обрабатывать до Alert)
- -O (забивать IP-адреса в журналах)
- -p (не переводить интерфейс в режим прослушивания)
- -P число (размер захватываемой части пакета)
- -q (меньше слов)
- -Q (читать пакеты из iptables/IPQ)
- -r имя-файла [tcp|udp|icmp] (чтение из файла в формате tcpdump)
- -s (посылать предупреждения в syslog)
- -S имя-переменной=значение
- -t имя-каталога (после инициализации сделать chroot)
- -T (самотестирование; полезно перед запуском в фоновом режиме)
- -u имя-пользователя (сменить euid на указанный после запуска)
- -U (выводить время в журналах в UTC)
- -v (режим захвата пакетов и вывода в декодированном виде, только TCP заголовки)
- -V (вывести номер версии)
- -w (показывать управляющие кадры 802.11)
- -X (выводить пакеты, включая канальный уровень)
- -y (выводить год в журналах и предупреждениях)
- --treat-drop-as-alert
Сигнал SIGHUP вызывает перезапуск программы. Сигнал SIGUSR1 вызывает выдачу статистики
(на консоль или syslog - в daemon).
- версия 2.8.1 от 2.8.0.2
- возможность задать номера портов для сервисов на разных хостах (Target-Based)
- обработка туннелей GRE
- обработка туннелей IP over IP
- препроцессор SSL позволяет не обрабатывать зашифрованный трафик
- версия 2.8.0.2 от 2.7.0.1
- списки портов (README.variables)
- возможность ограничения времени на обработку одного пакета (README.ppm)
- поддержка сборки фрагментов IP (экспериментально)
- возможность контролировать действия препроцессоров и декодеров в соответствии
с правилами (упрощённый формат)
- обнаружение подделки TCP сессий по изменению MAC адресов
- модуль вывода Unified2
- получение статистики от преппроцессоров (по сингалу USR1)
- сайт разработчиков Snort
- BASE - web-интерфейс для анализа журналов
(требует MySQL, Snort с поддержкой MySQL, http сервер с поддержкой php, php-gd, pcre,
php-mysql, php-pdo, php-pear-Image-GraphViz, graphviz, php-adodb)
- BASE
- Oinkmaster
(скрипт обновления правил для зарегистрированных пользователей)
- набор правил с сайта bleedingsnort
- Snot - генератор трафика по правилу Snort
- Sneeze - генератор трафика по правилу Snort
- Metasploit (проигрыватель атак)
- IDS Policy Manager
- Snort Intrusion Detection and Prevention Toolkit. 2007. Jay Beale, Andrew R. Baker,
Joel Esler. Syngress Publishing, Inc
- Обнаружение нарушений безопасности в сетях, 3-е издание. Стивен Норткат, Джуди Новак.
2003. Вильямс.
|
Bog BOS: Snort - система обнаружения и предупреждения вторжений (IDS)
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru