Snort является системой предотвращения вторжений, способной работать в двух режимах “Sniffer Mode” и “Packet Logger Mode”.
Snort может быть использован для выявления различных атак, как,
например, переполнение буфера, скрытое сканирование портов, CGI
attacks, SMB probes, OS fingerprinting attempts, и многое другое. В
общем, сугубо полезная штука и распространяется по GNU GPL.
Что понадобиться:
• MySQL
• Libnet
• Libpcap
• BASE
• Apache
• Php5
• php5-extensions
• snort-2.8.4.1
• FreeBSD 7.0
• oinkmaster-2.0_1
Установка MySQL:
Первым ставим MySQL , дабы в нем хранить логи. И создадим в ней базу и пользователя “snort”
mysql> create database snort; mysql> grant CREATE,INSERT,SELECT ,DELETE,UPDATE on snort.* to snort; mysql> grant CREATE,INSERT,SELECT ,DELETE,UPDATE on snort.* to snort@localhost; mysql> use mysql ; mysql> set password for 'snort'@'localhost'=password('123 '); mysql> set password for 'snort'@'%'=password('123 '); mysql> flush privileges; mysql> exit
Установка SNORT:
После ставим сам snort. Естественно порты должны быть в актуальном состоянии.
#cd /usr/ports/security/snort/ && make install clean
ыбираем поддержку MySQL ([X] MYSQL Enable MySQL support)
Если в системе хватает всех библиотек, встать должно без проблем. Иначе качаем и ставим те библиотеки, которые попросит.
Правила Snort
Правила можно написать самому, иногда это действительно требуется, либо
же взять у snort.org. Как получить эти правила? Тут у нас есть три пути:
1.Зарегиться на сайте (https://www.snort.org/signup). Получать обновления каждые 30 дней.
2.Подписать на рассылку, обновления будут приходить в реальном времени, как только они становятся доступными.
3.Незарегистрированные пользователи получают статичные правила во время каждого крупного Snort-релиза
Как добывать, дело ваше, вообще не дорого подписаться, для одной машины
30 баков всего. Но зная русскую натуру и реалии жизни, думаю, первый
вариант всех устроит :).
После регистрации:
$wget http://dl.snort.org/reg-rules/snortrules-snapshot-2 .8 .tar.gz$wget http://dl.snort.org/reg-rules/snortrules-snapshot-CURRENT.tar.gz.md5
Проверим целостность.
$md5 snortrules-snapshot-2 .8 .tar.gz
Успокоившись, что почти 90!!! метров (после распаковки 500 mb) скачались без ошибки. В архиве находятся
doc
etc
rules
so_rules
распаковываем и кладем в папку /usr/local/etc/snort/
Добыча правил посредством oinkmaster(update Snort signatures)
Ставим из портов, благо есть. Убрал поддержку ipv6 до 12 года еще далеко, а там может еще обновлюсь
#cd /usr/ports/security/oinkmaster/ && make install clean
опируем и правим конфиг
#cp oinkmaster.conf.sample oinkmaster.conf #vim oinkmaster.conf
идим
большой конфиг, но не пугаемся это в основном коменты :). Скажу сразу
свой <oinkcode> смотрим на сайте snort’a в разделе My
Account->Subscriptions and Oinkcodes->Oinkcodes
Мой конфиг:
# $Id: oinkmaster.conf,v 1.132 2006/02/02 12:05:08 andreas_o Exp $ # # url = http://www.snort.org/pub-bin/oinkmaster.cgi/<oinkcode>/snortrules-snapshot-2 .8 .tar.gz# Assume UNIX style by default: path = /bin:/usr/bin:/usr/local/bin# Temporary directory to use. # Поменял на свою, ибо по умолчанию кладет /tmp tmpdir = /home/oinkmaster/tmp/# update_files = \.rules$|\.config$|\.conf$|\.txt$|\.map$ ####################################################################### # Files to totally skip (i.e. never update or check for changes) # # # # Syntax: skipfile filename # # or: skipfile filename1, filename2, filename3, ... # ####################################################################### skipfile local.rules skipfile deleted.rules skipfile snort.conf
Забегая
вперед, скажу что потребуется makesidex.pl который почему то с портами
не встал или я не нашел куда он делся, нужен для создания карты
сигнатур с измененными настройками.
Поэтому пришлось качать с сайта
lynx http://downloads.sourceforge.net/project/oinkmaster/oinkmaster/2 .0 / oinkmaster-2 .0 .tar.gz?use_mirror=sunet
лежит в папке contrib
запуск
#cp makesidex.pl /usr/local/etc/snort/ #./makesidex.pl rules >/us r/local/etc/autodisable.conf #cd /usr/local/etc/ #oinkmaster -o snort/rules -C oinkmaster.conf -C autodisable.conf
олжно выдать
oinkmaster -o snort/rules -C oinkmaster.conf -C autodisable.conf
Loading /usr/local/etc/oinkmaster.conf
Loading /usr/local/etc/autodisable.conf
Downloading file from http://www.snort.org/pub-bin/oinkmaster.cgi/*oinkcode*/snortrules-snapshot-2.8.tar.gz... done.
Archive successfully downloaded, unpacking... done.
Setting up rules structures... done.
Processing downloaded rules... disabled 1, enabled 0, modified 0, total=8179
Setting up rules structures... done.
Comparing new files to the old ones... done.
и результат обновления :)
Теперь переходим к конфигурированию
#vim /usr/local/etc/snort/snort.conf # В нем синем по черному (включен синтаксис vim’a) написано, что конфигурирование # надо проводить в 6! этапов: # 1) Установка переменных для вашей сети # 2) Настройка динамически загруженных библиотек (оставим по умолчанию, # ибо это пути к библиотекам) # 3) Настройка препроцессоров (так же оставим их) # 4) Конфигурирование параметров вывода (натравим на mysql) # 5) Add any runtime config directives (не знаю как правильно перевести, # интуитивно понятно) # 6) Подгонка правил
ачнем:
Куски конфига, т.е. те в которых были изменения.
Шаг первый, самый важный:
# Step #1: Set the network variables: # $HOME_NET определяет IP-адреса, считаемые адресами нашей домашней сети var HOME_NET [172 .16 .0 .0 /16 ]# # Можно использовать any (любой адрес). Для уменьшения нагрузки на snort, # многие присваивают значение not HOME_NET var EXTERNAL_NET !$HOME_NET # # Ну тут список ваших серверов, которые и будет защищать хрюндель. # следует убрать лишнее либо задать более конкретно # # List of DNS servers on your network var DNS_SERVERS $HOME_NET # List of SMTP servers on your network var SMTP_SERVERS $HOME_NET # List of web servers on your network var HTTP_SERVERS $HOME_NET # List of sql servers on your network var SQL_SERVERS $HOME_NET # List of telnet servers on your network var TELNET_SERVERS $HOME_NET # SNMP в помине не было #var SNMP_SERVERS $HOME_NET # # Ports you run web servers on и так и понятно можно вписывать как [80,8080] portvar HTTP_PORTS 80 # # Ports you want to look for SHELLCODE on. portvar SHELLCODE_PORTS !80# # Ports you might see oracle attacks on #portvar ORACLE_PORTS 1521 # # Другие переменные # например AOL'вские сервера # AIM servers. var AIM_SERVERS [64 .12 .24 .0 /23 ,64 .12 .28 .0 /23 ,64 .12 .161 .0 /24 ,64 .12 .163 .0 /24 ,/64 .12 .200 .0 /24 ,205 .188 .3 .0 /24 ,205 .188 .5 .0 /24 ,205 .188 .7 .0 /24 ,205 .188 .9 .0 /24 ,/205 .188 .153 .0 /24 ,205 .188 .179 .0 /24 ,205 .188 .248 .0 /24 ]# # Путь до файла с правилами var RULE_PATH /usr/local/etc/snort/rules var PREPROC_RULE_PATH /usr/local/etc/snort/preproc_rules
Сразу к 4му шагу настройка выводов
# database: log to a variety of databases # --------------------------------------- # See the README.database file for more information about configuring # and using this plugin. # output database: log , mysql , user =snort password=123 dbname=snort host =localhost
5й пропускаем, а на последнем, 6ом шаге, выбираем сигнатуры которые будем использовать.
После выбора нужных, можно сказать что первоначальное конфигурирование завершено.
Далее, таблицы для snort ручками делать бессмысленно, делаем так:
mysql -p < /usr/local/share/examples/snort/create_mysql snort
Запуск
# snort -o -i le0 -d -c /usr/local/etc/snort/snort.conf
вместо le0 можно указать любой другой прослушиваемый интерфейс), использованные опции означают:
-o - сменить порядок применения правил с Alert -» Pass -» Log order на Pass -»Alert -» Log order, это ускоряет несколько работу.
-i le0 - слушать указанный интерфейс. Можно опустить, если интерфейс один в системе (интерфейс vmwar так называется).
-d - выводить содержимое уровня приложения в пакетах, если стоит режим
избыточности вывода или ведения учёта пакетов (дополнительная
информация нам не помешает).
-с /etc/snort/snort.conf - использовать указанный конфигурационный файл.
При первом запуске выдал ошибку на dos.rules, типа не знает переменной
ORACLE_PORTS, оракла у мну нет, смело комментирую в правилах эту
строчку и все что связанно с oracle. Вот тут то нам и понадобиться
makesidex.pl, что бы при обновлении коменты не слетали.
После этого успешно стартануло :). Ставим запуск при загрузке:
#echo 'snort_enable="YES"' >> /etc/rc.conf
нализ логов посредством BASE
#cd /usr/ports/security/base&&make install clean
естественно поддержку мускула
[X] MYSQL Enable MySQL support
Выдал каку
Fatal error: Call to undefined function preg_match() in /usr/local/share/pear/PEAR/Frontend/CLI.php on line 57
лечиться
The fix: edit the pecl script (usually /usr/local/bin/pecl) and remove the ‘-n’ from the command line arguments.
По нашенски, надо убрать ключ “-n” из /usr/local/bin/pecl из строки в строке запуска (exec $PHP…)
Добавляем алиас в конфик апача
Alias /base “/usr/local/www/base” <Directory /usr/local/www/base> AllowOverride Options FileInfoAllow from all </Directory>
Добавляем в php.ini
include_path = ".:/usr/local/share/pear" include_path = ".:/usr/local/share/pear:/usr/local/share/fpdf"
Раскоменнтируем
error_reporting = E_ALL & ~E_NOTICE
коментим error_reporting = E_ALL
Ставим разрешения на изменения конфигурационных файлов в директории BASE (по умолчанию /usr/local/www/base)
Перезапускаем апач и конфигурим BASE
Заходим через любимый браузер на http://your_server/base и видим
Далее
Последний слеш не ставим
Далее вводим данные mysql
Далее вводим данные аутентификации, можно использовать системную учетку но лучше свою
Создание таблиц
Красный пугает, могли бы и эргономичней поступить(зеленым например)
Ну вот и все
Дальше будет куча проблем с ложными срабатываниями, но это уже другая тема
SnortSAM и IPFW
SnortSam - это плагин, может работать с многими фаерами (даже с isa), но нас интересует ipfw и это ipfw2
(поддержка таблиц), для ранних версий bsd придется пересобрать ядро.
#cd /usr/ports/security/snortsam/ #make install clean [X] IPFW Enable IPFW table checking if it set deny rules#cd /usr/local/etc/snortsam/ #cp snortsam.conf.sample snortsam.conf
то менял в конфиге, вообще очень гибкий инструмент, можно показать явно что ни когда не блочить, например
корневые днс и т.д и подгружать это из файла (include) или указать в самом конфиге.
# # pass defaultkey 123 # в примере порт 666, но мы не суеверные :) port 777 # accept 127 .0 .0 .1 , 123 # На сколько блочить keyinterval 10 minutes# В /var/log/ нужно содать такой файло logfile snortsam.log # Три уровня видения логов # 0: Quiet - No logging occurs. # 1: Sparse - Only errors are logged. # 2: Normal - Errors and blocks are logged. # 3: Verbose - Additional information (such as connections/disconnections) # are logged as well. loglevel 2 # Таблицы в которые будем заносить "врагов народа" ipfw2 le0 1 2 # # With tables rules like: # 00010 deny ip from any to table 1 via le0 # 00011 deny ip from table 2 to any via le0 # Путь к фаеру fwexec /sbin/ipfw# те самые днс include /usr/local/etc/snortsam/rootservers.cfg
Добавляем в ipfw правила
${FwCMD} add deny log ip from any to "table(1 )" via le0${FwCMD} add deny log ip from "table(2 )" to any via le0
В конфиг snort.conf добовляем
output alert_fwsam: localhost :777 /123
еперь точно все
Литература:
google.com
http://www.snort.org/
http://www.opennet.ru/base/faq/snort_faq_ru.txt.html
http://snortgroup.ru
http://global-security.blogspot.com
http://doc.emergingthreats.net/bin/view/Main/SnortSamFAQ
http://oinkmaster.sourceforge.net/