Удобнее, эффективнее, лучше: Snort + MySQL::Журнал СА 11.2003
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Книжная полка  

Защиты много не бывает

Среди книжных новинок издательства «БХВ» есть несколько изданий, посвященных методам социальной инженерии

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6414
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 7118
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4396
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3086
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3882
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3897
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6385
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3234
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3530
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7364
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10726
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12445
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14097
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9192
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7142
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5446
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4683
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3495
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3212
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3449
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3090
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Удобнее, эффективнее, лучше: Snort + MySQL

Архив номеров / 2003 / Выпуск №11 (12) / Удобнее, эффективнее, лучше: Snort + MySQL

Рубрика: Безопасность /  Сетевая безопасность

ПАВЕЛ ЗАКЛЯКОВ

Удобнее, эффективнее, лучше: Snort + MySQL

Описанный в статье способ настройки IDS Snort, при котором логи ведутся в текстовый файл, имеет как положительные моменты, так и отрицательные. Среди положительных моментов можно назвать простоту. С текстовыми файлами человек может работать «напрямую», просматривая их в текстовом редакторе, используя различные возможности их обработки с помощью средств shell и perl. Удобства очевидны: не требуются дополнительные программы и прочие утилиты. Однако если смотреть шире, то по мере увеличения возможностей СОА эти преимущества обращаются в недостатки. Приведём один такой существенный недостаток: при очень больших объёмах логов место на диске при использовании текстовых файлов тратится не оптимально. Многие программы пытаются вести логи в своём, более компактном формате, либо имеют такую опциональную возможность. На первый взгляд это решает проблему размера лог-файлов, заметно их сокращая, но вместе с этим привносится и ряд новых потенциально возможных неудобств. Вот и получается, что двоичные файлы оказываются меньше по размеру, но не могут быть централизованно для всех программ стандартизированы, а текстовые файлы не предоставляют широких возможностей для их быстрого просмотра и более глубокого анализа с целью обнаружения каких-то внутренних зависимостей. Вот и подумаешь исходя из этого: «А зачем изобретать велосипед, не проще ли воспользоваться уже какой-нибудь готовой СУБД для ведения логов в неё?». Дополнительные плюсы от использования СУБД очевидны: во-первых, СУБД стандартизирована, во-вторых, легче решается вопрос переноса данных в другую СУБД, если у неё вдруг окажутся лучшие математические возможности по анализу данных. Также в случае использования нескольких сенсоров (сбора данных с нескольких узлов) с СУБД проблем не будет, а с текстовыми файлами может возникнуть путаница в именах лог-файлов, либо простои из-за периодических блокировок одного и того же лог-файла, так как одновременно данные из двух мест туда писаться не могут.

На наше счастье все эти проблемы по более компактному хранению информации, более удобному её анализу и организации многопользовательского доступа уже решены в многопользовательских реляционных базах данных. (Под пользователями в данном случае можно понимать все процессы на одном или нескольких компьютерах, желающие работать в один и тот же момент с БД.)

Далее мы попытаемся настроить Snort для работы с БД MySQL и поговорим о способах просмотра записанных данных. Занесение данных в БД – лишь малая часть проблемы, можно сказать, надводная часть айсберга, а вот «что делать с уже внесёнными данными дальше?» – это уже вопрос, который может и не иметь однозначно правильного ответа. Попытка дать на него ответ – это довольно непростая задача, особенно если мы хотим сделать какие-то обоснованные выводы на основе данных, собранных с распределённой сети сенсоров. Наибольшую сложность могут представлять попытки обнаружения в данных следов распределённых телекоммуникационных атак, но об этом, скорее всего, я напишу в будущих статьях.

Занесение данных из IDS Snort в БД

Для начала мы возьмём относительно простую и свободно распространяемую БД MySQL. Её выбор обоснован большей распространённостью среди простых БД и наличием достаточного числа литературы к ней на русском языке .

Напомню основные моменты по установке Snort (подробнее см. [1]). Как и обычно, скачиваем и ставим последний Snort, если он не стоит:

# wget http://www.snort.org/dl/snort-2.0.2.tar.gz

# wget http://www.snort.org/dl/snort-2.0.2.tar.gz.md5

Сравниваем значения хеша, выданного командами:

# cat snort-2.0.2.tar.gz.md5

# md5sum snort-2.0.2.tar.gz

Рисунок 1

Аналогично скачиваем и проверяем последние правила:

# wget http://www.snort.org/dl/rules/snortrules-stable.tar.gz

# wget http://www.snort.org/dl/rules/snortrules-stable.tar.gz.md5

# cat snortrules-stable.tar.gz.md5

# md5sum snortrules-stable.tar.gz

Распаковываем скачанное куда-нибудь, например в директорию /progi/snort-2.0.2, и запускаем там конфигурирование с опцией --with-mysql:

#./configure --with-mysql

не забываем про библиотеку libpcap. Если она не стоит и выдаётся ошибка:

Рисунок 2

копируем со второго диска (RedHat v.7.3) и ставим:

# rpm -ihv libpcap-0.6.2-12.i386.rpm

Если БД MySQL у вас не установлена, то вам выдастся следующее сообщение в процессе конфигурирования:

Рисунок 3

