Защита CMS WordPress от атак на /wp-admin.

Как защитить Админ-панель CMS WordPress от участившихся Brute-force-атак ботами.

по материалам xaker.ru, sucuri.net и hostgator.com.
Безопасность WordPress

В первой половине Апреля 2013 ведущие ресурсы по безопасности в интернете сообщают — число атак на сайты с CMS WordPress значительно возросло и достигло значений в 770000 тысяч зафиксированных случаев брутфорс-флуда (простой перебор логинов и паролей) за первые 10 дней месяца. Подобные атаки на админку вордпресса продолжаются уже довольно значительное время, например в декабре 2012 года было заблокировано 670 тысяч попыток доступа.
Боты используют в качестве имени пользователя для авторизации такие значения (в порядке убывания популярности):

admin
test
administrator
Admin
root

Наибольшее количество атак (порядка 40 тысяч в сутки) идет с
ip-адреса 31.184.238.38 (WhoIs Info).
Хостинг-провайдеры, специализирующиеся на WP, сетуют на возросшую нагрузку серверов в связи с активностью бот-нета. Всего детектировано порядка 90 тысяч автоматических скриптов(ботов), участвующих в этой кампании.
Даже на этот блог, который был установлен 15 апреля, 17 апреля уже были попытки Логина с ip-адреса 188.190.99.143 (WhoIs Info). Поэтому первым постом идет информация о самых простых и логичных в данной ситуации способах защиты админки WordPress.

Защита Админки WP.

Простейшие шаги для предотвращения несанкционированного доступа:

  • Не оставляйте login по умолчанию — admin, никогда не используйте банальные 123, test или qwerty для паролей или логинов, в идеале, пользуйтесь всегда генератором случайных паролей, генерируйте разные пароли для разных сайтов
  • В CMS WP узнать реальный login пользователя не составляет проблемы, поэтому, если вы не хотите прибегать к редактированию CSS-файлов или правке function.php, wp-config.php, .htaccess и .htpasswd (процедуры по сокрытию реального Логина администратора будут подробно описаны во второй части статьи), рекомендуется установить Плагин Stealth Login, это работает лучше, чем ничего, но уровень защиты достаточен только для отражения атаки школьников.
    stealth-login-wordpress-plugin
    В настройках плагина видим следующее:
    Заполнив две графы, опять же генерированным текстом, отметив нужные чекбоксы, жмем «Сохранить настройки» — Строчкой ниже появляется желанная ссыль.
  • Продолжая тему «Готовых Решений» — Безопасности блога нисколько не помешает установка таких популярных Плагинов, как:
    1. Login LockDown
      WordPress-plugin login LockDown optionsОпции:
      • Количество попыток Логина.
      • Время ограничения попыток на повторный вход.
      • Время Бана для IP, с которого была неудачная попытка входа с использованием неверного Логина.
      • Включает предыдущую опцию.
      • Включает Маскировку Ошибок входа.
      • Кнопка — Обновить настройки.
      • Кнопка — Разбанить отмеченные IP.

       

       

       

       

       

       

    2. Secure WordPress
      WordPress-plugin-WP-Security
    3. WordPress Firewall
      WP-firewall-plugin
  • База данных CMS тоже под угрозой — используйте префикс таблиц, отличный от заданного по умолчанию «wp_», имя пользователя БД и его пароль сгенерировать.

Для генерации паролей удобно использовать следующие расширения для популярных браузеров:
PassGen — для Opera
Strong Password Generator — для Google Chrome
PwGen — для Mozilla Firefox
Ищите данные расширения в репозиториях для соответствующих браузеров.

Рассмотрим следующую таблицу (источник — Wikipedia Полный_перебор):

Кол-во знаков Кол-во вариантов Стойкость Время перебора
1 36 5 бит менее секунды
2 1296 10 бит менее секунды
3 46 656 15 бит менее секунды
4 1 679 616 21 бит 17 секунд
5 60 466 176 26 бит 10 минут
6 2 176 782 336 31 бит 6 часов
7 78 364 164 096 36 бит 9 дней
8 2,821 109 9×1012 41 бит 11 месяцев
9 1,015 599 5×1014 46 бит 32 года
10 3,656 158 4×1015 52 бита 1 162 года
11 1,316 217 0x1017 58 бит 41 823 года
12 4,738 381 3×1018 62 бита 1 505 615 лет

