Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Security —> Snort на FreeBSD

Snort на FreeBSD

Автор: Zemskov.


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
SNORTSAM [X] SNORTSAM    Enable output plugin to SnortSam

Если в системе хватает всех библиотек, встать должно без проблем. Иначе качаем и ставим те библиотеки, которые попросит.

Правила 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 FileInfo
Allow 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

и
#echo 'snortsam_enable="YES"' >> /etc/rc.conf

теперь точно все

Литература:
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/



размещено: 2009-08-02,
последнее обновление: 2009-09-03,
автор: Zemskov


flexbert, 2009-08-31 в 11:12:41

не хватает
#echo 'snortsam_enable="YES"' >> /etc/rc.conf

Zemskov, 2009-08-31 в 13:48:18

да, точно пропустил...
спасибо, добавил

Raiser, 2009-09-02 в 19:08:16

Перед сборкой snort'а нужно добавить поддержку snortsam
[X] SNORTSAM    Enable output plugin to SnortSam

Чтобы snortsam запускался демоном
echo "daemon" >> /usr/local/etc/snortsam/snortsam.conf

flexbert, 2009-09-03 в 8:14:19

На 64-битной системе не соединяются snort и snortsam. Ошибка:
snortsam.log
2009/09/02, 15:50:31, 127.0.0.1, 3, snortsam, Accepted connection from 127.0.0.1.
2009/09/02, 15:50:31, 127.0.0.1, 3, snortsam, Adding sensor 127.0.0.1 to list.
2009/09/02, 15:50:31, 127.0.0.1, 3, snortsam, Had to use initial key!
2009/09/02, 15:50:31, 127.0.0.1, 1, snortsam, Snort station 127.0.0.1 using wrong password, trying to re-sync.
snort: [Alert_FWsam](FWsamCheckIn) Password mismatch! Ignoring host

Можно считать что Гугель ответов не знает.
Итак: как установить snort и snortsam на 64-битную FreeBSD.
1) обновляем порты. Получились версии: snort-2.8.4.1_1, snortsam-2.60.
2) качаем snortsam-2.57 с сайта разработчика: http://www.snortsam.net/files/oldfiles/snortsam/snortsam-src-2.57.tar.gz
3) # cd /usr/ports/security/snort
# make config   - выбираем какие нам надо галочки
# make fetch extract patch
теперь лезем в snortsam-src-2.57.tar.gz, находим там два файла src/twofish.c/.h и заменяем такие же файлы в /usr/ports/security/snort/work/snort-2.8.4.1/src/
# make build install clean
Snort установили. Едем дальше:
4) # cd /usr/ports/security/snortsam
# make config   - выбираем какие нам надо галочки
# make fetch extract
в папке /usr/ports/security/snortsam/work/snortsam/ удаляем все кроме CVS, копируем туда содержимое snortsam-src-2.57.tar.gz
# make build install

Собственно после ошибка с паролем при коннекте snort и snortsam пропадает. У меня все заработало.

Zemskov, 2009-09-03 в 14:50:34

Raiser абсолютно верно... поправил

alex, 2010-01-06 в 17:00:33

# На сколько блочить
keyinterval 10 minutes

— на самом деле из описания седует, что
# Это заставит агента просить / создать новый ключ шифрования каждый <time>.
# Если опущено эту линию, ключевые умолчанию жизни до 4 часов. Вы можете использовать
# 'Часы', 'дней', 'месяца', 'недели', 'год' в срок.
--
и вообще создается впечатление, что это все работать (у меня не заработало) не будет - для того чтобы работало требуется изменять правила и ддобавлять к кждой строчке в правилах fwsam: who[how],time;
так написано здесь http://doc.emergingthreats.net/bin/view/Main/SnortSamFAQ#Q_How_do_I_configure_Snort

alex, 2010-01-06 в 18:11:27

решение такое и в статье про это не написано, вот что нужно сделать чтобы работало, вот ссылка http://www.e1.ru/talk/forum/read.php?f=125&i=23242&t=23242
---
Теперь нужно родить файл банов. Делаем пока по простому, дальше понятно будет
Я ленивый, поэтому скрипты не точил до блеску :-)
Исходник:
cd /etc/snort
cat sid-msg.map | cut -f 1 -d " " > sidb
делаем файлик sid.sh
Исходник:
cat sidb | while read file
do
echo $file: src, 15 min
done
запускаем его ./sid.sh > sid-block.map
sid-block.map - это файлик с сидами, тобиш номерами атак и временем блокировки.

Alex, 2010-07-07 в 14:25:14

при сборки Snort  просьба поставить галочку на пункте - Dynamic , иначе при попытке запуска не будет найдена библиотека libsf_endine.so

irokez_v, 2010-07-12 в 9:13:29

Долго бился запуская snortsam, перечитал все что нашел в сети, патчил его, но он все никак не хотел мои таблицы воспринимать в ipfw (FreeBSD 7.3). Уже и отложил в сторонку это дело, пока не довелось через пару месяцев сервак перезагрузить - и оно заработало.
Может кому поможет.

Phanthom, 2010-10-18 в 0:40:07

Кошмар... В тексте статьи кучи ошибок, половина не объясняется что куда и откуда... Если автор писал статью для себя - нафаг тут выкладывать было, если сюда метил - то статья недоработана.
1. Чтобы внести ясность - надо бы добавить что правила можно скачать 2-мя способами. Первый напрямую с сайта второй посредством oinkmaster
2. Что за makesidex.pl откуда он взялся и зачем нужен вообще??
Добавьте чтоли строчки
cd /usr/ports/security/oinkmaster/work/oinkmaster-2.0/contrib/ перед
cp makesidex.pl /usr/local/etc/snort/
и cd /usr/local/etc/snort/
перед ./makesidex.pl rules >/usr/local/etc/autodisable.conf
И кстати в последней строчке поправьте путь к autodisable.conf
3.Структура ссылки на файл снэпшота изменилась. Теперь это
snortrules-snapshot-2860.tar.gz где 2860 - версия 2.8.6.0
4. Про конфигурирование - ничо не понятно. Порядок шагов изменился. Теперь база в 6 шаге. А руллсет в 7. И что и как конфигурировать тоже хотелось бы чтобы присутствовало хотя бы ваш конфиг в качестве примера.
5. Опции -o при запуске снорта больше нет.
Дальше делать не стал ибо после запуска снорт вывалил ошибок море на отсутствие динамических либ. Плюнул на мануал автора и пошол курить нормальные маны.
Автору незачёт.

ыыы, 2010-10-18 в 11:02:32

%) статье год, версия хрюнделя сменилась до 2.8.6.1 только в портах зарелизили 2.9 ))))
все подряд объяснять это уже совсем не серьезно
1. представлен рабочий вариант на дату опубликования, с опубликованным по
2. про makesidex.pl, а это что?
Забегая вперед, скажу что потребуется makesidex.pl который почему то с портами не встал или я не нашел куда он делся, нужен для создания карты сигнатур с измененными настройками.
Поэтому пришлось качать с сайта...
далее по тексту %)
3. ну и версия поменялась
4. см выше
5. см. выше
%)



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0619 секунд
Из них PHP: 29%; SQL: 71%; Число SQL-запросов: 84 шт.
Исходный размер: 72993; Сжатая: 15493