и вам надо будет поставить БД MySQL. RedHat 7.3 идёт с версией 3.23.49-3 и mysqlclient9-3.23.22-6. Так как более новые версии данных продуктов доступны также в rpm через up2date (или http://redhat.com/apps/support/errata), то мы возьмём их, соответственно версии 3.23.54a-3 и 3.23.22-8.

Обладатели других версий Linux могут установить себе БД самостоятельно, при этом, наверное, будет лучше скачать последнюю версию прямо с сайта MySQL [6].

Решение всех возникших проблем при этом ложится на ваши плечи. Мы же пишем все нужные файлы для MySQL в отдельную директорию и ставим их все вместе, так как это проще, чем соблюдать последовательность установки, дабы избежать ошибок с зависимостями о необходимости установки того rpm перед этим или после этого.

Рисунок 4

Далее, либо руками прописываем мягкие ссылки на /etc/rc.d/init.d/mysqld в директориях /etc/rc.d/rc?.d на запуск и останов, либо запускаем:

# chkconfig mysqld on

который делает это за нас. (Замечание: в некоторых не-rpm поставках mysqld называется mysql.)

Далее либо перезапускаемся, либо запускаем MySQL руками:

# /etc/rc.d/init.d/mysqld start

Рисунок 5

Далее повторно (если у вас не был установлен MySQL) запускаем конфигурацию из директории, где у нас установлен дистрибутив Snort.

# ./configure --with-mysql

Запускаем компиляцию:

# make

И устанавливаем Snort:

# make install

Далее из snortrules-stable.tar.gz копируем правила (файлы *.rules) в /etc/snort/rules. Остальные файлы помещаем в /etc/snort. После этого редактируем /etc/snort/snort.conf.

Точная настройка и разбор snort.conf-файла вообще заслуживает отдельной статьи.

Основные моменты, что мы меняли в [1]:

В первом разделе это были переменные:

var HOME_NET 123.45.45.45

или для диапазона адресов:

var HOME_NET [10.1.1.0/24,192.168.1.0/24]

var RULE_PATH rules

Вторая и четвёртые части у нас не изменились, а в третьей, отвечающей за вывод данных, как раз и будут главные изменения. Там мы укажем, что необходимо вести вывод в БД MySQL.

Мы находим закомментированные строчки:

# 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=root password=test dbname=db host=localhost

# output database: alert, postgresql, user=snort dbname=snort

# output database: log, unixodbc, user=snort dbname=snort

# output database: log, mssql, dbname=snort user=snort password=test

Раскомментируем первую, нужную нам для MySQL строчку, или сделаем её копию и укажем имя БД, пароль и пользователя для доступа к ней, которые зададим после. Пусть пользователь БД будет называться snort, пароль будет ваш_пароль№1, пользоваться мы будем БД snort. Имя нашего хоста будет localhost.

В итоге получим:

output database: log, mysql, user=snort password=ваш_пароль№1 dbname=snort host=localhost

Как легко догадаться, БД может называться как угодно, пароль и имя пользователя могут быть любыми, лишь бы они соответствовали учётным записям в БД, которые мы сейчас создадим. Также БД может быть запущена и на другом компьютере, но об этом мы поговорим, когда будем строить распределённую систему сенсоров для обнаружения распределённых телекоммуникационных атак.

Для того чтобы делать записи в БД, нужно, чтобы в этой самой БД существовала не только необходимая БД с соответствующим именем, но и были созданы таблицы, куда, собственно, и будут добавляться записи. Если мы прочитаем файл README.database, на который есть ссылка в комментариях к строчкам выше, то оттуда мы можем узнать, что можно вести логи не только в MySQL, который мы выбрали вначале, но и в:

  • PostgreSQL;
  • любую UNIX ODBC БД;
  • MS SQL Server;
  • Oracle.

Список вполне неплохой.

Если почитать README.database внимательно, то там будет написано практически всё, чем мы займёмся дальше, правда, на английском языке.

Если БД MySQL у вас установлена впервые или вы её ранее не настраивали, то вам в целях безопасности придётся немного поднастроить её сейчас, в частности, задать пароль на суперпользователя БД – root (root для MySQL и root для системы – это разные пользователи). Для этого подключаемся к БД от имени пользователя root:

# mysql -u root

Далее нам выдастся обычное приглашение уже самой базы данных.

Рисунок 6

Команды следует набирать после приглашения «mysql>»:

mysql> set password for "root"@"localhost"=password("ваш_пароль№2");

в ответ должно выдастся что-то вроде:

Query OK, 0 rows affected (0.39 sec)

Затем создаём БД snort (это нужно и тем, у кого MySQL уже давно настроена):

mysql> create database snort;

Иногда слова CREATE DATABASE пишут заглавными буквами, но в данном случае это не важно. Далее следует выйти из БД командой:

mysql> exit

Теперь, после того как мы установили пароль для захода в БД, нам следует набирать пароль при входе в БД и заходить уже другой командой, с лишним ключом «-p», говорящим о необходимости запрашивать пароль:

# mysql -u root -p

на запрос пароля при входе следует вводить «ваш_пароль№2», заданный выше. Далее необходимо создать пользователей, от имени которых мы будем работать с БД, задать им права на выполнение тех или иных действий, пароли и структуру таблиц БД snort. Количество таблиц, которые использует Snort, велико для того, чтобы задавать их все вручную:

  • schema
  • event
  • signature
  • sig_reference
  • reference
  • reference_system
  • sig_class
  • sensor
  • iphdr
  • tcphdr
  • udphdr
  • icmphdr
  • opt
  • data
  • encoding
  • detail

Это долго и неудобно, велика вероятность ошибки. Поэтому лучше воспользоваться уже готовым cписком команд, благо для популярных БД они поставляются с дистрибутивом Snort в директории contrib.

Нужный нам файл называется create_mysql. Мы ограничимся лишь быстрым просмотром этого файла для ознакомления, а если у вас будет своя, уникальная БД, тогда вам лучше взять подобный файл и разобраться со структурой таблиц досконально, а пока я не вижу смысла придумывать велосипед.

Создать описанную структуру можно командой:

# mysql -D snort -u root -p < /progi/snort-2.0.2/contrib/create_mysql

Однако мы сделаем это немного по-другому, в интерактивном режиме, чтобы было более понятно. Для этого файл create_mysql мы помещаем в директорию, из которой будем запускать MySQL, чтобы он его видел без указания лишних путей.

Запускаем:

# mysql -u root -p

Введя ваш_пароль№2, в приглашении БД указываем, что мы хотим подключиться и работать с БД snort.

mysql> connect snort

После успешного подключения указываем, что нам необходимо выполнить содержимое файла create_mysql, то есть фактически создать нужную нам структуру таблиц.

mysql> source create_mysql

В ответ на это мы должны увидеть множество строчек вида:

Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

означающих, что выполнение той или иной SQL-команды прошло успешно. В директории /var/lib/mysql/snort должны появиться файлы, соответствующие созданным таблицам.

Далее нам необходимо создать пользователя snort, от имени которого Snort будет работать с БД, задать ему пароль и вручить ему права на те или иные действия с БД snort. Например, на добавление новых записей в таблицы и пр.

Явной команды вроде adduser для добавления пользователей, как в Linux, здесь нет, объясняется это тем, что сведения о пользователях хранятся также в самой БД в её таблицах, поэтому при задании каких-либо атрибутов пользователю, то есть его прав или пароля, пользователь автоматически вносится в БД. Именно исходя из соображений безопасности по доступу к таблице с данными пользователей мы выше ввели пароль для суперпользователя БД.

Вручаем права пользователю snort:

mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort;

для того чтобы можно было работать с БД, локально запускаем всё то же самое, но для snort@localhost:

mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort@localhost;

Далее, забегая вперёд, создадим ещё одного пользователя и вручим ему права только на просмотр БД. В принципе, если этим пользователем будет php-скрипт на нашем компьютере, достаточно одной (второй) записи для локального доступа. Пользователя назовём acidviewer, а из прав дадим ему те же, что и выше, кроме права DELETE.

mysql> grant CREATE,INSERT,SELECT,UPDATE on snort.* to acidviewer;

mysql> grant CREATE,INSERT,SELECT,UPDATE on snort.* to acidviewer@localhost;

Теперь зададим пароли для созданных аккаунтов. Так как информация о паролях хранится в БД mysql, а мы сейчас работаем с БД snort, переключимся на первую.

mysql> connect mysql

Поскольку аккаунтов для одного и того же пользователя два, один для доступа извне, а другой с localhost, то пароли будут задаваться также два раза. Можно задать разные пароли, но будет велик риск запутаться. Пароль ваш_пароль№1 используется тот, что мы указали выше при редактировании файла snort.conf в третьей секции. Пароль для acidviewer следует придумать, назовём его ваш_пароль№3.

mysql> set password for "snort"@"localhost"=password("ваш_пароль№1");

mysql> set password for "snort"@"%"=password("ваш_пароль№1");

mysql> set password for "acidviewer"@"localhost"=password("ваш_пароль№3");

mysql> set password for "acidviewer"@"%"=password("ваш_пароль№3");

Далее сбрасываем привилегии и выходим.

mysql> flush privileges;

mysql> exit

Сейчас Snort полностью готов для того, чтобы вести логи в созданную нами БД.

Замечание: дотошный читатель скажет, что пользователю snort мы задали несколько больше привилегий, чем ему это необходимо. Сделано это было специально с целью не запутывать читателя лишней информацией и лишними пользователями. Поэтому два пользователя были объединены в одного и от имени snort будет работать не только Snort, но и программа (скрипт), с помощью которой мы будем просматривать БД и, возможно, редактировать её. Как раз для редактирования расширенные права и нужны.

Пробуем запустить Snort вручную.

# /usr/local/bin/snort -o -i eth0 -d -c /etc/snort/snort.conf

Параметр, указывающий на каком интерфейсе будет слушать Snort: «-i eth0», можно опустить.

Замечание: если у вас пароль, указанный в snort.conf (ваш_пароль№1), не соответствует заданному в БД для пользователя snort (тоже ваш_пароль№1) из-за ошибки в написании, то вам может выдасться в процессе запуска Snort сообщение:

ERROR: database: mysql_error: Access denied for user: "snort@localhost" (Using password: YES)

Если вы следовали изложенному выше, у вас проблем быть не должно.

В случае успешного ручного запуска создаём скрипт для автоматизации этого процесса при загрузке компьютера. Скрипт назовём snortd и поместим его в /etc/rc.d/init.d:

#!/bin/bash

#

# snortd         Start/Stop the snort IDS daemon.

#

# chkconfig: 2345 79 11

# description:  snort is a lightweight network intrusion

# detection tool that currently detects more than 1100 host

# and network vulnerabilities, portscans, backdoors, and more.

#

# June 10, 2000 -- Dave Wreski <dave@linuxsecurity.com>

#   - initial version

#

# July 08, 2000 Dave Wreski <dave@guardiandigital.com>

#   - added snort user/group

#   - support for 1.6.2

# Source function library.

. /etc/rc.d/init.d/functions

# Specify your network interface here

INTERFACE=eth0

# See how we were called.

case "$1" in

   start)

     echo -n "Starting snort: "

     # ifconfig eth0 up

     daemon /usr/local/bin/snort -o -i $INTERFACE -d -D -c /etc/snort/snort.conf

     touch /var/lock/subsys/snort

     sleep 3

     if [ -f /var/log/snort/alert ]

     then

     rm /var/log/snort/alert

     fi

     echo

     ;;

   stop)

     echo -n "Stopping snort: "

     killproc snort

     rm -f /var/lock/subsys/snort

     echo

     ;;

   restart)

     $0 stop

     $0 start

     ;;

   status)

     status snort

     ;;

   *)

     echo "Usage: $0 {start|stop|restart|status}"

     exit 1

