Взлом и защита сайтов на WordPress

По статистике 80%  сайтов на WordPress когда-либо ранее были взломаны. Около 30% сайтов на этом движке в данный момент находятся под управлением сторонних лиц. 90% владельцев сайтов не знают о взломе 3 месяца и более.

Данная статья основана на собственном опыте восстановления сайтов после взлома и попыток предотвращения несанкционированного доступа к ним.

Сразу скажу, что я не являюсь экспертом по безопасности, все наработки только личного плана и базируются на перманентной борьбе со зловредами.

Чтобы не быть голословными, посмотрите статистику взломанных в настоящее время сайтов наиболее известных хакерских групп.

Группировка NeT.Defacer:

взломанные сайты

Группировка w4l3XzY3:

Взломы сайтов

И таких бандформирований хаккеров — сотни. А есть еще и одиночки. Кроме того далеко не все хакеры гордо заявляют о взломах — в большинстве случаев они просто эксплуатируют тихонько посторонний сайт: рассылают через него спам, атакуют DDOS-ом какие — то ресурсы, перенаправляют трафик на нужные ресурсы. Некоторые ставят ссылки со сломанных сайтов на продвигаемые ресурсы. В принципе хоть майнить криптовалюту можно — благо js скрипты майнеров известны уже лет 6-7.

Чтобы не допустить подобных вакханалий, нужно хотя бы кратко знать об основных способах взлома сайтов.

Методы взлома сайтов

Всего существует 2 основных способа скомпрометировать сайт — взлом со стороны хостера и взлом непосредственно самого сайта.

Первый способ был широко распространен ранее. Лет 5-8 назад многие хостеры практически стонали, когда, используя уязвимости хостинга через один аккаунт шаред хостинга  были взломаны все сайты, размещенные на сервере и большинство аккаунтов пользователей хостинга были скомпрометированы.

Сейчас, как правило, у крупных хостеров ломается единичный аккаунт и заражаются сайты размещенные на нем. Доступа к иным аккаунтам у взломщиков нет.

Второй способ взлома — взламывается непосредственно сайт. Здесь взлом можно подразделить на подбор доступа к системе аутентификации (брутфорс) и на взлом сайта, используя его уязвимости.

Как взломать WordPress сайт

Есть статистика, что только треть WordPress сайтов ломается через уязвимости движка, когда пользователи его не обновляют годами. Большинство взломов Вордпресса осуществляется через уязвимости плагинов и тем. Особое опасение вызывают плагины, размещенные в теме — они практически никогда не обновляются и служат прекрасным полигоном для получения доступа к сайту.

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

Одним из способов взлома сайта является его «проверка» на известные уязвимости. Существуют библиотеки этих уязвимостей, которые постоянно пополняются. Потом, по этим библиотекам идет проверка сайта.

Взлом WordPress

Здесь хорошо видно как по библиотеке ищутся уязвимые плагины (1), при этом атака идет со множества IP, а время атаки примерно совпадает (2).

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

поиск бэкдоров и шелов

Здесь как раз хорошо видно как происходит поиск доступов к шелам.

Особо интересен чудак с китая (1), который скачав диск по поиску уязвимостей (а они есть в доступности), не настроив ничего, начал с одного и того же IP пробивать сайт.

Следующим вариантом взлома сайта являются всевозможные SQL инъекции. Часть из них мы будем отсеивать, при настройке плагина, установив запрет на длинные строки.

Информации по взлому именно WordPress очень много в интернете. Есть куча обучающих пособий, сборок дисков с уже установленным и настроенным софтом.

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

Защита Worpress сайта

Мы рассмотрим способы защиты сайта с использованием плагина iThemes Security (ранее известный как Better WP Security). Сразу скажу — он не панацея. Аккурат перед Новым Годом у меня было взломано 3 сайта, где стоял и работал этот плагин. Поэтому необходим комплексный подход к защите.

