Вредоносный код на сайте: как найти его в cPanel шаг за шагом
ПечатьИскать вредоносный код на сайте лучше всего начиная с результатов проверки Imunify360 в cPanel. Дальше стоит посмотреть недавно изменённые файлы и файлы не на своём месте, внедрённый код в базе данных, лишних пользователей и задания по расписанию, а напоследок журналы доступа, по которым видно, как злоумышленник попал на сайт. Ниже каждая проверка описана по порядку. Помните, что удалить код — это только половина дела: если не найти лазейку, заражение вернётся.
Перед началом скачайте копию сайта в текущем виде (файлы и базу данных), даже заражённую. Храните её отдельно от чистых копий: она может пригодиться, чтобы установить причину.
1. Посмотрите, что нашёл Imunify360
В cPanel откройте Security, затем Imunify360. Там перечислены файлы, отмеченные серверной проверкой, с полным путём и датой обнаружения. Пути сами по себе многое объясняют:
- файлы внутри папки одного плагина или темы указывают на этот плагин или тему;
- PHP-файлы в wp-content/uploads, в папках с картинками или кешем почти всегда подброшены;
- длинный список изменённых файлов ядра говорит о том, что у злоумышленника был полный доступ на запись (например, по украденному паролю).
Сканер находит не всё, поэтому выполните проверки ниже, даже если список короткий. Если Вы получили от нас уведомление, прочитайте также что делать после уведомления Imunify.
2. Найдите недавно изменённые файлы
В File Manager папку можно отсортировать по столбцу Last Modified, но только по одной папке за раз. Если в аккаунте доступен SSH или Terminal (см. подключение по SSH), одна команда покажет все PHP-файлы, изменённые за последние 7 дней:
find ~/public_html -type f -name "*.php" -mtime -7
Подставьте вместо 7 число дней с момента появления проблемы. Учтите, что дату изменения можно подделать, так что файл со старой датой не обязательно чистый.
3. Найдите файлы, которых там быть не должно
- PHP-файлы в папках, предназначенных только для изображений и загрузок:
find ~/public_html/wp-content/uploads -type f -name "*.php"
- Файлы со случайными именами (вроде x7f3k.php), с именами под системные (например, wp-tmp.php) или с расширением картинки, например .ico, внутри которых на самом деле PHP-код.
- Неожиданные файлы .htaccess во вложенных папках или правила в основном .htaccess, которые перенаправляют посетителей из поисковиков или с телефонов. Такие правила часто проверяют HTTP_REFERER или HTTP_USER_AGENT.
4. Поищите скрытый код в файлах
Вредоносный код обычно запутан: это длинные нечитаемые строки, которые расшифровываются и выполняются на лету. Команда ниже выводит PHP-файлы с самыми распространёнными шаблонами:
grep -rlE 'eval\(base64_decode|eval\(gzinflate|str_rot13\(|assert\(\$_(POST|GET|REQUEST)' ~/public_html --include='*.php'
Откройте каждый найденный файл и посмотрите на контекст. Некоторые нормальные плагины используют base64_decode для обычных задач; строка в несколько тысяч символов в самом начале файла, до исходного кода, гораздо более явный признак. Проверьте также файлы темы, например header.php и footer.php, на теги script, загружающие JavaScript с незнакомых доменов.
5. Проверьте базу данных
Код может храниться и в базе данных, а не только в файлах. В cPanel откройте phpMyAdmin, выберите базу сайта и на вкладке Search поищите по всем таблицам строку <script или незнакомое доменное имя. Для WordPress особенно важны таблицы, имена которых оканчиваются на _posts и _options.
Затем проверьте пользователей: в WordPress откройте Users и отфильтруйте по роли Administrator. Удалите всех администраторов, которых Вы не создавали, но сначала смените собственный пароль.
6. Проверьте лазейки в cPanel
- Cron Jobs (раздел Advanced): незнакомое задание может каждые несколько минут заново скачивать вредоносные файлы.
- FTP Accounts (раздел Files): лишний FTP-аккаунт даёт злоумышленнику путь назад.
- Forwarders (раздел Email): скрытая пересылка может копировать Вашу почту на чужой адрес.
7. Найдите путь проникновения по журналам
В cPanel откройте Metrics, затем Raw Access, и скачайте журнал доступа домена. В Errors (тоже раздел Metrics) видны последние ошибки сервера. В журнале доступа ищите:
- POST-запросы к файлам, которых нет в обычной структуре сайта, или к найденным подброшенным файлам;
- запросы около того момента, когда вредоносный файл был создан или изменён. IP-адрес и URL в этих строках обычно выдают уязвимый плагин или форму;
- множество запросов к wp-login.php или xmlrpc.php с одних и тех же адресов: так выглядит подбор пароля.
Если с сайтом работает разработчик, передайте ему эти строки журнала: по ним точно видно, какой скрипт использовали.
8. Для WordPress: сравните ядро с оригиналом
WP Toolkit умеет проверять, совпадают ли файлы ядра WordPress с официальными, и переустанавливать их, не затрагивая содержимое сайта. См. как проверить и восстановить ядро WordPress.
После проверки
- Удалите подброшенные файлы и код или восстановите чистую копию до заражения через JetBackup 5.
- Закройте лазейку: обновите или удалите уязвимый плагин (уязвимость в плагине или теме) и смените все пароли с проверенного компьютера.
- Пройдите весь порядок восстановления по статье сайт взломали: первые шаги.
Если не уверены, можно ли удалить файл, пришлите нам его полный путь в тикете в поддержку до удаления.