Splunk для Реагування на Інциденти
Вступ
У цьому пості розповім про Splunk Enterprise. Проте не як про крутий та дорогий SIEM, а скорше як про зручний та безкоштовний (саме так!) інструмент для швидкої агрегації та аналізу логів зібраних під час інциденту. Якщо ви ще ніколи не працювали з спланком - не біда, розберемось разом!
Проблема та Рішення
Наведу приклад для зовнішньої DFIR команди, що приходить на допомогу пошифрованій компанії: SIEM немає, мережа в офлайн режимі, деякі артефакти вже випадково знищили перелякані ІТ адміністратори. В такому випадку, DFIR команда працюватиме не з одним джерелом логів, а з:
- Обривками EVTX файлів що вдалось дістати з бекапів
- Текстовими LOG файлами програм, про які ви вперше чуєте
- Результатами різноматнітних DFIR скриптів, як от Kansa
- Вивантаженими CSV та JSON логами з Entra ID чи AWS
- Безліччю специфічних подій з фаєрволів та гіпервізорів
Описаний сценарій також цілком стосується внутрішніх 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:
- Файл має бути до 500 мегабайтів. Якщо файл більший - розділіть на частини
- Файл має бути текстовим. EVTX потрібно спочатку перевести в CSV/JSON
Етап 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 ви отримаєте табличку з багатьма колонками:
-
Вигляд файлу з погляду спланку: Логи мають бути читабельні і з правильною часовою міткою (спланк показує логи в часовій зоні сервера)
-
Вибір sourcetype: Параметр sourcetype визначає як саме парсити файл. Якщо sourcetype по назві вірний, а з логами щось не те - дивіться до пунктів 3 та 4
-
Розпізнавання часу: Спланк розпізнає часові мітки в логах автоматично. Якщо ж ні - розкрийте панель та уточніть часову зону та формат часу ваших логів
-
Додаткові налаштування: Під цю панель потрібен окремий пост, проте якщо час ніяк не розпізнається, спробуйте додати
MAX_TIMESTAMP_LOOKAHEAD=0
таTRUNCATE=50000
Етап 3: Індексуємо Файл
У цьому етапі ви вказуєте назву джерела ваших логів (host) та репозиторій / базу даних куди ці логи записати (index). Хост особливо ні на що не впливає, проте індекс я рекомендую створювати під кожний інцидент окремо, як от inc_005. Саме по індексу найлегше шукати чи видаляти заведені дані.
Аналізуємо Заведені Логи
Коли логи заведені, можна переходити до їх аналізу: Apps -> Search & Reporting
. В цьому аспекті спланк на дві голови вище інших SIEM рішень, не говорячи вже про всілякі текстові редактори. На скріншоті ви бачите:
- Поле пошуку: Ваш запит мовою SPL, про це згодом
- Час пошуку: Часові рамки, за які потрібно вести пошук
- Події: Події з завантаженого файлу в оригінальному вигляді
- Поля: Доступні поля, визначені на етапі парсингу
Мова Запитів SPL
Запит з скріншота мав знайти всі DNS запити до .ru доменів від користувача bob. Пошук за увесь час повернув три події що підпадають під умови. Давайте розберемо запит детальніше:
index=demo source=evtxecmd-output.csv EventId=22 User=LPT-CORP-45\\bob .ru
index=demo
: Індекс по якому вести пошук. Індекс ви вказували на етапі 3source=evtxecmd-output.csv
: Оригінальна назва вашого лог-файлуEventId=22
: Фільтр по event ID, поле має бути видиме на етапі 2User=LPT-CORP-45\\bob
: Фільтр по юзернейму (\
екранується як\\
).ru
: Пошук строки “.ru” по всьому вмісту логів, дуже зручно і швидко!
Пошук ігнорує регістр букв. Якщо ж вам потрібно швидко знайти логи які містять певну строку, нехай “kali” або “red”, а також виключити фолс позітіви з результату, ось зразок:
index=* (kali OR red) NOT "*Red Alert*" NOT "C:\\Users\\hassan.kali\\*"
Погодьтесь, шукати індикатори по десятках, а то і сотнях тисяч логів вручну просто неможливо, тому маю надію що спланк вам хоч трошки допоможе. Повнотекстовий пошук і завантаження файликів це не все що може спланк, і в наступних постах ми розкриємо й інший крутий функціонал, як от те що на скріншоті нижче:
Питання та Відповіді
-
Спланк пише що trial всього на 60 днів, що далі?
Далі у вас буде можливість в один клік перейти на вічний Splunk Free -
Які обмеження безкоштовного спланку (Splunk Free)?
До 500 MB нових логів на день, відсутність аутентифікації, і деякі інші обмеження -
Як мені завантажити декілька файлів одночасно?
Якщо файли однакового формату, можна об’єднати їх в архів та закинути вже його -
Як мені розпарсити нові поля, наприклад з web логів?
Про це в наступних постах, проте якщо коротко: add-ons, rex, або props.conf