Статья не является 100%-универсальным рецептом излечения сайта, но возможно, поможет вам в решении этой проблемы.
Профилактические меры против взлома сайта на Joomla
- При установке системы создавать для администратора надежный пароль. Надежным паролем можно назвать пароль, длина которого составляет не менее 8 символов. Он должен состоять из букв, цифр, спецсимволов (например: *, _, $);
- По-умолчанию, логином администратора в системе является "admin". Рекомендуется заменить логин администратора на какой-нибудь другой;
- Необходимо запретить посетителям сайта регистрироваться самостоятельно. Сделать это можно в настройках сайта в административной части: Система→Общие настройки→Менеджер пользователей→Разрешить регистрацию пользователей поставить переключатель в положение «Нет»;
- Необходимо отказаться от сохранения паролей в браузере, FTP и SSH клиентах.
- Желательно скрыть страницу входа в административную панель сайта. Сделать это можно, например, с помощью плагина AdminExile;
- Устанавливать сторонние модули и компоненты, полученные из надежного источника (сайта разработчика). Перед установкой убедиться в отсутствии уязвимости в коде компонента. Для этого можно поискать устанавливаем компонент на странице: https://vel.joomla.org/live-vel;
- Постоянно следить за обновлениями системы, а также сторонних модулей и компонентов, которые вы установили на сайт;
- Необходимо периодически (например, 1 раз в 3 месяца) менять пароли на доступ к сайту, а именно: к административной части сайта, FTP и SSH, а также доступ к серверу БД;
- Периодически делать резервное копирование вашего сайта (файлов и БД). Очень хорошо с этой задачей справляется компонент Akeeba Backup;
- Установить на сервер скрипт tripwire.php и запускать его по расписанию (с помощью cron). Этот скрипт отслеживает изменения в файлах и сообщает об этом на электронную почту, адрес которой должен быть указан в настройках скрипта.
Меры по удалению вредоносного кода на сайте и обнаружению уязвимостей
В идеале поиском уязвимостей на вашем сайте (в случае его взлома и заражения вредоносным кодом) должен заниматься специалист по безопасности, но если нет возможности обратиться к такому специалисту, можно попробовать найти уязвимость, которой воспользовался злоумышленник, самостоятельно. Конечно, 100%-ной гарантии в этом случае нет, но можно попробовать это сделать.
Известие о том, что на вашем сайте обнаружен вредоносный код, скорее всего вы получите от техподдержки вашего провайдера, либо увидите эту информацию на страницах сервиса Яндекс.Вебмастер.
Если вы периодически заходите на свой аккаунт через FTP, то вероятно обнаружите признаки заражения самостоятельно. Они выражаются в появлении в структуре сайта различных папок и файлов, которые были созданы злоумышленником.
Обычно имена вредоносных файлов маскируются под нормальные файлы CMS. Например, в моем случае были обнаружен файлы с именами language.php, jm_license.php, php_ini.php и другие. Однако, вы можете и не обнаружить их, потому что, как правило, эти файлы "прячутся" поглубже в структуре сайта. Например, в папке со стилями шаблона сайта или в папках с файлами отображения (вида, например - /components/com_mailto/views/interface.php) какого-либо модуля или компонента.
Внутри файлов код, как правило, также «спрятан»: размещен с большими отступами от левого края. Увидеть его можно только если воспользоваться горизонтальной полосой прокрутки. Сделано это в расчете на то,что на нее просто не обратят внимания.
В любом случае, каким бы способом вы не узнали об этой неприятности, необходимо предпринять следующее:
- Скачать все файлы и проверить их антивирусом. Для этого я использовал DrWeb Security Space, который на мой взгляд справился с этой задачей очень достойно и нашел очень много файлов с вредоносным кодом. Важно, чтобы антивирусные базы были свежими, иначе вы можете просто не обнаружить все вирусы;
- Если вдруг у вас «под рукой» не оказалось антивируса, вы можете зайти на ваш аккаунт через SSH и осуществить поиск вхождений вредоносного кода в php-файлах (например, поиск в коде вызова функции base64). Для этого можно воспользоваться утилитами find, grep, xargs. По сравнению с поиском кода антивирусом, этот способ является менее надежным;
- В случае, если обнаруженные файлы не являются частью системы - удалить их с сервера. Может случиться так, что вредоносный код внедряется в файлы компонентов CMS Joomla. В этом случае необходимо удалить его из файла, либо заменить зараженный файл ранней резервной копией;
- Проверьте файл .htaccess на предмет различных редиректов, которые вы не добавляли сами;
Нужно постараться найти все файлы, содержащие вредоносный код и удалить их. После этого обязательно сменить все пароли, обновить CMS и ее компоненты, а также отключить компоненты, в безопасности которых вы сомневаетесь (например, компоненты, написанные вами). После этого начать искать уязвимость в системе.
В этом очень большую помощь вам могут оказать логи доступа к сайту (access_log). Особенно если вы знаете дату первого появления вредоносного кода на сайте. Также запросите у техподдержки вашего хостинга логи доступа к вашему аккаунту по FTP и SSH.
Ознакомившись с ними вы сможете обнаружить или исключить доступ злоумышленника к файлам вашего сайта через FTP или SSH.
Необходимо внимательно изучить логи. Что нужно искать в логах? Ну, во-первых, вызов компонентов Joomla с необычными параметрами. Вызов добавленных злоумышленником вредоносных файлов, обнаруженных антивирусом или перечисленными выше утилитами.
Например, если вы обнаружили вызов вредоносного скрипта в определенный момент времени, а потом в логе доступа через FTP обнаружили запись о доступе к аккаунту приблизительно в то же время, то можно будет предположить, что несанкционированный доступ через FTP.
Возможна другая ситуация: после обнаружения и удаления файлов вы сменили пароль доступа к админке сайта и логин администратора. После этого продолжая следить за логами доступа, обнаружили частое обращение к административной части сайта (файл - /administrator/index.php) методами GET и POST.
Как правило, это свидетельствует о попытках подбора пароля для доступа к админке сайта. Если после этого вредоносный код больше не появляется, то можно предположить, что у вас был ненадежный пароль администратора, который был взломан.
Обратите внимание, что через админ-панель сайта залить файлы можно только в папку с картинками (/images/), а также в папки с шаблонами сайта (/templates/имя_шаблона/).
Поэтому, если вы изначально обнаружили вредоносный код именно в этих папках, это аргумент в пользу того, что злоумышленник получил доступ к админке сайта, путем подбора пароля.
Также вам не помешает постоянное взаимодействие с техподдержкой хостинга в рамках этой проблемы. Обычно, техподдержка не решает проблемы такого рода, но может оказать вам определенную помощь. К тому же, если вы не будете предпринимать никаких действий для обнаружения уязвимости - вам аккаунт может быть заблокирован.
На самом деле универсального рецепта поиска уязвимостей нет. Нужно пробовать различные варианты и возможно через некоторое время вы обнаружите «дыру», через которую «влез» злоумышленник.
Ну и в заключении хотелось бы посоветовать соблюдать элементарные правила, перечисленные в начале статьи, ведь это может защитить ваш сайт от взлома, а вам сэкономит много времени, нервов и, возможно, денег.