Читання файлу access.log для реагування на інциденти та цифрової судово-медичної експертизи — версія для Індонезії.

pic

Охоронець кібербезпеки (згенеровано AI)

У світі кібербезпеки читання та аналіз файлів журналів є однією з найважливіших навичок, особливо в контексті реагування на інциденти та цифрової судової експертизи. Одним із файлів журналів, який часто використовується в процесі розслідування, є 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" "-"

pic

Структура запису в access.log

Отже, після того, як ми з'ясували, що таке access.log і яку структуру має запис у цьому журналі, давайте розглянемо приклад запису в access.log:

  1. 192.168.12.80 — IP-адреса клієнта, що зробив запит.
  2. - - Заповнювач, зазвичай використовується для інформації аутентифікації, якщо вона доступна.
  3. [12/Jan/2024:10:15:32 +0000] — Дата та час виконання запиту, включаючи часову зону. Для серверів, розташованих в Індонезії, зазвичай використовується часова зона +0700 як позначення GMT+7 або час за індонезійським заходом (WIB).
  4. “GET /index.html HTTP/1.1” — HTTP-запит, що складається з методу (в даному випадку GET), доступної URL-адреси (в цьому випадку /index.html) і версії протоколу HTTP (HTTP/1.1).
  5. 200 — HTTP-статус код, що вказує на успішну обробку запиту.
  6. 1024 — Кількість байтів даних, відправлених сервером як відповідь.
  7. “-” — Referer або джерело запиту. Якщо порожньо, відображатиметься знак “-”.
    У випадку процесу входу referer зазвичай посилається на сторінку форми входу (наприклад, /login.php), після чого цільова URL-адреса буде перенаправлена на “GET /dashboard HTTP/1.1” в URL цільової сторінки (якщо користувач успішно увійшов).
    8.
    “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 для пошуку конкретних записів на основі ключового слова або рядка, який вас цікавить. Наприклад, якщо ви хочете показати всі записи в 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, який був доступний.

pic

Команда awk для обробки (парсингу) access.log

Команду awk можна також поєднувати з іншими командами для спрощення аналізу та розслідування. Наприклад, можна підрахувати кількість запитів, зроблених кожною IP-адресою в файлі access.log, комбінуючи кілька команд, як показано нижче:

awk '{print $1}' access.log | sort | uniq -c | sort -nr

pic

Команда awk для сортування IP-адрес за кількістю запитів

Ця команда виведе список IP-адрес, відсортованих за кількістю запитів, від найбільших до найменших. Комбінація команд awk також може бути поєднана з grep для більш специфічного аналізу, наприклад, якщо ви хочете побачити, скільки запитів на сторінку входу були зроблені за короткий проміжок часу з тієї ж IP-адреси. Це буде дуже корисно, якщо ми проводимо розслідування атаки, що використовує метод Brute Force Attack.
Ми можемо використовувати наступну команду для підрахунку кількості запитів з цієї IP-адреси:

grep "POST /login" /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -nr

pic

У цьому прикладі ми можемо дізнатися, які IP-адреси намагалися увійти на сторінку /login і скільки разів вони це зробили. Наприклад, в даному випадку адреси 192.168.26.118 та 172.16.211.66 зробили POST-запити на /login відповідно 1 раз.

Ідентифікація патернів атак

При читанні файлу access.log важливо виявляти підозрілі патерни. Ось кілька речей, на які потрібно звернути увагу:

  • Повторювані запити з однієї і тієї ж IP-адреси за короткий час — Це може бути ознакою атаки методом brute force.
  • Незвичайні HTTP статус-коди (наприклад, 403 або 500) — Це може вказувати на спроби експлуатації вразливостей, наприклад, спроби обійти 403 або використання шкідливих скриптів, що призводять до помилки 500 Internal Server Error.
  • Запити до незнайомих або підозрілих URL-адрес — Наприклад, запити до сторінки /wp-admin на сервері, який не використовує WordPress. Це може бути ознакою використання ботів або автоматизованих інструментів для сканування вразливостей у нашій системі.
  • Дивні патерни URL-адрес — Ми можемо шукати URL-адреси з екстремальною довжиною, незвичайними символами або підозрілими патернами атак, такими як path traversal з типово використаними URL-адресами ../ або %2e%2e%2f.
  • Зверніть увагу на незвичні User-Agent — Наприклад, порожній User-Agent, випадкові рядки або User-Agent, в якому згадуються автоматизовані інструменти, такі як sqlmap, nikto, gobuster та інші.
  • Шкідливий ввід — Будьте обережні з параметрами, що містять підозрілі payload, такі як `

Перекладено з: Membaca access.log untuk Respons Insiden dan Investigasi Forensik Digital — Indonesia version.

Leave a Reply

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