Обсудить проект
ПОЛЬЗА / БЕЗОПАСНОСТЬ И ПОДДЕРЖКА

Сайт взломали: что делать по шагам и как не допустить повторно

Обычно это выглядит так: клиент пишет «у нас на сайте какая-то реклама казино», или хостинг присылает письмо «ваш аккаунт заблокирован за вредоносный код», или сайт просто пропадает из поиска и Яндекс рисует красный экран с предупреждением. Паника, звонки, желание срочно всё удалить и переделать. Разбираем спокойно: как понять, что произошло, что делать в первые часы, как выглядит настоящая чистка изнутри и почему через месяц всё повторяется, если остановиться на полпути.

Сайт взломали: что делать по шагам и как не допустить повторно

Как понять, что сайт взломали

Массовый взлом сайтов малого бизнеса почти никогда не выглядит как в кино. Никто не пишет «мы вас взломали» и не требует выкуп. Наоборот, задача взломщика - чтобы вы как можно дольше ничего не заметили, потому что заражённый сайт приносит ему деньги ровно до того момента, пока владелец не спохватился.

Поэтому первым о проблеме сообщает кто угодно, только не сам сайт. Чаще всего это хостинг: у провайдеров стоят сканеры, они находят у вас в папке чужие файлы и присылают письмо, иногда сразу с блокировкой аккаунта. Второй по частоте источник - поисковики: Яндекс и Google помечают сайт как заражённый, и посетитель видит красную страницу-предупреждение вместо вашего первого экрана. Третий - клиенты, которые заходят с телефона и попадают на редирект в чужой магазин или казино.

Есть и признаки, которые видит владелец сам, если знает, куда смотреть. Трафик обвалился, а причин нет: рекламу не отключали, сезон не сменился, а заявки исчезли. В поиске по названию компании вдруг появляются страницы вашего домена с чужими текстами, часто на другом языке. Сайт стал заметно медленнее, потому что на сервере крутится чужой скрипт и жрёт ресурсы - про то, из чего вообще складывается скорость загрузки сайта, мы писали отдельно. Или в админку перестал пускать ваш пароль.

Отдельная неприятная разновидность - когда сайт снаружи в полном порядке. Никаких казино на главной, дизайн на месте, формы работают. А в глубине лежат сотни сгенерированных страниц под чужие запросы, или почтовый рассыльщик, который третий месяц шлёт спам с вашего домена. Владелец узнаёт об этом, когда его письма клиентам начинают падать в спам, а домен оказывается в чёрных списках. Восстанавливать репутацию домена потом дольше и муторнее, чем чистить сам код.

Что делать в первые часы

Главная ошибка в первый час - начать хаотично тыкать. Удалить подозрительный файл, снести половину папок, откатиться на бэкап недельной давности, поменять пароль на почте и на этом успокоиться. После такого разбираться становится сложнее: следы затёрты, а дыра, через которую зашли, никуда не делась.

Первое: не удаляйте ничего, пока не сделали копию. Полный слепок сайта и базы данных прямо в заражённом виде - это не «сохранить вирус», это единственный способ потом понять, что именно было изменено, когда и через какой файл. Копию кладём отдельно, не на тот же аккаунт хостинга.

Второе: закройте сайт от посетителей. Заглушка «ведём технические работы» на пару часов стоит вам меньше, чем каждый час, пока клиенты видят редирект на казино, а поисковик копит претензии к домену. Если хостинг уже заблокировал аккаунт, этот шаг сделали за вас.

Третье: смените все доступы разом. Пароль от панели хостинга, FTP и SSH, пароль администратора CMS, пароль от базы данных, доступ к почте на домене, ключи в панели регистратора. Именно разом, а не по одному: если у взломщика остался хотя бы один канал, он вернётся и восстановит остальное за минуты. Заодно проверьте список пользователей CMS - лишняя учётка с правами администратора и безобидным именем вроде «support» встречается очень часто.

Четвёртое: напишите хостингу. У провайдера в логах есть то, чего у вас нет: с какого IP и когда заходили, какой файл первым появился, через какой запрос. Нормальная техподдержка эти данные отдаёт по запросу, и они экономят часы работы. Если аккаунт заблокирован, там же выясняется, что нужно сделать для разблокировки, - обычно это отчёт о чистке, а не просто «мы всё удалили, честно».