esac

exit 0

Замечание: закомментированная строчка «ifconfig eth0 up» имеет следующий смысл: если при каких-то условиях (смена номера запуска или какой-то сбой при запуске network) Snort будет запускаться до запуска сети и поднятия интерфейса, то при её наличии ошибки не будет. Повторное поднятие уже поднятого интерфейса ошибок давать не должно. Строчку «rm /var/log/snort/alert» и несколько соседних можно закомментировать, если вы не хотите, чтобы у вас при запуске этот файл начинался с нуля.

Далее, либо руками прописываем мягкие ссылки на /etc/rc.d/init.d/snortd в директориях /etc/rc.d/rc?.d на запуск и останов, соблюдая последовательность запуска, чтобы Snort запускался после MySQL, например:

# ln -s /etc/rc.d/init.d/snortd /etc/rc.d/rc3.d/S79snortd

# ln -s /etc/rc.d/init.d/snortd /etc/rc.d/rc3.d/K11snortd

либо запускаем:

# chkconfig snortd on

или

# chkconfig --level 3 snortd on

(сделать ссылки только для уровня 3), который делает это за нас.

Автоматизация этого процесса не даёт гарантии того, что запуск Snort окажется после MySQL, а останов наоборот, поэтому этот момент следует проконтролировать вручную, посмотрев, чтобы номер у S??snortd был больше, чем у S??mysqld, а номер у K??snortd был меньше, чем у K??mysqld.

