Заражение прячется от администратора и показывает себя только посетителям из поиска. Как за 30 минут проверить сайт в панелях вебмастера, в файлах и в базе, вылечить его в правильном порядке и снять метку в выдаче.
Симптом почти всегда одинаковый. С закладки сайт открывается нормально, а если зайти на него из поиска с телефона, вместо страницы появляется реклама казино. Владелец проверяет с рабочего компьютера, ничего не находит и еще месяц считает, что клиентам померещилось.
Так устроено большинство современных заражений. Вредоносный код смотрит на
Проверить сайт на вирусы можно за
7 признаков, что сайт заражен
Ни один признак сам по себе не приговор, но 2 совпавших — уже повод проверять файлы.
- Метка в поиске. Рядом со сниппетом в Яндексе появляется предупреждение о том, что сайт может угрожать безопасности. В Google — «Этот сайт может нанести вред вашему компьютеру».
- Красный экран браузера. Chrome или Яндекс.Браузер показывают заглушку «Обманчивый сайт впереди» вместо страницы. Это срабатывают базы Safe Browsing, и они общие для многих браузеров.
- Резкая просадка трафика из поиска. Не плавное снижение на
10–15 %, а обрыв за1–2 дня. Особенно если позиции на месте, а переходов нет. - Письмо от хостинга. Провайдер сообщает о вредоносных файлах в аккаунте или ограничивает сайт. Обычно это самый ранний сигнал, потому что антивирус на стороне хостинга сканирует диск регулярно.
- Чужие страницы в индексе. Наберите в поиске запрос вида
site:вашдомен.ruи пролистайте выдачу до конца. Разделы про кредиты, лекарства и ставки, которых вы не создавали, — это дорвеи, размещенные на вашем домене. - Скачки нагрузки. Хостинг жалуется на превышение лимитов по процессорному времени или по числу писем. Второе означает, что с сайта рассылают спам.
- Домен в черных списках рассылки. Письма с сайта перестали доходить, а в отчетах о доставке появились отказы со ссылкой на репутацию домена. Мы разбирали похожую диагностику в материале о том, почему письма с сайта уходят в спам.
Отдельно про панель вебмастера: если сайт добавлен в Яндекс.Вебмастер и Search Console, письмо об угрозе придет туда раньше, чем метка появится в выдаче. Если сайт туда не добавлен — добавьте прямо сейчас, это 10 минут и единственный бесплатный канал раннего оповещения.
5 типов заражения и где их искать
Понимание типа сокращает поиск: у каждого варианта свое привычное место обитания.
| Тип | Как проявляется | Где искать |
|---|---|---|
| Скрытые | Позиции падают, в коде страницы есть блок ссылок с нулевой высотой или цветом фона | Шаблон, подвал, блоки в базе данных |
| Условный редирект | Переброс на чужой сайт только с мобильных или только при переходе из поиска | .htaccess, index.php, инлайновый JS в шаблоне |
| Внешне ничего не видно, но злоумышленник в любой момент возвращается | Папки загрузок, кеша, временных файлов; файл с безобидным именем среди картинок | |
| Дорвеи | Сотни новых страниц в индексе на посторонние темы | Новые каталоги в корне, подмененный sitemap, генерация «на лету» через один скрипт |
| Вредоносный код для посетителей | Браузер ругается, антивирус клиента блокирует страницу | Подключение стороннего скрипта в шапке или подвале |
Самый неприятный из списка —
По наблюдению справки Яндекса, вредоносные вставки чаще всего лежат в самом начале или в самом конце страницы, либо сразу за открывающим тегом body, а отдельная популярная цель взломщиков — файл .htaccess, куда дописывают редирект (Яндекс.Вебмастер, справка «Обнаружение вредоносного кода»).

