Первую свою статью я хочу посветить системе обнаружения атак Snort как неотъемлемой части знаний специалиста по безопасности АС. В данной статья я расскажу вам как развернуть данную систему.
Установка
Итак приступим к делу:
У нас есть сервер с ОС Debian на котором мы хотим разместить нашу СОА (IDS).
Итак, установим SSH на нашем сервере чтобы управлять им с
нашего тёплого рабочего места:
Запустим демон:
Итак идем в наш уютный кабинет с кожаным креслом и будем рулить прямиком оттуда.
Прописываем дополнительные источники пакетов
Открываем файл /etc/apt/sources.list и дописываем источники:
apt-get install openssh-server
Запустим демон:
service ssh start
Итак идем в наш уютный кабинет с кожаным креслом и будем рулить прямиком оттуда.
Прописываем дополнительные источники пакетов
Открываем файл /etc/apt/sources.list и дописываем источники:
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all
И добавляем ключ доступа к этим источникам:
Устанавливаем библиотеки из источников:cd /tmp && wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add -
apt-get install build-essential libpcre3-dev bison flex zlib1g-dev openssl libssl-dev autoconf libtool pkg-config automake
Создадим каталог для исходников
:mkdir ~/snort
cd ~/snort
Дальше нам понадобится libpcap для захвата пакетов в режиме promisc:wget http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz
tar xzf libpcap-1.8.1.tar.gz
cd libpcap-1.8.1
./configure --prefix=/usr && make && make install
Cкачаем и поставим libdnet для низкоуровневой работы с пакетами:
cd ~/snort
wget https://github.com/dugsong/libdnet/archive/libdnet-1.12.tar.gz
tar xzf libdnet-1.12.tar.gz
cd libdnet-libdnet-1.12
./configure --prefix=/usr --enable-shared && make && make install
А так же daq (последнюю версию можно посмотреть на https://www.snort.org/downloads в разделе Sources):
cd ~/snort
wget https://snort.org/downloads/snort/daq-2.0.6.tar.gz
tar -xvzf daq-2.0.6.tar.gz
cd daq-2.0.6
./configure && make && make install
Скачаем библиотеки nghttp которые реализуют HPAC алгоритм для сжатия заголовка:
cd ~/snort
wget https://github.com/nghttp2/nghttp2/releases/download/v1.22.0/nghttp2-1.22.0.tar.gz
tar -xzvf nghttp2-1.22.0.tar.gz
cd nghttp2-1.22.0
autoreconf -i --force
automake
autoconf
./configure --enable-lib-only && make && make install
И наконец установка самого Snort:
cd ~/snort
wget https://snort.org/downloads/snort/snort-2.9.9.0.tar.gz
tar -xvzf snort-2.9.9.0.tar.gz
cd snort-2.9.9.0
./configure --enable-sourcefire && make && make install
Обновим кэш библиотек:
ldconfig
Поместим ссылку в бинарный файл /usr/sbin:ln -s /usr/local/bin/snort /usr/sbin/snort
Проверим всё ли у нас получилось:
snort -V
Если видим то что показано ниже то всё удачно:
Настройка
Создаем пользователя и группу:
groupadd snort
useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
Создаем каталоги:mkdir /etc/snort
mkdir /etc/snort/rules
mkdir /etc/snort/rules/iplists
mkdir /etc/snort/preproc_rules
mkdir /usr/local/lib/snort_dynamicrules
mkdir /etc/snort/so_rules
touch /etc/snort/rules/iplists/black_list.rules
touch /etc/snort/rules/iplists/white_list.rules
touch /etc/snort/rules/local.rules
touch /etc/snort/sid-msg.map
Создаем каталоги лог-файлов:mkdir /var/log/snort
mkdir /var/log/snort/archived_logs
Настроим разрешения chmod -R 5775 /etc/snort
chmod -R 5775 /var/log/snort
chmod -R 5775 /var/log/snort/archived_logs
chmod -R 5775 /etc/snort/so_rules
chmod -R 5775 /usr/local/lib/snort_dynamicrules
chown -R snort:snort /etc/snort
chown -R snort:snort /var/log/snort
chown -R snort:snort /usr/local/lib/snort_dynamicrules
Копируем конфигурационные файлы и динамические препроцессоры:cd ~/snort/snort-2.9.9.0/etc/
cp *.conf* /etc/snort
cp *.map /etc/snort
cp *.dtd /etc/snort
cd ~/snort/snort-2.9.9.0/src/dynamic_preprocessors/build/usr/local/lib/snort_dynamicpreproccesor/
cp * /usr/local/lib/snort_dynamicpreprocessor/
Закоменнтируем набор правил (PolledPork работает с помощью одного файла правил):sed -i "s/include \$RULE\_PATH/#include \$RULE\_PATH/" /etc/snort/snort.conf
Откроем главный конфигурационный файл:nano /etc/snort/snort.conf
Заменяем ipvar HOME_NET any на ipvar HOME_NET [ВАША СЕТЬ (например: 192.168.1.0/24]Заменяем ipvar EXTERNAL_NET any на ipvar EXTERNAL_NET !$HOME_NET
То есть внешняя сеть – любая, не равная домашней. Если хотите чтобы трафик шел и внутри домашней сети то ничего не меняем.
Прописываем пути:
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules
var WHITE_LIST_PATH /etc/snort/rules/iplists
var BLACK_LIST_PATH /etc/snort/rules/iplists
Раскоменнтируем файл правил для проверки работы Snort:include $RULE_PATH/local.rules
После правки конфигурационного файла теперь проверим всё ли у нас работает.snort -T -i eth0 -c /etc/snort/snort.conf
-T Для проверки конфигурационного файла-i Интерфейс для прослушивания (начиная с версии 2.9.8.х)
-с Какой конфигурационный файл использовать
Если всё успешно мы в терминале видим:
Напишем простое правило для проверки обнаружения Snort
Вставьте следующую строку в пустой файл локальных правил /etc/snort/rules/local.rules:
alert icmp any any -> $HOME_NET any (msg:"ICMP test detected"; GID:1; sid:10000001; rev:001; classtype:icmp-event;)
И добавь строку в файл /etc/snort/sid-msg.map:#v2
1 || 10000001 || 001 || icmp-event || 0 || ICMP Test detected || url,tools.ietf.org/html/rfc792
После изменений мы снова должны проверить файл конфигурации:snort -T -c /etc/snort/snort.conf -i eth0
Если прокрутить терминал вверх мы увидим что наше правило успешно загрузилось:
Теперь мы можем начать тестирование в режиме NIDS чтобы выводить любые предупреждения в консоль.
Итак мы будем запускать снорт используя следующие флаги:
-A console Параметр «Консоль» выводит предупреждения в
Итак мы будем запускать снорт используя следующие флаги:
-A console Параметр «Консоль» выводит предупреждения в
режиме быстрого доступа на терминале
-q Тихий режим. Не показывать баннер и отчет о состоянии.
-u snort Запуск Snort в качестве следующего пользователя
-g snort Запуск Snort в качестве следующей группы
-c /etc/snort/snort.conf Путь к нашему Snort.conf файлу
-i eth0 Интерфейс для прослушивания
С другого компьютера выполните команду ping IP-адрес, и вы увидите в консоли вывод который аналогичен тому, что показан ниже.
-q Тихий режим. Не показывать баннер и отчет о состоянии.
-u snort Запуск Snort в качестве следующего пользователя
-g snort Запуск Snort в качестве следующей группы
-c /etc/snort/snort.conf Путь к нашему Snort.conf файлу
-i eth0 Интерфейс для прослушивания
/usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0
Когда вы выполните эту команду, вы изначально не увидите никакого вывода. Snort запущен и обрабатывает все пакеты, которые поступают на eth0 (или какой-либо интерфейс, указанный вами). Snort сравнивает каждый пакет в соответствии с правилами, которые он загрузил (в данном случае нашим единственным правилом Ping ICMP), и затем выведет предупреждение в терминале, когда пакет соответствует нашему правилу.С другого компьютера выполните команду ping IP-адрес, и вы увидите в консоли вывод который аналогичен тому, что показан ниже.
Используйте Ctrl-c для остановки работы Snort. Обратите внимание, что Snort сохранил копию этой информации в /var/log/snort,с именем Snort.log.nnnnnnnnn (Цифры могут быть разными).
PulledPork
PulledPork - это скрипт на Perl, которой загружет, обьединяет и устанавливает набор правил для Snort. Итак давайте начнем его установку и настройку.
Докачаем нужные библиотеки:
Скачаем и установим PulledPork и конфигурационные файлы:
Проверим правильность установки:
Должны получить:
Регистрируемся на официальном сайте http://snort.org/
Переходим в личный кабинет и видим Oinkcode, запомним его т.к. будем его записать в конфигурационный файл
Откроем наш файл для конфигурации /etc/snort/pulledpork.conf:
И редактируем его:
Докачаем нужные библиотеки:
apt-get install libcrypt-ssleay-perl liblwp-useragent-determined-perl
Скачаем и установим PulledPork и конфигурационные файлы:
cd ~/snort
wget https://github.com/shirkdog/pulledpork/archive/master.tar.gz -O pulledpork-master.tar.gz
tar xzvf pulledpork-master.tar.gz
cd pulledpork-master/
cp pulledpork.pl /usr/local/bin
chmod +x /usr/local/bin/pulledpork.pl
cp etc/*.conf /etc/snort
Проверим правильность установки:
/usr/local/bin/pulledpork.pl -V
Должны получить:
Регистрируемся на официальном сайте http://snort.org/
Переходим в личный кабинет и видим Oinkcode, запомним его т.к. будем его записать в конфигурационный файл
Откроем наш файл для конфигурации /etc/snort/pulledpork.conf:
nano /etc/snort/pulledpork.conf
Строка 19: Введите свой oinkcode или закомментируте если его нету
Строка 29: Раскомментируйте набор правил для возникающих угроз.
Строка 74: Изменить на: rule_path=/etc/snort/rules/snort.rules
Строка 89: Изменить на: local_rules=/etc/snort/rules/local.rules
Строка 92: Изменить на: sid_msg=/etc/snort/sid-msg.map
Строка 96: Изменить на: sid_msg_version=2
Строка 119: Изменить на: config_path=/etc/snort/snort.conf
Строка 133: Изменить на: distro=Debian-8-7
Строка 141: Изменить на: black_list=/etc/snort/rules/iplists/black_list.rules
Строка 150: Изменить на: IPRVersion=/etc/snort/rules/iplists
Запустим PulledPork вручную один раз, чтобы убедиться что он работает:
/usr/local/bin/pulledpork.pl -c /etc/snort/pulledpork.conf -l
PulledPork должен завершиться с выходом как приведено ниже
Когда PulledPork завершился успешно как показано выше, у нас появиться набор правил snort.rules в директории /etc/snort/rules/. PulledPork объединяет все правила в один файл.
Теперь мы должны праписать это правило в snort.conf.
Откройте файл /etc/snort/snort.conf и пропишите слудющее правило:
include $RULE_PATH/snort.rules
Поскольку мы снова модифицировали файл конфигурации snort.conf мы заного должны протестировать:
snort -T -c /etc/snort/snort.conf -i eth0
Теперь запланируем проверку обновлений:
crontab -e
Выбираем редактор и добавляем строку, указывая запускать PulledPork по расписанию, например, каждый день в 12:00:
00 12 * * * /usr/local/bin/pulledpork.pl -c /etc/snort/pulledpork.conf -l
Итак теперь у нас есть СОА с автообновлением правил, на этой ноте я закончу статью. В следующей части я расскажу вам как прикрутить к Snort БД mySQL и даже как автоматически запускать всю нашу IDS!










Комментариев нет:
Отправить комментарий