В предыдущих постах писал о том, что у меня взломали аккаунт у хостера и заразили сайты. Теперь хочу поделиться как я все это лечил.
Итак, переписка с техподдержкой хостера толку не дала особо. Ну дали список вроде как зараженных файлов и на этом все. Явно я не вычистил всю заразу.
Анализ файлов
Мне известно про два антивируса сайтов: ai-bolit и мануал от Яндекса. По старой привычке я поставил ai-bolit и протестил свои два сайта на MODX и WordPress. И результат меня сильно разочаровал.
Нет, мне выдали списки подозрений, списки заражений. Вот только при внимательном взгляде оказалось, что 70% — это файлы дистрибутива. И только самые явные случаи заражения выявил антивирус. Как-то в прошлый раз было явно лучше!
Для анализа заражения более подробно я сделал бекап и скачал его к себе на машину, развернул на локальном сервере OpenServer и стал изучать внимательно.
Оказалось, что заражения в WordPress было только на одном сайте и прописано в файле header.php установленной темы, где js-скриптом куда-то перенаправляло если зашли мобильного устройство. Все! А вот на MODX я так и не нашел что всполошило проверки хостера и mail.ru.
Но самое обидное, что можно было просто по датам можно было вычислить измененные файлы. И не нужно иметь семи пядей во лбу чтобы вычистить заразу. Однако и тут не все так просто оказалось.
Появились куски зараженных файлов типа posts.php.success, files.php.succes и так далее. И файлы имели то же самое содержание, что и файлы posts.php и тому подобная зараза. Эти файлы вообще не виделись ai-bolit! Получается, что ai-bolit проверяет по маске имени и не смотрит на такие файлы. А хакеру достаточно переименовать эти файлы и просто запустить.
Сами вирусы лежали тоже с странных местах: в корне, в кеше, в документации, в админке, в галереях. Причем кто-то явно хорошо знал куда их прятать. Прятали не просто в папках картинок, а в папках с картинками глубоко-глубоко автоматических галерей. И больше всех вирусов было именно в MODX.
В общении на форумах и сообществах можно сделать вывод: взлом скорее всего произошел из-за дырок в сниппетах AjaxSearch и модуле/сниппете галереи EvoGallery.
Работа над ошибками
Чётко сказать как не могу, какой движок виноват тоже. Поэтому я решил разделить свои сайты на два аккаунта и переставить все заново. И вот тут-то мне и пришлось потратить кучу времени.
На моём аккаунте висело 2 клиентских сайта на MODX, этот блог и мой проект на WordPress. А так же основной сайт на MODX EVO. Задача была восстановить прежде всего коммерческие сайты.
Работы на новом аккаунте с WordPress
На новый аккаунт я перенес 2 сайта на WordPress для начала. Поставил их заново, все плагины я поставил он-лайн, а что не нашел в стандартном репозитарии скачал со страничек авторов. Базу я дополнил, предварительно глянув с бекап лично. WordPress не хранит код в базе, в отличие от MODX, так что ничего криминального не было. На всякий случай я поменял пароли от админки.
В картинках заразу легко вычислил, заодно прибил дубли картинок с разными разрешениями, чтобы меньше было заливать на сайт. Зараза тут выделялась среди картинок и просто бросалась в глаза. А вот заливать пришлось через ftp, потому что архивы с большим весом веб-интерфейс тупил не по-детски.
А вот в шаблонах была зараза. Учитывая, что в шаблонах WordPress жуткая мешанина кода html и php, разбирательства были долгими. В конце-концов я просто скачал новые шаблоны, которые были более-менее проверены и установил их. Сразу вылезли косяки с моими доработками и пришлось каждый файл сравнивать и снова править ручками. Заодно и версии шаблонов поменял.
Но в целом, работы с WordPress, хоть это и новый для меня движок, оказалось гораздо меньше, чем с любимым MODX. Я справился с 2 сайтами за один день.
Работы на новом аккаунте с MODX
Коммерческий сайт на MODX потребовал больше внимания. Переписывание его на другой движок очень не хотелось, хоть это всего лишь визитка на 10 страниц. Да и хозяйка поинтересовалась уже что произошло с сайтом.
Поэтому я скачал свежую сборку Дмитрия с гитхаба и установил на новом хостинге. Затем я аккуратно проверил картинки и залил так же по ftp. Ну и на закуску я взял дамп базы прежнего сайта и залил его с заменой на установленный. Вылезли косяки, но не критичные. Ну и накатил снова сборку и переустановил чтобы поправить косяки. В целом, работа заняла день с учетом экспериментов на локалке и отработке методики.
Работа на старом аккаунте с MODX Revo
Другой коммерческий сайт на Ево я решил переписать на новой версии Revolution. Заодно и потестировал новую версию 2.4.2.
Для начала я удалил всё, вплоть до базы, создал новую и поменял пароли. Затем скачал и установил движок с официальной страницы, поставил пакет и залил заново картинки.
В целом справился за 1 день, набил несколько шишек и в принципе доволен.
Разработка на новой версии Revolution интереснее и возможностей больше. Но все-таки интерфейс лагает. И это бесит! Хотя сам сайт чуть-чуть работает медленнее, чем на Ево, скорость достаточная.
У меня был для этого сайта уже версия на Revo, написанная 1,5 года назад с новым дизайном и кучей новых возможностей, но хозяин сайта не хочет платить за новый и его устраивает текущий сайт и наполнение. Хозяин — барин.
Борьба бобра с ослом со старым сайтом на MODX Evolution
На закуску у меня остался сайт на Ево, который я переписал в 2011 году (кажется) и который имеет довольно сложную структуру и кучу сниппетов, чанков, которые я правил и уже сам забыл что и где.
Моё намерение было простое — удалить почти все, накатить последнюю сборку Dm3yy, накатить базу и картинки. Примерно так я и сделал с коммерческим сайтом на новом аккаунте. Вот только тут это не прокатило совсем!
Много сниппетов в старой версии было вынесено в файлы, а в базе были ссылки на основные сниппеты. А в новой сборке все сниппеты, плагины вернулись в базу. Плюс поменялись структуры папок, код и логика. Из-за этого сайт стал не рабочим.
Руками переносить все заново? Я попытался и понял, что мне нужно минимум неделя! Заново переписывать на Рево — еще больше времени. Получился заколдованный круг. Так что пришлось мне возвращаться к восстановлению сайта.
Хостер накосячил с правами на файлы, так что тупо накатить обновление не получалось — «ошибка удаления файлов, нет прав, обратитесь к администратору». Были и мои косяки — я поудалял папки с файлами галерей типа они автоматом сгенерятся при обращении и галерея их не могла найти.
В конце-концов я сделал просто: удалил почти все и закачал и распаковал сборку. Запустил обновление и получил снова кучу ошибок.
Недостающие файлы, которые были необходимы для работы, я по одному начал подкачивать. По большей части это были фотографии галерей.
Так же я обратил внимание, что не работает файловый менеджер. Ошибка оказалась в абсолютном пути в конфигурации. Подправил и все заработало. Вторая большая проблема заключалась в плагине DirectResize, который обрезал картинку в статьи и сделал автоматом всплывающий лайтбокс на основе ColorBox. Грустно, но пришлось от него избавиться.
Были проблемы с галереями – отключились скрипты вывода в лайтбоксе (у меня был ColorBox).
В общем, пришлось порезать часть функционала сайта из-за обновления. Варианты обсуждений в сообществе преодоления этих косяков один – использовать другие решения, а значит нужно переделывать сайт. Но тогда нужно и верстку ревизировать, поскольку она не адаптивная. И все это будет очень долго и нудно.
Так же заметил еще один серьезный косяк: я пользовался обновлением движка в репозитарии Dm3yy из админки. И вот это обновление брало и удаляла мои версии robots.txt и .htaccess. С robots.txt ошибку подправили, а вот с .htaccess ошибка осталось. И мои включения перенаправления, защиты и включения сжатия gzip были тупо вырезаны и поставлены стандартные значения! Обидно, однаок.
В плюсе только одно — старые дыры должны быть залатаны в новых версиях расширений.
Так что вот такой я получил опыт. Заодно и тест будет – какой аккаунт взломают быстрее J
Ну а я прощаюсь на этом. Надеюсь, что мой опус кому-то поможет в решении аналогичных проблем.