Анализ журналов в Graylog

NmapNmapBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии вы научитесь анализировать логи с помощью Graylog, открытого программного обеспечения для управления логами, используемого для мониторинга в области кибербезопасности. Вы научитесь настраивать Graylog с использованием Docker Compose, настраивать источники логов и выполнять анализ логов на практике.

В рамках лабораторной работы вы развернете Graylog вместе с MongoDB и Elasticsearch, а затем используете его веб-интерфейс для сбора и запроса лог-данных. Эти практические задания помогут вам приобрести важные навыки централизованного управления логами и мониторинга безопасности.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) nmap/NmapGroup -.-> nmap/udp_scanning("UDP Scanning Techniques") wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") subgraph Lab Skills nmap/udp_scanning -.-> lab-549925{{"Анализ журналов в Graylog"}} wireshark/packet_capture -.-> lab-549925{{"Анализ журналов в Graylog"}} end

Установка Graylog

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

Поскольку мы используем контейнеры Docker, мы развернем Graylog с помощью Docker Compose для простой настройки. Docker Compose позволяет определять и запускать много-контейнерные приложения с помощью одного конфигурационного файла. Этот подход упрощает процесс установки и гарантирует, что все необходимые компоненты будут работать вместе правильно. Следуйте этим шагам внимательно:

  1. Сначала убедитесь, что вы находитесь в правильной директории. Директория project - это место, где мы будем организовывать файлы для установки Graylog:
cd ~/project
  1. Создайте новую специальную директорию для конфигурации Graylog. Это поможет отделить и организовать файлы установки:
mkdir graylog && cd graylog
  1. Создайте файл docker-compose.yml с следующим содержимым с помощью nano. Этот файл определяет все сервисы, необходимые для запуска Graylog:
nano docker-compose.yml
  1. Вставьте эту конфигурацию (нажмите Ctrl+O для сохранения, затем Ctrl+X для выхода). Конфигурация включает три основных сервиса:
    • MongoDB для хранения конфигурационных данных
    • Elasticsearch для индексации и поиска логов
    • Graylog как веб-интерфейс и обработчик
version: "3"
services:
  mongodb:
    image: mongo:4.2
    volumes:
      - mongo_data:/data/db
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
    volumes:
      - es_data:/usr/share/elasticsearch/data
    environment:
      - "discovery.type=single-node"
      - "bootstrap.memory_lock=true"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  graylog:
    image: graylog/graylog:4.3
    volumes:
      - graylog_data:/usr/share/graylog/data
    environment:
      - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
    depends_on:
      - mongodb
      - elasticsearch
    ports:
      - "9000:9000"
      - "1514:1514"
      - "1514:1514/udp"
      - "12201:12201"
      - "12201:12201/udp"
volumes:
  mongo_data:
  es_data:
  graylog_data:
  1. Запустите стек Graylog с помощью Docker Compose. Флаг -d запускает контейнеры в фоновом режиме:
docker-compose up -d
  1. Проверьте, что контейнеры работают правильно. Эта команда показывает статус всех сервисов, определенных в нашем файле docker-compose:
docker-compose ps

Вы должны увидеть три сервиса (mongodb, elasticsearch и graylog) со статусом "Up". Веб-интерфейс Graylog будет доступен по адресу http://127.0.0.1:9000 (имя пользователя: admin, пароль: admin). Это завершает базовую установку Graylog, и мы готовы к настройке источников логов на следующих шагах.

Настройка источника логов

На этом этапе вы настроите источник логов в Graylog для приема сообщений syslog. Представьте это как создание "прослушивающего порта", где Graylog может собирать логи с различных устройств и приложений. Это необходимо для мониторинга безопасности, так как логи содержат ценную информацию о системных действиях и потенциальных угрозах.

  1. Сначала убедимся, что Graylog работает корректно после предыдущей настройки. Запустите эту команду, чтобы проверить статус контейнера:
