Security Operation Center (SOC) — это прежде всего команда, которая хорошо понимает и знает все возможные нюансы в работе, регистрации, реагировании и ликвидации последствий инцидентов информационной безопасности. Для построения бесплатного SOC в правильном его понимании необходимо наличие квалифицированного штата сотрудников и сильный инструментарий.
Есть два пути построения SOC:
- cотрудники и хорошо зарекомендовавшие себя коммерческие инструменты;
- cотрудники и свободно распространяемый инструментарий, требующий постоянной доработки.
Второй способ кажется менее привлекательным, но зачастую это единственный доступный выход.
В данной статье рассмотрим основные принципы, на что нужно обратить внимание и с чего начать.
Работа с событиями
Первое, что необходимо для будущего SOC — это выбор пути и инструментария для реализации своих планов.
Необходимо реализовать следующую схему:
Источники->События->Сбор и хранение событий->Обработка событий и выявление инцидентов->Работа с инцидентами->Решение и закрытие инцидентов с предотвращением их в дальнейшем.
Для работы с событиями мы остановились на свободно распространяемом продукте, состоящем из стека трех компонентов:
- Elastic;
- Logstash;
- Kibana.
Выбор основывался на масштабируемости, широких возможностях, быстрой реализации и хорошей совместимости с другими системами.
С помощью данного инструмента возможно быстро и безопасно собирать данные практически из любых источников, а затем искать, анализировать и визуализировать события в режиме реального времени.
Настройка инструментария
Рассмотрим реализацию стека в реальных условиях:
- произведем установку трех основных компонентов с сайта производителя: elasticsearch-7; logstash-7; kibana-7. Установка возможна практически на все дистрибутивы Linux, а также на операционную систему Windows;
- переконфигурируем файлы. В elasticsearch.yml необходимо изменить следующие строки: с #network.host: 192.168.0.1 на network.host: «указать ip-адрес хоста где расположена elasticsearch»; с #http.port: 9200 на http.port: 9200; c #node.name: node-1 (or preferred name) на node.name: node-1 (or preferred name); с #cluster.initial_master_nodes: node-1 or preferred name) на cluster.initial_master_nodes: node-1 (or preferred name). В kibana.yml необходимо изменить следующие строки: с #server.host: «localhost» на server.host: «указать ip-адрес хоста где расположена kibana»; с #server.port: 5601 на server.port: 5601;
- создаем конфигурационный файл с расширением *.conf в каталоге /etc/logstash/conf.d и наполняем его. В качестве примера рассмотрим конфигурацию с подключением beats (winlogbeat для сбора лог-журналов из ОС Windows), базу данных (mssql express, mariadb-zabbix):
input {
beats {
port => «5044»
type => «WINLOG»
}
jdbc {
jdbc_driver_library => «"
jdbc_driver_class=> «com.microsoft.sqlserver.jdbc.SQLServerDriver»
jdbc_connection_string => "jdbc:sqlserver://"указать ip-адрес сервера sql и TCP-порт для удаленного подключения";databaseName="указать имя базы данных из которой берем события";"
jdbc_user => «имя пользователя с правами на чтение»
jdbc_password => «пароль»
schedule => «* * * * *»
statement => «SELECT „указать таблицы с той информацией которую хотим получить“ from „указать базу данных, например, dbo.* WHERE timegenerated > :sql_last_value“
use_column_value => true
tracking_column => timegenerated
tracking_column_type => „timestamp“
type => „указать произвольный тип“
}
jdbc {
jdbc_validate_connection => true
jdbc_driver_library => »"
jdbc_driver_class => «Java::org.mariadb.jdbc.Driver»
jdbc_connection_string => "jdbc:mariadb://"указать ip сервера где расположена база данных":3306/zabbix"
jdbc_user => «zabbix»
jdbc_password => «пароль»
schedule => «* * * * *»
statement => «SELECT * from hosts»
jdbc_paging_enabled => true
jdbc_page_size => 200000
type => «zabbix_log»
}
}
output {
if [type] == «WINLOG» {
elasticsearch {
hosts => [ «ip-адрес elasticsearch:9200» ]
index => «произвольное понятное значение-%{+YYYY.MM}»
}
}
else if [type] == «тип указанные для сервера sql» {
elasticsearch {
hosts => [ «ip-адрес elasticsearch:9200» ]
index => «произвольное и понятное значение»
}
}
else if [type] == «zabbix_log» {
elasticsearch {
hosts => [ «ip-адрес elasticsearch:9200» ]
index => «zabbix»
}
}
}
Для того, чтобы конфигурация работала, обязательно нужно установить java и jdbc driver соответствующей версии.
- далее необходимо настроить базу данных, настроить TCP соединения с сервером по этому порту:
- в области консоли диспетчера конфигурации SQL Server разверните узел Сетевая конфигурация SQL Server, Протоколы для , а затем дважды щелкните TCP/IP. В диалоговом окне Свойства TCP/IP на вкладке IP-адреса появится несколько IP-адресов в формате IP1, IP2 до IPAll. Одним из приведенных IP-адресов является адрес адаптера заглушки 127.0.0.1. Для каждого IP-адреса на компьютере появляются дополнительные IP-адреса. (Возможно, вы увидите адреса как IPv4, так и IPv6.) Чтобы определить настраиваемый IP-адрес, щелкните правой кнопкой мыши каждый адрес и выберите пункт Свойства;
- если в диалоговом окне Динамические порты TCP содержится значение 0, означающее прослушивание компонентом Database Engine динамических портов, удалите его;
- в области окна IPn — свойства в поле Порт TCP введите номер порта, который необходимо прослушивать, поэтому IP-адресу, и нажмите кнопку ОК. Вы можете указать множество портов через запятую;
- в области консоли выберите Службы SQL Server. В области сведений щелкните правой кнопкой мыши SQL Server ( ) и выберите команду Перезапустить, чтобы остановить и снова запустить SQL Server;
- делаем «мягкую» перезагрузку (далее все команды выполняются в привилегированном режиме);
systemctl daemon-reload
- включаем автоматическую загрузку сервисов после перезагрузки системы
systemctl enable elasticsearch
systemctl enable logstash
systemctl enable kibana
- запускаем сервисы
systemctl start elasticsearch
systemctl start logstash
systemctl start kibana
- и в завершение проверяем статус сервисов
systemctl status elasticsearch
systemctl status logstash
systemctl status kibana.
На примерах мы выполнили минимальные настройки для сбора наиболее популярных событий, используя свободное ПО.
Авторы статьи — сотрудники ООО «ИНФОРИОН»: Артем Тиунов, руководитель отдела мониторинга, Александр Панкин, инженер второй линии поддержки отдела мониторинга, Денис Давид, инженер отдела безопасности информационных систем.