Напомню, что в дистрибутиве Snort, в директории contrib имеется файл S99snort, аналогичный snortd.

В случае успешного выполнения вышенаписанных действий по автоматизации процесса запуска Snort должнен запуститься либо при запуске вручную скрипта автоматизации, как это будет сделано ниже, либо после перезапуска компьютера.

В любом случае в ответ на ваши действия вы должны увидеть зелёное ok, а на команду status вам должно выдаваться, что Snort выполняется.

Рисунок 7

Если это так, то половина нужного нам результата получена, и мы смело можем переходить ко второй части, а именно к настройке и изучению средств просмотра БД snort, куда запущенный нами Snort исправно записывает свои замечания о проходящем через него трафике.

Просмотр содержимого БД snort

Если компьютер с установленным и правильно запущенным Snort подключить к сети Интернет напрямую, то есть с использованием реального IP-адреса, то менее чем через несколько минут в БД snort появятся новые записи. (В последнее время львиную долю этих записей составляют ICMP-сканирования.) Появление новых записей в БД не так наглядно для конечного пользователя, как если бы логи велись в файл, а мы бы запустили:

# tail -f имя_этого_файла

для просмотра вновь появляющихся записей или:

# cat имя_log_файла

для просмотра содержимого всего файла. Для работы с БД нам необходимо наличие большего объёма знаний. Счастлив тот, кто знает СУБД как свои пять пальцев, – он может смело пропустить несколько абзацев ниже. Со всеми остальными мы попытаемся просмотреть таблицы БД snort с помощью SQL-запросов.

Для начала нам необходимо подключиться к СУБД MySQL. Сделать это можно как от имени суперпользователя root, так и от имени заведённых пользователей snort и acidviewer. Выберем пользователя snort и выполним команду:

# mysql -u snort -p

В качестве пароля необходимо ввести ваш_пароль№1.

Вся последующая работа с БД ведётся с помощью SQL-запросов. Для получения более-менее наглядного представления о таблицах с данными мы выполним несколько простых SQL-запросов. Более глубокое изучение языка запросов читатели могут выполнить самостоятельно. После того как мы убедимся, что данные в таблицах есть, мы перейдём к настройке средств более удобного просмотра БД, а именно ACID. Первая команда, которую мы выполним, покажет нам, какие БД имеются в нашей СУБД.

