Створення базової SIEM-системи з Elastic Stack: покроковий посібник

pic

Анотація:

Цей проєкт демонструє, як налаштувати систему управління інформацією та подіями безпеки (SIEM) за допомогою Elastic Stack (Elasticsearch, Kibana та Beats) для централізації та аналізу журналів з Linux-сервера та Windows VM. Протягом роботи я стикнувся з кількома технічними проблемами, які значно покращили мої навички усунення несправностей і розв'язання проблем. Цей посібник включає покрокове керівництво, проблеми, з якими я зіткнувся, та результати, візуалізовані в панелях Kibana.

Вступ:

Моніторинг активності системи та виявлення підозрілої поведінки є критично важливою частиною кібербезпеки. У цьому проєкті я побудував базову систему SIEM за допомогою Elastic Stack для збору, аналізу та візуалізації журналів з кількох джерел.

Мета: Централізувати журнали з Ubuntu Server та Windows VM для моніторингу подій, таких як спроби входу, системні помилки та зміни облікових записів користувачів в реальному часі.

Інструменти та технології:

Elastic Stack:

  • Elasticsearch 8.17.0
  • Kibana 8.17.0
  • Filebeat 8.17.0
  • Winlogbeat 8.17.0

Операційні системи:

  • Ubuntu Server 20.04 (для Elasticsearch та Kibana)
  • Windows 10 (для Winlogbeat)

Віртуалізація: VirtualBox

Архітектура системи:

Система складається з:

  • Ubuntu Server, на якому працюють Elasticsearch та Kibana.
  • Windows VM, що надсилає журнали подій за допомогою Winlogbeat.
  • Beats Agents (Filebeat та Winlogbeat), які пересилають журнали в Elasticsearch.

1. Налаштування Elasticsearch та Kibana (Ubuntu Server)

Elasticsearch є основою Elastic Stack, виступаючи як база даних, де зберігаються всі журнали. Kibana, у свою чергу, є інструментом для візуалізації, що використовується для запитів і відображення цих журналів на панелях.

  1. Встановлення Elasticsearch:
  • Я завантажив і встановив Elasticsearch 8.17.0 на своєму Ubuntu Server.
  • Налаштував файл elasticsearch.yml для одноузлової роботи (ідеально для середовища розробки):
cluster.name: siem-cluster  
node.name: node-1  
discovery.type: single-node  
network.host: 0.0.0.0

2. Встановлення Kibana:

  • Встановив Kibana і переконався, що вона може підключатися до Elasticsearch.
  • Перевірив Kibana, отримавши доступ через браузер за адресою:
http://<IP-адреса>:5601

3. Тестування Elasticsearch та Kibana:

  • Використовував curl, щоб переконатися, що Elasticsearch працює:
curl -X GET "http://127.0.0.1:9200"
  • У разі виникнення проблем переглядав логи Elasticsearch за адресою /var/log/elasticsearch/.

pic

Ключова концепція: Роль Elasticsearch полягає в зберіганні та індексації даних, в той час як Kibana дозволяє користувачам аналізувати та візуалізувати ці дані.

2. Налаштування Filebeat (Ubuntu Server)

Filebeat — це легкий агент, який збирає журнали з Ubuntu Server і надсилає їх до Elasticsearch.

  1. Встановлення Filebeat:
  • Завантажив і встановив Filebeat на Ubuntu Server.

2. Налаштування Filebeat:

  • Відредагував файл filebeat.yml, щоб визначити виведення до Elasticsearch:
output.elasticsearch:  
 hosts: ["http://127.0.0.1:9200"]
  • Увімкнув модулі Filebeat для збору системних журналів:
sudo filebeat modules enable system

3. Тестування конфігурації Filebeat:

  • Перевірив, чи правильна конфігурація:
sudo filebeat test output
  • Запустив сервіс Filebeat:
sudo systemctl start filebeat

Ключова концепція: Filebeat відповідає за перенаправлення журналів з Linux-системи в Elasticsearch, забезпечуючи збір усіх критичних подій.

3. Налаштування Winlogbeat (Windows VM)

Winlogbeat — це агент для збору журналів подій Windows, таких як спроби входу, системні події та сповіщення про безпеку.

  1. Встановлення Winlogbeat:
  • Завантажив і встановив Winlogbeat на Windows VM.

2.
**Налаштування Winlogbeat
:

  • Відредагував файл winlogbeat.yml, щоб вказати, які журнали подій потрібно збирати:
winlogbeat.event_logs:   
 - name: Application   
 - name: Security   
 - name: System
  • Налаштував виведення для відправки журналів в Elasticsearch на Ubuntu Server:
