CMS WordPress является достаточно популярной платформой для ведения блогов и создания сайтов. Это же автоматически подразумевает большое количество желающих использовать Ваш сайт для своих целей:
- перехват и перепродажа трафика
- размещение ссылок
- создание бота на Вашем сервере/сайте
- отправка спама



"У меня маленький сайт-блог, зачем мне его защищать и от кого?"

Немного печальной статистики. Скажем так, сейчас в 90% на Вашем сайте пасутся боты, а не живые люди.

Пусть есть скромный блог на 300 посетителей в месяц = т.е. в среднем 10 посетителей в день.

Что это значит? Статистика зафиксировала 10 входов с браузера и скорее всего это живые люди.

А теперь посмотрим на входы со стороны ботов.

1. Подбор комбинаций в адресной строке браузера - ошибка "404". Попытки проверить установленные плагины, правильность ограничения доступа к самим файлам CMS на сервере и пр.

1000 попыток в сутки с разных IP

2. Подбор комбинаций  логин/пароль к админке

100 попыток в сутки, причем мы помним, что у WordPress две админки - для браузера и мобильный вариант

3. Отправки писем через форму на сайте

200 писем в день, их них 50 с рекламой, остальные 50 - с пустым полем "сообщение", там были спецсимволы для взлома

4. Попытки зайти напрямую в базу данных и дописать свои таблицы (фактически страницы с рекламой)

для этого пытаются взломать wp-config.php - там пара логин/пароль к базе в открытом виде

5. Попытки взломать FTP и загрузить свой скрипт 

Или рассылка спама или перехват управления Вашим блогом


После серьезной атаки только наличие актуальной копии позволит восстановить рабочий сайт. При заражении сайта практически невозможно его отремонтировать на 100%. В движке порядка 4000 файлов, все их вычистить от вирусов очень сложно. Где-то что-то останется, какие-то функции после очистки сломаются. А наличие бэкапа позволит восстановить сайт на 100%. Это вообще полезное мероприятие - периодически делать полные бэкапы.
Для создания backup можно использовать или ресурсы хостинга или установить плагин BackWPup, который как понятно из названия, копирует весь Ваш сайт (все файлы и базу MySql) в облако (например DropBox).


Основных векторов атаки несколько.

Общая структура папки Вашего сайта на WordPress (на сервере хостинга) следующая



Сайт сайт запускается файлом index.php в корневой папке.
Административная панель запускается файлом index.php в папке wp-admin

Существует два варианта входа в систему управления сайтом:

- через браузер в административную панель
вход или site.ru/wp-admin (тут расположена сама панель управления) или site.ru/wp-login.php (проверка логина/пароля)

- через мобильное приложение (Android / iOS), см. ниже - указываем логин/пароль и сайт (уже без "хвостика" /wp-admin)



после проверки логина/пароля в файле wp-login.php происходит переход к файлу xmlrpc.php, вид самой мобильной панели управления зависит от используемого приложения.

Итого нам надо перекрыть (добавить проверку на уровне сервера) три пути входа:
- файл проверки логина/пароля site.ru/wp-login.php
- административную панель (папка) через браузер site.ru/wp-admin
- файл для работы с мобильным приложением site.ru/xmlrpc.php

ВАЖНО: часть плагинов использует модули, которые хранятся в папке wp-admin. Если закрыть всю папку паролем сервера - то часть плагинов перестанут работать = можно закрыть паролем только index.php в папке wp-admin

Т.е. делаем защиту вот так:
- сам модуль проверки пароля site.ru/wp-login.php страхуем плагином WordPress 
- индексный файл в админке site.ru/wp-admin/index.php закрываем паролем сервера 
- файл для работы с мобильным приложением site.ru/xmlrpc.php закрываем паролем сервера

Итого у нас будет два файла .htaccess

- один в корневой папке (настройки WP оригинальные, защита от выдачи логина, защита файла site.ru/xmlrpc.php)