mysql> SHOW DATABASES;

Рисунок 8

Замечание: регистр команд не имеет значения, MySQL обработает запрос, даже если вы смешаете регистры, однако мы будем писать команды в верхнем регистре, как стандарт де-факто при использовании языка SQL. Команды можно вводить в несколько строчек, концом команды считается знак «;», а не символ перевода строки. Это очень удобно при написании длинных команд, так как не теряется наглядность.

В ответ на запрос мы должны увидеть табличку с тремя БД: mysql, snort и test.

Выберем БД snort:

mysql> CONNECT snort;

и посмотрим, какие таблицы у нас имеются:

mysql> SHOW TABLES;

Рисунок 9

Как раз все те, которые мы создавали ранее.

Чтобы посмотреть заголовки столбцов выбранной нами таблицы event, дадим команду:

mysql> SHOW COLUMNS FROM event;

либо

mysql> DESCRIBE event;

Рисунок 10

По интуитивным соображениям можно понять, что cid отвечает за нумерацию событий. С помощью команды:

mysql> SELECT * FROM event WHERE cid<10;

мы можем получить список нескольких первых событий.

Рисунок 11

Полученная таблица содержит 4 столбца с заголовками, которые мы видели ранее:

  • sid или sensor ID – тот сенсор, с которого была получена информация;
  • cid или ID counter – грубо говоря, номер события;
  • signature – номер сигнатуры, которая была обнаружена;
  • timestamp – временная метка, чтобы знать, когда произошло событие.

Замечание 1: нумерация событий для разных сенсоров не сквозная, поэтому первичным ключом в данной таблице являются два поля sid и cid. Это можно заметить, если внимательно посмотреть содержимое файла create_mysql.

Замечание 2: как легко догадаться, сенсоров может быть несколько, если получится, то этот случай мы обсудим в следующих статьях.

Замечание 3: давать команду для показа всех строк данной таблицы:

mysql> SELECT * FROM event;

не имеет смысла, так как через некоторое время число записей в данной таблице может стать очень большим. При этом вывод её на экран может занять несколько минут.

Чтобы понять, что такое сигнатура номер 2 или тот номер, что будет у вас в таблице, обратимся к таблице singature и посмотрим содержимое строки с sig_id=2;

mysql> SELECT * FROM signature WHERE sig_id=2;

Если нам не нужна лишняя информация, то мы можем её не выводить, например, выполнив запрос только на вывод содержимого полей sig_id и sig_name следующим образом:

mysql> SELECT sig_id,sig_name FROM signature WHERE sig_id=2;

Как мы видим для моего случая, это «STEALTH ACTIVITY (SYN FIN scan) detection».

Рисунок 12

Подобным образом можно просматривать все нужные нам таблицы и получать информацию не хуже, чем если бы мы читали текстовый файл. Используя более хитрые запросы, можно выводить информацию из нескольких таблиц в виде одной. Например, если мы хотим посмотреть несколько первых событий, как и ранее, только без столбца sid и чтобы вместо signature выводился не номер, а сразу словами разъяснение, то есть sig_name из таблицы signature, то команда, выполняющая это, будет выглядеть так:

mysql> SELECT event.cid,signature.sig_name,event.timestamp FROM event,signature WHERE event.signature=signature.sig_id AND cid<10;

Вот результат её выполнения.

Рисунок 13

Обратившись к [5], можно научиться выполнять и более виртуозные запросы. В таблице iphdr для каждого события по его cid точно так же можно узнать IP-адрес источника атаки и на какой адрес она была нацелена.

Моё мнение таково, что хороший системный администратор или специалист по информационной безопасности должны уметь выполнять простые SQL-запросы в командной строке, как это было описано выше. Конечно, никто этого делать не заставляет, и большинство из нас далеки от совершенства, выше было рассказано про то, без чего по-хорошему никак не обойтись. Любая, будь то самая удобная графическая оболочка при попытке задания более сложных запросов неминуемо приведёт вас к написанию SQL-запросов вручную. Несмотря на то что язык SQL лучше знать, чем не знать, не хотелось бы упускать из вида те инструменты, которые значительно упрощают нашу жизнь, в частности, программу phpMyAdmin.

phpMyAdmin

Для работы phpMyAdmin [8] и ACID необходимо, чтобы были установлены пакеты php и php-mysql, у меня это были php-4.1.2-7.3.6 php-mysql-4.1.2-7.3.6, на 2-м и 3-м дисках RedHat v.7.3, соответственно, имеются более ранние версии.

Всё вышеизложенное по поводу просмотра БД в более наглядной форме можно реализовать с помощью этого продукта. Для работы Snort он не нужен, но для более наглядного представления данных в БД считаю, что с этим пакетом стоит познакомиться всем тем, кто с ним не знаком.

Для начала следует сходить на сайт этой программы [8] и скачать последнюю версию с какого-нибудь зеркала. На момент написания статьи последней версией была 2.5.4.

После скачивания, например [9], и проверки хеш-функции:

# md5sum phpMyAdmin-2.5.4-php.tar.gz

