Привет, Хабр! Продолжая продвигать ИБ-трек для начинающих специалистов, я решил вместе с вами построить свой собственный мини-киберполигон. Ранее я уже упоминал киберполигоны, говорил о том, что они есть практически у всех, на них строятся соревнования, макетируются атаки, тестируются СЗИ и проводятся учения.
![](https://habrastorage.org/getpro/habr/upload_files/e54/4ba/5cd/e544ba5cd846417ca8f21e36b9d134ea.png)
Сегодня мы “развернем елку” и “прикрутим к ней сурикату”.
![](https://habrastorage.org/getpro/habr/upload_files/fed/f6a/dfa/fedf6adfa9c5a991498c1df77dda7e1b.png)
Компоненты 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
Перед манипуляциями с конфигурационными файлами советую всегда копировать содержимое стандартных файлов для возможности быстрого «отката».
![](https://habrastorage.org/getpro/habr/upload_files/103/27f/57a/10327f57ab4164dea45e1c430a9a30b1.png)
Для настройки вывода событий в 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:
![](https://habrastorage.org/getpro/habr/upload_files/292/4eb/9e7/2924eb9e781175cab244c866c313219a.png)
Затем перезапустите Suricata, выполнив команду sudo systemctl restart suricata
Для запуска suricata выполните команду sudo suricata -c /etc/suricata/suricata.yaml -i <прослушиваемый_интерфейс>
(список всех интерфейсов можно посмотреть с помощью команды ip a
).
![](https://habrastorage.org/getpro/habr/upload_files/11b/fbe/c74/11bfbec747619a23215c073f76caec27.png)
Установка 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, чтобы ограничить доступ к собираемым данным.
![](https://habrastorage.org/getpro/habr/upload_files/459/411/e14/459411e14ba6cde5d750c727b23491a0.png)
После этого вы можете запустить службу с помощью команды sudo systemctl start elasticsearch.
Для того, чтобы служба запускалась автоматически каждый раз при загрузке сервера, выполните команду sudo systemctl enable elasticsearch
Протестируйте работу службы с помощью команды curl -X GET "localhost:9200"
![](https://habrastorage.org/getpro/habr/upload_files/957/d68/fd0/957d68fd00078656c87e287bafe0eaec.png)
При успешном запуске в выводе вы получите информацию о кластере elasticsearch
![](https://habrastorage.org/getpro/habr/upload_files/149/e37/201/149e3720178e3cd3407f3ae54b256a6a.png)
Kibana
Согласно официальной документации, Kibana следует устанавливать только после установки Elasticsearch. Установка в таком порядке гарантирует, что компоненты, от которых зависит каждый продукт, будут правильно установлены на свои места.
Поскольку мы уже добавили репозиторий пакетов elastic, мы можем установить kibana с помощью apt:
sudo apt install kibana
Затем запустите службу и поставьте ее на «автозапуск»
sudo systemctl enable kibana
sudo systemctl start kibana
![](https://habrastorage.org/getpro/habr/upload_files/d7c/bae/234/d7cbae2348d3bd5313dc7862d4f73b67.png)
Из-за того, что 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
![](https://habrastorage.org/getpro/habr/upload_files/567/2fd/a91/5672fda916b7efd6ef3a7305b4af6f6d.png)
Если ошибок нет, перезагрузите nginx для использования новой конфигурации: sudo systemctl reload nginx
Дополнительно установите и настройте брандмауэр с помощью команд:
sudo apt install ufw
sudo ufw allow ‘Nginx Full’
После этого Kibana будет доступна удаленно через ваш домен или публичный IP-адрес (и в том числе, логично, что останется локальный доступ).
![](https://habrastorage.org/getpro/habr/upload_files/940/126/81b/94012681b342ff01186e1d4eeead6c1e.png)
Установка 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.”
![](https://habrastorage.org/getpro/habr/upload_files/04a/6b2/326/04a6b232651db96ba5171fccc4d45456.png)
После проверки конфигурации запустите службу и поставьте ее на “автозапуск”:
sudo systemctl start logstash
sudo systemctl enable logstash
Установка Filebeat
В качестве службы для сбора данных из различных источников и их дальнейшей передачи в Logstash или Elasticsearch развернем Filebeat.
Для установки службы выполните команду sudo apt install filebeat
В нашем случае, собранные данные будут отправляться в Logstash, поэтому в конфигурационном файле в секцию output.elasticsearch нужно закомментировать (два хештега ставить не обязательно, хватит одного).
![](https://habrastorage.org/getpro/habr/upload_files/616/87f/a6f/61687fa6f35f098ebc7ed3aeec1dda15.png)
И наоборот раскомментировать секцию output.logstash
![](https://habrastorage.org/getpro/habr/upload_files/1f9/d7b/1e3/1f9d7b1e3efaf0d98fe7b490da451f9f.png)
Далее мы можем включить внутренний модуль службы 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
![](https://habrastorage.org/getpro/habr/upload_files/d3d/3e2/0c2/d3d3e20c200bca47dbbc0a3f0485686c.png)
Далее включите службу и поставьте ее на автоматический запуск при старте сервера:
sudo systemctl start filebeat
sudo systemctl enable filebeat
Если Elastic Stack настроен правильно, Filebeat начнет отправлять ваш системный журнал и журналы авторизации в Logstash, который затем загрузит эти данные в Elasticsearch.
Проверить это можно выполнив команду curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
![](https://habrastorage.org/getpro/habr/upload_files/cd5/ec1/754/cd5ec175484316e81ad26a1997aa2267.png)
Если ваши выходные данные показывают общее количество совпадений 0, Elasticsearch не загружает журналы по индексу, который вы искали, и вам нужно будет проверить настройки на наличие ошибок.
Далее вы можете перейти в веб-интерфейс Kibana в раздел Dashboard, затем выбрать дашборд Filebeat с модулем System и убедиться в том, что события доходят и визуализируются.
![](https://habrastorage.org/getpro/habr/upload_files/612/895/7f6/6128957f64e2c90bb01409bc1c64347d.png)
Интеграция 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
![](https://habrastorage.org/getpro/habr/upload_files/cb1/d45/f78/cb1d45f78fa1169d351c605b077ffd30.png)
После этого нужно создать конфигурационный файл 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».
![](https://habrastorage.org/getpro/habr/upload_files/18f/2e3/267/18f2e32675c77aee75f370e14136462e.png)
В поле name введите suricata* и в поле timestamp напишите @timestamp, затем нажмите «Create index pattern»
![](https://habrastorage.org/getpro/habr/upload_files/e5d/c29/b6f/e5dc29b6f15c3e0d0bca7b2b2d2aa796.png)
После этого в разделе Discover вам будут доступны события с журналов Suricata.
![](https://habrastorage.org/getpro/habr/upload_files/a84/5cc/126/a845cc126b01f10a8ed5eb6e8b872c91.png)
Как результат, мы задеплоили ELK Stack, настроили сервис FIlebeat и интегрировали Suricata в нашу систему.
В будущем материале расскажу как использовать этот полигон в образовательных целях. Надеюсь, эта статья была вам полезна, увидимся в новых статьях, до встречи!