<Files xmlrpc.php>
AuthType Basic
AuthName "That's protected Area!"
AuthUserFile /home/uXXXX/.htpasswd
require valid-user
</Files>


- второй в админке, в папке wp-admin (защита файла site.ru/wp-admin/index.php)

<Files index.php>
AuthType Basic
AuthName "That's protected Area!"
AuthUserFile /home/uXXXX/.htpasswd
require valid-user
</Files>


Важно:

Если Вы установили пароль на файл index.php в папке /wp-admin, то при обращении из адресной строки именно к папке ничего работать не будет :(
Вот такая конструкция со стандартным входом в админку http://site.ru/wp-admin будет давать ошибку авторизации (на самой папке пароля нет, пароль на файле index.php, куда по умолчанию обращается сервер)

Unauthorized

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.

Не авторизовано

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


Вот-вот. Браузер не понимает. Вот тут проблема.

Конструкция полностью с указанием защищенного файла http://site.ru/wp-admin/index.php будет работать - но набирать неудобно.
Если у Вас установлен плагин переадресации WordPress - то делаем проще, с удобного несуществующего адреса (какой Вам хочется) на этот файл, например:

http://site.ru/admin -> http://site.ru/wp-admin/index.php

или еще короче

http://site.ru/a -> http://site.ru/wp-admin/index.php

Бинго! Всё удобно работает.

Взлом с использованием выявленных уязвимостей WordPress - скрываем информацию о текущей версии.

В свежеустановленной системе информация о версии показывается:
- в коде любой страницы
ищем <meta name="generator" content="WordPress 4.4.2" />

- в коде ленты RSS по адресу http://site.ru/feed/
ищем <generator>https://wordpress.org/?v=4.6.4</generator>

- в файле site.ru/readme.html
Важно: если Вы уже установили защиту папки /wp-admin, то файл просто так у злоумышленника не откроется, будет запрошен логин/пароль сервера, т.к. в этом файле есть отсылки к данным внутри административной панели.

- в коде страницы входа

site.ru/wp-login.php

- в файле русификации движка по адресу
site.ru/wp-content/languages/ru_RU.po

Смотрим исходный код страницы, ищем "ver" в подключениях таблиц стилей

1 <link rel='stylesheet' id='buttons-css'  href='https://www.site.com/wp-includes/css/buttons.min.css?ver=4.4.2' type='text/css' media='all' />
2 <link rel='stylesheet' id='dashicons-css'  href='https://www.site.com/wp-includes/css/dashicons.min.css?ver=4.4.2' type='text/css' media='all' />
3 <link rel='stylesheet' id='login-css'  href='https://www.site.com/wp-admin/css/login.min.css?ver=4.4.2' type='text/css' media='all' />


Список плагинов для безопасности WordPress можно посмотреть 

http://ahawks.ru/wordpress/plagin/plagin-dlya-zashhity-wordpress-sajta-2.html
  • Как скрыть логин пользователя WordPress (4408)

    Посмотрим статистику.Для начала устанавливаем плагин Activity Log (логгирование действий пользователей), активируемИ видим следующие картинуКто все эти люди и откуда они знают мой логин? Это не люди мучают клавиатуру с ручным подбором паролей, это боты (зараженные компьютеры). Точнее даже не компьютеры, а...

  • Защита WordPress (891)

    CMS WordPress является достаточно популярной платформой для ведения блогов и создания сайтов. Это же автоматически подразумевает большое количество желающих использовать Ваш сайт для своих целей:- перехват и перепродажа трафика- размещение ссылок- создание бота на Вашем сервере/сайте- отправка...

  • Защита базы данных сайта MySql (229)

    База данных на сервере хостинга - основное место, где хранятся "детальки" (текстовые данные в основном) от Вашего сайта. Если туда что-либо записать лишнего - то движок WordPress это и покажет = и это уже будет не Ваш сайт :( Прямая атака на базу MySql По умолчанию, при установке WordPress создает в базе...