Сайт взломали: что делать в первые сутки
Если вы открыли эту страницу, скорее всего, времени на чтение у вас немного. Ниже — порядок действий: что сделать сейчас, что через час, а что можно отложить до завтра. Главная ошибка первых минут — начать всё удалять. Разберём, почему это чаще вредит, и что делать вместо этого.
Сначала убедитесь, что это действительно взлом
Не каждая поломка сайта — взлом. Но есть признаки, которые почти всегда означают именно его:
- Браузер или поисковик помечает сайт опасным. Красный экран Chrome, предупреждение в выдаче Яндекса, отметка «сайт может угрожать безопасности».
- Пришло письмо от хостера — или хостинг уже отключил сайт. Хостеры видят рассылку спама и вредоносные файлы раньше владельца.
- На сайте появились чужие страницы. Обычно это статьи про кредиты, ставки, аптеки или дубли на латинице. Часто они видны только поисковому роботу, а вам открывается обычная главная.
- Переадресация на посторонний ресурс. Особенно если она срабатывает не всегда: только с мобильного, только при переходе из поиска, только для тех, кто зашёл впервые.
- С вашего домена уходит спам. Признак — поток писем «сообщение не доставлено» на почту, на которую вы ничего не отправляли.
- Резкий рост нагрузки. Сервер стал тормозить без роста посещаемости — сайт используют как чужой ресурс: для рассылки, майнинга или атак на другие сайты.
- Незнакомые администраторы в панели. Учётная запись, которую вы не создавали, — самый однозначный признак из всех.
Один признак может объясняться и другим: падение позиций бывает от смены алгоритма, ошибка 500 — от кривого обновления плагина. Но два и более признака вместе — это взлом, и дальше действуйте по порядку.
Первые часы: по шагам
Шаг 1. Снимите копию — до того как начнёте лечить
Самое сильное желание в первый час — снести всё лишнее и восстановиться из резервной копии. Именно это чаще всего приводит ко второму взлому через неделю. Вместе с вредоносными файлами вы уничтожаете единственное доказательство того, как злоумышленник попал внутрь. Дыру вы не закроете, а он вернётся тем же путём.
Поэтому сначала — архив: файлы сайта, дамп базы данных и, что важнее всего,
журналы веб-сервера (это текстовые файлы, куда сервер записывает каждое
обращение к сайту — обычно access.log и error.log). Журналы затираются
по расписанию, часто за считанные дни, и восстановить их потом нельзя. Скачайте архив на свой
компьютер, а не оставляйте на том же сервере.
Шаг 2. Закройте сайт от посетителей
Пока сайт заражён, каждый посетитель рискует, а поисковики фиксируют новые вредоносные страницы. Включите режим технических работ или отдавайте заглушку с кодом 503 — так поисковые системы поймут, что это временно, и не выбросят страницы из индекса. Полностью удалять сайт или менять DNS не нужно.
Шаг 3. Оборвите доступ, и только потом меняйте пароли
Порядок здесь принципиален, и его почти всегда нарушают. Если просто сменить пароль администратора, злоумышленник этого даже не заметит: он давно не пользуется формой входа. У него на сервере лежит веб-шелл — небольшой файл, который позволяет выполнять команды прямо через браузер, без всякого пароля. Или активная сессия в панели. Или ключ доступа к серверу, который вы не считали паролем.
Поэтому последовательность такая:
- Завершите все активные сессии. В большинстве CMS и панелей хостинга есть кнопка «выйти на всех устройствах». Без этого смена пароля не выкидывает того, кто уже внутри.
- Отзовите ключи доступа: SSH-ключи на сервере, доступы FTP и SFTP, токены API, ключи интеграций и платёжных сервисов, пароли от почтовых ящиков на домене.
- Смените пароли — панели хостинга, всех администраторов CMS, базы данных, почты, реестра доменов. Каждый пароль новый и уникальный: если один и тот же пароль стоял в трёх местах, скомпрометированы все три.
- Меняйте пароли с чистого компьютера. Если утечка произошла с заражённой машины, новые пароли уедут туда же в ту же минуту.
Шаг 4. Проведите ревизию учётных записей
Откройте список пользователей CMS и удалите всех, кого не узнаёте, — особенно с правами администратора. Проверьте заодно то, что обычно забывают: перенаправления на почтовых ящиках домена (популярный способ тихо получать письма о сбросе пароля), список ключей SSH на сервере, подключённые сторонние приложения и вебхуки, доступы, выданные подрядчикам.
Шаг 5. Посмотрите, когда менялись файлы
Это самый быстрый способ понять масштаб. Отсортируйте файлы сайта по дате изменения — в файловом менеджере панели хостинга это делается в один клик. Файлы, изменённые в подозрительный день, и есть карта заражения. Заодно вы получите примерное время взлома, а по нему — нужный кусок журналов.
Обращайте внимание на файлы .php в каталогах, где им быть незачем: в папке загрузок,
среди картинок, в кэше. Легальный сайт не выполняет код из папки с фотографиями товаров.
Как найти точку входа
Пока не понятно, как вошли, лечение бессмысленно. Искать стоит в четырёх местах.
Журналы веб-сервера. Возьмите день, которым датированы изменённые файлы, и найдите обращения к ним. Характерная картина: несколько десятков запросов с одного адреса за минуту (это перебор), затем один успешный POST-запрос к странице входа или к файлу, о котором вы впервые слышите. Если сами читать журнал не готовы — это ровно тот фрагмент, который нужно отдать специалисту.
Устаревшая CMS, плагины и темы. Самая частая причина. Уязвимости в популярных плагинах публикуются постоянно, а вместе с ними — готовые инструменты для эксплуатации; автоматика обходит интернет и пробует их подряд, без выбора жертвы. Посмотрите, что не обновлялось дольше всего, и особенно — что было отключено, но не удалено: отключённый плагин всё равно лежит на диске, и его файлы доступны по прямой ссылке.
Украденный пароль. Взлома сайта могло не быть вовсе: пароль от FTP или панели увели с компьютера разработчика. Многие FTP-клиенты хранят сохранённые пароли почти в открытом виде, и вредоносные программы забирают их первым делом. Признак — вход был сразу успешным, без всякого перебора, с обычного пользовательского адреса. В этом случае проверьте антивирусом все машины, с которых заходили на сайт, включая компьютеры подрядчиков.
Соседи по хостингу. На дешёвом виртуальном хостинге сайты иногда лежат так, что заражение переползает с одного на другой. Если у вас на аккаунте несколько сайтов, проверяйте все сразу.
Если точку входа найти так и не удалось, есть рабочий запасной вариант: развернуть CMS начисто, перенести туда только содержимое (тексты, изображения, базу товаров и заказов) и вручную поставить нужные плагины из официальных источников. Переносить старые файлы темы и плагинов целиком нельзя — вместе с ними обычно переезжает и шелл.
Что сделать до того, как вернуть сайт в строй
Момент, когда всё выглядит вылеченным, — самый опасный. Сайт работает, паника прошла, и кажется, что можно снимать заглушку. Перед этим стоит закрыть то, что позволило взлому случиться.
- Обновите всё: ядро CMS, плагины, темы, версию PHP. Обновление после лечения — это и есть закрытие дыры, а не гигиена «на будущее».
- Удалите неиспользуемое. Плагины «на потом», старые темы, тестовые копии сайта в подпапке, забытый файл
info.php. Лучшая защита у того, чего на сервере нет. - Смените секретные ключи CMS. В WordPress это соли и ключи в
wp-config.php, в других системах — аналогичные параметры. Их смена делает недействительными все выданные ранее сессии, даже те, о которых вы не знаете. - Смените пароль базы данных и проверьте, что база не доступна снаружи.
- Включите двухфакторную аутентификацию на вход в CMS и в панель хостинга. Это единственная мера, которая продолжает работать, даже когда пароль уже украден.
- Настройте резервные копии, которые хранятся не на том же сервере. Копия рядом с сайтом шифруется и удаляется вместе с ним.
- Проверьте сайт снаружи — тем же способом, каким его смотрит злоумышленник: какие версии компонентов видны, какие служебные файлы доступны, где остались открытые панели. Что именно находит такая проверка и чего она принципиально не видит, мы разбирали в отдельной статье.
Как снять пометку «сайт опасен»
Предупреждение в браузере и в поиске само не исчезнет — нужно попросить перепроверку. Делать это следует после лечения: если проверка снова найдёт вредоносный код, следующего рассмотрения придётся ждать дольше.
- Яндекс.Вебмастер. Раздел «Безопасность и нарушения» — там указан тип обнаруженной угрозы и кнопка запроса повторной проверки. Тип угрозы полезно прочитать до лечения: он подсказывает, что именно нашли.
- Google Search Console. Раздел «Проблемы безопасности» — описание найденного и кнопка запроса проверки. Там же обычно перечислены конкретные заражённые адреса.
- Хостер. Если сайт заблокировали, напишите в поддержку, что именно вы сделали. Многие хостеры снимают блокировку после собственной проверки.
- Почтовая репутация. Если с домена уходил спам, письма могут не доходить и после лечения — домен попал в списки блокировки. Проверьте настройки SPF, DKIM и DMARC (записи, которые подтверждают, что письма от вашего имени отправлены именно вами) и при необходимости подайте заявку на исключение из списков.
Перепроверка не мгновенная — закладывайте несколько дней. Пока она идёт, сайт лучше держать в рабочем и чистом состоянии: повторное появление вредоносного кода во время рассмотрения отбрасывает вас в начало.
Если могли пострадать данные клиентов
Это часть, которую владельцы малого бизнеса пропускают чаще всего, — а она с юридическими последствиями. Если на сайте есть формы заявок, личные кабинеты, оформление заказов или база подписчиков, вы обрабатываете персональные данные и по закону являетесь их оператором (152-ФЗ «О персональных данных»).
При инциденте, из-за которого персональные данные могли быть скопированы или изменены посторонними, закон обязывает уведомить Роскомнадзор. Сроки короткие: первое уведомление — почти сразу после обнаружения, второе, по итогам внутреннего расследования, — через несколько дней. В действующей редакции речь идёт о порядке 24 и 72 часов, но перед подачей обязательно сверьтесь с актуальной редакцией закона и формой уведомления на сайте Роскомнадзора — требования менялись и продолжают уточняться. Если сомневаетесь, считать ли инцидент утечкой, — этот вопрос стоит задать юристу в тот же день, а не через неделю.
Отдельно от формальной обязанности есть человеческая сторона. Если через сайт проходили пароли, которые клиенты могли использовать и в других сервисах, честнее сообщить им об этом самим и предложить сменить пароль. Клиенты прощают взлом гораздо легче, чем молчание о нём.
Чего делать не надо
- Платить вымогателям. Если сайт зашифровали и просят выкуп, оплата не даёт ничего, кроме подтверждения, что с вас можно получать деньги. Доступ к серверу у них остаётся, и требование повторяется. Восстанавливайтесь из копии и закрывайте вход.
- Удалить один найденный файл и считать, что закончили. Шеллов почти никогда не бывает по одному: обычно их несколько, они разбросаны по разным каталогам, замаскированы под системные файлы, а один часто прописан в базе данных или в задании планировщика, чтобы восстанавливать остальные.
- Надеяться, что «это просто вирус, антивирус вычистит». Антивирус хостинга удаляет известный вредоносный код с диска, но он не чинит уязвимость, через которую этот код попал на сервер, и не отзывает украденные доступы. После очистки заражение возвращается — это не признак плохого антивируса, это признак незакрытой двери.
- Тянуть с журналами. Они затираются по расписанию. Если не сохранить их в первый день, разбираться потом будет не по чему.
- Возвращать сайт в строй с теми же паролями и той же версией CMS. Это не восстановление, а пауза перед следующим взломом.
Коротко
- Снимите копию файлов, базы и журналов — до любого лечения.
- Закройте сайт заглушкой с кодом 503.
- Оборвите сессии и ключи, потом смените пароли — с чистого компьютера.
- Проверьте администраторов, почтовые перенаправления и доступы подрядчиков.
- Найдите точку входа по журналам и датам изменения файлов.
- Обновите и удалите лишнее, включите двухфакторную аутентификацию, настройте внешние копии.
- Запросите перепроверку в Яндекс.Вебмастере и Search Console.
- Если могли пострадать персональные данные — уточните порядок и сроки уведомления.
Чтобы это не повторилось
Сразу оговоримся честно: ShieldSafe не лечит взломанные сайты — мы не удаляем вредоносный код и не ищем шеллы в файлах. Мы делаем другую половину работы: смотрим на сайт снаружи, как это делает злоумышленник, и показываем, через что в него можно войти — устаревшие компоненты с известными уязвимостями, открытые служебные файлы, доступные панели. Это то, что нужно закрыть после лечения, чтобы не проходить всё заново.
Проверить сайт