Привет. Не очень приятная, но очень важная тема сегодня будет рассмотрена. Недавно мы уже приводили небольшую статистику от авторов плагина Wordfence, согласно которой каждую секунду атакуют около 100 сайтов, и это только статистика среди сайтов, которые посылают анонимные статистические данные для анализа авторам указанного плагина.

Еще одна интересная статистика, о которой мы писали около месяца назад — в примерно 55% случаев сайты взламывают через дыры в коде плагинов, используемых на этих сайтах, и еще в примерно 15% случаев — путем подбора паролей администратора. Таким образом, сложный пароль и использование минимального количества проверенных плагинов — это уже 70% успеха в борьбе со злоумышленниками.

12032797_1256264801054817_4934383587872111999_o

Но пока оставим сухие цифры в стороне, и перейдем к практике. Я по шагам изложу Вам проверенный на практике метод очистки сайтов на WordPress, если уж так случилось, и сайт был взломан.

Обратите внимание:

  • Самый простой способ восстановления сайта — восстановление из резервной копии. В таком случае Вы с наибольшей вероятностью не пропустите ничего, восстановите работу сайта за минимальное время и с использованием минимальных усилий. Так что делайте резервную копию регулярно и храните где-то в безопасном месте минимум 3 копии — после создания сайта (или любая старая 100% рабочая копия), копия недельной давности и копия «на вчера». Вот пример , как делать копии, если на хостинге используется панель ISPmanager. После больших / важных изменений на сайте также делайте разовую копию и «кладите» рядом с Вашей «старой», это позволит в случае чего не возвращаться к самому началу.
  • Описанный далее способ срабатывает в большинстве случаев, с которыми мне пришлось встретиться, но не является панацеей от любых типов «вирусов / атак».

1. Бэкап / резервная копия.

Первое правило — всегда делай бэкап.

Даже перед началом очистки зараженного сайта нужно сделать бэкап его текущего состояния. Почему? Во-первых, как в анекдоте, смотри первое правило. Во-вторых, при работе с пораженным сайтом можно ошибочно удалить нужную информацию, которой нет в более старых Ваших резервных копиях (если эти копии у Вас вообще есть).

Многие считают, что любой хостинг-провайдер делает бэкапы их сайтов, так что нет смысла морочить себе голову этим. Они правы, но где-то процентов на 30%. Не всегда есть информация, какие именно копии делает провайдер, копии чего и сколько копий сохраняется. Например, провайдер может делать копии Ваших сайтов, за исключением файлов по размеру больших чем 5мб. Это довольно нормальная практика, ведь большинство «скриптов» / «полезных файлов» не превышает этот предел, а различные «видео», архивы и другие медиа-данные, которые занимают много места — не будут мешать провайдеру, съедая ресурсы сервера резервных копий . Провайдер может хранить данные, например, за последние 2 дня. Этого вполне достаточно, чтобы восстановить работу сайтов клиентов в случае каких-то проблем на стороне провайдера, но в большинстве случаев Вы заметите, что сайт взломан, примерно через неделю, а иногда люди месяцами об этом не догадываются (это 100% правда из личного опыта работы с сайтами клиентов). Итак, когда Вы заметите проблемы, а провайдер сможет предоставить Вам только копии 2-дневной давности, то от этих копии не будет пользы. 

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

2. to Be or Not to Be

Благодаря архитектуре WordPress нам значительно легче будет удалить «половину» вирусов по сравнению с другими системами управления сайтами. Итак второй шаг, который нам нужно сделать — это удалить все «стандартные» файлы и папки, мы позже заменим на их «оригинальные / чистые» версии. Эти файлы и папки в 99% случаев не должны отличаться от оригинала. Вот пример файлов пораженного сайта (красным отмечено например некоторые «нестандартные» файлы / папки, которых не должно быть):

Screenshot_25

Коричневым я отметил то, что мы оставим — файл wp-config.php и директория wp-content , это единственное, что нам нужно, все остальное удаляем. Директорию wp-content мы оставляем, поскольку в ней содержатся все наши изображения с статей и страниц, все плагины и шаблон, мы используем. В файле wp-config.php содержится информация о доступе к базе данных и другая конфигурация. В принципе его тоже можно было удалить, но я подскажу позже, чем он понадобится.

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

Screenshot_22

Вот пример содержимого одного из файлов, что был размещён в корневой директории сайта:

Такой файл сразу распознается даже windows-антивирусом как Backdoor: PHP / Small.M — в двух словах, этот файл позволяет злоумышленнику получить доступ к Вашему сайту удаленно.

3. Удаление, восстановление

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

