Какие журналы событий нужны для расследования инцидента на сайте
Когда сайт взламывают, подменяют контент или через него утекают данные, первый вопрос, который задают администратору: «У вас есть логи?» И от ответа зависит не только скорость восстановления, но и возможность доказать собственную непричастность — особенно если инцидент привёл к блокировке ресурса Роскомнадзором или претензиям со стороны пользователей. Инцидент почти всегда оставляет следы в нескольких местах одновременно: на веб-сервере, в приложении, в базе данных, в системе аутентификации и на уровне защиты от атак. Если собрать только access.log, расследование будет неполным: вы увидите запрос, но не всегда поймёте, что произошло внутри приложения и чем закончилась атака. Для нормального разбора нужны логи, которые позволяют восстановить цепочку событий: кто, когда, откуда, что сделал и к чему это привело.
Зачем вообще собирать журналы событий
Журналы событий нужны не «для галочки» и не только для того, чтобы успокоить службу безопасности. Их практическая ценность раскрывается в момент инцидента, когда необходимо:
- восстановить хронологию атаки — от первой попытки до финального действия;
- определить точку входа злоумышленника: уязвимый плагин, слабый пароль, открытый API;
- понять масштаб затронутых данных и систем, чтобы оценить ущерб и уведомить пользователей, если это требуется законом;
- отделить реальные признаки компрометации от обычной ошибки пользователя или временного сбоя — без этого можно зря потратить ресурсы на ложное расследование;
- подготовить доказательную базу для команды разработки, администраторов, юристов и руководства, а при необходимости — для взаимодействия с регуляторами и правоохранительными органами.
На практике расследование строится вокруг корреляции нескольких источников. Один журнал показывает попытку, другой — успешный вход, третий — изменение файла, четвёртый — ошибку в приложении после эксплуатации уязвимости. Если хотя бы одно звено выпадает, восстановить полную картину становится крайне сложно, а иногда и невозможно. Особенно это критично, когда нужно доказать, что запрещённый контент разместил не владелец сайта, а посторонний, получивший несанкционированный доступ. Без логов, фиксирующих действия конкретной учётной записи, владелец рискует оказаться крайним.
Минимальный набор логов для сайта
Если говорить о практическом минимуме, для сайта нужны такие журналы. Без любого из них расследование будет страдать от слепых зон.
| Источник | Что даёт | Почему важен |
|---|---|---|
| Web server access logs | IP, время, метод, URL, параметры, код ответа, user agent, referrer | Показывает, кто и что запрашивал. Это первичная канва событий, без которой невозможно понять, с чего всё началось. |
| Web server error logs | Ошибки приложения, PHP/CGI/модули, сбои обработки | Помогает увидеть момент эксплуатации и последствия: например, фатальную ошибку после передачи специально сформированного параметра. |
| Application logs | Действия пользователя, бизнес-события, ошибки кода | Нужны, чтобы понять, что делал злоумышленник внутри сайта после успешного входа: какие страницы открывал, что менял, какие API вызывал. |
| Auth logs | Логины, сброс пароля, MFA, неудачные попытки входа | Позволяют связать инцидент с конкретной учётной записью и выявить компрометацию учётных данных. |
| Database logs | Подключения, запросы, ошибки, изменения схемы | Полезны при SQL-инъекциях и массовой выборке данных. Показывают, какие запросы выполнялись и к каким таблицам обращались. |
| WAF/ModSecurity logs | Блокировки, сигнатуры, подозрительный HTTP-трафик | Часто первым фиксирует атаку ещё до компрометации. Даже если атака не была заблокирована, записи WAF помогут понять, что именно пытались сделать. |
| OS/system logs | Запуск процессов, изменения служб, перезагрузки, ошибки ОС | Нужны, если атакующий вышел за пределы веб-слоя: запустил скрипт, изменил cron, повысил привилегии. |
| File integrity / audit logs | Изменения файлов, загрузка webshell, подмена скриптов | Критично при заражении сайта и модификации кода. Позволяет точно узнать, какие файлы были изменены или добавлены, и когда это произошло. |
Что обязательно должно быть в каждом событии
Хороший лог — это не просто строка текста. Он должен содержать данные, по которым можно собрать цепочку расследования и, что важно, однозначно идентифицировать действующее лицо. В логах особенно важны:
- точное время события с указанием часового пояса — без этого невозможно выстроить хронологию, особенно если серверы находятся в разных локациях;
- источник запроса или действия: IP-адрес, порт, идентификатор сессии;
- идентификатор пользователя или сессии — критично для связывания действий с учётной записью, а не просто с IP;
- имя ресурса, файла, маршрута или API-метода — что именно было целью;
- результат действия: успех, отказ, ошибка — позволяет отличить попытку от реализованной атаки;
- технические идентификаторы для корреляции между сервисами: request ID, trace ID — без них сопоставить записи из разных систем практически нереально.
OWASP отдельно подчёркивает, что запись должна отвечать на вопросы «когда, где, кто и что». Без этих четырёх опорных точек расследование быстро превращается в догадки. Добавлю от себя: для юридической значимости логов важно, чтобы они фиксировали не только технические параметры, но и действия, которые можно однозначно интерпретировать как совершённые конкретным пользователем. Это помогает, например, при обжаловании блокировки сайта, если вредоносный контент был размещён через скомпрометированную учётную запись.
Какие логи нужны в типовых сценариях
1. Подбор пароля или захват учётной записи
Смотрите:
- auth logs;
- application logs;
- access logs;
- журналы MFA, если она используется.
Ищите:
- серию неудачных входов с одного или нескольких IP — особенно если они географически разбросаны;
- смену IP-адреса или географии в рамках одной сессии — признак перехвата сессии или использования украденных cookie;
- успешный вход сразу после череды провалов — классический сценарий подбора;
- сброс пароля и последующий вход без типичного для пользователя паттерна действий;
- отключение второго фактора — часто злоумышленники, получив доступ, сразу упрощают себе дальнейший вход;
- действия под учётной записью, которые пользователь обычно не совершает: изменение платёжных реквизитов, массовая выгрузка данных, добавление новых администраторов.
На практике важно не просто найти подозрительный вход, но и сопоставить его с последующими действиями в приложении. Один только auth log не покажет, что после входа злоумышленник скачал базу клиентов.
2. SQL-инъекция
Смотрите:
- access logs;
- error logs;
- database logs;
- WAF logs.
Ищите:
- аномальные параметры в URL или POST-запросах: кавычки, UNION, SLEEP, INFORMATION_SCHEMA;
- ошибки SQL в ответах приложения — часто видны в error log как «SQL syntax error» или «unclosed quotation mark»;
- массовые одинаковые запросы с небольшими вариациями — признак автоматизированной эксплуатации;
- нетипично длинные параметры — могут содержать закодированные полезные нагрузки;
- обращение к чувствительным таблицам или полям, нехарактерное для обычной работы приложения.
Важно помнить, что WAF может блокировать только часть атак, особенно если работает в режиме обучения или мониторинга. Поэтому даже при наличии WAF нужно проверять, не прошли ли вредоносные запросы мимо него. Логи базы данных здесь незаменимы: они покажут, был ли выполнен подозрительный запрос, даже если приложение не вернуло ошибку.
3. Загрузка webshell или вредоносного файла
Смотрите:
- access logs;
- application logs;
- file integrity logs;
- OS logs;
- WAF logs.
Ищите:
- загрузку файлов в нестандартные директории — например, в /uploads/avatar.php вместо /uploads/avatar.jpg;
- неожиданные расширения: .php, .phtml, .shtml среди изображений или документов;
- последующий вызов загруженного файла — в access.log будет обращение к тому же пути, куда только что был загружен файл;
- запуск новых процессов на сервере от имени веб-пользователя — видно в системных логах;
- изменение прав доступа или владельца файла — злоумышленники часто делают webshell исполняемым.
На практике webshell часто загружается через уязвимости в плагинах CMS или формах обратной связи. Поэтому file integrity logs должны отслеживать не только ядро, но и все директории, доступные для записи веб-сервером.
4. Подмена контента на сайте
Смотрите:
- application logs;
- access logs;
- auth logs;
- file integrity logs;
- OS logs.
Ищите:
- вход администратора с необычного места — IP, страна, время суток;
- изменения CMS, шаблонов, скриптов — особенно массовые правки за короткий промежуток;
- массовое редактирование страниц или добавление новых записей с вредоносным содержимым;
- появление чужих ссылок, редиректов или скрытых вставок (например, JavaScript-майнеров);
- следы работы через панель управления или API — даже если злоумышленник не заходил в админку напрямую, он мог использовать уязвимый REST API.
Подмена контента — один из самых частых поводов для блокировки сайта Роскомнадзором. Если логи показывают, что изменения вносила учётная запись, не принадлежащая владельцу, и вход был с нехарактерного IP, это серьёзный аргумент при обжаловании.
Какой порядок проверки лучше использовать
Чтобы не утонуть в массе событий, действуйте по шагам. Хаотичный просмотр логов обычно приводит к потере времени и упущенным деталям.
Шаг 1. Зафиксировать время инцидента
Сначала определите:
- когда событие заметили — это может быть момент обращения пользователя, срабатывания алерта или обнаружения при проверке;
- когда появились первые признаки — часто атака начинается за часы или дни до того, как её заметили;
- какой часовой пояс используется в логах — если сервер в UTC, а админ смотрит по Москве, можно промахнуться на несколько часов;
- нет ли рассинхронизации времени между серверами — даже минута разницы может сделать невозможной корреляцию событий.
Если время на разных узлах не синхронизировано, расследование становится сильно сложнее: вы будете видеть событие в access.log на пять минут раньше, чем в auth.log, и не сможете уверенно связать их. Поэтому NTP — не роскошь, а обязательный элемент инфраструктуры.
Шаг 2. Сначала смотреть веб-уровень
Начинайте с access.log и error.log, потому что именно там чаще всего видна первая точка входа. Ищите аномалии вокруг предполагаемого времени инцидента: всплески ошибок, необычные запросы, обращения к редко используемым скриптам. Если сайт работает за reverse proxy, убедитесь, что access.log содержит реальные IP посетителей, а не адрес прокси.
Шаг 3. Затем сопоставить с приложением и авторизацией
После этого переходите к application logs и auth logs, чтобы понять, был ли успешный вход и какие действия совершались внутри системы. Здесь важно найти идентификатор сессии или пользователя, который фигурировал в подозрительных запросах, и отследить всю его активность.
Шаг 4. Проверить базу данных и ОС
Если есть признаки утечки или модификации, смотрите database logs и system logs. Это помогает увидеть, не вышел ли атакующий за рамки веб-приложения: например, выполнил ли команды через SQL-инъекцию или запустил обратный shell. Системные логи могут показать появление новых процессов, изменение конфигураций или попытки повышения привилегий.
Шаг 5. Сверить с защитными системами
WAF, IDS/IPS, reverse proxy и firewall часто помогают понять, что именно блокировалось, а что прошло мимо защиты. Сравните временные метки: если WAF зафиксировал атаку, но не заблокировал её (например, был в режиме обучения), а в access.log виден успешный запрос, значит, уязвимость была проэксплуатирована. Эта информация критична для последующего усиления защиты.
Типовые ошибки при сборе логов
Самые частые проблемы в реальных расследованиях такие:
- логи не включены заранее — когда инцидент уже произошёл, включать логирование поздно;
- хранится только access.log без error.log и application logs — это даёт лишь треть картины;
- журналы перезаписываются слишком быстро — например, ротация настроена на сутки, а инцидент обнаружили через неделю;
- время на серверах не синхронизировано — события из разных источников невозможно выстроить в единую цепочку;
- логи лежат на том же сервере, который могли скомпрометировать — злоумышленник может их подчистить или удалить;
- в журналах нет ID пользователя, сессии или запроса — нельзя понять, кто именно выполнил действие;
- нечем сопоставить события между несколькими сервисами — нет общего идентификатора транзакции или запроса.
Что это ломает на практике
- Нельзя доказать, кто именно выполнил действие — особенно критично, если сайт используется несколькими администраторами или контент-менеджерами.
- Нельзя восстановить последовательность атаки — остаются только разрозненные фрагменты.
- Нельзя отделить атаку от обычной ошибки — можно принять легитимное действие за вредоносное и наоборот.
- Нельзя оценить объём ущерба — сколько данных просмотрено или скачано, какие файлы изменены.
- Нельзя нормально подготовить отчёт для руководства или регулятора — а в случае утечки персональных данных уведомление Роскомнадзора без подтверждённых фактов может обернуться дополнительными вопросами.
Как организовать хранение логов правильно
Для расследования важны не только сами журналы, но и условия их хранения. Если логи можно бесследно удалить или изменить, их ценность стремится к нулю.
Базовые правила
- хранить логи централизованно, а не только на одном сервере — отдельный log-сервер или облачное хранилище с ограниченным доступом;
- ограничить доступ к журналам — только уполномоченные сотрудники, желательно с двухфакторной аутентификацией;
- включить резервное копирование — чтобы даже при компрометации основного хранилища осталась копия;
- сохранять историю достаточно долго для ретроспективного анализа — минимальный срок зависит от специфики, но для многих проектов разумно хранить логи не менее 30–90 дней, а критичные события — до года;
- защищать логи от подмены и удаления — использовать append-only файловые системы или WORM-хранилища;
- использовать единый формат и нормальную синхронизацию времени — все системы должны писать логи в UTC или с явным указанием пояса.
Практический минимум для сайта
- web-сервер и приложение отправляют логи на отдельный сервер (можно через syslog или агенты);
- система синхронизирует время через NTP с надёжными источниками;
- критичные события дублируются в защищённое хранилище — например, в облачный бакет с политикой неизменяемости;
- для расследования сохраняются не только ошибки, но и успешные действия — иначе вы не увидите, что атакующий сделал после входа;
- логи не удаляются автоматически раньше, чем это позволяет политика безопасности — ротация должна быть настроена с запасом по времени.
Отдельно отмечу: для сайтов, обрабатывающих персональные данные, требования к логированию событий безопасности закреплены в приказах ФСТЭК и нормативных актах к 152-ФЗ. Там чётко сказано, что нужно фиксировать попытки доступа, изменения прав и другие события. Игнорирование этих требований может привести не только к проблемам при расследовании, но и к административной ответственности.
На что смотреть в журналах в первую очередь
Вот короткий чек-лист для первичного анализа. Если вы видите хотя бы один из этих признаков, стоит копнуть глубже:
- всплеск 404, 403 или 500 с одного IP — часто признак сканирования или фаззинга;
- массовые одинаковые запросы — автоматизированная атака;
- необычные user agent — скрипты, старые версии браузеров, отсутствие UA;
- попытки обхода фильтров и кодирования параметров: двойное URL-кодирование, Unicode-эквиваленты;
- входы в нерабочее время — особенно если учётная запись обычно активна днём;
- новые администраторы или смена ролей — часто цель злоумышленника после получения доступа;
- необычные выгрузки данных: экспорт в CSV, обращение к API отчётов;
- изменения файлов сайта — особенно в директориях тем, плагинов, загрузок;
- ошибки после подозрительного запроса — например, синтаксическая ошибка SQL сразу после GET-параметра с кавычкой;
- перезапуски сервисов без понятной причины — могут маскировать закрепление в системе.
Что должно быть у команды до инцидента
Хорошее расследование начинается не после взлома, а заранее. Когда инцидент уже произошёл, настраивать логирование поздно. Полезно заранее настроить:
- логирование на уровне веб-сервера, приложения, базы и ОС — с детализацией, достаточной для расследования;
- централизованный сбор журналов — хотя бы на отдельный сервер или в SIEM-систему, если позволяет бюджет;
- единый формат времени — UTC на всех узлах;
- алерты на подозрительные паттерны — хотя бы на резкий рост ошибок или множественные неудачные входы;
- хранение критичных логов вне основного боевого сервера — чтобы злоумышленник не мог их уничтожить;
- регулярную проверку, что логи действительно пишутся — не реже раза в месяц убеждаться, что диски не переполнены, агенты работают, а в журналах появляются свежие записи.
Также рекомендую иметь задокументированный порядок действий при инциденте: кто за что отвечает, где лежат логи, как получить к ним доступ. В стрессовой ситуации это экономит часы.
Короткий вывод
Для расследования инцидента на сайте нужны не один-два файла, а связка журналов: веб-сервер, приложение, авторизация, база данных, WAF и системные логи. Чем лучше они коррелируются между собой, тем быстрее можно понять, как именно произошёл инцидент, что затронуто и как закрыть уязвимость. И помните: логи — это не только технический инструмент, но и юридическая страховка. Когда сайт попадает под блокировку или становится источником утечки, именно журналы событий часто становятся решающим аргументом, подтверждающим вашу добросовестность и позволяющим переложить ответственность на реального нарушителя.
FAQ
Какие логи самые важные в первую очередь?
В первую очередь — access.log, error.log, application logs и auth logs. Они быстрее всего показывают точку входа и успех атаки. Без них вы даже не поймёте, был ли инцидент вообще.
Достаточно ли одного access.log?
Нет. Он показывает запросы, но не объясняет, что произошло внутри приложения, базы данных и системы. Вы увидите, что кто-то обратился к /admin, но не узнаете, вошёл ли он, что изменил и какие данные скачал.
Нужно ли хранить логи долго?
Да, иначе ретроспективное расследование будет невозможным. Срок хранения зависит от политики компании и требований к безопасности, но удалять журналы слишком рано — плохая практика. Для многих проектов минимальный разумный срок — 30 дней, но лучше ориентироваться на 90 дней и более, особенно если сайт обрабатывает чувствительные данные.
Что делать, если логи уже удалены?
Тогда придётся восстанавливать картину по остаточным данным: резервным копиям, WAF, DNS, прокси, базе данных и внешним системам мониторинга. Но полнота расследования будет ниже, а доказательная сила таких материалов — слабее. Именно поэтому так важно настроить хранение логов заранее.
Можно ли расследовать инцидент без централизованного логирования?
Можно, но это долго, неполно и рискованно. Вам придётся вручную собирать файлы с разных серверов, синхронизировать время, искать соответствия. Централизованный сбор резко повышает шансы восстановить цепочку событий и доказать причину инцидента, а также экономит часы работы администратора.