Если вы уверены, что ваш сайт не взломан, то:

  1. Сделайте полный бекап сайта: и базы данных и всех его файлов и сохраните его в надежное место.
  2. Обновите пароли у всех администраторов сайта.
  3. Удалите лишних пользователей.
  4. Обновите движок Вордпресса до актуального.
  5. Сократите список активированных плагинов, удалив те, функциями которых вы не пользуетесь.
  6. Подберите аналоги к плагинам, которые перестали обновляться и перейдите на них.
  7. Удалите «платные» плагины, которые вы не покупали, а скачали с интернета.
  8. Физически удалите все неактивированные плагины.
  9. Обновите все плагины.
  10. Удалите все неиспользуемые темы
  11. Перейдите на новую тему, если вы её не покупали, а скачали из интернета, а не из репозитория WordPress.
  12. Обновите тему до актуальной.

Далее, устанавливайте плагин iThemes Security и переходите к его настройке.

Настройка плагина iThemes Security

После его установки и активации запускайте модуль «Security Check» и жмите кнопку Secure Site — будет выполнена первоначальная настройка защиты.

Далее, сразу переходим в закладку Advanced. Там пять модулей, нам необходим «Спрятать страницу входа на сайт«.

Настройка плагина ithemes security

Здесь включаем галку «Спрятать страницу входа на сайт» и ниже прописываем слуг, для входа на сайт. Например прописав «puzo1234», доступ к админке будем получать по адресу site.ru/puzo1234.

Остальное оставляем по умолчанию. Сохраняем настройки.

Этот модуль «Прячет страницу входа в систему (wp-login.php, wp-admin, admin и login), чтобы ее сложнее было найти при автоматизированной атаке на сайт». Таким образом мы немного защитились от брутфорса.

Возвращаемся к «рекомендованным» модулям. Запускаем модуль «Основные настройки«.

Здесь включаем флаг «Вносить изменения в файлы» — Allow iThemes Security to write to wp-config.php and .htaccess.»

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

Дальше спускаемся ниже и настраиваем модуль, как указано на рисунке.

Настройка основного модуля

Обязательно указываем свой IP адрес в белом списке блокировки, нажав кнопку «Add my current IP to the White List».

Оставляем остальное по умолчанию.

Сохраняем результаты и переходим к следующему модулю «Отслеживание ошибки 404«.

Здесь выставьте значения, как указано на рисунке ниже:

Блокировка 404 ошибки

Порог ошибок (1) следует уменьшить, когда вы обнаружите, что ваш сайт пытаются взломать «перебором» уязвимости. Если вы уверены, что на вашем сайте нет 404 ошибок (провели технический аудит), то сразу снижайте порог. Чем меньше это значение, тем безопасней, но и тем больше вероятность забанить пользователя, который по непреднамеренной ошибке зашел куда-то ни туда.

Игнорирование типов файлов — это конечно брешь (2) в защите. Так, например, у меня сидел шелл зловреда в .ico файле.

Однако, если вы не делали шаблон сайта под «ретину», не настроили выдачу изображений удвоенной и утроенной плотности всем этим мобильным пользователям с яблочными телефонами и планшетами, то вы их сразу же всех перебаните (см рисунок ниже).

404 ошибка у ретина пользователей

здесь какой- то товарищ с retina — дисплеем мобильного / планшета тщетно пытается запросить картинки удвоенной плотности (@2x.png). Но он обламывается, генерирует 404 ошибку и был бы забанен, если бы не исключения в настройках.

Далее идем в модуль «Заблокированные пользователи«. Выставляем значения следующим образом:

  1. Включаем «Черный список по умолчанию» — т.е. ставим галочку а поле  Включить черный список от сайта HackRepair.com
  2. Заполняем бан лист, собранными мною за этот месяц IP
Список заблокированных пользователей

Жмите на кнопку выше, копируйте список IP и вставляйте его в поле «Запретить доступ хостам» модуля.

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

Отбор взломщиков

Отбор кандидатов на блокирование имеет следующую логику:

