Splunk для Реагування на Інциденти

Вступ

У цьому пості розповім про Splunk Enterprise. Проте не як про крутий та дорогий SIEM, а скорше як про зручний та безкоштовний (саме так!) інструмент для швидкої агрегації та аналізу логів зібраних під час інциденту. Якщо ви ще ніколи не працювали з спланком - не біда, розберемось разом!

splunk-intro

Проблема та Рішення

Наведу приклад для зовнішньої DFIR команди, що приходить на допомогу пошифрованій компанії: SIEM немає, мережа в офлайн режимі, деякі артефакти вже випадково знищили перелякані ІТ адміністратори. В такому випадку, DFIR команда працюватиме не з одним джерелом логів, а з:

Описаний сценарій також цілком стосується внутрішніх SOC команд - більшість інцидентів стаються там, куди ще не добрались SIEM та EDR агенти. Тому, якщо ви не готові аналізувати гігабайти даних в Notepad і шукати індикатори через Ctrl+F - спланк вам точно стане в пригоді.

Встановлення Splunk

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

Категорія Рекомендації
ОС LTS Linux дистрибутив, на Ubuntu 18-24.04 ще не мав проблем
Процесор Мінімум 2 ядра, якщо більше 5 GB логів тоді краще 8 і більше ядер
Пам’ять Мінімум 4 GB,якщо більше 5 GB логів тоді краще 12 і більше GB
Диск Обов’язково SSD. Мінімум 30 гігабайт плюс об’єм вхідних логів
Мережа Для цього поста - жодних вимог, тільки відкритий TCP/8000

Далі потрібно встановити спланк, рекомендую саме через TAR архів. Команди нижче встановлять спланк, налаштують його як init сервіс, та запустять від рута (або не від рута). Вам залишиться лише вказати пароль адміністратора:

sudo wget -O splunk.tgz 'https://<download-link>'
sudo tar xvzf splunk.tgz -C /opt
sudo /opt/splunk/bin/splunk start
sudo /opt/splunk/bin/splunk enable boot-start

Якщо встановлення пройшло успішно, консоль буде доступна на http://splunk-ip:8000. Наступним кроком ви маєте вирішити як саме ви будете заводити дані: вручну файлик за файликом, або через форвардери (агенти) на хостах. В цьому пості опишу лиш перший варіант, а колись згодом поговоримо і про форвардери.

Заводимо CSV та JSON

Для початку, підготуйте файли для аналізу: вони мають бути у вас на локальному диску. Далі, перейдіть в Settings -> Add Data -> Upload та завантажте потрібний текстовий файл. Зверніть увагу на обмеження Upload:

splunk-add-data

Етап 2: Парсимо Файл

В наступному етапі ви вказуєте спланку як розбити (розпарсити) ваш файл на список подій. У прикладі нижче я перевів логи сисмону в CSV та залив їх через Upload без жодних змін, проте JSON файли іноді потрібно змінювати вручну:

// JSON лог-файл має бути або у вигляді списку []:
[{"ts": "2025-01-01", "a": "xxx", "b": 123}, {"ts": "2025-02-02", "a": "yyy", "b": 456}, ...]

// Або містити по одному логу на строку:
{"ts": "2025-01-01", "a": "xxx", "b": 123}
{"ts": "2025-02-02", "a": "yyy", "b": 456}
...

Дуже важливо щоб спланк правильно розпізнав час подій та саме повідомлення. Для CSV чи JSON ви отримаєте табличку з багатьма колонками:

  1. Вигляд файлу з погляду спланку: Логи мають бути читабельні і з правильною часовою міткою (спланк показує логи в часовій зоні сервера)

  2. Вибір sourcetype: Параметр sourcetype визначає як саме парсити файл. Якщо sourcetype по назві вірний, а з логами щось не те - дивіться до пунктів 3 та 4

  3. Розпізнавання часу: Спланк розпізнає часові мітки в логах автоматично. Якщо ж ні - розкрийте панель та уточніть часову зону та формат часу ваших логів

  4. Додаткові налаштування: Під цю панель потрібен окремий пост, проте якщо час ніяк не розпізнається, спробуйте додати MAX_TIMESTAMP_LOOKAHEAD=0 та TRUNCATE=50000

splunk-source-type

Етап 3: Індексуємо Файл

У цьому етапі ви вказуєте назву джерела ваших логів (host) та репозиторій / базу даних куди ці логи записати (index). Хост особливо ні на що не впливає, проте індекс я рекомендую створювати під кожний інцидент окремо, як от inc_005. Саме по індексу найлегше шукати чи видаляти заведені дані.

splunk-host-index

Аналізуємо Заведені Логи

Коли логи заведені, можна переходити до їх аналізу: Apps -> Search & Reporting. В цьому аспекті спланк на дві голови вище інших SIEM рішень, не говорячи вже про всілякі текстові редактори. На скріншоті ви бачите:

  1. Поле пошуку: Ваш запит мовою SPL, про це згодом
  2. Час пошуку: Часові рамки, за які потрібно вести пошук
  3. Події: Події з завантаженого файлу в оригінальному вигляді
  4. Поля: Доступні поля, визначені на етапі парсингу

splunk-search

Мова Запитів SPL

Запит з скріншота мав знайти всі DNS запити до .ru доменів від користувача bob. Пошук за увесь час повернув три події що підпадають під умови. Давайте розберемо запит детальніше:

index=demo source=evtxecmd-output.csv EventId=22 User=LPT-CORP-45\\bob .ru

Пошук ігнорує регістр букв. Якщо ж вам потрібно швидко знайти логи які містять певну строку, нехай “kali” або “red”, а також виключити фолс позітіви з результату, ось зразок:

index=* (kali OR red) NOT "*Red Alert*" NOT "C:\\Users\\hassan.kali\\*"

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

splunk-functions

Питання та Відповіді