Средний бизнес поручил независимый аудит сайта на Bitrix в день, когда инициировал расторжение договора с прежним SEO-подрядчиком. За 14 часов активной работы были обнаружены скрытый канал доступа в корне сайта, модуль перехвата уведомлений о заявках, подменённый счётчик Метрики и десяток открытых архивов с резервными копиями.
Поручение на аудит поступило в день, когда заказчик инициировал расторжение договора с прежним SEO-подрядчиком.
Задача была сформулирована узко: проверить состояние сайта на момент перехода к новому подрядчику и зафиксировать всё, что обнаружится. Заказчику было важно, чтобы аудит выполнял исполнитель, не связанный ни с прежней, ни с будущей командой — то есть чтобы выводы были независимыми.
Внешние ограничения определили темп:
Поэтому методика строилась с приоритетом на сохранение доказательств и минимизацию необратимых действий.
Критическая фаза от триггерного сообщения до проверки ловушки — 9 часов 31 минута. Среднее время отклика заказчика на запросы исполнителя в активной фазе — около двух минут. Без такого темпа бизнес-согласований компрессия аудита в одни сутки была бы невозможна.
Перед детальным разбором — хронология значимых событий в инфраструктуре сайта, восстановленная по HTTP-заголовкам, API Яндекса и временным меткам в базе данных.
Все даты получены из публичных или принадлежащих заказчику источников. Любой может перепроверить.
| Дата | Событие |
|---|---|
| 02.01.2023 | Заказчиком создан собственный счётчик Яндекс.Метрики |
| 06.03.2023 | Стандартный файл spread.php существует в служебной директории CMS (легитимная обёртка) |
| 20.03.2024 | Создан архив с резервной копией сайта 12 ГБ. В корне сайта файла spread.php ещё нет |
| 27.03.2024 | В HTML-коде сайта подменён счётчик Метрики на чужой идентификатор |
| 11.04.2024 | В базе данных отключена капча на четырёх формах. В тот же час — волна ботовых заявок |
| 30.05.2024 | Изменён robots.txt — снят запрет индексации служебной директории CMS (день в день со вступлением в силу 420-ФЗ) |
| 17.09.2025, 17:18 | Установлен сторонний модуль перехвата уведомлений о заявках с сайта |
| 24.03.2026 | Последний вход прежнего подрядчика в админку. В этот же день создана резервная копия сайта 14 ГБ |
| 27.04.2026 | Заказчик передаёт доступы исполнителю |
| 29.04.2026, 22:00 | В корне сайта обнаружен PHP-скрипт spread.php — скрытый канал доступа |
Главная находка обнаружена в первые минуты сканирования: архив /public_html.zip объёмом 12 ГБ был доступен по прямому адресу без авторизации.
Внутри — полная файловая структура сайта: исходный код, CMS-модули, конфиги, база данных, выгрузки заявок, фотоархив. Срок действия в HTTP-заголовках был выставлен до 29 апреля 2027 года — то есть архив должен был оставаться доступным ещё год.
При построчном анализе SQL-дампа из утёкшего архива установлено: реальных субъектов персональных данных в утечке — 26 уникальных лиц. С поправкой на ботовые записи, тестовые заявки самого подрядчика и групповые дубли. Это и есть юридически значимый объём — категория «Б» по ПП №1286, упрощённая процедура уведомления (менее 100 субъектов).
Помимо главного архива в корне сайта обнаружены ещё десять малых архивов с резервными копиями и три PHP-скрипта без авторизации.
Архивы (auth.zip, cabinet.zip, cart.zip, gallery.zip, info.zip, news.zip, product.zip, projects.zip, sales.zip, tariffs.zip) — фрагменты разделов сайта на разных датах: от ноября 2022 до февраля 2023. Скрипты — fixit.php, spread.php, readme.php — не относятся к стандартной поставке CMS и не имеют контроля доступа.
Один из служебных скриптов оказался полноценным скрытым каналом доступа: публичный адрес без авторизации, при обращении к которому пароль главного администратора заменяется на пароль, прописанный прямо в коде этого скрипта. То есть атакующий заранее знает, на какое значение сбросится пароль, — и в любой момент может войти под админом, обратившись к одному адресу. Этот тип закладок принято называть «теневым сбросом»: скрытый механизм восстановления доступа, переживающий любую штатную смену паролей со стороны владельца.
В стандартной поставке Bitrix есть легитимный файл bitrix/spread.php — однострочная обёртка для модуля массовых рассылок:
Этот файл существует в любой инсталляции Bitrix с начала 2010-х. Любой разработчик с опытом видел его сотни раз и не относится к нему с подозрением.
Атакующий использовал то же самое имя — spread.php, — но положил свой PHP в корень сайта, где штатного файла с таким именем быть не должно. При беглом просмотре корневого перечня файл выглядит как ожидаемый системный — это эксплуатация привычки восприятия Bitrix-разработчика.
В резервной копии сайта от 20 марта 2024 года в корне такого файла нет — значит, добавлен позднее этой даты. Размер файла — 276 863 байта, в основной части — копия исходного HTML главной страницы для маскировки ответа; меньшая часть кода выполняла подмену пароля.
Нейтрализация. Удалять файл напрямую было нельзя — в этом случае терялась возможность увидеть, кто именно его вызывает. Поэтому спустя 30 минут после обнаружения файл был заменён на ловушку того же имени:
27 марта 2024 года счётчик Метрики на сайте был заменён на идентификатор, не принадлежащий заказчику. С этой же даты в БД сайта начали поступать заявки с признаками автоматизированного поведения.
Из 386 заявок, накопленных в базе за период, 87 пришлись на апрель 2024 года и имели типичные маркеры накрутки: одинаковые временные интервалы, шаблонные имена, отсутствие источника перехода. Реальный поток заявок до подмены счётчика — 2-13 в месяц.
Сама по себе подмена счётчика делает аналитику в Метрике непригодной для принятия решений: владелец сайта видит чужую картину трафика, а накрутка ботов — встроена в контур чужого аккаунта.
webprostor.smtp — почему «за 4 месяца — два клиента»17 сентября 2025 года в 17:18 МСК на сайт установлен сторонний модуль, перехватывающий уведомления о заявках. Технически он подменял механизм отправки исходящей почты: письма уходили через сторонний почтовый сервер с переписанным полем «От» и без сохранения журнала отправок. Для владельца это означает простую вещь — заявка на сайте оставлена, но уведомление о ней до него не доходит.
Заказчик передал служебный лог самого модуля (webprostor.smtp_logs.xls) за период с 17 сентября 2025 года по 12 марта 2026 года. По этому логу — 20 попыток отправки уведомлений о заявках; в каждой из 20 строк поле «Отправлено» пустое, что соответствует ошибке доставки. То есть за полгода 20 потенциальных клиентов оставили заявки на сайте, и ни один ответ от компании до них не дошёл.
Это объяснило субъективное наблюдение заказчика, сформулированное в переписке как «за 4 месяца — два клиента». Заявки приходили, но уведомления о них до владельца не доходили — а у тех немногих, кто всё же получил ответ, поле отправителя выглядело подменённым.
Динамика реальных заявок до и после установки модуля — по записям в базе данных сайта:
| Период | Заявок в месяц |
|---|---|
| август 2025 | 13 (до установки модуля) |
| сентябрь 2025 | 7 (5 до 17-го числа + 2 после) |
| октябрь 2025 | 1 |
| ноябрь – декабрь 2025 | 0 |
| январь – март 2026 | 1 – 3 |
Обрыв потока реальных заявок начался в день установки модуля и не восстановился до момента аудита.
Пять технических правок инфраструктуры сайта в 2024-2025 годах пришлись строго на окна между принятием поправок к 152-ФЗ и их вступлением в силу.
Что вступало в силу:
| Дата правки | Что сделано на сайте | Закон |
|---|---|---|
| 07.03.2024 | Скрыты три поля контактной формы (email, тип запроса, текст) | 420-ФЗ, в силу 30.05.2024 |
| 27.03.2024 | Подмена счётчика Метрики | 420-ФЗ, в силу 30.05.2024 |
| 11.04.2024 | Отключена капча на четырёх формах — открыта возможность ботового потока | 420-ФЗ, в силу 30.05.2024 |
| 30.05.2024 | Изменён robots.txt — снят запрет индексации служебной директории CMS | 420-ФЗ — день в день со вступлением в силу |
| 17.09.2025 | Установлен модуль перехвата уведомлений о заявках | 134-ФЗ, принят 30.05.2025, в силу 30.11.2025 |
Что объединяет эти правки. Каждая отдельная — обычная задача подрядчика: «настроить капчу», «обновить счётчик», «добавить SMTP-модуль». Их совокупность во времени — нет.
Каждая правка делает сайт менее эффективным как бизнес-канал: формы упрощаются, заявки не доходят, аналитика уходит чужому. И одновременно — снижает фактический объём реальных персональных данных, попадающих в БД сайта: меньше полей в формах, ботовый поток разбавляет реальные заявки фейковыми именами и телефонами, перехваченные уведомления отрезают канал реального общения с клиентом.
Юридическую ответственность по новым, более строгим нормам несёт оператор сайта — то есть заказчик. Чем меньше у него в БД реальных ПД, чем менее очевиден поток заявок — тем ниже его потенциальные обязательства и риски при проверке. На бумаге это выглядит как «подрядчик помог снизить риски». На практике — это снижение работает за счёт бизнес-функции сайта: меньше реальных заявок, меньше реальных клиентов, меньше выручки.
Случайная синхронизация пяти разнородных правок с двумя законодательными окнами на трёхлетнем интервале — статистически малое событие. Интерпретацию этого совпадения исполнитель оставляет заказчику.
Методика строилась на трёх принципах: доказательства прежде всего, нейтрализация без удаления, превентивная защита параллельно с аудитом.
Каждая находка зафиксирована тремя способами: прямой HTTP-снимок ответа сервера, снимок Wayback Machine для исторической верификации, SHA-256 на скачанные артефакты. Итоговый архив доказательств — 33 ГБ, 16 разделов, хеш на каждый файл; ссылки и фрагменты включены в отчёт со ссылками на индекс архива.
Скрытый канал доступа не был удалён — его место заняла ловушка того же имени. Это сохранило возможность видеть попытки повторного использования и одновременно лишило закладку рабочего эффекта. Открытые архивы с резервными копиями и служебные скрипты также не удалялись на сервере немедленно: сначала зафиксированы снимки, затем доступ к ним закрыт через nginx.
В CMS были обнаружены четыре «лишних» административные учётные записи. Поскольку процедура расторжения договора с прежним подрядчиком ещё не была завершена, эти записи удалены превентивно — до завершения процедуры, чтобы исключить возможность последующего входа. Пароль базы данных сменён синхронно, резервная копия сайта (12 ГБ) и четыре tar-архива из служебной директории CMS сохранены локально.
Архивы с резервными копиями, служебные скрипты, перехват уведомлений, подмена счётчиков — всё это не видно из админки CMS. Без специального аудита смена подрядчика проходит так, как будто никаких следов не остаётся.
Удалить скрытый канал доступа — значит отказаться от шанса увидеть, кто его использует. Нейтрализация с сохранением видимости — рабочий компромисс между безопасностью и наблюдением.
Между сообщением о расторжении и фактическим аннулированием доступов проходит обычно несколько дней. Этого времени достаточно для добавления, удаления или изменения файлов, которые не будут зафиксированы в журналах. Превентивная зачистка доступов в это окно — стандарт.
Аудит передачи имеет смысл провести в первые одну-две недели после расторжения, пока следы свежи и доступы ещё в активной памяти прежней команды. Опишите ситуацию в одной строке — отвечу в течение рабочего дня. Конфиденциальность подразумевается, соглашение о неразглашении — по запросу.