output.elasticsearch:  
 hosts: ["http://<IP-адреса>:9200"]

3. Усунення проблем з політикою виконання PowerShell:

  • Зіткнувся з помилками виконання скриптів при установці Winlogbeat як сервісу. Вирішив це, тимчасово обійшовши обмеження PowerShell:
Set-ExecutionPolicy Bypass -Scope Process

4. Запуск Winlogbeat:

  • Встановив його як сервіс:
.\install-service-winlogbeat.ps1
  • Запустив сервіс:
Start-Service winlogbeat

Ключова концепція: Журнали подій Windows є критично важливими для виявлення подій безпеки, таких як неуспішні спроби входу або ескалація привілеїв, що може свідчити про потенційні атаки.

4. Створення панелей у Kibana

Панелі Kibana — це інтерфейс для візуалізації та аналізу журналів.

  1. Перегляд даних у Discover:
  • Я використовував вкладку Discover в Kibana для перегляду зібраних журналів, фільтруючи за полями, такими як winlog.event_id, щоб знайти конкретні події (наприклад, неуспішні спроби входу з ідентифікатором події 4625).
  1. Створення візуалізацій:

Створив візуалізації, такі як:

  • Кругова діаграма: Пропорція успішних та неуспішних входів.
  • Стовпчикова діаграма: Тренди активності входів з часом.
  1. Комбінування візуалізацій у панель:
  • Створив централізовану панель для моніторингу системної та безпекової активності в реальному часі.

pic

pic

Ключова концепція: Панелі в Kibana дозволяють командам безпеки моніторити критичну активність та швидко виявляти аномалії.

Виклики та рішення

Цей проєкт поставив кілька викликів, кожен з яких вимагав критичного мислення та усунення несправностей.

Виклик 1: Elasticsearch не запускається

  • Проблема: Elasticsearch не запускався, виводячи помилку exit code 1. Логи вказували на неправильну конфігурацію файлу elasticsearch.yml.
  • Рішення: Переглянув логи (/var/log/elasticsearch) і виявив, що відсутнє налаштування discovery.type. Додавши це, проблема була вирішена:
discovery.type: single-node

Висновок: Завжди перевіряйте логи Elasticsearch на наявність конкретних повідомлень про помилки, які часто вказують на проблеми з конфігурацією.

Виклик 2: Порожні відповіді від Elasticsearch

  • Проблема: Запити через curl до Elasticsearch повертали помилку Empty reply from server.
  • Рішення: Проблема була викликана неправильно налаштованим параметром network.host. Зміна на дозволену зовнішню підключеність вирішила проблему:
network.host: 0.0.0.0

Висновок: Параметр network.host контролює інтерфейси, до яких прив'язується Elasticsearch. Невірна конфігурація може блокувати підключення.

Виклик 3: Блокування виконання скриптів на Windows

  • Проблема: PowerShell відмовився виконувати скрипт установки Winlogbeat через занадто сувору політику виконання.
  • Рішення: Я тимчасово обійшов політику виконання за допомогою:
Set-ExecutionPolicy Bypass -Scope Process

Висновок: Політики безпеки Windows можуть забороняти виконання скриптів за замовчуванням. Розуміння політик виконання PowerShell є важливим для роботи в безпечних середовищах.

Виклик 4: Журнали не доходять до Elasticsearch

  • Проблема: Жодних журналів не з'являлося в Elasticsearch від Winlogbeat.
  • Рішення: Виявилося, що проблема була у файрволі на Ubuntu Server.
    Дозвіл трафіку на порт 9200 вирішив проблему:
sudo ufw allow 9200

Висновок: Підключення між системами часто вимагає перевірки файрволів, налаштувань мережі та конфігурацій виведення.

Виклик 5: Немає даних на панелях

  • Проблема: Початкові візуалізації в Kibana показували "No results found."
  • Рішення: Я зрозумів, що не генерував достатньо активності на Windows VM. Симулюючи події, такі як неуспішні спроби входу та зміни облікових записів користувачів, я отримав необхідні дані.

Висновок: Тестування та створення реалістичних даних журналів є критичними для корисних панелей.

Документуючи ці виклики та рішення, я сподіваюся підкреслити ментальність усунення несправностей і стійкість, необхідні для реальних завдань у галузі кібербезпеки.

Зацікавлені в повторенні цього проєкту? Перевірте повний репозиторій на GitHub: (Github Repository)

Перекладено з: Building a Basic SIEM with the Elastic Stack: A Step-by-Setp Guide

Leave a Reply

Your email address will not be published. Required fields are marked *