Detection is easy. Устанавливаем Elastiflow для поиска угроз в сети

в 14:18, , рубрики: elastic, elastiflow, netflow, инцидент, компьютерная безопасность, компьютерная криминалистика, компьютерные сети, обнаружение аномалий, обнаружение атак

Введение

Начнем серию статей под названием Detection is easy, посвященных Detection engineering (DE), о чем я пишу в одноименном Telegram-канале. Один из этапов DE - определение источников событий и организация их сбора. В этой статье мы рассмотрим установку Elastiflow — это мощное решение для обработки и визуализации сетевых данных, построенное на основе стека ELK (Elasticsearch, Logstash, Kibana). Elastiflow предоставляет возможность собирать, обрабатывать и анализировать данные из различных сетевых протоколов, таких как NetFlow, sFlow и IPFIX. Основное преимущество Elastiflow по сравнению с классическим ELK-стеком заключается в оптимизированном агенте сбора сетевой телеметрии, а также в наличии готовых дашбордов и визуализаций, которые упрощают анализ сетевого трафика.

Изначально проект развивался на GitHub, однако разработчики перешли к коммерческому решению — flow-collector, который демонстрирует значительно более высокую производительность по сравнению с версией, доступной на GitHub. Более подробную информацию о различиях можно найти в документации. Политика лицензирования позволяет бесплатно использовать продукт, но если ты зарегистрируешься, то будет доступно порядка 480 полей и использование одного инстанса (4000 записей в секунду, без регистрации 500).

Подготовка операционной системы

Чтобы минимизировать вероятность потери данных, во время скачков трафика, следует изменить сетевые параметры ядра Linux, как предложено в документации. Можешь создать в файл в директории /etc/sysctl.d/, чтобы они применялись автоматически при загрузке системы. Если у тебя менее 75000 потоков в секунду:

net.core.netdev_max_backlog=4096
net.core.rmem_default=262144
net.core.rmem_max=67108864
net.ipv4.udp_rmem_min=131072
net.ipv4.udp_mem=2097152 4194304 8388608

если более 75000 потоков в секунду:

net.core.netdev_max_backlog=8192  
net.core.rmem_default=262144  
net.core.rmem_max=134217728  
net.ipv4.udp_rmem_min=131072  
net.ipv4.udp_mem=4194304 8388608 16777216

Вспомним за что отвечают параметры ядра выше, подробнее про тюнинг сетевой части ядра Linux можно почитать здесь (kermel, 0, 1,2 , 3, 4, 5):

  • net.core.netdev_max_backlog - максимальное количество пакетов, которые могут быть поставлены в очередь на обработку в сетевом интерфейсе.

  • net.core.rmem_default - размер буфера по умолчанию для приема .

  • net.core.rmem_max - максимальный размер буфера который может быть установлен приложением для приема.

  • net.ipv4.udp_rmem_min - этот параметр задает минимальный размер буфера для приема UDP для приема.

  • net.ipv4.udp_mem - этот параметр задает три значения, которые определяют пороги потребления памяти протоклом UDP.

Установка и настройка flow-collector

Для запуска flow-collector на Debian/Ubuntu выполним следующие команды:

# Установим необходимые библиотеки
apt install libpcap-dev ca-certificates

# Загрузим deb-пакет
wget https://elastiflow-releases.s3.us-east-2.amazonaws.com/flow-collector/flow-collector_7.5.3_linux_amd64.deb

# Установим пакет
dpkg -i flow-collector_7.5.3_linux_amd64.deb

Файлы конфигурации расположены в /etc/elastiflow. Перед началом работы нам нужно отредактировать файл flowcoll.yml.

На сайте разработчика доступен docker-compose для запуска flow-collector в контейнере.

Как уже упоминалось, конфигурационный файл Elastiflow находится в директории /etc/elastiflow. Для начала работы необходимо изменить значение параметра EF_LICENSE_ACCEPTED на "true". В отличие от своего предшественника, flow-collector поддерживает стандартный вывод в такие системы, как Kafka, Elasticsearch, OpenSearch, Grafana, Splunk и другие.

Для передачи данных в Elasticsearch, нужно раскомментировать строки, которые начинаются с EF_OUTPUT_ELASTICSEARCH_* и установить значение true для EF_OUTPUT_ELASTICSEARCH_ENABLE.

Разработчики предоставили удобный docker-compose файл для создания тестовой лаборатории, а также для более производительных сред. Это позволит тебе быстро развернуть необходимую инфраструктуру и начать работу с сетевыми данными без лишних усилий.

Для теста Elasticsearch и Kibana использовал следующий docker-compose:

```yaml
version: '3'
services:
  kibana:
    image: docker.elastic.co/kibana/kibana:7.13.1
    container_name: kibana
    restart: unless-stopped
    network_mode: host
    depends_on:
      - elasticsearch

    environment:
      TELEMETRY_OPTIN: 'false'
      TELEMETRY_ENABLED: 'false'
      NEWSFEED_ENABLED: 'false'

      SERVER_HOST: '0.0.0.0'
      SERVER_PORT: 5601
      SERVER_MAXPAYLOADBYTES: 8388608

      ELASTICSEARCH_HOSTS: 'http://elasticsearch:9200'
      ELASTICSEARCH_REQUESTTIMEOUT: 132000
      ELASTICSEARCH_SHARDTIMEOUT: 120000

      KIBANA_AUTOCOMPLETETIMEOUT: 3000
      KIBANA_AUTOCOMPLETETERMINATEAFTER: 2500000

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.1
    container_name: elasticsearch
    restart: unless-stopped
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 131072
        hard: 131072
      nproc: 8192
      fsize: -1
    network_mode: host
    volumes:
      - /var/lib/elasticsearch:/usr/share/elasticsearch/data
    environment:
      ES_JAVA_OPTS: '-Xms512M -Xmx512M'
      cluster.name: elastiflow
      node.name: first

      bootstrap.memory_lock: 'true'

      network.bind_host: 0.0.0.0
      http.port: 9200
      http.publish_port: 9200

      discovery.type: 'single-node'

      indices.query.bool.max_clause_count: 8192
      search.max_buckets: 250000

      action.destructive_requires_name: 'true'

      reindex.remote.whitelist: '*:*'
      reindex.ssl.verification_mode: 'none'

      xpack.monitoring.collection.enabled: 'true'
      xpack.monitoring.collection.interval: 30s
```

Осталось загрузить объекты для визуализации в Kibana. Их можно взять в документации к продукту. Для импорта перейдем в Stack Management -> Saved Objects.

Импорт объектов в Kibana

Импорт объектов в Kibana

Для эмуляции Netflow я направил трафик с OPNsense и с утилиты nflow-generator.
nflow-generator генерирует NetFlow v5, с помощью которого мы можем проверить правильность настройки нашего стенда.

Для запуска nflow-generator используем docker контейнер:

docker run -it --rm networkstatic/nflow-generator -t <flow_collector_ip> -p <flow_collector_port> --flow-count=1000

Заключение

Подготовка вышеописанной инфраструктуры занимает не так много времени, как выбор и настройка сетевого оборудования для отправки данных о трафике. Использование метаданных о сессиях для обнаружения атак не является чем-то новым. Сейчас повсеместно используются дорогостоящие для внедрения NTA/NDR решения, но не стоит списывать со счетов NetFlow и его аналоги, они хороши малым весом событий и достаточны для выявления аномалий в сети. В продолжении серии статей, мы проведем ряд атак и постараемся их обнаружить, с помощью данных из NetFlow.

Спасибо за внимание! Присоединяйся к каналу в Telegram - Мониторинг это просто)

Автор: d3f0x0

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js