(1) — обращение к плагину, который у меня не установлен. Это, по всей видимости один из скомпрометированных плагинов, имеющих уязвимость. Поиск ведется перебором.

(2) Реферрер подделан — какой то site.ru

(3) Именно этот IP и добавляем в список блокировки. Нажав на него — можем посмотреть с какого прокси пришел этот запрос. Да, всякие индийские и китайские IP блокируем сразу же, всей подсетью, например прописав 67.227.*.* или, что то же-самое, прописав 67.227.0.0/16 — в аннотации CIDR.

Теперь посмотрите на (4). Здесь ищется ads.txt. Как вы знаете, это правила доступа к рекламной сети Google Adsense™‎. Поэтому данный IP мы блокировать не будем.

Переходим к модулю Local Brute Force Protection. Выставьте настройки, согласно следующего скрина:

Настройка защиты от брутфорса

Надеюсь, что ваш логин на вход в админку — не admin? Проверьте и поменяйте в настройках пользователя. Впрочем, дальше мы поднастроим так, чтобы входить только с e/mail. Это резко снизит эффектинвность брутфорса админки. С учетом того, что мы перенесли вход в новое место, которое не знают посторонние, брутфорс вам не особо грозит (в отличии от иных методов атаки).

Теперь подключим сетевую защиту. Для этого открываем модуль Network Brute Force Protection, получаем API, прописываем и активируем его. Этот метод защиты похож на методику определения спама Akismet — т.е. если какой то сайт пытались сломать с какого то IP, то он попадает в глобальную базу и если с этого IP попытаются получить доступ к вашему сайту, то он окажется заблокированным.

Переходим к следующему модулю «Тонкая подстройка системы«

настройка системы вордпресс

Настраиваем модуль, согласно приведенному скрину.

Далее спускаемся чуть ниже и отключаем выполнение PHP в папке Upload. Ибо нечего там выполнять — там должны храниться изображения и/или документы, но никак не исполнимые файлы.

тонкая подстройка защиты

Переходим к последнему значимому блоку — Подстройка WordPress. Здесь включите следующие функции:

  • Ссылка для Windows Live Writer
  • Ссылка EditURI
  • Спам комментарий
  • Редактор файлов
  • XML-RPC — поставьте в положение «Отключить XML-RPC»
  • Множественные попытки авторизации запросом XML-RPC — в положение «Блокировать»
  • Сообщения при неудачной попытке входа
  • Отключает дополнительные пользовательские архивы
  • Login with Email Address or Username — в положение «e/mail address only» — теперь авторизироваться можно будет только по e/mail.

Остальные модули настраивайте по своему усмотрению.

Все работы вы выполняете на свой страх и риск. Обязательно делайте бэкапы сайта.

19

Об авторе:

DrMax. Занимаюсь аудитами, оценкой качества YMYL проектов и SEO сайтов более 20 лет. В настоящее время провожу аудиты и реанимирую трафик сайтов, восстанавливаю позиции в органической выдаче сайтов, помогаю снять алгоритмические и ручные штрафы Google. В портфолио - продвижение несколько десятков проектов как региональных частников, так и крупнейших мировых компаний. Владелец SEO блога Drmax.su. Автор 22 книг по продвижению и аудиту сайтов.
  Посмотрите еще