(MD5: 76fc7216aa2f132888c7173a6668af46)

содержимое архива следует поместить в папку для php-скриптов. Если не следовать досконально файлу Documentation.txt и закрыть глаза на некоторые вопросы безопасности, то удобнее будет создать директорию phpmyadmin, например, в /var/www/html и содержимое phpMyAdmin-2.5.4, то есть всё то, что находится в архиве, поместить туда (в /var/www/html/phpmyadmin). Далее следует внести небольшое исправление в /var/www/html/phpmyadmin/config.inc.php в строку:

$cfg["Servers"][$i]["password"] = "";

указав там свой пароль от БД:

$cfg["Servers"][$i]["password"] = "ваш_пароль№2";

Остальные настройки, как host, port, user и пр., менять не стоит, так как по умолчанию всё должно работать.

Если вы установили правильный пароль, то при попытке обращения к директории phpmyadmin веб-сервера, поддерживающего php, должно выдасться следующее:

Рисунок 14

Многих должен порадовать тот факт, что поддерживается русский язык и есть выбор различных кодировок. Далее, если щёлкнуть на «Базы данных», должны высветиться те БД, которые имеются в MySQL.

Рисунок 15

Щёлкая на Snort, мы выбираем эту БД и попадаем к следующему окну, где сразу видны названия тех таблиц, которые содержатся в этой БД.

Рисунок 16

Щёлкая на название таблицы event слева, получаем информацию об этой таблице:

Рисунок 17

Далее, внизу, SQL-запрос в окошке оставляем без изменения и жмём кнопку «Пошёл». После чего у нас на экран выводится содержимое нашей таблицы.

Рисунок 18

Задав себе повторно тот же, что и ранее, вопрос, а именно: «Что за событие означает сигнатура номер 2?», мы можем также просто щёлкнуть на имя таблицы signature слева и увидеть параметры этой таблицы, затем внизу, не меняя SQL-запроса в окошке, нажав на кнопку «Пошёл», получаем содержимое первых 30 строк, среди которых находим нужную.

Рисунок 19

Соответственно, если изменить запрос, например, на:

mysql> SELECT event.cid,signature.sig_name,event.timestamp FROM event,signature WHERE event.signature=signature.sig_id AND cid<10;

мы получим тот же результат, что и ранее мы получали через консольного клиента. Именно поэтому, какой бы оболочка удобной ни была, следует знать SQL, так как это основа работы с БД.

Надеюсь, что просмотр содержимого БД двумя вышеописанными способами не показался вам чудовищно сложным. Наоборот, я старался сделать это как можно проще, чтобы от слов «БД» у вас не возникали мысли о «чёрном ящике» за семью печатями и не шли мурашки по коже. Надеюсь, что мне удалось убедить тех, кто ранее не был знаком с БД, что это не есть плохо, когда логи хранятся в БД. Их можно также легко просматривать, если не сказать, что даже с большим числом удобств, чем если бы они были в обычном текстовом файле.

После того как мы убедились, что наша БД содержит информацию, попытаемся настроить специализированные и более удобные средства просмотра БД, а именно ACID. Продвинутые читатели, если их не устроит ACID, могут также пропустить всё, что говорится ниже, и самостоятельно «изобрести велосипед» не хуже. Со всеми же остальными начнём настраивать уже готовый пакет – ACID, поставляемый вместе с дистрибутивом Snort (в директории contrib).

ACID

ACID [10] расшифровывается как Analysis Console for Incident/Intrusion Databases и дословно переводится как консоль для анализа баз данных с инцидентами/атаками/вторжениями. В общем, для нашего случая это то, что доктор прописал, тем более что данная программа была разработана координационным центром CERT [11] как часть проекта AIRCERT [12].

ACID из себя представляет набор php-cкриптов, способных выполнять различные функции, в том числе начиная с формирования запросов на получение данных из БД аналогично тому, как это мы делали ранее, и заканчивая декодированием пакетов с целью их более удобного визуального восприятия и подсчётом статистических данных.

Содержимое БД при этом может формироваться не только за счёт системы обнаружения атак, но также может пополняться данными с различных межсетевых экранов и средств сетевого мониторинга.

Для того чтобы наглядно оценить удобство использования данного средства, необходимо также иметь какой-либо из установленных веб-серверов с поддержкой php, например, всё тот же apache. Плюс необходимо иметь несколько дополнительных средств, нужных для работы ACID:

  • ADODB [13];
  • JpGraph [15];
  • PHPlot [16];
  • GD [17].

«ADODB – это абстрактный класс доступа к базам данных, написанный на PHP» [14].

«Для тех, кто в танке, поясню на примере. Предположим, вы написали скрипт под MySQL, и тут заказчик говорит вам, что хостинг меняется, и там есть только PostgreSQL.

Если вы не использовали класс абстрактного доступа к базам данных, то вам пришлось бы:

  • заменить весь код работы с MySQL на postgreSQL;
  • переписать SQL-запросы (так как есть отличия).

Если бы вы использовали абстрактный слой доступа к БД, то вам скорее всего не пришлось бы менять php-код (только в одном месте указали бы, что используете PostgreSQL) и изменить SQL-запросы (хотя иногда и это не понадобилось бы). Я намеренно в этом описании использовал фразу «абстрактный класс доступа к БД», поскольку ADODB – не единственный подобный класс. Наиболее известные конкуренты: Pear::DB и Pear::MDB» [14].

