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

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

Компоненты 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 в нашу систему.

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

Комментарии (0)