Куда идем?

Одной из основных уязвимостей Joomla является отсутствие защиты панели администратора и формы авторизации от подбора пароля. Злоумышленник может пробовать ввести данные для авторизации сколь угодно много раз. Если автоматизировать этот процесс, то рано или поздно пароль будет подобран. В этой статье я расскажу о том, как обезопасить свой сайт от данной уязвимости.

Несложные расчеты или почему нельзя использовать пароль, который легко запомнить

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

«Так. Нужно придумать пароль для сайта. Я должен его всегда помнить. Может поставить дату рождения? Нет. Ее знаю не только я, а также все мои друзья Вконтакте. Нужно усложнить. Использую дату рождения тещи. Так точно никто не догадается.»

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

Что мы знаем:

  • Предположительно, пароль в виде даты
  • Предположительно, это дата рождения ныне живого человека
  • Год может быть представлен либо двумя последними цифрами, либо четырьмя, полностью
  • В году 365 дней

Теперь посчитаем. Количество вариантов = 365 дней * 2(тип года либо XX, либо 19XX(20XX))* 100(количество лет, которые предположительно может прожить человек) = 73000 вариантов.

«Много» – скажут некоторые. Да, для человека много. Для машины – мгновенье. Несложный дальнейший расчет.

Ставим перебор 73000 вариантов. Чтобы не перегрузить хостинг и не вызвать подозрений владельца, будем отправлять 1 вариант каждые 2 секунды. В сутках 86400 секунд. Значит, на подбор пароля-даты – вне зависимости от того, что это за дата, уйдет менее 2 суток. При этом работать будет только программа, а злоумышленник – попивать кофе.

Это же  относится и к паролям-словам.  

Теперь давайте разберемся, почему пароль, содержащий цифры и буквы (как заглавные, так и строчные) в достаточном количестве, безопасен. Английский алфавит состоит из 26 букв. Каждая может быть как строчной, так и заглавной. Добавим к этому еще 10 цифр (от 0 до 9). Получается, каждый из символов пароля может быть одним из 36 допустимых. При этом в символах нет какой-то закономерности. Если пароль состоит из 8 символов, то количество комбинаций будет 36^8 = 2.821.109.907.456 вариантов! При той же скорости подбора пароля на то, чтобы подобрать комбинацию, уйдет ~179 тысяч лет. Надеюсь, теперь становится понятно, почему все сервисы рекомендуют использовать сложные пароли.

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

Я советую в данной ситуации придумать закономерность, о которой знаете только вы и никто более. Далее, на основе этой закономерности составить пароль. Получается что-то вроде простого пароля, запароленного простым паролем :-)  . Это уже очень сложный пароль. Приведу пример. Пусть любимое блюдо моей жены «жареная морковка с горошком». Год ее рождения: 1234. Пусть моим паролем будет: «жаренаямарковкасгорошком1234». Уверяю, не догадается и не подберет никто. Мне же нужно только помнить, что пароль = любимое блюдо жены + ее год рождения. Согласитесь, это гораздо проще, чем запомнить 8 случайных букво-цифр.

Изменения адреса админки

Хорошо, мы придумали пароль, который легко запомнить и который никто никогда не подберет. Но вот проблема – хакер об этом не знает. Это означает, что он все равно будет пытаться подобрать пароль от админки. «Ну и что?» – скажете вы. Проблема в том, что подбор пароля предполагает постоянные запросы к серверу и ответы на них. Т.е. некоторая нагрузка на сервер, являющаяся совершенно бесполезной.  Для того, чтобы избежать этого, нужно пресекать попытки подбора пароля еще на стадии идеи.

Чтобы запустить робота на подбор пароля, для начала нужно найти форму, в которую робот будет вводить варианты. Поскольку Joomla открытая CMS, то адрес этой формы всем известен: site.ru/administrator. Но если изменить этот адрес, то подбор пароля превратится в поиски админки. Дело совершенно неблагодарное. Оно дает хакеру намек, что с простым перебором тут делать нечего, а также защищает админку от продвинутых ботов, которые выискивают сайты на Joomla, переходят по стандартному пути админки и пытаются подобрать пароль.

Чтобы изменить адрес админки можно использовать одно из следующих бесплатных расширений:

  • AdminExile – полезный плагин, позволяющий изменять адрес админки Joomla-сайта.
  • EasyCalcCheck PLUS – плагин, позволяющий защищать не только админку, но и многое другое.

Защита аккаунтов пользователей сайта

Админку мы защитили, но есть еще одна проблема. В большинстве своем Joomla-сайты предполагают авторизацию и с фронтенда (лицевой части сайта). При этом форма авторизации доступна всем желающим. Обычно имя пользователя показывается на сайте при его активности, а пароль можно попытаться подобрать перебором через форму авторизации. Да, может это не так серьезно, как взлом админки, но все-таки неприятно. В данном случае хакер может быть уверен, что далеко не все пользователи используют сложные пароли, потому как многие из них об этом не задумываются.

