Анотація:
Цей проєкт демонструє, як налаштувати систему управління інформацією та подіями безпеки (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, у свою чергу, є інструментом для візуалізації, що використовується для запитів і відображення цих журналів на панелях.
- Встановлення 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/
.
Ключова концепція: Роль Elasticsearch полягає в зберіганні та індексації даних, в той час як Kibana дозволяє користувачам аналізувати та візуалізувати ці дані.
2. Налаштування Filebeat (Ubuntu Server)
Filebeat — це легкий агент, який збирає журнали з Ubuntu Server і надсилає їх до Elasticsearch.
- Встановлення 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, таких як спроби входу, системні події та сповіщення про безпеку.
- Встановлення 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 — це інтерфейс для візуалізації та аналізу журналів.
- Перегляд даних у Discover:
- Я використовував вкладку Discover в Kibana для перегляду зібраних журналів, фільтруючи за полями, такими як
winlog.event_id
, щоб знайти конкретні події (наприклад, неуспішні спроби входу з ідентифікатором події4625
).
- Створення візуалізацій:
Створив візуалізації, такі як:
- Кругова діаграма: Пропорція успішних та неуспішних входів.
- Стовпчикова діаграма: Тренди активності входів з часом.
- Комбінування візуалізацій у панель:
- Створив централізовану панель для моніторингу системної та безпекової активності в реальному часі.
Ключова концепція: Панелі в 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