JpGraph – это графическая библиотека для PHP, значительно упрощающая рисование различных графиков и диаграмм, позволяющая это делать с минимумом кода. При этом можно рисовать как черновые наброски, так и очень точные графики, в том числе и с указанием необходимых погрешностей.

PHPLOT – фактически то же самое, что и JpGraph, позволяет рисовать графики. Требует наличия библиотеки GD.

GD – это библиотека ANSI C, необходимая для динамического создания картинок. GD может создавать картинки в различных форматах, в том числе в PNG и JPEG. (GD не поддерживает формат GIF.)

Пробежав по разделам download вышеописанных продуктов, скачиваем последние стабильные версии и проверяем их хеши:

  • ACID 0.9.6b23 [18]
  • ADODB 3.94 [19]
  • JpGraph 1.13 [20]
  • PHPlot 4.4.6 [21]
  • GD 2.0.15 [22]

d8c49614393fa05ac140de349f57e438  acid-0.9.6b23.tar.gz

78aac17c7fd1d0e0f6685153facb8c36  adodb394.tgz

6ededf633b4fd054662ec123c7825fbb  gd-2.0.15.tar.gz

ad78bd1658e3983bb6afbc074f029698  jpgraph-1.13.tar.gz

8a5b34e09fa29f20e31814cbd8c0d0b5  phplot-4.4.6.tar.gz

Содержимое архивов помещаем в /var/www/html:

# tar -zxvf acid-0.9.6b23.tar.gz -C /var/www/html

# tar -zxvf adodb394.tgz -C /var/www/html

# tar -zxvf gd-2.0.15.tar.gz -C /var/www/html

# tar -zxvf phplot-4.4.6.tar.gz -C /var/www/html

Для JpGraph создаём директорию /var/www/html/jpgraph и содержимое архивной поддиректории src из архива помещаем туда.

# tar -zxvf jpgraph-1.13.tar.gz -C /var/www/html

# mkdir /var/www/html/jpgraph

# mv /var/www/html/jpgraph-1.13/src/* /var/www/html/jpgraph

# rm -rf /var/www/html/jpgraph-1.13

В именах директорий gd-2.0.15, phplot-4.4.6 убираем номера версий либо делаем мягкие ссылки на эти директории:

# cd /var/www/html

# mv gd-2.0.15 gd

# mv phplot-4.4.6 phplot

или

# cd /var/www/html

# ln -s gd-2.0.15 gd

# ln -s phplot-4.4.6 phplot

Напоминание: для работы ACID необходимо наличие установленных пакетов php и php-mysql (подробнее см. выше).

Далее следует настроить ACID на работу с нашей БД и показать ему, куда мы скопировали дополнительные пакеты, для этого в файле /var/www/html/acid_conf.php необходимо изменить переменные:

$DBlib_path = "../adodb";

$alert_dbname = "snort";

$alert_user   = "snort";

$alert_password = "ваш_пароль№1";

$ChartLib_path = "../jpgraph";

Остальные переменные проще настроить по мере необходимости, у большинства читателей это не должно вызвать проблем, так как ACID очень дружелюбен и почти всегда указывает, что и где надо править в случае, если ему что-то не нравится.

Далее обратимся по адресу: http://localhost/acid. При первом запуске ACID нам сообщит, что дополнительные таблицы, необходимые для его работы, не созданы:

Рисунок 20

Для их создания нам необходимо нажать на «Setup page». После чего у нас отобразится следующее окно:

Рисунок 21

В котором следует нажать на кнопку «Create ACID AG». После её нажатия у нас отобразится окно:

Рисунок 22

В первых строчках мы можем прочитать, что в нашей БД (snort) дополнительно были созданы четыре таблицы:

  • acid_ag;
  • acid_ag_alert;
  • acid_ip_cache;
  • acid_event.

После этого Snort готов к работе. Либо нажимаем в конце этой страницы на «Main page», либо опять набираем адрес: http://localhost/acid.

Если у вас БД маленькая, то страница должна отобразиться сразу, если же БД у вас большая, например, более полугода, то тогда придётся подождать вплоть до нескольких минут. В конце у вас должна выводиться картинка, похожая на следующую:

Рисунок 23

Если это так, то вы правильно всё сделали.

Далее советую вам сделать два необязательных, но полезных действия, а именно: создать ещё один адрес с правами только для просмотра и задать пароли на доступ для обоих.

Во время работы с БД мы уже создали необходимого нам пользователя acidviewer с меньшими правами. Сейчас мы доведём начатое до конца.

Для начала скопируем acid:

# cp -R /var/www/html/acid /var/www/html/acidviewer

Далее отредактируем файл /var/www/html/acidviewer/acid_conf.php, заменив в нём:

$alert_user   = "snort";

$alert_password = "ваш_пароль№1";

на

$alert_user   = "acidviewer";

$alert_password = "ваш_пароль№3";

