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.

На примерах мы выполнили минимальные настройки для сбора наиболее популярных событий, используя свободное ПО.

Авторы статьи — сотрудники ООО «ИНФОРИОН»: Артем Тиунов, руководитель отдела мониторинга, Александр Панкин, инженер второй линии поддержки отдела мониторинга, Денис Давид, инженер отдела безопасности информационных систем.