Комментарии

  1. Роман  2 февраля, 2018

    Здравствуйте. Большое спасибо за статью. Только вникаю в азы сайтостроения. Делаю свой первый инет магаз ). Сообщите пжалуйста, iS дополняет плагин Akismet Anti-Spam или они могут работать одновременно?

    ответ
    • DrMax  2 февраля, 2018

      Роман, это независимые плагины, каждый из которых делает свою работу.
      Акисмет — следит за отсутствием спама в комментариях
      IS — пытается противостоять взлому сайта.
      Они могут работать параллельно. Что, в принципе, и рекомендуется.

      ответ
  2. Николай  19 марта, 2018

    Более 2 лет использую плагин iThemes Security, было с ним всякое — и меня он на сайт не пускал, пришлось в БД залезать с хоста и удалять блокировки этого плагина. Частенько он пытается блокировать изменения в файлах, иногда лишний раз зря ругается на некоторые IP, но в целом он мне нравится.
    Использую его в паре с плагином Wordfence Security они друг друга дополняют, хотя с настройками необходимо быть очень внимательным, иначе можно натворить делов.
    Спасибо за этот пост, да и за полезный блог и книги в целом))

    ответ
  3. Felix  6 мая, 2018

    Очень конкретная и полезная информация для тех кто держат свои проекты на вордпрессе. Мне порадовала что есть инструменты которые помогают защитить свои проекты от взлома и компроментации своих данных. Автор молодец все четко и ноль воды.

    ответ
  4. Анатолий  9 мая, 2018

    Страшно только самому заниматься настройками плагинов такого рода. Потом беги на фриланс и ищи прогеров о помощи!

    ответ
    • DrMax  9 мая, 2018

      Если что-то пойдет не так, можно всегда
      1. просто удалить плагин (физически) из папки плагинов
      2. удалить .htaccess из корня сайта
      3. зайти в админку сайта в раздел ЧПУ и заново сохранить формат ЧПУ (пересоздаст .htaccess с минимально необходимыми настройками)

      ответ
  5. Павел  22 мая, 2018

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

    ответ
  6. Павел  22 мая, 2018

    Пришлось удалить его физически из папки plugins ) А скажите пожалуйста после такого удаления еще надо что то после него «чистить» или нет? Спасибо!

    ответ
  7. Павел  22 мая, 2018

    Еще рас установил плагин, глянул логи, там написан invald login. Но я то знаю что правильно вводил имейл свой) Убрал в настройках вход по имейлу, и сделал по имейлу или имени, и стало пускать по имени как раньше)

    ответ
    • DrMax  22 мая, 2018

      странно. Проверьте e/mail в Пользователях

      ответ
  8. Владимир  31 мая, 2018

    спасибо за ваш труд)) у меня такой вопрос: Основные настройки — Обязательно указываем свой IP адрес в белом списке блокировки: а если у меня динамический IP ? не активировать этот модуль?

    ответ
    • DrMax  31 мая, 2018

      Да этот белый IP на всякий пожарный нужен. Если с третьего раза (вернее с какого настроите) не зайдете в админку — то чтобы не заблокировало.
      Так что если IP динамический — ничего страшного, просто повнимательней при входе в админку.

      ответ
  9. Marina Zemina  9 июня, 2018

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

    ответ
    • DrMax  9 июня, 2018

      Спамим помаленьку ?

      ответ
  10. Владимир  11 октября, 2018

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

    ответ
    • DrMax  11 октября, 2018

      Владимир, день добрый.
      Запросто такое может быть. Попробуйте на время отключить.
      В принципе часть плагинов отключает произвольные поля — тот же ACF на 100% точно отключает https://ru.wordpress.org/plugins/advanced-custom-fields/
      Есть еще вариант, что у вас обновилась тема и она «давит» произвольные поля. У меня на сайте именно так и происходит.
      Есть мнение, что и Yoast SEO может приложить к этому руку.
      В целом если отключение и перебор плагинов ничего не дал, то попробуйте добавить в файл functions.php рабочей темы следующую мандулу:
      add_filter(‘acf/settings/remove_wp_meta_box’, ‘__return_false’);

      ответ
  11. Владимир  12 октября, 2018

    мандула не помогла) поэтапное отключение плагинов выявило что блочит — Advanced Custom Fields хотя он у меня стоит с момента запуска сайта. видать при обновлении плагина произошел глюк

    ответ
    • DrMax  12 октября, 2018

      Ну и гуд. Тут глюк не при обновлении плагина — они зачем то функционал такой добавили.

      ответ
  12. бригада будівельників  29 августа, 2019

    Круто, спасибо за советы, по любому возьмем на заметку.

    ответ

Добавить комментарий