Проверка за 30 минут: 5 шагов по порядку
Порядок важен: сначала бесплатные внешние источники, потом свои файлы. Так вы быстрее поймете масштаб.
- Яндекс.Вебмастер. Раздел «Диагностика» → «Безопасность и нарушения». Если Яндекс
что-то нашел, здесь будет тип угрозы и примеры зараженных адресов. Это самая полезная точка входа: вы сразу получаете список страниц, с которых начинать. - Google Search Console. Раздел «Проблемы безопасности». Google и Яндекс детектируют разное, поэтому проверяйте оба.
- Антивирус хостинга. В панели управления почти у всех провайдеров есть сканер файлов. Запустите полную проверку и сохраните отчет, не нажимая сразу «Лечить»: список путей понадобится дальше.
- Штатные средства CMS. В «
1С-Битрикс » это модуль «Проактивная защита» и «Сканер безопасности»: они проверяют целостность системных файлов, настройки сессий, права доступа и наличиевеб-фаервола . Контроль целостности отвечает на главный вопрос — какие файлы ядра изменились по сравнению с эталоном. - Взгляд снаружи. Откройте свой сайт с телефона в режиме инкогнито, перейдя из поисковой выдачи, а не по прямой ссылке. Половина условных редиректов ловится именно так.
Если после этих 5 шагов ничего не нашлось, а признаки заражения есть, дальше идет ручная проверка файлов. Она требует доступа по SSH или хотя бы файлового менеджера в панели хостинга.
Ручной поиск: где прячется код
Ручная проверка строится на 2 идеях: вредоносный файл почти всегда свежий и почти всегда содержит характерные конструкции.
Свежие файлы. Посмотрите, что менялось за последнюю неделю: find /путь/к/сайту -type f -name "*.php" -mtime -7 -printf "%TY-%Tm-%Td %p\n" | sort
find /путь/к/сайту -type f -name "*.php" -mtime -7 -printf "%TY-%Tm-%Td %p\n" | sortЕсли вы неделю не выкладывали обновления, а список длинный — это ответ. Дату первого измененного файла запомните: с нее начнется расследование по логам.
Характерные конструкции. Вредоносный код обфусцируют, чтобы он не читался глазами, и это его же и выдает:
grep -rn --include="*.php" -E "eval\(|base64_decode|gzinflate|str_rot13|assert\(|\\\$_(POST|GET|COOKIE)\[.\]\(" /путь/к/сайту | head -50 Здесь важно не увлечься. Часть совпадений будет ложной: base64_decode встречается в нормальных библиотеках, а eval — в старых модулях. Смотрите не на сам факт совпадения, а на контекст: длинная строка из случайных символов в файле, который лежит в папке с картинками, — это точно не библиотека.
Места, где PHP быть не должно. Каталоги загрузок, кеша, временных файлов, папки с изображениями. Один запрос:
find /путь/к/сайту/upload -name "*.php*" -o -name "*.phtml" Пустой вывод — хорошо. Любой результат — разбирайтесь.
База данных. Заражение живет не только в файлах. Поищите в таблицах с контентом вставки <script, <iframe и display:none — в текстах статей, описаниях товаров, настройках шаблона и в блоках, которые выводятся на всех страницах.
Задания cron. Их проверяют реже всего, а зря: типовой сценарий — раз в час скачивать свежую версию шелла с чужого сервера. Даже полностью вычищенный сайт заражается заново к вечеру.
Лечение: порядок действий
Порядок здесь важнее скорости. Если начать с удаления файлов, вы потеряете следы и не найдете точку входа.
- Снимите копию зараженного сайта. Файлы и дамп базы целиком, в архив за пределами сервера. Это материал для расследования, а заодно страховка, если чистка
что-то сломает. - Закройте доступ. Смените пароли: панель хостинга, SSH, FTP, база данных, администраторы CMS. Отдельно проверьте список пользователей с правами администратора — лишние учетные записи создают при взломе почти всегда. Включите двухфакторную аутентификацию там, где она есть.
- Восстановите ядро из чистого дистрибутива. Файлы CMS и модулей замените официальной версией целиком, а не правьте по одному. Вручную имеет смысл чистить только то, чего нет в дистрибутиве: собственный шаблон, кастомные компоненты, загруженные файлы.
- Найдите точку входа. Возьмите дату первого измененного файла и посмотрите в этот интервал
access.log: обычно видноPOST-запрос к странному адресу или серию обращений к админке. Без этого шага чистка превращается в лотерею. - Проверьте базу и cron. Удалите посторонние задания, вычистите вставки в контенте.
- Обновите CMS и модули. Взлом почти всегда идет через известную уязвимость в старой версии, а не через подбор пароля. Про то, почему уязвимостей становится больше, у нас есть отдельный разбор.
- Зафиксируйте чистое состояние. Снимите контрольные суммы файлов или включите контроль целостности в CMS. Со следующего раза вы увидите изменение в тот же день, а не через месяц.
Про восстановление из резервной копии стоит сказать отдельно, потому что это самый популярный совет и самая частая ошибка. Бэкап недельной давности может быть уже зараженным: шелл лежит в файлах с прошлого месяца, а активничать начал на этой неделе. Откатываться имеет смысл только на дату заведомо раньше первого подозрительного изменения, и после отката все равно нужно закрыть уязвимость, через которую пришли.

