Как восстановить взломанный сайт

Алгоритм лечения (кратко и в картинках).
15 июня 2016182424Наталья Игнатова3410819

Недавно попросили срочно восстановить сайт, который никак не восстанавливался. Бекапы не помогали. Работа была срочная, но не сложная — восстановить простенький сайт на Joomla. Сайт был восстановлен, и результатом работы, помимо работоспособности сайта, явилась некая памятка, т.к. после серфинга в сети оказалось, что подобная проблема весьма частая.

В связи с тем, что бекапы тоже оказались зараженными и поврежденными, было принято решение восстанавливаться по максимуму. Применялся самый простой метод: сравнение файловой структуры сайта с эталонной структурой чистого дистрибутива. Сразу же обращаю внимание на изобретательность хакеров: простое сравнение картинок показывает, что  в корневом каталоге сайта оказалось много странных файлов, странность которых видна невооруженным глазом по их названию. Как видно, названия очень похожи на нужные и привычные, например, tmp.php, upload.php. 

Здесь обращаю внимание на то, что структуру своего проекта нужно знать! Многие начинающие sitemap.xml сочтут за нужный (если вы сами не формировали карту сайта — откуда бы ей взяться?), так же как и, к примеру, файл upload.php. В данном случае это четко вредоносные файлы — вскрытие подтверждает.

Следующий момент — эта та зараза, которую порождает занесенный вирус.
 

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

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

Из чего следует вывод: если вы разрешаете загрузку файлов через веб — обязательно вводите ограничения на типы и объём файлов. Например, файлам php в папке с изображениями совершенно делать нечего.

 

Обращайте внимание на файлы с непонятными названиями и расширениями.

Размер возможного заражения:
 

В одной из папок было создано почти 18 тысяч папок с вредоносным контентом. Это не предел. Даже если вирус не повреждает сайт, он очень быстро заполнит всё доступное дисковое пространство.

А вот пару строк, вытащенных из файла .htaccess. Разница с правильным файлом по весу — 10 байт, тем не менее, есть переадресация, и сайт потерял работоспособность.

RewriteRule ^[^\d]+(\d+)-d-(\d+)/$ 
search/index\.php?id=$1-$2&%{QUERY_STRING} [L]

Поэтому, помимо непонятных файлов, следует контролировать объём файлов. Вирус «побил» нужный файл framework.php

Памятка

Используйте тестовый сайт
Если веб-проект серьезный, то обязательно следует использовать как тестовый, так и «боевой» сайт. При этом для тестового сайта лучше всего использовать систему контроля версий, например Git. Важно, чтобы не было двусторонней синхронизации: последняя рабочая версия на тестовой машине не загрузит заразу с боевого автоматом, и у вас всегда будет эталон.

Локальные бекапы
Примечание: если сайт построен на какой-нибудь CMS, рекомендуется иметь не только бекапы на сервере, а ещё и локальную версию этого бекапа, с которой можно сравнивать, и которая не может быть заражена извне. Такое же правило касается файлов самой системы — её, в крайнем случае, можно скачать с официального сайта.

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

Используйте мониторинг
Если есть хоть малейшее подозрение, что сайтом могут заинтересоваться злоумышленники, настоятельно рекомендуется включать систему мониторинга, в которую входит:

  • Периодический мониторинг появления новых файлов
  • Проверка изменения файлов с соответствующим уведомлением, это позволит отслеживать изменения и концентрироваться на том, что нужно. Естественно, это не заменит чтения логов, если вы хотите разобраться, кто и как вас сломал. Если ваш проект работает достаточно активно, то, как минимум, следует мониторить критичные части системы - они не должны меняться: далеко даже не каждый месяц вносятся изменения непосредственно в системные файлы.
  • Периодически нужно проверять файлы, которые загружают пользователи или те файлы, которые меняются динамически.
  • Обращать внимание на права на папки и файлы и правильно их выставлять.
  • Скрытие каталогов от листинга через robots.txt

Это рабочий минимум, о котором следует постоянно помнить, но также это те грабли, на которые постоянно наступают начинающие разработчики.


Для начинающих: профессия «Веб-разработчик».

Популярные статьи

Новые комментарии