Первое , что мы делаем, удаляем все, кроме файла  wp-config.php и директории wp-content , как результат имеем такое содержание директории с сайтом:

files2

Второе — создаем в корне файл .htaccess , со следующим содержанием:

Order Deny,Allow
Deny from all
Allow from 98.244.195.106Code language: CSS (css)

Где IP адрес 98.244.195.106 нужно заменить на Ваш, который можно узнать, например, посетив сайт  http://myip.com.ua  . Таким способом Вы позволяете доступ к Вашему сайту только с Вашего компьютера.

Третье — берем последнюю версию WordPress со страницы релизов у нас или на официальном сайте  и загружаем содержимое директории wordpress, что Вы найдете в архиве, на Ваш сайт, соглашаясь с заменой файлов на сайте на новые:

ftp_27

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

  • переходим в папку / wp-content / plugins и поочередно в каждой директории открываем главный файл плагина. Он обычно имеет совпадать по имени с директорией:plugin
  • в этом файле мы находим ссылки на официальную страницу плагина, куда мы и идем. Там берем актуальную и чистую версию, из которой потом восстановим наш плагин:
plugin2
  • Я, например, загружаю все архивы в какую пустую папку, а после работаю со всеми вместе. Получается примерно так:
Screenshot_27
  • Плагины, которые не размещены на официальном сайте WordPress.org, например этот , я обычно не загружаю. При необходимости могу предоставить объяснения и описать исключения в комментах.
  • Итак, имеем набор чистых плагинов и можем удалить все «дерьмо», которое находится на их месте, а его там целая куча 🙂
Screenshot_28
  • Удаляем из папки / wp-content / plugins все, кроме файла index.php, его мы уже заменили на чистый на одном из шагов.
  • Распаковываем архивы с плагинами и загружаем на сайт в / wp-content / plugins
Screenshot_30

Пятое — мы проводим аналогичную операцию с шаблонами. Здесь меньше глупой работы, ведь шаблон можно использовать только один (максимум два в случае с дочерней темой, но это отдельный разговор). Так что нужно зайти в директорию с шаблонами / wp-content / themes, переименовать папку с Вашим активным (надеюсь, Вы знаете, какой шаблон используете), а все остальные папки / файлы удалить (кроме файла index.php, его мы уже заменили на чистый на одном из шагов). Вместо такого:

Screenshot_31

получаем чистую директорию с одной папкой, что мы переименовали (не важно, какое новое название папки выбрано):

Теперь нужно лишь перейти на сайт, где Вы загружали изначально шаблон, и аналогично плагинам скопировать чистый шаблон в / wp-content / themes. Если Вы использовали бесплатный шаблон с WordPress.org, его можно найти по названию папки здесь https://wordpress.org/themes/, если покупали — скачать там, где покупали. Если все совсем плохо ? и чистый шаблон найти не удается — загрузите с https://wordpress.org/themes/ любой, что Вам нравится, например стандартный https://wordpress.org/themes/twentysixteen/. Ни в коем случае не рекомендую использовать тот, что мы минуту назад переименовали!

Шестое — нужно проверить / почистить директории, что остались, а именно  / wp-content / languages и  / wp-content / uploads . Обычно все внутри / wp-content / languages можно удалить. В этой папке хранится в большинстве случаев только перевод самого «WordPress», если Вы используете языковую версию отличную от английской. Чтобы этот перевод снова там появился, будет достаточно в конце выбрать в админке английский язык, сохранить настройки, а затем выбрать новый язык (например, украинский) и снова сохранить настройки:

Screenshot_34


Самое интересное можно найти в  / wp-content / uploads. По умолчанию в этой папке могут быть только следующие файлы:

Изображения — .jpg, .jpeg, .png, .gif, .ico,
Документы — .pdf, .doc, .docx, .ppt, .pptx, .pps, .ppsx, .odt, .xls, .xlsx,. psd
Аудио — .mp3, .m4a, .ogg, .wav
Видео — .mp4, .m4v, .mov, .wmv, .avi, .mpg, .ogv, .3gp, .3g2

  • На практике, большинство из нас на сайт загружают только изображения, из этого следует, что в данной директории не должно быть ничего кроме указанных выше файлов (или только изображений).
  • Также в большинстве случаев все файлы / изображения находятся в папках со структурой год / месяц,  например /wp-content/uploads/2016/01. Поэтому все остальные директории тоже нужно удалить

Ниже я привел пример стрелками, какие директории и файлы являются лишними в папке / wp-content / uploads /. Конечно могут быть исключения (приведено синими стрелками), но советую и их удалить, в любом случае Вы сделали полную копию в начале, так есть эти папки / файлы на всякий случай. Поэтому нужно пройтись по всем папкам / подпапкам и оставить только нужные файлы и директории.