cd ~/project/graylog
docker-compose ps
  1. Откройте веб-интерфейс Graylog в браузере по адресу http://127.0.0.1:9000. Используйте следующие учетные данные:

    • Имя пользователя: admin
    • Пароль: admin
  2. В веб-интерфейсе Graylog создадим новый источник входящих данных:

    • Нажмите на "System" в верхнем меню - здесь мы управляем основными функциями Graylog
    • Выберите "Inputs" из выпадающего списка - это то, как Graylog получает логи
    • В разделе "Select input" выберите "Syslog UDP" - UDP быстрее для сбора логов, чем TCP
    • Нажмите "Launch new input", чтобы начать настройку
  3. Теперь настройте источник с этими конкретными параметрами:

    • Node: Выберите сервер Graylog (это, вероятно, будет единственный доступный вариант)
    • Title: "Syslog UDP Input" (дайте ему описательное название)
    • Bind address: 0.0.0.0 (означает прослушивание на всех сетевых интерфейсах)
    • Port: 1514 (стандартный альтернативный порт для syslog)
    • Нажмите "Save", чтобы активировать источник
  4. После сохранения убедитесь, что источник работает корректно:

    • Найдите зеленый статус "Running" рядом с новым источником - это означает, что он активен
    • В разделе "Local inputs" теперь должно быть написано "1 input running" - это подтверждает успешную настройку
  5. Протестируем новый источник, отправив тестовое сообщение лога. Запустите эту команду в терминале:

echo "<14>$(date +'%b %d %H:%M:%S') localhost labex: Test syslog message" | nc -w1 -u 127.0.0.1 1514

Эта команда создает тестовое сообщение лога с уровнем приоритета 14 (информация) и отправляет его в Graylog с использованием netcat (nc). Сообщение включает текущую дату и время и идентифицирует источник как "localhost".

Теперь вы успешно настроили Graylog для приема сообщений syslog. В следующих шагах мы узнаем, как отправлять более сложные логи и искать в них важную информацию о безопасности.

Отправка примеров логов

На этом этапе вы сгенерируете и отправите примеры сообщений логов в Graylog через источник syslog, который вы настроили ранее. Эта практическая задача поможет убедиться, что ваша цепочка сбора логов работает корректно, прежде чем приступать к анализу реальных данных. Мы создадим тестовые логи, которые имитируют различные уровни серьезности и типы приложений, что необходимо для понимания того, как Graylog обрабатывает и классифицирует записи логов.

  1. Сначала убедитесь, что контейнеры Graylog запущены. Эта команда проверяет статус ваших Docker-контейнеров - если все работает правильно, они должны отображать статус "Up":
cd ~/project/graylog
docker-compose ps
  1. Мы создадим простой bash-скрипт для генерации примеров логов. Скрипт будет создавать структурированные сообщения логов, которые включают временные метки, уровни серьезности и имена приложений. Создайте новый файл в вашей проектной директории:
nano ~/project/generate_logs.sh
  1. Добавьте в файл следующее содержимое. Этот скрипт выполняет несколько важных действий:
    • Генерирует 10 сообщений логов с случайными уровнями серьезности (от 0 до 7)
    • Включает правильные временные метки в формате syslog
    • Использует команду 'nc' для отправки логов по UDP на порт 1514
    • Добавляет задержку в 1 секунду между сообщениями для лучшей визуализации:
#!/bin/bash
for i in {1..10}; do
  severity=$(((RANDOM % 8)))
  timestamp=$(date +'%b %d %H:%M:%S')
  echo "<$((severity + 8))>$timestamp localhost sample_app[$i]: Sample log message $i with severity $severity" | nc -w1 -u 127.0.0.1 1514
  sleep 1
done
  1. Сделайте скрипт исполняемым, чтобы вы могли запускать его напрямую. Команда chmod изменяет права доступа к файлу:
chmod +x ~/project/generate_logs.sh
  1. Выполните скрипт, чтобы отправить примеры логов в Graylog. Вы не увидите прямого вывода в терминале, так как логи отправляются в источник syslog Graylog:
