Привет. Не очень приятная, но очень важная тема сегодня будет рассмотрена. Недавно мы уже приводили небольшую статистику от авторов плагина Wordfence, согласно которой каждую секунду атакуют около 100 сайтов, и это только статистика среди сайтов, которые посылают анонимные статистические данные для анализа авторам указанного плагина.
Еще одна интересная статистика, о которой мы писали около месяца назад — в примерно 55% случаев сайты взламывают через дыры в коде плагинов, используемых на этих сайтах, и еще в примерно 15% случаев — путем подбора паролей администратора. Таким образом, сложный пароль и использование минимального количества проверенных плагинов — это уже 70% успеха в борьбе со злоумышленниками.
Но пока оставим сухие цифры в стороне, и перейдем к практике. Я по шагам изложу Вам проверенный на практике метод очистки сайтов на WordPress, если уж так случилось, и сайт был взломан.
Обратите внимание:
- Самый простой способ восстановления сайта — восстановление из резервной копии. В таком случае Вы с наибольшей вероятностью не пропустите ничего, восстановите работу сайта за минимальное время и с использованием минимальных усилий. Так что делайте резервную копию регулярно и храните где-то в безопасном месте минимум 3 копии — после создания сайта (или любая старая 100% рабочая копия), копия недельной давности и копия «на вчера». Вот пример , как делать копии, если на хостинге используется панель ISPmanager. После больших / важных изменений на сайте также делайте разовую копию и «кладите» рядом с Вашей «старой», это позволит в случае чего не возвращаться к самому началу.
- Описанный далее способ срабатывает в большинстве случаев, с которыми мне пришлось встретиться, но не является панацеей от любых типов «вирусов / атак».
1. Бэкап / резервная копия.
Первое правило — всегда делай бэкап.
Даже перед началом очистки зараженного сайта нужно сделать бэкап его текущего состояния. Почему? Во-первых, как в анекдоте, смотри первое правило. Во-вторых, при работе с пораженным сайтом можно ошибочно удалить нужную информацию, которой нет в более старых Ваших резервных копиях (если эти копии у Вас вообще есть).
Многие считают, что любой хостинг-провайдер делает бэкапы их сайтов, так что нет смысла морочить себе голову этим. Они правы, но где-то процентов на 30%. Не всегда есть информация, какие именно копии делает провайдер, копии чего и сколько копий сохраняется. Например, провайдер может делать копии Ваших сайтов, за исключением файлов по размеру больших чем 5мб. Это довольно нормальная практика, ведь большинство «скриптов» / «полезных файлов» не превышает этот предел, а различные «видео», архивы и другие медиа-данные, которые занимают много места — не будут мешать провайдеру, съедая ресурсы сервера резервных копий . Провайдер может хранить данные, например, за последние 2 дня. Этого вполне достаточно, чтобы восстановить работу сайтов клиентов в случае каких-то проблем на стороне провайдера, но в большинстве случаев Вы заметите, что сайт взломан, примерно через неделю, а иногда люди месяцами об этом не догадываются (это 100% правда из личного опыта работы с сайтами клиентов). Итак, когда Вы заметите проблемы, а провайдер сможет предоставить Вам только копии 2-дневной давности, то от этих копии не будет пользы.
Ну и последнее, есть такие штуки как «форс-мажор» и «закон подлости», эти штуки обычно случаются, когда Вы надеетесь на помощь «третьих» лиц вместо того, чтобы нести ответственность за свои сайты лично. Все цифры я привел для примера и понимания важности бэкапов.
2. to Be or Not to Be
Благодаря архитектуре WordPress нам значительно легче будет удалить «половину» вирусов по сравнению с другими системами управления сайтами. Итак второй шаг, который нам нужно сделать — это удалить все «стандартные» файлы и папки, мы позже заменим на их «оригинальные / чистые» версии. Эти файлы и папки в 99% случаев не должны отличаться от оригинала. Вот пример файлов пораженного сайта (красным отмечено например некоторые «нестандартные» файлы / папки, которых не должно быть):
Коричневым я отметил то, что мы оставим — файл wp-config.php и директория wp-content , это единственное, что нам нужно, все остальное удаляем. Директорию wp-content мы оставляем, поскольку в ней содержатся все наши изображения с статей и страниц, все плагины и шаблон, мы используем. В файле wp-config.php содержится информация о доступе к базе данных и другая конфигурация. В принципе его тоже можно было удалить, но я подскажу позже, чем он понадобится.
Конечно, если у Вас в корневой директории сайта есть какие-то «свои» папки или файлы, например, как на скриншоте файлы, подтверждающие права на домен для сторонних сервисов, их тоже можно оставить, но в этой статье я не смогу рассмотреть способы, как их проверить / почистить:
Вот пример содержимого одного из файлов, что был размещён в корневой директории сайта:
Такой файл сразу распознается даже windows-антивирусом как Backdoor: PHP / Small.M — в двух словах, этот файл позволяет злоумышленнику получить доступ к Вашему сайту удаленно.
3. Удаление, восстановление
Важный момент — начиная с этого шага не нужно пытаться открывать сайт, админку или как-то обращаться к сайту через браузер. Может такое быть, что при попытке открыть любую страницу вирусы автоматически снова попадут на сайт.
Первое , что мы делаем, удаляем все, кроме файла wp-config.php и директории wp-content , как результат имеем такое содержание директории с сайтом:
Второе — создаем в корне файл .htaccess , со следующим содержанием:
Order Deny,Allow
Deny from all
Allow from 98.244.195.106
Code language: CSS (css)
Где IP адрес 98.244.195.106 нужно заменить на Ваш, который можно узнать, например, посетив сайт http://myip.com.ua . Таким способом Вы позволяете доступ к Вашему сайту только с Вашего компьютера.
Третье — берем последнюю версию WordPress со страницы релизов у нас или на официальном сайте и загружаем содержимое директории wordpress, что Вы найдете в архиве, на Ваш сайт, соглашаясь с заменой файлов на сайте на новые:
Четвертое — один из важнейших шагов, ведь касается замены файлов плагинов, через которые в большинстве ломают сайты по статистике. Суть шага заключается в том, что нужно полностью удалить все директории с плагинами, а вместо них загрузить «чистые» версии. Делать это довольно скучно, но без этого весь процесс может быть бесполезным. Один из способов следующий:
- переходим в папку / wp-content / plugins и поочередно в каждой директории открываем главный файл плагина. Он обычно имеет совпадать по имени с директорией:
- в этом файле мы находим ссылки на официальную страницу плагина, куда мы и идем. Там берем актуальную и чистую версию, из которой потом восстановим наш плагин:
- Я, например, загружаю все архивы в какую пустую папку, а после работаю со всеми вместе. Получается примерно так:
- Плагины, которые не размещены на официальном сайте WordPress.org, например этот , я обычно не загружаю. При необходимости могу предоставить объяснения и описать исключения в комментах.
- Итак, имеем набор чистых плагинов и можем удалить все «дерьмо», которое находится на их месте, а его там целая куча 🙂
- Удаляем из папки / wp-content / plugins все, кроме файла index.php, его мы уже заменили на чистый на одном из шагов.
- Распаковываем архивы с плагинами и загружаем на сайт в / wp-content / plugins
Пятое — мы проводим аналогичную операцию с шаблонами. Здесь меньше глупой работы, ведь шаблон можно использовать только один (максимум два в случае с дочерней темой, но это отдельный разговор). Так что нужно зайти в директорию с шаблонами / wp-content / themes, переименовать папку с Вашим активным (надеюсь, Вы знаете, какой шаблон используете), а все остальные папки / файлы удалить (кроме файла index.php, его мы уже заменили на чистый на одном из шагов). Вместо такого:
получаем чистую директорию с одной папкой, что мы переименовали (не важно, какое новое название папки выбрано):
Теперь нужно лишь перейти на сайт, где Вы загружали изначально шаблон, и аналогично плагинам скопировать чистый шаблон в / 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», если Вы используете языковую версию отличную от английской. Чтобы этот перевод снова там появился, будет достаточно в конце выбрать в админке английский язык, сохранить настройки, а затем выбрать новый язык (например, украинский) и снова сохранить настройки:
Самое интересное можно найти в / 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/
Если у Вас возникнут дополнительные вопросы — буду рад ответить. Не забывайте подписываться на нашу рассылку и «лайкать» в соцсетях наши страницы и записи 🙂