И то, чего делать не стоит. Не откатывайтесь вслепую на старый бэкап как на единственное решение. Если заражение началось три недели назад, а копия сделана вчера, вы восстановите ровно тот же вредоносный код. А если бэкап старше дыры в системе, взломщик зайдёт повторно тем же путём в течение суток. Бэкап - это инструмент, а не лечение.

Как выглядит чистка изнутри

Дальше начинается работа, ради которой обычно и зовут подрядчика. Она скучная, ручная и состоит из четырёх этапов. Пропуск любого из них - причина, по которой сайт «почистили», а через две недели он снова заражён.

1. Разведка и полная инвентаризация

Снимаем копию, сверяем файлы движка с эталонной версией с сайта разработчика: всё, что не совпадает по контрольной сумме, - кандидат на проверку. Отдельно смотрим файлы, изменённые за последние недели, и ищем характерные конструкции, которыми маскируют вредоносный код. Здесь же читаем логи доступа, чтобы найти точку входа и дату. Без даты вы не знаете, какой бэкап чистый, а какой уже нет.

2. Чистка кода и базы данных

Вредоносные вставки убираются, изменённые файлы движка заменяются оригинальными, чужие скрипты и загрузчики удаляются. Отдельно чистится база: рекламные вставки любят прописывать не только в файлы, но и в шаблоны, настройки и текстовые поля - там же прячутся редиректы для мобильных. И проверяются места, где код вообще не должен исполняться, вроде папки загрузок с картинками.

3. Закрытие дыры

Ключевой этап, который чаще всего пропускают. Обновляется движок и модули, убираются заброшенные плагины и старые копии сайта в подпапках, закрывается доступ к служебным адресам, ужесточаются права на файлы. Если точка входа так и не найдена, честнее сказать это вслух, чем делать вид, что всё под контролем.

4. Снятие санкций и наблюдение

Запрос на перепроверку в панелях Яндекса и Google, разблокировка у хостинга, вывод домена из почтовых чёрных списков. Дальше две-три недели наблюдения: сканирование по расписанию и слежение за изменениями файлов. Именно в этот срок обычно возвращается недобитое заражение, и лучше поймать его самим, чем снова письмом от хостинга.

По срокам честно: типовой случай на распространённой CMS - это от нескольких часов до пары дней работы. Запущенный, где заражению полгода, сайт собирали три подрядчика подряд, а исходников нет, - неделя и больше. Мы в APST в такой ситуации всегда сначала смотрим и называем срок после разведки, а не по телефону наугад.

Почему взломали именно вас

Почти всегда ответ разочаровывающий: вас не выбирали. Никто не сидел и не думал, как бы навредить конкретно вашей компании. По интернету круглосуточно ходят автоматические сканеры, которые перебирают все сайты подряд и проверяют десяток известных уязвимостей. Сайт районной стоматологии и сайт федеральной сети для такого сканера одинаковы: есть дырка - заходим.

Устаревшая CMS и модули - причина номер один. Сайт сделали, он работает, обновлять «страшно, вдруг сломается». Через три года в старой версии движка уже описаны публично известные уязвимости, и эксплуатируют их не хакеры, а скрипты. Особенно это касается сторонних модулей: сама CMS обновлена, а плагин галереи не трогали с момента установки.

Второе - заброшенное наследство на хостинге. Старая версия сайта в подпапке, тестовая копия, забытый форум, чей-то архив с исходниками. Основной сайт при этом свежий и аккуратный, а зашли через папку, о существовании которой владелец не помнил. Разбор доступов и того, что вообще лежит на аккаунте, - обязательная часть поддержки сайта после запуска, и именно её обычно не заказывают.

Третье - слабые и переиспользованные пароли, admin-admin из времён запуска, доступы, которые остались у бывшего подрядчика или у сотрудника, ушедшего два года назад. И заражённый компьютер, с которого владелец заходит по FTP: вирус на ноутбуке спокойно вытаскивает сохранённые пароли из файлового менеджера и передаёт дальше.

Отдельно про хостинг. Дешёвый общий тариф, где на одном сервере живут сотни сайтов, иногда позволяет заражению переползти от соседа, если провайдер плохо изолирует аккаунты. Это не повод паниковать и переезжать, но повод понимать, за что вы платите, - про выбор площадки мы разбирали в материале про домен и хостинг для сайта.

Чтобы не повторилось

Полной защиты не существует, и обещать её было бы враньём. Задача другая: сделать так, чтобы автоматический сканер не находил у вас лёгкой двери и шёл дальше, а если что-то всё же случилось - чтобы вы узнали об этом первым и восстановились за час.