Данная таблица предполагает использование пароля из набора в 36 символов (латинские буквы и цифры), и вычислительные мощности в 100000 паролей в секунду (весьма скромные цифры в современных реалиях).
Следовательно — пароли длинной до 8 символов, состоящие только из букв и цифр, паролями вообще называть нет смысла, они являются простой формальностью, при условии, что известен реальный Логин администратора. К счастью, сейчас на большинстве сайтов есть возможность использовать в паролях буквы нижнего/верхнего регистра и специальные символы (^%$#&@*).
В связи с вышесказанным, убедитесь что ваши пароли на всех сайтах содержат буквы в разных регистрах, цифры, и спецсимволы, а также имеют длинну более 8 символов.

Пропишите ваши уникальные ключи безопасности в файле wp-config.php

wp-config.php — это файл конфигурации CMS WP, здесь хранятся настройки движка. Находится файл в корне CMS.
Найдите в файле строки:

define('AUTH_KEY', '***');
define('SECURE_AUTH_KEY', '***');
define('LOGGED_IN_KEY', '***');
define('NONCE_KEY', '***');
define('AUTH_SALT', '***');
define('SECURE_AUTH_SALT','***');
define('LOGGED_IN_SALT','***');
define('NONCE_SALT','***');

Вместо *** необходимо вписать свои значения ключей безопасности. Сгенерировать подходящие можно на сайте wordpress_secret-key.
Для новых версий/для версий ниже 2.6.0
С помощью замены этих ключей также можно сделать недействительными cookies посетителей сайта если это необходимо. То есть всем пользователям придётся логиниться заново.
Если сервер для вашего хостинга поддерживает SSL-шифрование, можно включить данный протокол для административной части сайта через тот же wp-config.php (настройки Сертификатов Безопасности будут рассмотрены во второй части статьи):

define(‘FORCE_SSL_ADMIN’, True)

Использование .htaccess и .htpasswd

Следующим шагом в деле защиты админ-панели WordPress будет использование для этой цели служебных файлов вашего web-server. Если ваш unix-хостинг работает с Apache, а это в 90% случаев именно так, рекомендуем обратиться к файлам .htaccess и .htpasswd в корне директории вашего сайта.

Редактировать их можно с помощью обычного блокнота windows (не забывайте создать резервную копию), но вы must_have notepad++ (это мощный, легкий и бесплатный редактор для кода)

Запрещаем доступ к файлу wp-config.php по протоколу http для всех ip-адресов:

<files wp-config.php>
Order deny, allow
deny from all
</files>

Прописать данное правило необходимо в файле .htaccess для директории нахождения файла конфигурации (wp-config.php) — Обычно это корень сайта,
Но! Начиная с версии WP 2.6.0 появилась замечательная возможность!
Вы можете перенести ваш wp-config.php на один уровень выше корня и движок самостоятельно, без каких-либо действий с вашей стороны, обнаружит его там.
Для переноса файла вам, конечно, нужен непосредственный и полноценный доступ по FTP к структуре каталогов веб-сервера, у всех нормальных хостинг-провайдеров такая возможность есть. Если вы не можете перенести ваши файлы куда угодно в пределах выделенной вам полезной площади на сервере, смените хостинг.
То есть, если вы перенесли конфигурационный файл — в директории с ним не забудьте отредактировать файл .htaccess с кодом, указанным выше. Если файл отсутствует — создайте его.
Теперь злоумышленнику будет необходимо получить доступ к вашему FTP, чтобы изменить конфигурацию, или узнать пароль и логин от базы данных, которые хранятся в этом файле. Или же просто перехватить ваш трафик, предварительно вычислив ваше месторасположение, но зачем ему ради пары вирусов сидеть и настраивать скрипт для вашего сайта, ведь в интернете существует превеликое множество абсолютно незащищенных страниц. В любом случае, получив доступ к FTP, злоумышленник сможет сделать с сайтом всё что угодно.

Переходим к работе с .htpasswd

.htpasswd работает в паре с .htaccess. По умолчанию, никакого файла .htpasswd в корне сайта вы не найдете. Вы должны создать его. Можно создать в каталоге wp-admin (1), а можно поступить ещё более запутанным способом, разместив его, например, в папке httpdocs вашего сервера (2), если у вас есть доступ, и веб-сервером является Apache.
.htpasswd предназначен для хранения паролей и другой служебной информации при ограничении доступа по http и https протоколам с помощью файла .htaccess.
Как это работает:

  1. В директории, куда нам надо ограничить доступ, в данном случае /wp-admin, создаём файл .htaccess, следующего содержания
  2. AuthType Basic
    AuthName "***"
    AuthUserFile /yourhosting/ваш хостинг.ru/httpdocs/example.com/wp-admin/.htpasswd
    Require valid-user

    Где:
    AuthName «***» — это сообщение сервера, в примере на картинке — это «adm»
    .htaccess-auth-firefox
    AuthUserFile /yourhosting/ваш хостинг.ru/httpdocs/example.com/.htpasswd — полный путь к файлу с паролями для случая (1), в случае (2) — путь соответственно корректируем.

  3. Для unix-серверов пароль должен храниться в зашифрованном виде, поэтому проще всего будет воспользоваться сервисом для генерирования .htpasswd по адресу http://www.htaccesstools.com/htpasswd-generator/
    Там же вы найдёте другие полезные инструменты:
    Аутентификация .htaccess
    Мини-скрипт для определения пути к файлу на сервере
  4. Генерируем файлы, правим путь, заливаем по FTP на сервер
  5. ???
  6. PROFIT!

Дополнительные меры безопасности

Среди других рекомендаций по защите админ-панели WordPress можно выделить удаление Пользователя с id#1, то есть учетной записи администратора Блога, создаваемой при установке CMS, Именно на неё большинство атак. Или же, при необходимости, можно не удалять запись, а понизить роль с администратора до подписчика. Делается это так:

  • cоздаем новую учетную запись с ролью администратора
  • выходим из панели и логинимся под новой записью
  • удаляем или изменяем роль предыдущей

user-remove
И не забывайте вовремя устанавливать обновления для WP и плагинов.

О других методах защиты и обнаруженных уязвимостях в WordPress будет рассказано во второй части статьи по данной теме.
new-style-to-ride

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *