Предположим, что в один «прекрасный» день хостер или Яндекс.Вебмастер сообщили вам, что на вашем сайте обнаружены вредоносные скрипты. Первые мысли, которые приходят в голову после такой новости: «Да как так? Почему мой сайт? У нас ведь маленькая компания. Кто? Конкуренты? Зачем? Как?».
Давайте, в первую очередь, разберемся в теоретических причинах заражения. Предположим, что у вас действительно не столь посещаемый сайт, чтобы заинтересовать хакеров (его посещают десятки – сотни человек ежедневно). Кто, зачем и как заразил ваш сайт?
Не стоит сразу перебирать врагов и конкурентов. Скорее всего, заражение вашего сайта – это случайность и опосредовано, виноваты в нем ВЫ (или веб-мастер, который отвечает за ваш сайт компании).
Вы спросите: «Каким образом?». Приведу пример из обычной жизни. Скоро зима. Ожидается эпидемия гриппа. Вам уже все уши прожужжали о необходимости прививки, гигиены, избегания многолюдных мест в пик эпидемии. Но вы решили: «Фу, ерунда какая! Уже столько лет живу и не болею без всяких там прививок и советов!» и проигнорировали все предостережения. Пришла зима. Вы заразились гриппом. Кого в этом винить? Человека, который чихнул на вас? Или, может быть, государство, которое насильно не вкололо вам вакцину? Или, все-таки, себя любимого?
С большой долей вероятности точно также получилось и с вашим сайтом.
Спросите себя:
- Я регулярно обновляю Joomla и все используемые на сайте расширения?
- Я изменил стандартный адрес админки?
- На компьютере, с которого я вхожу в админку сайта, есть антивирус?
Невыполнение хотя бы одного из этих трех пунктов уже подвергает ваш сайт высокому риску.
Дальше в дело вступает лотерея. Предположим, в один прекрасный день кто-то обнаружил уязвимость в Joomla. Он отправил информацию о ней разработчикам Joomla. Они исправили уязвимость и выпустили обновленную версию. Через некоторое время о найденной уязвимости становится известно широкой публике, в которой встречаются и не очень хорошие личности. Одна из таких личностей пишет паука – программу, которая сканирует интернет на предмет поиска необновлённых сайтов с этой уязвимостью и, находя их, использует уязвимость для взлома.
Ну, вот скажите мне, кто здесь виноват? Сначала неопытные веб-мастера нагружают сайт на Joomla десятком-другим сторонних расширений, потом передают такой сайт заказчику, берут оплату и удаляются. Заказчик не очень в теме по поводу обновлений и уязвимостей. Он работает с контентом сайта. Так проходит пара лет. Потом сайт находит паук, настроенный на эксплуатацию одной из свежих уязвимостей в одном из расширений Joomla, установленных на сайте. А потом заказчик и веб-мастер, который делал сайт, в два горла кричат, что Joomla – дырявый движок.
Конечно, нельзя исключать и целенаправленной хакерской атаки на ваш сайт, но вероятность такой атаки очень мала по сравнению с тем, что вы поймали паука. Я бы сказал, 1% против 99%. С ростом популярности, посещаемости и показателей вашего сайта вероятность будет смещаться в сторону хакерской атаки, но пока ваш сайт не содержит ничего особо ценного, хакеры не будут тратить на него время, т.к. их время стоит дороже.
В общем, наиболее вероятные первопричины заражения должны быть вам ясны. Можно вырвать у себя на голове пару клоков волос, пару раз удариться головой о стену со словами «#@@*$#!!!» (или ударить головой о стену веб-мастера, который обслуживал сайт =)) и после этого приступать к лечению сайта.
Мой сайт заражен. Что делать?
Ваш сайт заражен. Чтобы вылечить его, а предлагаю вам использовать инструкцию, состоящую из 10 шагов. Выполнять шаги нужно последовательно, а не в произвольном порядке.
Шаг 1. Резервная копия.
Если ваш сайт заражен, то по уровню халатности вы попадаете в одну из двух категорий:
- Я регулярно делаю резервные копии своего сайта / Я настроил регулярное резервное копирование на хостинге.
- Резервные копии? Ээээ… Что это?
Если вы попали в первую категорию, то у меня для вас хорошие новости: вам не придется лечить сайт от вирусов. Просто восстановите резервную копию и переходите к шагу 7.
Если же вы попадаете во вторую категорию, то придется попотеть, либо потратиться на специалиста. Кроме того, для вас есть и очень плохая новость:
При чистке сайта от вирусов нет, и не может быть никакой гарантии полного излечения.
Давайте разберемся почему.
Представим столь популярные нынче фильмы про зомби. Один человек стал зомби, потом он покусал другого, тот третьего и так заразилось половина планеты. Спустя некоторое время человечество опомнилось и уничтожило всех зараженных. Воцарился мир и спокойствие. Спустя еще некоторое время оказалось, что в каком-то глубоком темном подвале оставался еще один зараженный, которого не смогли обнаружить. И затем в этот подвал зашел здоровый человек…
Примерно такой же принцип в заражении сайта. Файлы сайта, коих несколько тысяч, могут быть изменены. Также могут быть добавлены новые файлы, с названиями, которые себя ничем не выдают. Вирус может записать себя в любые каталоги и файлы файловой структуры сайта. Потом сайт почистят от вирусов. Все зараженные файлы удалят. Но где гарантия, что один из таких файлов не будет упущен? Ее нет. А такой файл может, в конечном итоге, привести к повторному заражению всего сайта.
Всё это не значит, что нужно опустить руки и пойти делать новый сайт. Всё-таки, шаги, описанные далее, позволяют в высокой долей вероятности вычистить весь вредоносный код, до последней строчки.
Подведем итог шага 1.
- Если вы делали резервные копии, найдите ту из них, которая еще не заражена и восстановите из нее сайт. Далее переходите к шагу 7.
- Если вы не делали резервные копии, будьте готовы к тому, что никто не даст вам 100% гарантии на полную отчистку сайта от вирусов. Переходите к шагу 2.
Шаг 2. Создание копии сайта и первичная проверка.
Если вы читаете данный шаг, то поздравляю, ваша халатность на высоте. Но нужно и в этом искать плюсы. Вы научитесь лечить сайты, а также узнаете много нового о работе с ними. Эти знания, определенно, будут вам полезны, как владельцу сайта.
На данном этапе вам нужно создать локальную копию файловой структуры сайта. Создайте на хостинге архив с фалами сайта и скачайте его на свой компьютер. Если вы не знаете, как это делается, обратитесь в тех. поддержку хостинга с просьбой создать и выслать вам копию сайта.
Стандартный Joomla-сайт состоит из двух частей:
- Файловая система сайта
- База данных
Вредоносный код может быть и в файлах и в базе данных, но всё-таки наиболее вероятно найти его в файлах.
После того, как вы скачали архив с файлами сайта и развернули у себя на локальном компьютере, проверьте его хорошим антивирусом, например Касперским. У антивирусных компаний есть бесплатные инструменты для разовых проверок. Воспользуйтесь одним из них:
- Kaspersky Virus Removal Tool
- Dr.Web CureIt!
Если у вас есть лицензионный обновленный антивирус на компьютере, то можете использовать его.
Антивирусы для операционных систем не предназначены для лечения сайтов, но, тем не менее, некоторую долю вирусов они могут обнаружить и удалить. Всё-таки, это наиболее профессиональные инструменты. Не стоит ими пренебрегать.
После проверки будет найдено несколько вирусов или не найдено ничего. Найденные зараженные файлы лечим (вручную отчищаем от вредоносного кода) или удаляем. Переходим к шагу 3.
Шаг 3. Проверка специализированными инструментами
На этом этапе разминка закончилась. Впереди рутиный и нудный труд. Пришло время проверить зараженный сайт специализированным средствами поиска вредоносного кода. К таковым относятся:
- AiBolit – бесплатный сканер вирусов и вредоносных скриптов. Он удобен тем, что может быть очень легко запущен под Windows.
- Manul – антивирусная утилита от Яндекса.
Советую использовать AiBolit, поскольку проект Manul закрыт Яндексом и более не обновляется. По результатам проверки для вас будет сгенерирован отчет о подозрительных файлах и уязвимостях.
Проверка AiBolit.
- Скачиваете с официального сайта AiBolit для Windows.
- Копируйте файлы зараженного сайта в папку site.
- Запускаете файл start.bat.
По результатам будет сгенерирован файл отчета AI-BOLIT-REPORT.html
Проверка Manul.
Manul – это php-скрипт. Чтобы его запустить, нужен локальный web-сервер. Вы можете использовать для этих целей Open Server или Denwer. Далее следуйте инструкциям с официального сайта Manul.
Важно! Ни в коем случае не запускайте на локальном сервере зараженный сайт. Не вылеченные на данном этапе вредоносные скрипты могут размножиться.
После проверки сканерами, на руках у вас будет два отчета с подозрительными файлами. Будьте уверены: многие из них являются вирусами или содержат вредоносный код.
Далее следует довольно нудный этап. Нужно вручную пройтись по всем подозрительным файлам и проверить код, расположенный в них. Зачастую вредоносный код выделяется форматированием из основного. Код Joomla стройный и не содержит ничего лишнего. Код вредоносных скриптов часто внедряется без форматирования. Посмотрите пример ниже.
Код вредоносного скрипта:
Код Joomla:
Подсказки:
Не бойтесь открывать зараженные php-файлы для просмотра через текстовый редактор. Пока не запущен интерпретатор PHP (локальный сервер, который может выполнить PHP-код), вирусы и вредоносные скрипты не представляют опасности.
Если зараженных файлов найдено слишком много, можно воспользоваться такой хитростью: уточните текущую версию Joomla на вашем сайте, скачайте именно эту версию с официального сайта. Скопируйте файлы скачанной версии в папку с зараженной, переписывая совпадения. Таким образом, вы сможете переписать большую часть зараженных файлов оригинальными. Аналогичным образом можно заменить файлы крупных расширений Joomla. Более подробно это описано в шаге 5.
Перед удалением зараженных файлов, аккуратно записывайте фрагменты кода вредоносных скриптов и названия файлов, в которых они найдены, в отдельный файл. Они понадобятся нам на следующих шагах.
Данный шаг может отнять много времени, а также может быть сложен для тех, кто не очень хорошо разбирается в PHP-коде. Общий совет: если сомневаетесь вредоносный перед вами скрипт или нет, считайте, что да. Не бойтесь удалять зараженные файлы Joomla и расширений. На следующих шагах мы их восстановим. Исключение составляют лишь файлы, находящиеся в каталоге используемого вами шаблона сайта. Их не получится восстановить и работать с ними нужно очень осторожно.
Когда все файлы из отчетов проверены/отчищены/удалены, проведите сканирование файловой структуры сайта повторно. Не должно быть найдено ничего. После этого можно переходить к шагу 4.
Шаг 4. Поиск повторений и работа с датами создания файлов.
Теперь пришла пора постепенно включать голову. Надеюсь, что вы последовали моему совету, на предыдущем шаге и копировали фрагменты кода вредоносных скриптов в отдельный файл.
Если вирус, которым заражен ваш сайт, писал не гений, а скорее всего это так, то от файла к файлу зараженные фрагменты кода должны, так или иначе, повторяться. Этим мы и воспользуемся для того чтобы найти то, что пропустили сканеры и антивирусы.
Для выполнения данного шага нам понадобится программа Total Commander или любая другая утилита, умеющая искать по файлам. Я все же советую использовать Total Commander.
Открыв файловую структуру сайта через Total Commander, переходим в Команды –> Поиск файлов…
Здесь нам интересны две вкладки.
Вкладка «Общие параметры»:
Позволяет указать текст, который нужно искать в файлах. У вас уже есть сохраненные фрагменты кода вируса. Смекаете? Выбираем фрагмент и ищем его повторения в файлах по всей файловой системе сайта. Будьте уверены, что-то найдется. Далее проверяем найденные файлы, чистим/удаляем.
Вкладка «Дополнительно»:
Еще одна прекрасная возможность найти все зараженные файлы – использовать дату изменения файла. Посмотрите еще раз внимательно отчет AiBolit. Он показывает дату создания/изменения подозрительных файлов. Вероятнее всего все зараженные файлы были созданы примерно в недельный временной промежуток или даже в один день. Вычислите его, а затем задайте на вкладке Дополнительно этот промежуток или день. Так вы сможете определить все подозрительные файлы.
Данный способ не является полностью надежным, поскольку качественные вирусы могут изменять дату своего создания, но попробовать его, определенно, стоит. Мне он очень помогает.
После выполнения всех описанных действий можно выполнять шаг 5.
Шаг 5. Восстановление файловой структуры сайта.
К данному этапу файловая структура вашего сайта, скорее всего уже не содержит вирусов, но, она уже и не является работоспособной. Вы изменили и удалили множество файлов. Наверняка среди них были и «невинно погибшие». Теперь пришло время восстановить файловую структуру сайта, а заодно и выполнить еще один шаг по его отчистке.
Этапы тут следующие:
- Откройте админку зараженного сайта (старого, не отчищенного!) и перейдите в Расширения –> Менеджер расширений –> Управление.
- Перепишите себе все установленные сторонние расширения и их версии. Запишите версию Joomla.
- Скачайте Joomla заданной (не последней!) версии и все расширения заданных версий.
- Обновите вручную файловую структуру Joomla путем копированием скачанной версии с заменой.
- Обновите вручную файловую структуру расширений путем копирования с заменой.
Выполнив эти пункты, вы можете быть уверены, что все исполняемые файлы сайта чисты. Теоретически, зараженными могут остаться только файлы, которые были созданы вирусом и которые создали вы. Также, если у вас на сайте установлено несколько шаблонов Joomla, очень внимательно нужно проверить их файлы. Файлы шаблонов не перезаписываются при обновлении.
На данный момент, мы сделали всё, что было в наших силах, чтобы отчистить и восстановить файловую структуру сайта. Пришло время базы данных. Переходим к шагу 6.
Шаг 6. Чистка базы данных сайта.
Вредоносный код может содержаться не только в файлах сайта, но и в его базе данных. Чистить базу, в некоторой степени, сложнее, чем файловую структуру. Я бы выделил два этапа:
- Скачать дамп базы данных сайта и проверить его вручную. Вы можете скачать через PhpMyAdminбазу данных сайта в виде текстового файла и открыть ее через Nodepad++ или другой текстовый редактор. Данный файл желательно просмотреть на предмет присутствия странных фрагментов, проверить на наличие опасных элементов, таких, как iframe.
- В таблице #__users базы данных сайта, найти всех пользователей с правами суперадминистратора и проверить, нет ли там посторонних.
После этого нужно развернуть и запустить сайт на локальном сервере (шаг 7).
Шаг 7. Тестовый запуск.
Поскольку я, в некоторой степени, параноик, советую на этом шаге запускать сайт на локальном сервере с отключенным интернетом.
Перед запуском нужно морально быть готовым к тому, что сайт запустится с ошибками. Возможно, вы удалили какой-то файл Joomla или расширения во время чистки, но при этом не восстановили его в дальнейшем. Ничего страшного в этом нет. Главное, чтобы запустилась админка. Если это произошло, делаем следующее:
- Обновляем Joomla до последней версии путем установки обновления через менеджер расширений Joomla.
- Обновляем все расширения до последних версий путем установки обновлений через менеджер расширений Joomla.
После этого сайт должен работать корректно и без ошибок. Если что-то осталось, исправляем вручную и переходим к шагу 8.
Шаг 8. Смена всех паролей.
Изменяем:
- Пароли администраторов
- Пароль на сервере базы данных
- Пароль FTP
- Пароль от панели управления хостингом
На этом всё, ваш сайт отчищен. Осталось убедиться, что уязвимость, которая привела к заражению, закрыта.
Шаг 9. Анализ и устранение причин заражения
Снова включаем голову (да знаю, она у вас уже устала и ничего не соображает). Что же всё-таки привело к заражению? В начале статьи я дал пару мыслей на этот счет.
Постарайтесь понять, где на вашем сайте могут быть уязвимости. Не обязательно быть большим специалистом. Важно просто здраво мыслить.
Советую проверить домашний компьютер на вирусы, а также обратить внимание на хостинг, на котором размещен сайт. Какие о нем отзывы в интернете? Быть может, причиной заражения стал плохо настроенный сервер.
Также почитайте информацию о расширениях Joomla, которые вы используете на сайте. Какое-то из них может быть уязвимым.
Если вы видите какие-то, пусть даже теоретические причины заражения, то будет правильным избавиться от них до перезапуска сайта.
Шаг 10. Запуск сайта и отслеживание изменений.
Если вы дошли до этого шага, то поздравляю! Это большой путь. Теперь вы гораздо больше знаете о сайтах и их безопасности. Полностью удалите с хостинга зараженную копию сайта и перенесите туда отчищенную. Также замените базу данных, если вы вносили в нее изменения.
Первую неделю я советую отслеживать изменения в файловой системе на предмет повторного появления вируса. Вероятность того, что какой-то из зараженных файлов всё-таки остался, всегда существует.
Если ничего не помогает.
Но что делать, если даже после чистки и восстановления сайта вирусы появляются вновь? Здесь есть два варианта:
- Вы можете отдать уже отчищенную копию специалистам по безопасности, чтобы они проверили ее на предмет того, что упущено вами.
- Вы можете создать новый сайт (в некоторых случаях это может быть дешевле), но надеюсь, что до этого, всё-таки, не дойдет.