Обновления по расписанию, а не по настроению. Раз в месяц, на тестовой копии, с проверкой перед выкаткой. Это скучно, стоит недорого и закрывает большую часть автоматических атак просто потому, что известные дыры уже залатаны.

Бэкапы, которые вы проверяли. Копия должна лежать вне хостинга, храниться хотя бы месяц в глубину и разворачиваться из архива за понятное время. Резервная копия, которую ни разу не пробовали восстановить, - это не бэкап, а спокойствие на бумаге. Проверьте один раз, зафиксируйте, сколько это заняло.

Гигиена доступов. Ни одной общей учётки на всех, отдельный логин каждому подрядчику, двухфакторка в панели хостинга и у регистратора домена, удаление доступов сразу после окончания работ. Заодно уберите с сервера всё, что не нужно: старые копии, архивы, тестовые поддомены.

Мониторинг. Внешний сканер, который раз в сутки проверяет сайт на вредоносный код и подмену страниц, и уведомление о недоступности. Стоит копейки, а разница между «узнали через два часа» и «узнали через месяц от хостинга» огромная: во втором случае вы получаете ещё и просевший поиск с почтовыми блокировками.

Про результат прямо: даже всё перечисленное не даёт гарантии, что вас не заразят снова. Появляются новые уязвимости, а сайт живёт в открытом интернете. Что эти меры дают точно, так это резкое сокращение шансов на типовой автоматический взлом и понятный план на случай, если он всё-таки случится. Это ровно та же логика, что с сигнализацией и запасными ключами.

Частые вопросы

Хостинг заблокировал сайт за вирусы, что делать?

Запросите у поддержки список найденных заражённых файлов и логи доступа - это отправная точка. Дальше нужна чистка и отчёт: большинство провайдеров разблокируют аккаунт после того, как вы описали, что убрали и как закрыли уязвимость. Просто удалить помеченные файлы обычно недостаточно, повторная проверка находит остальные.

Сколько стоит вылечить заражённый сайт?

Цена зависит от объёма, а он выясняется только после разведки. Свежее заражение на типовой CMS - это несколько часов работы. Запущенный случай без исходников и без бэкапов может занять неделю. Мы называем срок и стоимость после того, как посмотрели сайт и логи, а не по описанию проблемы на словах.

Можно ли просто восстановить сайт из бэкапа?

Только если вы точно знаете дату заражения и копия старше её, а уязвимость закрыта. Иначе один из двух сценариев: вы восстанавливаете тот же вредоносный код или получаете повторный взлом тем же путём в ближайшие сутки. Бэкап отлично работает как последний шаг чистки и плохо - как единственный.

Как убрать предупреждение поисковика о заражении?

Сначала реально вычистить сайт, потом отправить запрос на перепроверку в панелях вебмастера Яндекса и Google. Перепроверка занимает от нескольких дней. Если отправить её раньше, чем сайт стал чистым, метка вернётся, а следующая проверка будет дольше, так что торопиться тут невыгодно.

Нужно ли делать новый сайт после взлома?

Обычно нет. Заражение лечится на существующем сайте. Новый имеет смысл, если движок настолько устарел, что обновиться уже нельзя, исходников нет и каждое изменение ломает соседнее. Тогда чистка превращается в бесконечную, и дешевле собрать заново на поддерживаемой основе.

Короткий вывод

Взлом сайта малого бизнеса почти всегда безадресный и автоматический: скрипт нашёл известную дыру в необновлённом движке, в забытой копии сайта или в старом пароле. В первые часы важно не удалять сгоряча, а снять копию, закрыть сайт заглушкой, сменить все доступы разом и взять логи у хостинга. Настоящая чистка состоит из четырёх частей, и третья, закрытие дыры, - та, без которой всё повторится через две недели. Дальше остаётся скучная профилактика: обновления по расписанию, проверенные бэкапы вне хостинга, раздельные доступы и внешний мониторинг. Гарантий никто не даст, но из категории лёгкой добычи это выводит.

Посмотрим ваш сайт и скажем прямо

APST делает сайты в Воронеже с 2005 года и регулярно чистит чужие заражённые проекты - в том числе те, которые уже «лечили» до нас. Пришлите домен и письмо от хостинга, если оно есть: посмотрим, что происходит, найдём точку входа и честно назовём срок и объём работ до начала.

Обсудить проект