Охоронець кібербезпеки (створено за допомогою ШІ)
У світі кібербезпеки читання та аналіз файлів журналів є однією з найважливіших навичок, особливо в контексті реагування на інциденти та цифрової судово-медичної експертизи. Один з найбільш використовуваних файлів журналів у процесі розслідування — це access.log, що генерується веб-серверами, такими як Apache або Nginx. Цей файл реєструє кожен вхідний запит на сервер, включаючи інформацію про те, хто отримував доступ до сервера, коли це сталося та які дії були виконані.
Коли відбувається інцидент безпеки, такий як атака DDoS, дефейсинг веб-сайту чи витік даних, файли журналів можуть надати цінні підказки щодо того, як сталася атака, хто в ній брав участь і що саме було порушено. У цьому матеріалі ми спробуємо детальніше розглянути, як читати файл access.log, зрозуміти структуру даних і як використовувати цю інформацію для розслідування та реагування на інциденти.
Що таке access.log і як зрозуміти його структуру?
Access.log — це файл журналу, який реєструє всі HTTP-запити, що надходять до веб-сервера. Кожного разу, коли хтось відвідує сайт, що розміщений на сервері, в access.log додається новий запис. Інформація, що записується в цьому журналі, може включати:
- IP-адресу відвідувача
- Дату та час доступу
- Використаний метод HTTP (GET, POST тощо)
- URL, до якого був здійснений доступ
- Код статусу відповіді сервера (200, 302, 404, 500 тощо)
- User-Agent (інформація про браузер чи пристрій, що використовується)
Приклад запису в access.log:
192.168.12.80 - - [12/Jan/2024:10:15:32 +0000] "GET /index.html HTTP/1.1" 200 1024 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36" "-"
Структура запису в access.log
Отже, після того, як ми з’ясували, що таке access.log і як виглядає структура одного запису в журналі, давайте розглянемо приклад запису access.log вище:
- 192.168.12.80 — IP-адреса клієнта, який надіслав запит.
- - - Місце для інформації про автентифікацію, якщо така є.
- [12/Jan/2024:10:15:32 +0000] — Дата та час, коли було здійснено запит, разом із зоною часу. Для серверів, розміщених в Індонезії, зазвичай використовується зона часу +0700, що відповідає GMT+7 або Західному індонезійському часу (WIB).
- “GET /index.html HTTP/1.1” — HTTP-запит, що містить метод (в даному випадку GET), URL (в даному випадку /index.html) і версію HTTP-протоколу (HTTP/1.1).
- 200 — Код статусу HTTP, що вказує на успішну обробку запиту.
- 1024 — Кількість байтів, які сервер надіслав у відповіді.
- “-” — Referer або джерело запиту. Якщо порожнє, то відображається як “-”. У випадку процесу входу, зазвичай реферер вказує на сторінку форми для входу (наприклад, /login.php), а після успішного входу URL направляється на “GET /dashboard HTTP/1.1”.
- “Mozilla/5.0…Safari/537.36” — User-Agent, що надає інформацію про пристрій та браузер, який використовував клієнт.
Читання, фільтрація та аналіз access.log
Ось кілька базових і практичних кроків для читання та аналізу access.log:
Використання команд 'cat'
, 'tail'
, та 'head'
Якщо ви працюєте в середовищі з операційною системою на базі Linux, можна використовувати наступні команди для читання access.log в реальному часі:
cat /var/log/apache2/access.log
Ця команда виведе всі записи з файлу access.log.
Якщо ви хочете вивести лише кілька останніх записів з файлу access.log, використовуйте команду tail
, як показано нижче:
tail /var/log/apache2/access.log
Ця команда за замовчуванням виводить останні 10 рядків з файлу access.log. Якщо ви хочете вивести конкретну кількість записів (наприклад, останні 500 записів), використовуйте параметр -n 500
:
tail /var/log/apache2/access.log -n 500
Якщо ви хочете вивести кілька перших записів (найраніших) з файлу access.log, використовуйте команду head
, як показано нижче:
head /var/log/apache2/access.log
Ця команда за замовчуванням виводить перші 10 рядків записів з файлу access.log. Якщо ви хочете вивести певну кількість перших записів (наприклад, перші 500), можна також використовувати параметр -n 500
.
Фільтрація журналів за допомогою ‘grep’
Можна використовувати команду grep
, щоб знайти специфічні записи на основі ключового слова (keyword) або рядка. Наприклад, щоб показати всі записи в access.log, що містять запит на сторінку входу, використовуйте команду:
grep "GET /login" /var/log/apache2/access.log
Або, якщо хочете відфільтрувати записи, що стосуються конкретної IP-адреси (наприклад: 192.168.73.44), і зберегти їх в новому файлі під назвою suspic-user.txt, використовуйте команду:
grep "192.168.73.44" /var/log/apache2/access.log >> suspic-user.txt
Це значно полегшує аналіз і розслідування інцидентів частинами.
Використання ‘awk’
для обробки журналів
awk
— це потужний інструмент для обробки журналів та вилучення специфічної інформації. Приклад:
awk '{print $1, $4, $7}' /var/log/apache2/access.log
Ця команда виведе IP-адресу, час доступу та URL, до якого було здійснено запит.
Команда awk для обробки (парсингу) access.log
Цю команду awk
також можна комбінувати з іншими командами для спрощення аналізу і розслідування. Наприклад, щоб порахувати кількість запитів від усіх IP-адрес у файлі access.log, об’єднайте кілька команд:
awk '{print $1}' access.log | sort | uniq -c | sort -nr
Команда awk для сортування IP-адрес за кількістю запитів
Ця команда виведе список IP-адрес на основі кількості запитів та відсортує їх за зменшенням. Також комбінацію команд awk
можна поєднувати з grep
для більш специфічного аналізу, наприклад, щоб побачити, скільки запитів на сторінку входу було зроблено за короткий період одним і тим же IP. Це буде дуже корисно при розслідуванні атак методом Brute Force.
Перекладено з: Cara Menggunakan Wireshark untuk Menganalisis File PCAP