Седьмое — многие вирусы загружают именно в папку / wp-content / uploads /. Как уже понятно, там могут быть только картинки, документы или тому подобное. Но в любом случае там не должно быть скриптов / файлов * .php. Чтобы уберечь себя от того, когда эти файлы все же там появятся, или от того, что Вы просто пропустили при очистке их — создадим в папке / wp-content / uploads / файл .htaccess со следующим содержанием:

<Files *.php> 
deny from all 
</Files>Code language: HTML, XML (xml)

Это запрещает доступ любому к файлам * .php в папке / wp-content / uploads /, некий дополнительный уровень защиты. Плюс, если еще такого нет, создайте рядом файл index.php со следующим содержимым, чтобы через браузер нельзя было напрямую просматривать содержимое директории / wp-content / uploads /:




<?php // Silence is golden.Code language: HTML, XML (xml)

4. wp-config.php

Сейчас мы восстановим / почистим этот важный файл в корне Вашего сайта. Сделать это не очень сложно, ведь с чистым Вордпрес Вы загрузили файл wp-config-sample.php — это и есть «девственная» версия wp-config.php. Нам только нужно перенести туда определенные настройки. Открываем оба файла для редактирования, берем данные из wp-config.php и вставляем в wp-config-sample.php, а именно:

  • настройки подключения к базе данных ( кликайте )
  • ключи аутентификации ( кликайте )
  • префикс таблиц ( кликайте )
  • сохраняем изменения.
  • удаляем wp-config.php
  • меняем название wp-config-sample.php на wp-config.php

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

5. Поехали

Этого должно быть достаточно, чтобы перейти уже к нашей админке. Итак открываем https://vash_site/wp-admin

Нас ждут следующие дела и сюрпризы:

  • первое, что надо — зайти в меню » Пользователи» , посмотреть, нет ли лишних администраторов и изменить пароли всем администраторам, которые остались.
  • открыв меню » Плагины» , мы можем увидеть , что определенные плагины были отключены, поскольку мы удалили их папки. Другие плагины останутся на месте, их настройки должны сохраниться.
  • в меню » Вид» Вы можете увидеть , что Ваша активная тема повреждена (это если вы не нашли ее «чистого» варианта), в таком случае просто активируйте новую, которую мы загрузили пару шагов назад.
  • Удалите код из файла .htaccess в корне сайта, что мы добавили в начале статьи для ограничения доступа
  • Зайдите в меню « Настройка — Постоянные ссылки» и нажмите Сохранить , это заново создаст в корне сайта файл .htaccess с нужным содержанием для открытия страниц с человеческими и красивыми url-ами

финита

Конечно, кроме смены паролей доступа к админке и базы данных, желательно изменить пароли и на хостинге (к хостинг-панели / FTP и другие).

На выходе Вы не всегда получите 100% тот же самый сайт, который был до момента взлома, но у вас будет сайт и будет сохранен Ваш контент. В зависимости от хостинга, программ и настроек, что Вы используете — могут быть определенные специфические нюансы на каждом шагу, к сожалению, я никак не могу их все учесть и описать. Также заметьте, если Ваши сайты являются способом заработка и приносят деньги, не стоит пренебрегать их защитой, это может обойтись дороже. Поэтому советую также ознакомиться с нашими статьями в разделе » О Защите WordPress «, посвятить определенное время и силы для улучшения безопасности Вашего сайта или воспользоваться услугами сторонних специалистов.

Дополнительно советую после очистки или для профилактики уже сейчас воспользоваться следующими плагинами:

  • https://wordpress.org/plugins/tac/
  • https://wordpress.org/plugins/exploit-scanner/
  • https://wordpress.org/plugins/wp-antivirus-site-protection/
  • https://wordpress.org/plugins/antivirus/
  • https://wordpress.org/plugins/gotmls/
  • https://wordpress.org/plugins/wemahu/

Если у Вас возникнут дополнительные вопросы — буду рад ответить. Не забывайте подписываться на нашу рассылку и «лайкать» в соцсетях наши страницы и записи 🙂

Author

Дмитро Кондрюк в веб-індустрії з 2003 року. В 2009р. заснував проект Український WordPress (що у подальшому став офіційним сайтом команди локалізації WordPress в Україні). З 2010 року засновник і технічний директор проекту Український хостинг для WordPress (WPHost.me) - повноцінного хостинг-сервісу, максимально оптимізованого на використання CMS WordPress.

Коментувати