Интерфейс и кнопки по удалению записей останутся, но при их активации будет выводиться сообщение с ошибкой о том, что у пользователя недостаточно прав для удаления. Создание данного аккаунта удобно тем, что вы можете его давать вашим знакомым администраторам или другим людям для просмотра с меньшей опасностью потерять записи в вашей БД. Обращаться к нему следует http://localhost/acidviewer, естественно, вместо localhost следует писать ваш адрес. И второе, чтобы кто попало через веб-интерфейс не заходил к вам на сервер и не смотрел ваши данные в ACID, создадим пользователей с паролями на доступ к acid и acidviewer. Для этого создадим директорию, где будет храниться файл с паролями, например /usr/lib/apache/passwords.

# mkdir /usr/lib/apache/passwords

Далее, если в этой директории у вас нет файла с паролями и таких пользователей, создадим файл и пользователей. Вначале это будет пользователь admin с паролем ваш_пароль№4. Пароль следует ввести после соответствующего приглашения.

# htpasswd -c /usr/lib/apache/passwords/passwords admin

Опция «-c» означает create (создать файл), указывайте её, если у вас нет файла /usr/lib/apache/passwords/passwords.

Далее добавим второго пользователя view с паролем ваш_пароль№5:

# htpasswd /usr/lib/apache/passwords/passwords view

Не забудьте про необходимую безопасность для вашего узла, задав соответствующие атрибуты файлу и директории, где он лежит, чтобы файл не был доступен любой программе и любому локальному пользователю.

Затем необходимо внести правку в /etc/httpd/conf/httpd.conf, дописав туда следующее:

    AuthType Basic

    AuthName "commentline1"

    AuthUserFile /usr/lib/apache/passwords/passwords

    Require user admin

    AllowOverride None

    AuthType Basic

    AuthName "commentline2"

    AuthUserFile /usr/lib/apache/passwords/passwords

    Require user view

    AllowOverride None

Замечание: следует внимательно посмотреть, в какую секцию вы дописываете эти строчки, и проследить за другими секциями, может случиться так, что дописывать их придётся несколько раз, каждый раз для своей секции. Иначе может возникнуть ситуация, когда, например, для http-доступа у вас пароль спрашиваться будет, а для https – нет, или наоборот.

В переменной AuthName можно записать любую информацию, которая будет выдаваться пользователю при запросе пароля.

Рисунок 24

После внесения изменений в конфигурационный файл необходимо уведомить apache об этих изменениях, просто перезапустив его командой:

# /etc/rc.d/init.d/httpd restart

Рисунок 25

Если после этого у вас при заходе запрашивается пароль (не забудьте сбросить кеш) и всё работает, то статья удалась и можно сказать, что дальнейшее изучение ACID лучше выполнить самостоятельно с помощью «метода научного тыка», щёлкая мышкой. Графический интуитивно понятный интерфейс не должен вызвать у вас затруднений.

В следующих статьях я попробую рассказать о некоторых особенностях работы и настройки Snort, в частности о возможности подключения нескольких сенсоров.

Литература, ссылки:

  1. Закляков П. Обнаружение атак: теория и практика, Snort. – Журнал «Системный администратор», №10(11), октябрь 2003 г. – 48-67 с.
  2. Раздел документации к Snort: http://www.Snort.org/docs
  3. Snort Installation Manual on RedHat 7.3: http://www.Snort.org/docs/Snort-rh7-mysql-ACID-1-5.pdf
  4. Snort Installation Manual on RedHat 9.0: http://www.Snort.org/docs/Snort_acid_rh9.pdf
  5. Аткинсон Л. MySQL. Библиотека профессионала: Пер. с англ. – М.: Издательский дом «Вильямс», 2002 г.
  6. MySQL The World’s Most Popular Open Source Database: http://www.mysql.com, раздел download: http://www.mysql.com/downloads/index.html
  7. Дюбуа П. Применение MySQL и Perl в Web-приложениях: Пер. с англ. – М.: Издательский дом «Вильямс», 2002 г.
  8. phpMyAdmin – MySQL DB administration tool: http://www.phpmyadmin.net
  9. Ссылка на одно из зеркал, откуда можно скачать phpMyAdmin: http://unc.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-2.5.4-php.tar.gz
  10. Сайт ACID (Analysis Console for Intrusion Databases): http://acidlab.sourceforge.net
  11. Сайт координационного центра CERT: http://www.cert.org
  12. ACID (часть проекта AIR-CERT): http://www.cert.org/kb/acid
  13. ADOdb Database Library for PHP: http://php.weblogs.com/adodb
  14. Матюхин М.Абстрактный доступ к БД с помощью ADODB: http://detail.phpclub.net/2003-08-19.htm
  15. JpGraph – OO Graph Library for PHP: http://www.aditus.nu/jpgraph
  16. PHPLOT: http://www.phplot.com
  17. GD Graphics Library: http://www.boutell.com/gd
  18. http://acidlab.sourceforge.net/acid-0.9.6b23.tar.gz
  19. http://phplens.com/lens/dl/adodb394.tgz
  20. http://members.chello.se/jpgraph/jpgdownloads/jpgraph-1.13.tar.gz
  21. http://ftp1.sourceforge.net/phplot/phplot-4.4.6.tar.gz
  22. http://www.boutell.com/gd/http/gd-2.0.15.tar.gz

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru