Защита WordPress

Взломали сайт на WordPress? Как очистить от вирусов и восстановить работу.

Pinterest LinkedIn Tumblr

Привет. Не очень приятная, но очень важная тема сегодня будет рассмотрена. Недавно мы уже приводили небольшую статистику от авторов плагина 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/

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

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

Коментувати