~/project/generate_logs.sh
  1. Теперь убедимся, что логи были доставлены в Graylog. Следуйте этим шагам в веб-интерфейсе:

    • Откройте браузер и перейдите по адресу http://127.0.0.1:9000
    • Нажмите на "Search" в верхнем меню, чтобы просмотреть входящие сообщения
    • Ваши примеры логов должны появиться в течение нескольких секунд
    • Попробуйте выполнить поиск по запросу "sample_app", чтобы отфильтровать и просмотреть только ваши тестовые логи
  2. (По желанию) Для более комплексного тестирования вы можете отправить дополнительные сообщения логов, которые имитируют работу обычных серверных приложений. Эти примеры показывают различные форматы логов, которые Graylog может обработать:

## Лог веб-сервера в стиле Apache
echo '<13>$(date +"%b %d %H:%M:%S") localhost apache: 127.0.0.1 - - [$(date +"%d/%b/%Y:%H:%M:%S %z")] "GET / HTTP/1.1" 200 45' | nc -w1 -u 127.0.0.1 1514

## Попытка входа по SSH (обычное событие безопасности)
echo '<12>$(date +"%b %d %H:%M:%S") localhost sshd[1234]: Failed password for root from 192.168.1.100 port 22 ssh2' | nc -w1 -u 127.0.0.1 1514

Запрос данных логов

На этом этапе мы узнаем, как искать и анализировать данные логов в Graylog с использованием его языка запросов. Функциональность поиска в Graylog позволяет быстро находить соответствующие логи среди больших объемов данных. Мы будем использовать примеры логов, которые вы отправили ранее, чтобы потренироваться в применении этих методов.

  1. Сначала откройте веб-интерфейс Graylog по адресу http://127.0.0.1:9000 (имя пользователя: admin, пароль: admin). Именно здесь происходит весь анализ логов в Graylog.

  2. Базовые операции поиска:

    • Нажмите на "Search" в верхнем меню, чтобы открыть интерфейс поиска.
    • В строке поиска введите source:localhost, чтобы увидеть все логи из нашего тестового источника. Это показывает, как фильтровать логи по полю источника.
    • Попробуйте эти базовые запросы, чтобы понять различные шаблоны поиска:
      message:"Sample log message"  ## Находит логи, содержащие точную фразу
      severity:3                   ## Фильтрует по уровню серьезности 3
      source:localhost AND severity:[2 TO 4]  ## Комбинирует условия
  3. Фильтрация по временному диапазону:

    • Нажмите на селектор временного диапазона (по умолчанию "Last 5 minutes"). Логи зависят от времени, поэтому это помогает сосредоточиться на соответствующих временных периодах.
    • Измените на "Last 15 minutes", чтобы увидеть все ваши тестовые логи, так как они были отправлены недавно.
    • Попробуйте выбрать "Absolute" временной диапазон, чтобы указать точные начала и окончания временных интервалов, когда вам нужны точные временные окна.
  4. Анализ полей:

    • Нажмите на любое сообщение лога, чтобы увидеть его поля. Каждый лог содержит несколько полей с различной информацией.
    • Обратите внимание на автоматически извлеченные поля, такие как source, severity и т.д. Они создаются, когда Graylog обрабатывает логи.
    • Нажмите на вкладку "Quick values", чтобы увидеть распределение значений - это показывает, какие значения чаще всего встречаются в ваших логах.
  5. Сохранение поиска:

    • После выполнения полезного запроса нажмите "Save search". Это полезно, когда вам нужно повторно использовать тот же поиск позже.
    • Назовите его "Sample Log Analysis" для удобства идентификации.
    • Он появится в разделе "Saved searches" для дальнейшего доступа.
  6. Создание ярлыка для поискового запроса:

    • Нажмите "Search" → "Edit search shortcuts". Ярлыки экономят время, когда вы часто используете определенные фильтры.
    • Добавьте новый ярлык с именем "High Severity" и запросом severity:[4 TO 7].
    • Теперь вы можете быстро получить доступ к этому отфильтрованному представлению из выпадающего списка поиска.
  7. (По желанию) Попробуйте эти расширенные запросы, чтобы исследовать более сложные шаблоны поиска:

    _exists_:severity AND severity:>3  ## Логи, у которых есть поле severity со значением >3
    message:/(sample|test)/i           ## Поиск по регулярному выражению (без учета регистра)
    NOT severity:5                     ## Исключает логи с уровнем серьезности 5

Создание дашборда

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

Начнем с доступа к веб-интерфейсу Graylog, где мы создадим наш дашборд:

  1. Откройте веб-интерфейс Graylog по адресу http://127.0.0.1:9000 (имя пользователя: admin, пароль: admin).

  2. Создайте новый дашборд:

    • Нажмите на "Dashboards" в верхнем меню - здесь вы можете управлять всеми своими дашбордами.
    • Нажмите на "Create dashboard" - мы начинаем с чистого листа для новой визуализации.
    • Назовите его "Security Monitoring Dashboard" - выберите описательное имя, отражающее его назначение.
    • Нажмите на "Create" - это инициализирует пустой дашборд.
  3. Добавьте виджеты на ваш дашборд. Виджеты - это отдельные компоненты, которые отображают конкретные визуализации данных:

    a. График количества сообщений (показывает, сколько логов поступает со временем):

    • Нажмите на "Add widget" → "Message Count".
    • Настройте следующим образом:
      • Заголовок: "Log Volume" - дает имя виджету для удобства ссылки.
      • Временной диапазон: "Last 15 minutes" - показывает недавнюю активность.
      • Интервал: "Minute" - группирует данные по минутам для ясного отображения тенденций.
    • Нажмите на "Save".

    b. Быстрые значения (отображает наиболее распространенные значения в поле):

    • Нажмите на "Add widget" → "Quick Values".
    • Настройте следующим образом:
      • Заголовок: "Top Sources" - показывает, какие системы генерируют логи.
      • Поле: "source" - поле лога, содержащее информацию об источнике.
      • Показать данные в виде: "Pie chart" - четко визуализирует пропорции.
    • Нажмите на "Save".

    c. Статистика полей (обобщает числовые данные):

    • Нажмите на "Add widget" → "Field Statistics".
    • Настройте следующим образом:
      • Заголовок: "Severity Levels" - контролирует степень серьезности зарегистрированных событий.
      • Поле: "severity" - поле, содержащее оценки серьезности.
      • Показать данные в виде: "Bar chart" - сравнивает значения рядом друг с другом.
    • Нажмите на "Save".
  4. Расположите виджеты на дашборде для оптимальной видимости:

    • Перетаскивайте виджеты, чтобы организовать их - размещайте связанные виджеты рядом друг с другом.
    • Изменяйте размер виджетов, перетаскивая их края - сделайте важные визуализации крупнее.
    • Нажмите на "Done editing", когда закончите - это закрепит ваш макет.
  5. Сохраните ваш дашборд:

    • Нажмите на "Save dashboard" в правом верхнем углу - это сохранит вашу работу.
    • Добавьте описание: "Dashboard for monitoring security logs" - объясните его назначение.
    • Нажмите на "Save".
  6. (По желанию) Установите дашборд в качестве основного для удобства:

    • Нажмите на звездочку рядом с именем вашего дашборда.
    • Теперь он станет вашим основным представлением при входе в систему, что сэкономит вам время при ежедневных проверках.

Резюме

В этом практическом занятии вы узнали, как развернуть Graylog с использованием Docker Compose, настроить важные сервисы, такие как MongoDB и Elasticsearch, с использованием постоянного хранилища. Вы успешно запустили стек, обратились к веб-интерфейсу и проверили функциональность контейнеров, чтобы создать централизованную платформу для сбора логов.

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