Ошибки, из-за которых сайт заражается повторно
Повторное заражение через
- Почистили файлы, не сменили пароли. Если увели доступ к FTP, вычищенный сайт заражают обратно за минуты.
- Не заглянули в cron и в базу. Смотри выше: восстановление шелла по расписанию сводит на нет всю работу.
- Не нашли точку входа. Дыру в модуле не закрыли, значит через нее зайдут снова.
- Оставили старую версию CMS. «Обновимся потом, сейчас некогда» — это перенос той же проблемы на месяц вперед.
- Удалили все подозрительное разом. Половина сайтов после самостоятельного лечения приезжает к нам не с вирусом, а с белым экраном: вместе с вредоносным кодом снесли рабочие файлы.
- Хранят резервные копии в корне сайта. Архив, доступный по прямой ссылке, — подарок: вместе с ним утекает и база с паролями пользователей.
Мое мнение, за которое иногда спорят: отдельные «антивирусные» плагины для CMS создают ложное спокойствие. Они ищут по базе сигнатур, а
Как снять метку в поиске и предупреждение браузера
Санкции снимаются не автоматически: нужно сообщить поисковику, что вы закончили.
В Яндексе это делается на той же странице «Безопасность и нарушения»: в блоке с описанием нарушения опишите, что именно вы исправили, и нажмите «Я все исправил». Запрос уходит на перепроверку, ограничения снимут, если претензий не осталось (справка Яндекс.Вебмастера). В Google — раздел «Проблемы безопасности» и кнопка запроса проверки.
Точных сроков ни один из поисковиков не гарантирует. На практике перепроверка занимает от суток до нескольких дней, но есть нюанс: если отправить запрос раньше времени и проверка провалится, следующая попытка обойдется дороже по времени. Сначала убедитесь, что код действительно удален, и только потом жмите кнопку.
Предупреждение в браузере снимается тем же путем: базы Safe Browsing обновляются после успешной перепроверки, отдельно писать никуда не нужно.
Базовый минимум, чтобы не возвращаться к теме
Все перечисленное настраивается один раз и дальше работает само.
- Обновления по расписанию. Раз в месяц, а критические патчи безопасности — в день выхода.
- Запрет исполнения PHP в папках загрузок. Одна директива в конфигурации
веб-сервера закрывает самый популярный способ залить шелл. - Двухфакторная аутентификация для администраторов. В «
1С-Битрикс » входит в «Проактивную защиту», отдельно платить не нужно. - Отдельные учетные записи вместо общей. Когда подрядчик уходит, вы отключаете его доступ, а не меняете пароль всей команде.
- Резервные копии вне сервера. Минимум 7 ежедневных и 4 еженедельных, с проверкой восстановления хотя бы раз в квартал. Копия, которую ни разу не разворачивали, — это надежда, а не бэкап.
- Контроль целостности и мониторинг. Уведомление об изменении файлов ядра приходит вам, а не выясняется из письма хостинга.
В
Частые вопросы
Может ли антивирус хостинга удалить рабочие файлы? Да, ложные срабатывания случаются, особенно на самописных модулях и обфусцированных лицензионных скриптах. Поэтому режим автоматического удаления лучше не включать: пусть сканер составляет отчет, а решение принимает человек. Перед любой массовой чисткой делайте копию. Частично. Переустановка вернет чистое ядро, но не тронет базу данных, папку загрузок, шаблон и задания cron — а заражение чаще всего живет именно там. Без поиска точки входа переустановка дает передышку на несколько дней. Пароли подбирают редко. Типовые пути: уязвимость в устаревшем модуле, украденный доступ с зараженного компьютера сотрудника, скомпрометированный аккаунт на общем хостинге, где соседний сайт заражен и права на файлы выставлены слишком широко. Да. По части 3.1 статьи 21 закона № Простой случай — Поможет ли просто переустановить CMS?
Сайт заразился, хотя пароли сложные. Как?
Нужно ли
Сколько занимает лечение?
Что сделать сегодня
Если сайт уже помечен поиском — начинайте с копии и смены паролей, только потом чистите. Если признаков заражения нет, потратьте полчаса на профилактику: добавьте сайт в обе панели вебмастера, запустите сканер хостинга, проверьте папку загрузок на
Если разбираться самому некогда, а сайт приносит деньги, разумнее отдать это на поддержку: там проверка целостности и обновления идут по регламенту, а не когда вспомнили. Что именно входит в такой регламент, мы разбирали в статье про технический аудит сайта.


