Что делать если взломали сайт?
Недавно попросили срочно восстановить сайт, который никак не восстанавливался. Бекапы не помогали. Работа была срочная, но не сложная — восстановить простенький сайт на 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
Это рабочий минимум, о котором следует постоянно помнить, но также это те грабли, на которые постоянно наступают начинающие разработчики.
Для начинающих: профессия «Веб-разработчик».