Часть 1. Елка с сурикатой или собираем свой мини-полигон

Привет, Хабр! Продолжая продвигать ИБ-трек для начинающих специалистов, я решил вместе с вами построить свой собственный мини-киберполигон. Ранее я уже упоминал киберполигоны, говорил о том, что они есть практически у всех, на них строятся соревнования, макетируются атаки, тестируются СЗИ и проводятся учения.

e544ba5cd846417ca8f21e36b9d134ea.png

Сегодня мы «развернем елку» и «прикрутим к ней сурикату».

fedf6adfa9c5a991498c1df77dda7e1b.pngКомпоненты ELK

  • Elasticsearch — система поиска и анализа данных, основанная на движке Apache Lucene. Основной функцией системы в стеке — хранение, поиск и анализ данных практически любого масштаба и практически в реальном времени (NRT Search).

  • Logstash — система сбора данных с разных источников и отправки их в «хранилище» по типу Elastic«a. Перед отправкой Logstash может «разбирать», фильтровать и преобразовывать данные в нужный формат для их дальнейшей индексации и анализа.

    ae4768b6d65282972f5f63ccc438466e.png
  • Kibana — средство для аналитики и визуализации данных, используемое для просмотра данных, построения интерактивных диаграмм и графиков с целью организации событий по разным признакам.

  • c8aaf69f0186a83b6058c84adb781128.png

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

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

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:

2924eb9e781175cab244c866c313219a.png

Затем перезапустите Suricata, выполнив команду sudo systemctl restart suricata

Для запуска suricata выполните команду sudo suricata -c /etc/suricata/suricata.yaml -i <прослушиваемый_интерфейс> (список всех интерфейсов можно посмотреть с помощью команды ip a).

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, чтобы ограничить доступ к собираемым данным.

459411e14ba6cde5d750c727b23491a0.png

После этого вы можете запустить службу с помощью команды sudo systemctl start elasticsearch.

Для того, чтобы служба запускалась автоматически каждый раз при загрузке сервера, выполните команду sudo systemctl enable elasticsearch

Протестируйте работу службы с помощью команды curl -X GET "localhost:9200"

957d68fd00078656c87e287bafe0eaec.png

При успешном запуске в выводе вы получите информацию о кластере elasticsearch

149e3720178e3cd3407f3ae54b256a6a.png

Kibana

Согласно официальной документации, Kibana следует устанавливать только после установки Elasticsearch. Установка в таком порядке гарантирует, что компоненты, от которых зависит каждый продукт, будут правильно установлены на свои места.

Поскольку мы уже добавили репозиторий пакетов elastic, мы можем установить kibana с помощью apt:

sudo apt install kibana

Затем запустите службу и поставьте ее на «автозапуск»

sudo systemctl enable kibana

sudo systemctl start kibana

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

5672fda916b7efd6ef3a7305b4af6f6d.png

Если ошибок нет, перезагрузите nginx для использования новой конфигурации: sudo systemctl reload nginx

Дополнительно установите и настройте брандмауэр с помощью команд:

sudo apt install ufw

sudo ufw allow ‘Nginx Full’

После этого Kibana будет доступна удаленно через ваш домен или публичный IP-адрес (и в том числе, логично, что останется локальный доступ).

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.»

04a6b232651db96ba5171fccc4d45456.png

После проверки конфигурации запустите службу и поставьте ее на «автозапуск»:

sudo systemctl start logstash

sudo systemctl enable logstash

Установка Filebeat

В качестве службы для сбора данных из различных источников и их дальнейшей передачи в Logstash или Elasticsearch развернем Filebeat.

Для установки службы выполните команду sudo apt install filebeat

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

61687fa6f35f098ebc7ed3aeec1dda15.png

И наоборот раскомментировать секцию output.logstash

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

d3d3e20c200bca47dbbc0a3f0485686c.png

Далее включите службу и поставьте ее на автоматический запуск при старте сервера:

sudo systemctl start filebeat

sudo systemctl enable filebeat

Если Elastic Stack настроен правильно, Filebeat начнет отправлять ваш системный журнал и журналы авторизации в Logstash, который затем загрузит эти данные в Elasticsearch.

Проверить это можно выполнив командуcurl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

cd5ec175484316e81ad26a1997aa2267.png

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

Далее вы можете перейти в веб-интерфейс Kibana в раздел Dashboard, затем выбрать дашборд Filebeat с модулем System и убедиться в том, что события доходят и визуализируются.

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

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».

18f2e32675c77aee75f370e14136462e.png

В поле name введите suricata* и в поле timestamp напишите @timestamp, затем нажмите «Create index pattern»

e5dc29b6f15c3e0d0bca7b2b2d2aa796.png

После этого в разделе Discover вам будут доступны события с журналов Suricata.

a845cc126b01f10a8ed5eb6e8b872c91.png

Как результат, мы задеплоили ELK Stack, настроили сервис FIlebeat и интегрировали Suricata в нашу систему.

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

© Habrahabr.ru