Совсем недавно была обнаружена попытка взлома блога Catine.RU. И эта статья будет именно о том, как пытались взломать админку моего блога на WordPress. Вернее о том, как защитить wordpress от взлома, ведь именно этим я и занимался все утро.

Предыстория

Все началось именно с того, что мой хостер начал каждый день писать мне письма о том, что “Превышен лимит процессорного времени”. Вот оригинал одного из писем:

Тарифным планом вашей услуги "<Название услуги хостера />" предусмотрен лимит использование ресурса "Процессорное время" в количестве 36288 единиц в календарный месяц. В настоящий момент вы использовали 75% данного ресурса. Если в текущем календарном месяце вы полностью превысите данное ограничение, то предоставление услуги будет приостановлено до конца месяца.
Для избежание остановки рекомендуем вам перейти на более высокий тарифный план или, если это возможно, снизить потребление ресурсов.

Я обычно игнорировал такие сообщения, так как они падали не так часто на почту, да и я считал это нормальным, потому что WordPress система не из легких, да и куча плагинов на нем довольно много кушают ресурсов.

И почти каждый месяц, в числах двадцатых, мне приходили такие письма, которые я благополучно помещал в корзину. Меня не волновало это по одной простой причине – был конец месяца, а с начала месяца показатели процессорного времени обнуляются. Поэтому я не боялся блокировки.

Но тут случилось так, что это письмо пришло в середине месяца. Это меня и обеспокоило, так как если сейчас уже ругается хостер, то к концу месяца весь лимит может быть исчерпан.

Обнаружение попытки взлома

Так как на моем аккаунте у хостера располагалось еще несколько сайтов, помимо блога, то я логично предположил, что взломали их, что с них запускаются вредоносные скрипты, которым нужно много процессорного времени. Но эти ресурсы были мне не так важны, поэтому я удалил их. Но письма “счастья” продолжали приходить.

Вторым моим шагом было письмо в техническую поддержку, чтобы узнать что же есть мои ресурсы.

В ответ на мои вопросы получил следующую наводку, которой я безмерно благодарен:

Здравствуйте, Определить причину такого потребления ресурсов, можно проанализировав логи сайтов. Если посмотреть например лог сайта catine.ru за вчерашний день, то можно увидеть очень много таких запросов:
=======
216.58.248.30 - - [16/Aug/2014:13:34:01 +0400] "POST /wp-login.php HTTP/1.0" 302 - "-" "-"
216.58.248.30 - - [16/Aug/2014:13:34:01 +0400] "POST /wp-login.php HTTP/1.0" 302 - "-" "-"
216.58.248.30 - - [16/Aug/2014:13:34:02 +0400] "POST /wp-login.php HTTP/1.0" 302 - "-" "-"
216.58.248.30 - - [16/Aug/2014:13:34:02 +0400] "POST /wp-login.php HTTP/1.0" 302 - "-" "-"
=======
Скорее всего пытаются подобрать пароль. А с учётом того, что в секунду идёт несколько запросов, это в свою очередь создаёт нагрузку на процессор и потребляет процессорное время. Рекомендую Вам изменить адрес входа в админку CMS, либо ограничить доступ по ip адресу.

Это письмо мне очень помогло, так как именно благодаря ему я смог обнаружить брутфорс моей странички входа в CMS.

Как ограничить доступ в админку WordPress

В техподдержке мне посоветовали переименовать скрипт входа в админку, но для этого пришлось бы много вещей переписывать в самом WordPress. Да и никто не даст гарантию, что при обновлении вордпресс эти исправления не перезапишутся. Поэтому самым логичным решение было ограничить доступ к wp-login.php и wp-admin.

Простыми словами, мы ставим дополнительный уровень безопасности и заставляем перед входом на сайт произвести авторизацию на уровне Apache.

Для этого необходимо в файл .htaccess прописать следующее:

AuthType basic 
AuthName 'Enter your password' 
AuthUserFile 'путь_от_корня_хостина/.htpasswd'
<Files wp-login.php>
Require valid-user
</Files>

Также необходимо будет создать файл с паролем .htpasswd, но тут есть особенность – пароль нужно хранить в зашифрованном виде. Для этого надо будет зайти на сервис для генерации файла .htpasswd, вбить логин и пароль,затем сгенерировать.

ВНИМАНИЕ! Не стоит использовать в файле .htpasswd такой же пароль, как от админки самого wordpress.

В результате, вы получите файл .htpasswd такого типа: test:$apr1$1rJAwXfR$1OJojF4En1nk2X0q5ClTL/

Здесь спрятаны логин test с паролем test. Естественно у меня тут был другой логин и пароль на 22 знака.

Теперь при попытке зайти на страницу авторизации, вам надо будет пройти два уровня авторизации. Но это обезопасит ваш сайт, и снизит нагрузку на него.