Как защитить форму авторизации от подбора пароля? Вариантов несколько и все они сводятся к следующему алгоритму: «если пользователь ввел неверный пароль N раз подряд, то запретить ему делать это на M минут, либо ограничить его действия дополнительной проверкой». Т.е., например, если пользователь неправильно ввел пароль 10 раз подряд, то на ближайшие 20 минут форма авторизации становится для него недоступной, либо появляется проверочная картинка, код с которой он должен ввести(captcha).

Вариант с блокировкой более радикальный и используется обычно тогда, когда ценность аккаунта высока (аккаунт содержит ценную информацию, деньги, и т. д.). Второй вариант не так хорош, но вызывает меньше негатива нерадивых пользователей, которые 10 раз подряд пытались вспомнить пароль. Все-таки блокировка на 30 минут расстраивает.

Реализовать способ с проверочной картинкой поможет все тот же EasyCalcCheck PLUS, если же нужна блокировка, можете воспользоваться плагином Brute Force Stop.

Кроме того, вы можете приобрести мое решение Wedal Recaptcha Login, которое позволяет защититься от подбора пароля на фронтенде.

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

Об авторе
Wedal
(Виталий). Веб-разработчик полного цикла (Full Stack). Создатель и автор сайта Wedal.ru.
Основной профиль – создание сайтов и расширений на CMS Joomla.
Добавить комментарий

Комментарии  
2
Спасибо за статью узнал о новых плагинах
4

Цитирую Wedal:

– AdminExile – полезный плагин, позволяющий изменять адрес админки Joomla-сайта;
– EasyCalcCheck PLUS – плагин, позволяющий защищать не только админку, но и многое другое.


Есть ещё прекрасная программа, которая позволяет не только изменить доступ к админке, но и банить те IP, которые будут долбиться в админку, - это jSecure.
Она вроде не бесплатная, но ломаную легко найти.
1
Установила AdminExile, теперь ломаю голову - как попасть к себе в панель управления сайтом? Админка исчезла. Неужели все заново переделывать?
0
Наталья, так вы бы хоть инструкцию на сайте разработчика прочитали, прежде, чем устанавливать. Там все подробно описано: и как зайти и как всё восстановить в случае чего.
1
С капчей тоже надо быть аккуратнее, поскольку есть сервисы, позволяющие её разгадывать за мизерную плату, например, http://anti-captcha.com. Таким образом процесс взлома остается автоматизированным и капча не представляет серьёзного препятствия для хакера.
0
Получается https://joomla.shneider-host.ru/blog/optimizatsiia-i-bezopasnost-joomla/kak-obezopasit-joomla тут ошибочное мнение? Или эти меры тоже нужны?
0
filler, в целом - да, нужны. Я согласен со всем, кроме перемещения configuration.php. Это уже паранойя.
0
А прокатит ли вариант на время брут форс атаки (например на месяц, на два) просто менять имя файла index.php в папке адимин панели на нечто несуразное типа 123_index.php и только когда нужно что либо изменить через панель управления, просто временно переименовывать файл назад в index.php. Такой вариант будет работать?
0
Dzyanis, нет. Лучше в этом случае защитить админку дополнительным паролем через .htaccess (гуглите, примеров реализации много, это очень просто) и установить сложный длинный пароль. При обращении к админке, вредоносный скрипт будет получать форму авторизации, которая обрабатывается сервером без участия php и базы данных. Нагрузка при этом будет минимальной.
0
Ok, спасибо, в этом есть смысл.
2
Очень информативные статьи! Я прям тут на долго завис :D Спасибо, автор!
0
Не могу войти на сайт панели управления. Хоть бы написали, что запишите куда нибудь новый адрес и не пишите такой же адрес, скажем как в моем случае. Теперь все я нечего не могу настроить.
0
Виктор, о каком именно расширении идет речь?
0
Ошибка: Но вот проблема – хакет об этом не знает
0
iygv, спасибо, исправлено.
0
Друже, я впервые занимаюсь этим всем и использую пошагово твое руководство, снова благодарю!
0
Для защиты панели администратора по IP нужно закрыть доступ к скриптам панели администратора всем, кроме тех, у кого IP адрес совпадает с указанным. Для этого нужно: ваш хостинг > public_html > administrator > .htaccess (создаем если нету такого файла) и прописываем в ней следующее:

Order deny,allow
Deny from all
Allow from 1.2.3.4

Где 1.2.3.4 — это разрешенный IP адрес администратора сайта.
Посмотреть свой IP адрес можно на сайте http://myip.ru/