Установка Snort
Куда лучше установить Snort
- Где в сети должен находиться Snort? Конечно, если в сети есть выход в Internet, то можно установить IPS до или после межсетевого экрана. Если Snort будет запщуен до брандмэуера, то можно будет получать все предупреждения о попытках взлома и принять соответствующие меры, если после, то, так как фаервол может отбрасывать интересные пакеты, то будет меньше возможностей для анализа интересного трафика.
- Многие специалисты по сетевой безопасности советуют устанавливать Snort сразу на двух машинах до и после — это обеспечит максимальную надежность получения нужной информации. Также эффективно можно использовать систему обнаружения вторжений с помощью маршрутизаторов, поддерживающих зеркалирование трафика. К примеру, настраиванием IPS на машине и зеркалированием всего трафика с маршрутизатора на машину с IPS. Для менее крупных сетей можно использовать концентратор для того, чтобы прослушивать весь трафик.
Конфигурация установочной программы
Будет рассмотрена установка Snort версии 2.4.3 на Linux
Выполняем:
$ ./configure && make && make install
Важно заметить, что у configure существует множество довольно интересных
опций. Ниже приведены некоторые из них:
Инсталляционные директории:
--prefix=PREFIX префикс к архитектурно-независимым файлам [/usr/local] --exec-prefix=EPREFIX префикс к архитектурно-зависимым файлам
Опции для указания инсталляционных директорий
--bindir=DIR пользовательское исполнение (PREFIX/bin) --sbindir=DIR исполнение системного администратора (PREFIX/sbin) --libexecdir=DIR выполнение программ (PREFIX/lib) --datadir=DIR только для чтения архитектурно-независимый каталог (PREFIX/share) --sysconfig=DIR только для чтения конфигурационный каталог (PREFIX/etc) --sharedstatedir=DIR изменяемый архитектурно-независимый каталог (PREFIX/com) --localstatedir=DIR изменяемый конфигурационный каталог (PREFIX/var) --includedir=DIR заголовочные файлы C (PREFIX/include) --oldincludedir=DIR заголовочные файлы не C (/usr/include) --infodir=DIR документация (PREFIX/info) --mandir=DIR документация man (PREFIX/man)
Опции пакета
--with-PACKAGE использовать PACKAGE --without-PACKAGE не использовать PACKAGE (аналогично --with-PACKAGE=no) --with-libpcap-includes=DIR директория с вложенными файлами для библиотеки libpcap --with-libpcap-libraries=DIR каталог с библиотекой libpcap --with-libpcre-includes=DIR каталог с вложенными фалами для библиотеки libpcre --with-libpcre-libraries=DIR каталог с библиотекой libpcre --with-libnet-includes=DIR директория с вложенными файлами для библиотеки libnet --with-libnet-libraries=DIR каталог с библиотекой libnet --with-mysql=DIR поддержка mysql --with-odbc=DIR поддержка odbc --with-postgresql=DIR поддержка postgresql --with-pgsql-includes=DIR директория с вложенными файлами postgresql --with-oracle=DIR поддержка oracle --with-libprelude-prefix=PFX префикс, куда установлена библиотека libprelude --with-libipq-includes=DIR каталог с вложенными файлами для библиотеки libipq --with-libipq-libraries=DIR каталог с библиотекой libipq
--enable-perfmonitor включить препроцессор perfmonitor --enable-inline использовать интерфейс libipq для snort inline --enable-ipfw использовать ipfw для snort inline --enable-debug это только для разработчиков, опция для отладки
После завершения установки нужно убедиться, что удовлетворены все зависимости удолетворены и Snort находится в рабочем состоянии (запускаем в режиме sniffer):
$ snort -dev
Запустим любое сетевое приложение и проверим, выводит ли Snort данные о пакетах. Запуск должен осуществляться с правами суперпользователя, так как основа Snort построена на использования библиотеки libpcap. Libpcap и осуществляет прослушивание всего трафика. Библиотека позволяет видеть Snort пакеты до того, как они будут восприняты остальными приложениями, а на этом уровне требуются права суперпользователя. Последнюю версию библиотеки можно найти на : http://www.tcpdump.org. Для Snort под windows потребуется аналог библиотеки libpcap под названием winpcap.
Регистрируемся на сайте
signin
Процедура регистрации весьма тривиальна. Переходим в личный кабинет и видим Oinkcode
Код
Пропишем наш oinkcode в конфигурационный файл
В строки 19, и 26 (я завуалировал фрагмент)
Меняем значение distro= в соответствии с нашей системой (строка 131), в данном случае Debian-6-0.
В 139 строке закомментируем использование Blacklist, а так же раскомментируем строки с 194 по 197.
oinkcode
Далее, открываем файл /usr/local/etc/snort/disablesid.conf и дописываем в конец
Делаем скрипт pulledpork.pl исполняемым
И запускаем его на выполнение:
Содержимое каталога правил
… после обновления
После обновления
Появился файл snort.rules!
Ну вот и всё. Теперь остаётся только убрать наше тестовое правило, почистить логи, создать скрипты запуска сервисов snort и barnyard2 в автозапуске и перезапустить сервисы.
Кстати, удалить символ комментария в редакторе vi достаточно просто.
:547,650s/#/
Строки с 547 по 650 символ # удаляется. Одной командой.
Скрипт запуска snort и barnyard2 в автозапуск:
Скрипт я позаимствовал с официального руководства:
Создаем файл
следующего содержания:
Всё просто, скрипт зависит от mysql службы, перед запуском проверяет, запущен ли сервис баз данных, если да, то поднимает интерфейс и запускает наши службы аналогично, как мы их проверяли до этого из командной строки.
Сохраняем, делаем его исполняемым:
и устанавливаем как сервис:
Готово!
Update. А оказывается, базовые правила в комплекте отсутствуют! Их нужно скачать с офсайта и распаковать в соответствующие каталоги.
Качаем базовые правила
Структура каталогов проста (rules, so_rules .. и т.д. Это мы уже видели в конфиг-файле и в каталоге /usr/local/etc/snort/ )
Скрин
Проведём атаку как мы уже рассматривали в этой статье: https://litl-admin.ru/xaking/zachem-lomat-svoyu-sistemu-armitagemetasploit.html
А затем глянем логи. Кстати, текстовые логи сейчас в файле:
/var/log/barnyard2/alert
Скрин лога
А в веб-интерфейсе:
Логи
Updating the rules with Pulledpork
Install AUR from the AUR.
Configuration
The configuration files are located in
Edit and uncomment the rules you want to use. You will need an «oinkcode» to download some of the rules.
- any rules matched in this file will have its traffic dropped.
- is used to enable signatures. All signatures seem to be enabled by default, no need to edit this file.
- is used to completely remove a signature from Snort.
The current categories that are within your rule set can be found by running the following:
pulledpork.pl -c /etc/snort/pulledpork.conf -Pw lz /var/tmp/*.gz | egrep '\.rules' | cut -d'/' -f3 | sort -u | perl -lne '/(.*).rules/ && print $1' > rules.`date +%F`
Drop traffic with Pulledpork
If you want to drop all traffic that matches a Snort signature instead of just alerting, add the following to your :
pcre:.
Or if you want to drop all traffic matching an entire category:
policy-social policy-other file-other
If you only want to drop a single rule:
118:7
Disabling rules with Pulledpork
If you want to disable a single signature add its gen_id and sig_id to
118:22
If you want to disable an entire category:
deleted protocol-icmp policy-social policy-other
Установка Barnyard2
Barnyard2 — это спулер, который поможет снизить нагрузку на сервер. Для его установки сперва ставим необходимые компоненты:
1 | sudo apt-get install-ymysql-server libmysqlclient-dev mysql-client autoconf libtool |
Обрати внимание, что во время установки MySQL попросит ввести пароль для
root. Поэтому не отходи от компа надолго
Затем ставим сам Barnyard2:
1 |
cd~/snort_src wget https//github.com/firnsy/barnyard2/archive/master.tar.gz -O barnyard2-Master.tar.gz tar zxvf barnyard2-Master.tar.gz cd barnyard2-master autoreconf-fvi-I./m4 sudo ln-s/usr/include/dumbnet.h/usr/include/dnet.h sudo ldconfig ./configure—with-mysql—with-mysql-libraries=/usr/lib/i386-linux-gnu make sudo make install |
Проверяем, не отвернулась ли от нас фортуна:
1 | /usr/local/bin/barnyard2-V |
Снова копируем файлы из исходного пакета, создаем файлы и раздаем права:
1 |
sudo cp~/snort/barnyard2-master/etc/barnyard2.conf/etc/snort/ sudo mkdir/var/log/barnyard2 sudo chown snort.snort/var/log/barnyard2 sudo touch/var/log/snort/barnyard2.waldo sudo chown snort.snort/var/log/snort/barnyard2.waldo |
Теперь придется поработать с MySQL:
1 |
mysql-uroot-p mysql>create database snort; mysql>usesnort; mysql>source~/snort/barnyard2-master/schemas/create_mysql mysql>CREATE USER’snort’@’localhost’IDENTIFIED BY’snortpass’; mysql>grant create,insert,select,delete,update on snort.*to’snort’@’localhost’; mysql>exit |
Добавляем в конец файла
/etc/snort/barnyard2.conf строку
output databaselog,mysql,user=snort password=snortpass dbname=snort host=localhost sensor name=sensor01. И снова манипуляция с правами:
1 | sudo chmodo-r/etc/snort/barnyard2.conf |
Теперь проверим все, что сделали раньше. В файл
/etc/snort/rules/local.rules добавляем строчку
1 | alert icmp any any->$HOME_NET any(msg»ICMP test detected»;GID1;sid10000001;rev001;classtypeicmp-event;) |
Это будет наше правило на проверку пинга (ICMP-пакеты). Дописываем две строки в файл
/etc/snort/sid-msg.map:
1 |
`#v2` 1||10000001||001||icmp-event||||ICMP Test detected||url,tools.ietf.org/html/rfc792 |
В описании релиза Barnyard можно прочесть подробнее, что и как.
Запустим Snort в режиме демона (он так и будет работать всегда).
1 | sudo/usr/local/bin/snort-q-usnort-gsnort-c/etc/snort/snort.conf-ienp0s3–D |
Потом запустим Barnyard2:
1 | sudo barnyard2-c/etc/snort/barnyard2.conf-d/var/log/snort-fsnort.u2-w/var/log/snort/barnyard2.waldo-gsnort-usnort |
Пингуем наш Snort-server и (если все в порядке) получаем предупреждения.
Работа Snort + Barnyard2
ACID
ACID Installation
Next we will install a web front-end (ACID) to monitor Snort’s output.
sudo apt-get -y install acidbase
During the installation process for acidbase, you will be prompted to configure a database for acidbase. Choose yes and use MySQL for the database type.
You will be prompted for the password of the database administrator. This is the same password we used when MySQL was initially installed with the LAMP stack.
Upon entering the database administrator password, you will be prompted to create a MySQL password for acidbase to connect to the database. In this tutorial I will use the same password as the snort user.
ACID Configuration
When installed, the acidbase web front-end is configured to only allow access from the localhost. Modify acidbase’s HTTP configuration to allow other workstations to connect.
sudo sed -i "s#allow\ from\ 127.0.0.0/255.0.0.0#allow\ from\ 127.0.0.0/255.0.0.0\ 10.10.1.10/255.255.255.0#" /etc/acidbase/apache.conf
In the above snippet, I am allowing access to acidbase from my desktop which has IP address 10.10.1.10/24.
Restart apache for the acidbase configuration change to take affect.
sudo /etc/init.d/apache2 restart
For Earlier Ubuntu Releases
The final configuration step is to access the acidbase web front-end’s configuration at http://snort.home.local/acidbase/base_db_setup.php Choose the button labelled «Create BASE AG» and new tables to support acidbase will be added to our Snort database.
You can then return to the main page http://snort.home.local/acidbase/base_main.php
From Maverick 10.10 or newer
the acidbase package does most of the work for you already you just need to choose the same password for acidbase as for snort in the above steps.
then browse to:
[http://localhost/acidbase]
*you can of course replace localhost with whatever address you had set in the /etc/acidbase/apache.conf as above.
Preparing your server
Setting up a basic configuration of Snort on Ubuntu is fairly simple but takes a few steps to complete. You will first need to install all the prerequisite software to ready your cloud server for installing Snort itself. Install the required libraries with the following command.
sudo apt install -y gcc libpcre3-dev zlib1g-dev libluajit-5.1-dev libpcap-dev openssl libssl-dev libnghttp2-dev libdumbnet-dev bison flex libdnet autoconf libtool
With the prerequisites fulfilled, next up is how to install Snort on Ubuntu 16. Snort can be downloaded and installed manually from the source. Below you will find instructions on how to get this done.
Ставим WEB-интерфейс
Создаём конфиг:
следующего содержания (временно)
Настраиваем Apache2 на SSL
Далее, надо бы отключить показ замечаний:
ищем строку error_reporting и устанавливаем значение в E_ALL & ~E_NOTICE для удобства отладки и сокрытия лишних сообщений.
Добавляем расширения к PHP:
Открываем в браузере URL: https://<IP сервера>/base
Веб-морда
Начинаем конфигурировать.
На шаге 1 нужно будет указать путь до adodb, мы его запоминали вначале.
На шаге 2 нужно указать параметры соединения с сервером баз данных.
mysql
Далее, закроем паролем доступ к статистике:
auth
На предложение создать базу отвечаем утвердительно и переходим на окно авторизации. Вводим данные из 3-го шага и …
Перед нами вполне удобный веб-интерфейс.
Web-интерфейс
В перспективе ещё наладить автоматическое получение базы с правилами для поддержания актуальности нашего сенсора атак. Ну а пока хватит!
Обновление правил Snort
Чтобы убедиться, что ваша копия Snort обеспечивает максимальный уровень защиты, обновите правила до самой последней версии. Это гарантирует, что Snort имеет доступ к новейшему набору определений атак и действий защиты.
Если вы зарегистрировались и получили собственное Oinkcode, вы можете использовать следующую команду, чтобы загрузить набор правил для зарегистрированных пользователей. Фырканье страница загрузки список доступных наборов правил, включая набор правил сообщества, для которого вам не нужно регистрироваться.
Загрузите набор правил для установленной вами версии Snort. Мы загружаем версию 2.9.8.3, которая ближе всего к версии 2.9.7.0 Snort, которая была в репозитории Ubuntu.
wget https://www.snort.org/rules/snortrules-snapshot-2983.tar.gz?oinkcode=<your oink code goes here> -O snortrules-snapshot-2983.tar.gz
Беспорядочный режим
Сетевые карты обычно игнорируют трафик, не предназначенный для их IP-адреса. Мы хотим, чтобы Snort обнаруживал подозрительный сетевой трафик, адресованный любому устройству в сети, а не только сетевой трафик, который отправляется на компьютер, на котором установлен Snort.
Чтобы сетевой интерфейс компьютера Snort прослушивал весь сетевой трафик, нам нужно установить его в неразборчивый режим. Следующая команда вызовет сетевой интерфейс действовать в беспорядочном режиме. Замена с именем сетевого интерфейса, который вы используете на своем компьютере.
sudo ip link set enp0s3 promisc on
Если вы запускаете Snort на виртуальной машине, не забудьте также изменить настройки в гипервизоре для виртуальной сетевой карты, используемой вашей виртуальной машиной. Например, в VirtualBox вам нужно перейти в и в раскрывающемся списке «Беспорядочный режим» выберите «Разрешить все».
СВЯЗАННЫЙ: Как использовать команду ip в Linux
Запуск Snort
Теперь вы можете запустить Snort. Формат команды:
sudo snort -d -l /var/log/snort/ -h 192.168.1.0/24 -A console -c /etc/snort/snort.conf
Замените диапазон IP-адресов своей сети вместо .
В этой команде используются следующие параметры командной строки:
- -d: Отфильтровывает пакеты прикладного уровня.
- -l / var / журнал / snort /: Устанавливает каталог регистрации.
- -h 192.168.1.0/24: Это не устанавливает домашнюю сеть, которая была установлена в файле «snort.conf». Если для этого значения установлено то же значение, что и для домашней сети, журналы структурированы таким образом, что содержимое подозрительных удаленных компьютеров записывается в каталоги, названные в честь каждого удаленного компьютера.
- -Консоль: Отправляет предупреждения в окно консоли.
- -c /etc/snort/snort.conf: Указывает, какой файл конфигурации Snort использовать.
Snort прокручивает большую часть вывода в окне терминала, а затем переходит в режим мониторинга и анализа. Если он не увидит какую-либо подозрительную активность, вы больше не увидите вывод на экран.
С другого компьютера мы начали генерировать вредоносную активность, которая была направлена непосредственно на наш тестовый компьютер, на котором был запущен Snort.
Snort определяет сетевой трафик как потенциально вредоносный, отправляет предупреждения в окно консоли и записывает записи в журналы.
Атаки, классифицируемые как «утечки информации», указывают на то, что на вашем компьютере была предпринята попытка получить некоторую информацию, которая могла бы помочь злоумышленнику. Это, вероятно, указывает на то, что кто-то проводит разведку вашей системы.
Атаки, классифицированные как атаки типа «отказ в обслуживании», указывают на попытку завалить ваш компьютер ложным сетевым трафиком. Атака пытается перегрузить ваш компьютер до такой степени, что он не может продолжать предоставлять свои услуги.
Чтобы убедиться, что неразборчивый режим работает правильно и мы защищаем весь диапазон сетевых адресов, мы направим вредоносный трафик на другой компьютер и посмотрим, обнаружит ли его Snort.
Активность обнаруживается и сообщается, и мы видим, что эта атака была направлена против другого компьютера с IP-адресом . Snort отслеживает весь диапазон адресов этой сети.
PVS-Studio
PVS-Studio – это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в 64-битных системах на Windows, Linux и macOS и может анализировать код, предназначенный для 32-битных, 64-битных и встраиваемых ARM платформ. PVS-Studio наиболее эффективно использовать сразу после компиляции. Это позволяет находить ошибки в коде до его тестирования и тратить меньше времени на отладку программы.
Snort версии 2.9.17 написан на языке Cи и предназначен для Linux, поэтому будем использовать PVS-Studio для Linux. Получить инструкцию по установке и запуску анализатора можем здесь и здесь.
SNORT
SNORT Database
Create the database to be used by Snort.
mysql -u root -p create database snort; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON snort.* TO 'snort'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; quit
SNORT Install
Install Snort:
sudo apt-get -y install snort-mysql
Please note: you will be prompted to enter the IP address for the local network in Classless Inter-Domain Routing (CIDR) format.
At the end of Snort’s installation routine, you will be prompted if you wish to set up a database for use with Snort. Choose no. We will manually configure Snort to connect to our previously created database.
You will receive a warning similar to the following: Snort will not start as its database is not yet configured.
SNORT Configuration
Update our database with the Snort table structure.
pushd /usr/share/doc/snort-mysql sudo zcat create_mysql.gz | mysql -u snort -p snort # The syntax is: mysql -u <username> -p <prompt for password> <database> popd
Modify the Snort configuration file to include our MySQL specific information.
sudo sed -i "s/output\ log_tcpdump:\ tcpdump.log/#output\ log_tcpdump:\ tcpdump.log\noutput\ database:\ log,\ mysql, user=snort password=password dbname=snort host=localhost/" /etc/snort/snort.conf
The above line was located at line number 786 /etc/snort/snort.conf. The snippet simply places a comment in front of the output for the log, and appends the output line for our database.
Remove the pending Snort database configuration file.
sudo rm -rf /etc/snort/db-pending-config
Start the Snort service.
sudo /etc/init.d/snort start
Verify the Snort daemon successfull started.
sudo /etc/init.d/snort status tail /var/log/daemon.log
Настроить карты сетевого интерфейса
Найдите интерфейс, на котором Snort прослушивает сетевой трафик, и включите неразборчивый режим, чтобы иметь возможность видеть весь отправляемый ему сетевой трафик.
Проверьте с помощью следующей команды.
Вывод:
Затем отключите разгрузку интерфейса, чтобы Snort 3 не усекал большие пакеты, не более 1518 байт. Проверьте, включена ли эта функция, с помощью следующей команды.
Если вы видите этот вывод, значит, GRO включен, в то время как LRO зафиксирован или LRO включен.
Вывод.
Отключите его с помощью следующей команды.
Два гарантируют, что изменения сохранятся при перезагрузке системы, нам нужно создать и включить служебный модуль systemd для реализации изменений.
Вставьте следующую конфигурацию, которая указывает на ваш сетевой интерфейс.
Перезагрузите настройки конфигурации systemd:
Запустите и включите службу при загрузке с помощью следующей команды:
Вывод.
Проверьте snort3-nic.service с помощью:
Вывод.
Updating the Snort Rules
To make sure your copy of Snort is providing the maximum level of protection, update the rules to the most recent version. This ensures Snort has access to the newest set of attack definitions and protection actions.
If you have registered and obtained your own oinkcode, you can use the following command to download the rule set for registered users. The Snort download page lists the available rule sets, including the community rule set for which you do not need to register.
Download the rule set for the version of Snort you’ve installed. We’re downloading the 2.9.8.3 version, which is the closest to the 2.9.7.0 version of Snort that was in the Ubuntu repository.
wget https://www.snort.org/rules/snortrules-snapshot-2983.tar.gz?oinkcode=<your oink code goes here> -O snortrules-snapshot-2983.tar.gz
Once the download is complete, use this command to extract the rules and install them in the “/etc/snort/rules” directory.
sudo tar -xvzf snortrules-snapshot-2983.tar.gc -C /etc/snort/rules
Promiscuous Mode
Network interface cards usually ignore traffic that isn’t destined for their IP address. We want Snort to detect suspicious network traffic addressed to any device on the network, not just network traffic that happens to be sent to the computer on which Snort is installed.
Advertisement
To make the Snort computer’s network interface listen to all network traffic, we need to set it to promiscuous mode. The following command will cause network interface to operate in promiscuous mode. Substitute with the name of the network interface you are using on your computer.
sudo ip link set enp0s3 promisc on
If you are running Snort in a virtual machine, also remember to adjust the settings in your hypervisor for the virtual network card used by your virtual machine. For example, in VirtualBox, you need to go to and change the “Promiscuous Mode” drop-down to “Allow All.”
RELATED: How to Use the ip Command on Linux
Running Snort
You can now start Snort. The command format is:
sudo snort -d -l /var/log/snort/ -h 192.168.1.0/24 -A console -c /etc/snort/snort.conf
Substitute your own network IP range in place of the .
The command-line options used in this command are:
- -d: Filters out the application layer packets.
- -l /var/log/snort/: Sets the logging directory.
- -h 192.168.1.0/24: This doesn’t set the home network, that was set in the “snort.conf” file. With this value set to the same value as the home network, the logs are structured so that content from suspicious remote computers is logged into directories named after each remote computer.
- -A console: Sends alerts to the console window.
- -c /etc/snort/snort.conf: Indicates which Snort configuration file to use.
Snort scrolls a lot of output in the terminal window, then enters its monitoring an analysis mode. Unless it sees some suspicious activity, you won’t see any more screen output.
From another computer, we started to generate malicious activity that was directly aimed at our test computer, which was running Snort.
Snort identifies the network traffic as potentially malicious, sends alerts to the console window, and writes entries into the logs.
Advertisement
Attacks classified as “Information Leaks” attacks indicate an attempt has been made to interrogate your computer for some information that could aid an attacker. This probably indicates that someone is performing reconnaissance on your system.
Attacks classified as “Denial of Service” attacks indicate an attempt to flood your computer with false network traffic. The attack tries to overwhelm your computer to the point that it cannot continue to provide its services.
To verify that promiscuous mode is operating correctly and we’re safeguarding the entire network address range, we’ll fire some malicious traffic at a different computer, and see whether Snort detects it.
The activity is detected and reported, and we can see that this attack was directed against a different computer with an IP address of . Snort is monitoring the entire address range of this network.
Update the rules: Oinkmaster
AUR is available as AUR package.
Oinkmaster setup
Edit and look for the URL section and uncomment the 2.4 line. Make sure to replace <oinkcode> by the Oink code you generated after logging into your Snort account. For Bleeding Snort rules, uncomment the appropriate line.
When you log into your new account, create an «Oink code».
Another thing to change is
use_external_bins=1 # 1 uses wget, tar, gzip instead of Perl modules
The rest of the configuration file is fine.
Oinkmaster usage
oinkmaster.pl -o /etc/snort/rules
Create an executable script with the exact command and place it in /etc/cron.daily to update the rules daily automatically.
Option 2. Obtaining registered user rules
You can also take a moment and register on the Snort website. Registering gives you access to use their Oink code to download the registered user rules. You can find the code in the Snort user account details.
Replace the oinkcode in the following command with your personal code.
wget https://www.snort.org/rules/snortrules-snapshot-29160.tar.gz?oinkcode=oinkcode -O ~/registered.tar.gz
Once downloaded, extract the rules over to your configuration directory.
sudo tar -xvf ~/registered.tar.gz -C /etc/snort
The rule sets for the registered users include an extensive amount of useful preconfigured detection rules. If you tried out Snort with the community rules first, you can enable additional rules by uncommenting their inclusions towards the end of the snort.conf file.
Задания к лабораторной работе¶
- Узнайте свой ip адрес командой ifconfig
- Установите SNORT <sudo apt-get install snort>
- При установке будет нужно указать защищаемую сеть. ВВедите ..*.0/24 (Где ..* — первые три числа вашего ip-адреса, например эот будет 192.168.1.0/24, если вы используете VirtualBox и у вас в настройках сети стоит сетевой мост)
- Запустите SNORT <sudo service snort start>
- Настройка правил
- Перейдите в каталог /etc/snort/rules < cd /etc/snort/rules)
- Создайте файл с правилами <nano test.rules>
- Перейдите в каталог /etc/snort <cd /etc/snort)
- Теперь нужно изменить содержимое конфигурационного файла Snort < sudo nano snort.conf>
- Найдите строчки с правилами (они начинаются с include $RULE_PATH, это в части Step 7) и добавьте файл с нашими правилами
- Запустите snort <sudo snort -A console -i eth0 -c snort.conf>
- Зайдите на https://www.google.ru/ и проверьте в терминале, как работает правило.
- Теперь нам понадобиться еще одна виртуальная машина, на ней должен быть установлен nmap.
- Со второй ВМ используйте ping, посмотрите, как реагирует SNORT
- Используйте различные методы сканирования nmap( используйте -sS, -sT, -sN, -sU, -sX, -sF и посмотрите, как реагирует SNORT;
- В файл test.rules добавьте правило обнаружения сканирования nmap -sN (NULL Scan)
- Запустите snort <sudo snort -A console -i eth0 -c snort.conf>
- Со второй виртуальной машины произведите NULL сканирование <sudo nmap -sN>, проверьте, как работает правило.
- Можно загрузить обновленные правила SNORT, для этого:
- Зарегистрируйтесь на сайте https://www.snort.org/ и скачайте последнюю версию правил
- Разархивируйте скачанный архив и скопируйте каталоги rules, so_rules и preproc_rules в /etc/snort :
Snort 2.9.0
Наиболее важные улучшения:
- Режим предотвращения атак (IPS) включает расширение возможностей подсистемы Stream (обработчик/сборщик TCP-потоков для контроля за отдельными сессиями) для работы в активном inline-режиме (snort выступает в роли шлюза и позволяет принимать решения о дальнейшем прохождении пакетов в момент их получения, а не на основе пассивного анализа трафика). Реакция для всех пакетов теперь задается через единый API, поддерживающий модули Stream, Respond и React. Добавлен новый модуль реакции — respond3, поддерживающий синтаксис как модуля resp, так и resp2, включая возможность блокирования и в конфигурациях с пассивным анализом трафика. В случае, когда Snort запущен в активном inline-режиме, теперь используется новый препроцессор для нормализации пакетов, позволяя интерпретировать пакеты тем же способом, что и получающий эти пакеты хост;
- Задействование модуля DAQ (API для сбора данных, Data Acquisition API), который определяет множество разных методов доступа к получению пакетов, таких как libpcap, netfilterq, IPFW и afpacket. При использовании libpcap теперь требуется как минимум версия 1.0 данной библиотеки. Код DAQ может быть обновлен независимо от Snort, так как теперь является независимым модулем.
- Обновлен код инспектирования HTTP-трафика (HTTP Inspect), который теперь может извлекать и использовать IP-адреса из HTTP-заголовков X-Forward-For и True-Client-IP;
- Новая опция ‘byte_extract’ позволяет использовать извлеченные в текущем правиле значения внутри следом идущих опций isdataat и byte_test, byte_jump, а также в содержимом distance/within/depth/offset;
- В SMTP-препроцессоре реализована поддержка декодирования больших MIME-вложений, требующим передачи более одного сетевого пакета;
- Возможность тестирования правил блокирования пакетов. В режиме Inline Test Mode пакеты не отбрасываются, а только отражаются в логе как подлежащие блокировке;
- Новые опции правил для декодирования и инспектирования base64-блоков данных;
- Улучшена работа кода по декодированию IPv6-пакетов с целью улучшения определения аномалий;
- Добавлен пример создания приложений для обработки данных формате unified2, используемом для компактного хранения логов Snort;
- Добавлен новый обработчик шаблонов, поддерживающий задействования аппаратных акселераторов, совместимых с Intel Quick Assist Technology, для ускорения сопоставления масок.
The Snort Rules
There are three sets of rules:
- Community Rules: These are freely available rule sets, created by the Snort user community.
- Registered Rules: These rule sets are provided by Talos. They are freely available also, but you must register to obtain them. Registration is free and only takes a moment. You’ll receive a personal oinkcode that you need to include in the download request.
- Subscription Rules: These are the same rules as the registered rules. However, subscribers receive the rules about a month before they’re released as free rule sets for registered users. At the time of writing, 12-month subscriptions start at USD $29 for personal use and USD $399 for business use.
Running Snort Inline
Now that we have verified that the Snort configuration is correct, let’s run Snort from the command line, and output alerts directly to the screen.
Add the following alert to your local.rules file, and make sure that Snort loads it by testing your configuration and scrolling up to see that the rule is loaded (if you need help with this, please see this article). This rule will generate an alert whenever it sees an ICMP message (a ping), which makes testing easy.
alert icmp any any -> $HOME_NET any (msg:"ICMP test detected"; GID:1; sid:10000001; rev:001; classtype:icmp-event;)
test snort again as above, and scroll up through the output to make sure the one ICMP rule loads. If it doesn’t show as loaded, make sure you have included your local.rules file in your snort.conf.
Next, we will run Snort in inline mode. We add a couple of flags here:-A Console will cause snort to generate fast alerts out to the console (the screen for us to see)-N will cause snort to not write any output files to your output directory.
Run the following:
sudo /usr/local/bin/snort -A console -Q -c /etc/snort/snort.conf -i eth1:eth2 -N
and once Snort is loaded (you’ll see the message: Commencing packet processing), generate a ping across the bridged interface. A good test is to have one computer (the client) on one side of the bridge with a static IP, and the gateway on the other side of the bridge. Ping the gateway from the client (they will both need IP addresses on the same subnet), and the traffic should cross the bridged interface. When Snort passes the traffic between the networks, you should see an alert generated on the screen (because of our ICMP rule created above). Snort should outpout something similar to the following:
02/15-19:30:05.602117 ICMP test detected {ICMP} 10.0.0.1 -> 10.0.0.116
hit ctrl-c to stop Snort from running. The ping should have succeeded between the client and the gateway, because the ICMP rule was written as an alert rather than a drop rule (the first part of the rule). If you check the ARP table on your client, with arp -a, you will notice that the MAC address of the gateway is correct. This shows you that Snort is not modifying the packet in any way as it moves it from one network segment to the other. This is how DHCP requests and other traffic can correctly move between segments without any issues.
Next we will change the ICMP rule to drop traffic instead of generating an alert.