Одной из основных уязвимостей 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, которое позволяет защититься от подбора пароля на фронтенде.
В каждом конкретном случае нужно анализировать уровень угрозы подбора пароля и использовать подходящие защитные механизмы. Надеюсь, воспользовавшись этими советами, вы сможете обезопасить свой сайт от одной их самых распространенных атак.
Есть ещё прекрасная программа, которая позволяет не только изменить доступ к админке, но и банить те IP, которые будут долбиться в админку, - это jSecure.
Она вроде не бесплатная, но ломаную легко найти.
Order deny,allow
Deny from all
Allow from 1.2.3.4
Где 1.2.3.4 — это разрешенный IP адрес администратора сайта.
Посмотреть свой IP адрес можно на сайте http://myip.ru/