Привет, Хабр! Продолжая продвигать ИБ-трек для начинающих специалистов, я решил вместе с вами построить свой собственный мини-киберполигон. Ранее я уже упоминал киберполигоны, говорил о том, что они есть практически у всех, на них строятся соревнования, макетируются атаки, тестируются СЗИ и проводятся учения.
Сегодня мы “развернем елку” и “прикрутим к ней сурикату”.
Компоненты ELK
Elasticsearch — система поиска и анализа данных, основанная на движке Apache Lucene. Основной функцией системы в стеке — хранение, поиск и анализ данных практически любого масштаба и практически в реальном времени (NRT Search).
Logstash — система сбора данных с разных источников и отправки их в «хранилище» по типу Elastic»a. Перед отправкой Logstash может «разбирать», фильтровать и преобразовывать данные в нужный формат для их дальнейшей индексации и анализа.
Kibana — средство для аналитики и визуализации данных, используемое для просмотра данных, построения интерактивных диаграмм и графиков с целью организации событий по разным признакам.
Suricata
В режиме IDS Suricata анализирует сетевой трафик на наличие вредоносной активности и аномалий с помощью набора правил.
В режиме IPS Suricata не только детектирует аномалии и вредоносную активность, но и блокирует вредоносный трафик, предотвращая реализацию кибер-атак
Перейдем к развертыванию:
В качестве сервера я буду использовать виртуальную машину на Ubuntu 20.04 (пропустим момент установки ВМ-ки, я верю, что вы сможете сделать это самостоятельно)
Установка Suricata
Перед установкой суриката выполните команду sudo apt install -y software-properties-common
для установки необходимых зависимостей
Затем добавьте репозиторий с сурикатой и установите систему
sudo add-apt-repository -y ppa:oisf/suricata-stable
sudo apt update
sudo apt install -y suricata
Перед манипуляциями с конфигурационными файлами советую всегда копировать содержимое стандартных файлов для возможности быстрого «отката».
Для настройки вывода событий в JSON-формате, добавьте в секцию ‘outputs’ следующую часть:
- eve-log:
enabled: yes
filetype: regular
filename: /var/log/suricata/eve.json
types:
- alert:
- http:
- dns:
- tls:
- filestore:
- ftp:
- smtp:
- ssh:
- flow:
- stats:
Затем перезапустите Suricata, выполнив команду sudo systemctl restart suricata
Для запуска suricata выполните команду sudo suricata -c /etc/suricata/suricata.yaml -i <прослушиваемый_интерфейс>
(список всех интерфейсов можно посмотреть с помощью команды ip a
).
Установка ELK Stack
Компоненты Elasticsearch недоступны в репозиториях Ubuntu по умолчанию, поэтому вам следует добавить список источников пакетов Elastic. Все пакеты подписаны ключом подписи Elasticsearch, следовательно, дополнитель вам нужно импортировать общедоступный GPG-ключ Elasticsearch.
Для этого выполните команду:
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch |sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
Затем добавьте репозиторий Elastic в список ресурсов, откуда менеджер пакетов apt будет “забирать” нужные пакеты:
echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
Затем обновите список источников для apt и установите Elasticsearch:
sudo apt update
sudo apt install elasticsearch
После установки системы отредактируйте конфигурационный файл elasticsearch. Раскомментируйте строку network.host: locahost, чтобы ограничить доступ к собираемым данным.
После этого вы можете запустить службу с помощью команды sudo systemctl start elasticsearch.
Для того, чтобы служба запускалась автоматически каждый раз при загрузке сервера, выполните команду sudo systemctl enable elasticsearch
Протестируйте работу службы с помощью команды curl -X GET "localhost:9200"
При успешном запуске в выводе вы получите информацию о кластере elasticsearch
Kibana
Согласно официальной документации, Kibana следует устанавливать только после установки Elasticsearch. Установка в таком порядке гарантирует, что компоненты, от которых зависит каждый продукт, будут правильно установлены на свои места.
Поскольку мы уже добавили репозиторий пакетов elastic, мы можем установить kibana с помощью apt:
sudo apt install kibana
Затем запустите службу и поставьте ее на «автозапуск»
sudo systemctl enable kibana
sudo systemctl start kibana
Из-за того, что Kibana настроена на прослушивание только на локальном хосте, для доступа к платформе «извне» стоит настроить обратный прокси, для этого мы поднимем сервер Nginx
Установка Nginx
Установить Nginx можно с помощью apt:
sudo apt install nginx
После установки веб-сервера выполните команду echo "admin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
, чтобы создать пользователя “aadmin” (можете использовать любое имя пользователя) с правами администратора и сохранить его в файле htpasswd.users
Далее введите и подтвердите пароль для пользователя и запомните учетные данные (лучше записать)
Затем добавьте в файл /etc/nginx/sites-avaliable/your_domain следующий блок кода, обязательно изменив параметр your_domain, чтобы он соответствовал полному доменному имени или белому IP-адресу вашего сервера:
server {
listen 80;
server_name your_domain;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Этот код настраивает Nginx для направления HTTP-трафика вашего сервера в приложение Kibana, которое прослушивает локальный хост: 5601.
После этого включите новую конфигурацию, создав символическую ссылку на каталог поддерживаемых сайтов:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/your_domain
Для проверки конфигурации Nginx на предмет синтаксических ошибок, выполните команду sudo nginx -t
Если ошибок нет, перезагрузите nginx для использования новой конфигурации: sudo systemctl reload nginx
Дополнительно установите и настройте брандмауэр с помощью команд:
sudo apt install ufw
sudo ufw allow ‘Nginx Full’
После этого Kibana будет доступна удаленно через ваш домен или публичный IP-адрес (и в том числе, логично, что останется локальный доступ).
Установка Logstash
Чтобы установить службу Logstash выполните команду sudo apt install logstash
После установки Logstash перейдите в каталог /etc/logstash/conf.d/ и создайте 2 конфигурационных файла — на «вход» и «выход» данных.
Создайте файл на «вход» данных с помощью команды sudo nano
/etc/logstash/conf.d/beats_input.conf
и добавьте в него следующую часть:
input {
beats {
port => 5044
}
}
Затем создайте файл «на выход» с помощью команды sudo nano /etc/logstash/conf.d/elasticsearch-output.conf
И затем впишите в него данные строки:
output {
if [@metadata][pipeline] {
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
pipeline => "%{[@metadata][pipeline]}"
}
} else {
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
}
Затем проверьте конфигурацию с помощью команды sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
Если синтаксических ошибок нет, то в самом конце вам выведется “Config Validation Result: OK.”
После проверки конфигурации запустите службу и поставьте ее на “автозапуск”:
sudo systemctl start logstash
sudo systemctl enable logstash
Установка Filebeat
В качестве службы для сбора данных из различных источников и их дальнейшей передачи в Logstash или Elasticsearch развернем Filebeat.
Для установки службы выполните команду sudo apt install filebeat
В нашем случае, собранные данные будут отправляться в Logstash, поэтому в конфигурационном файле в секцию output.elasticsearch нужно закомментировать (два хештега ставить не обязательно, хватит одного).
И наоборот раскомментировать секцию output.logstash
Далее мы можем включить внутренний модуль службы filebeat, который собирает и анализирует данные с системных журналов Linux:
sudo filebeat modules enable system
Далее настроим пайплайны «приема» данных, которые анализируют полученные данные перед отправкой их через Logstash в Elasticsearch
Для того, чтобы поставить пайплайн приема событий для модуля system выполните команду:
sudo filebeat setup --pipelines --modules system
Затем загрузим шаблон индекса в Elasticsearch:
sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
Filebeat поставляется с образцами дашбордов Kibana для визуализации данных, чтобы их загружать, когда Logstash включен, необходимо отключить вывод Logstash и включить вывод Elasticsearch:
sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601
Далее включите службу и поставьте ее на автоматический запуск при старте сервера:
sudo systemctl start filebeat
sudo systemctl enable filebeat
Если Elastic Stack настроен правильно, Filebeat начнет отправлять ваш системный журнал и журналы авторизации в Logstash, который затем загрузит эти данные в Elasticsearch.
Проверить это можно выполнив команду curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
Если ваши выходные данные показывают общее количество совпадений 0, Elasticsearch не загружает журналы по индексу, который вы искали, и вам нужно будет проверить настройки на наличие ошибок.
Далее вы можете перейти в веб-интерфейс Kibana в раздел Dashboard, затем выбрать дашборд Filebeat с модулем System и убедиться в том, что события доходят и визуализируются.
Интеграция Suricata c ELK
После успешного деплоя всех компонентов мы можем интегрировать Suricata в стек
Сначала нужно добавить в конфигурационный файл Suricata в секцию outputs следующий конфиг:
outputs:
- eve-log:
enabled: yes
filetype: regular
filename: /var/log/suricata/eve.json
types:
- alert
- http
- dns
- tls
- filestore
- ftp
- smtp
- ssh
- flow
- stats
После этого нужно создать конфигурационный файл Logstash (sudo nano /etc/logstash/conf.d/suricata.conf) и добавьте в него следующую конфигурацию:
input {
file {
path => "/var/log/suricata/eve.json"
start_position => "beginning"
sincedb_path => "/dev/null"
codec => "json"
}
}
filter {
if [event_type] == "alert" {
mutate {
add_field => { "[@metadata][index]" => "suricata-alert" }
}
} else if [event_type] == "dns" {
mutate {
add_field => { "[@metadata][index]" => "suricata-dns" }
}
} else {
mutate {
add_field => { "[@metadata][index]" => "suricata-other" }
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "%{[@metadata][index]}-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
Затем перезапустите службы Suricata и Logstash:
sudo systemctl restart suricata.service logstash.service
После чего вы можете перейти в Kibana и создать шаблон индекса для Suricata
Для этого в разделе Management выберите «Stack Management» → «Kibana» → «Index Patterns», затем нажмите «Create index pattern».
В поле name введите suricata* и в поле timestamp напишите @timestamp, затем нажмите «Create index pattern»
После этого в разделе Discover вам будут доступны события с журналов Suricata.
Как результат, мы задеплоили ELK Stack, настроили сервис FIlebeat и интегрировали Suricata в нашу систему.
В будущем материале расскажу как использовать этот полигон в образовательных целях. Надеюсь, эта статья была вам полезна, увидимся в новых статьях, до встречи!