04 апреля 2023 Время чтения: 8 минут

Вадим Корчинский

лечит сайты с 2012

Как проверить сайт на вирусы: советы профессионального админа

ispmanager

Я администрирую сайты с 2012 года. Специализируюсь на безопасности: удаляю вредоносные скрипты, устраняю уязвимости. Лечил как небольшие блоги, так и крупные интернет-магазины. Сегодня поделюсь инструментами, с помощью которых проверяю сайт на вирусы и удаляю их.

Эта статья не для новичков: понадобится знание основ HTML, PHP и JS, а также умение работать в консоли.

Что такое вирусы и как они попадают на сайт

Вирус — это вредоносный код. Он меняет внешний вид сайта, размещает рекламу, отправляет посетителей на другой сайт, даёт мошенникам доступ к сайту, использует ресурсы хостинга для майнинга или других вычислений.

На сайте вирус, если:

  1. На страницах появился контент, который владелец не добавлял.
  2. Сайт стал работать медленнее.
  3. При переходе на него пользователи видят другой ресурс.
  4. Упала посещаемость из поиска.
  5. На хостинге появились новые папки.

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

Когда на сайт попадают вирусы, репутация владельца, трафик из поиска и доходы с сайта оказываются под угрозой. Чтобы вылечить сайт от вируса, сначала надо убедиться в заражении, а потом найти и удалить вредоносный код. После этого — защитить проект от будущих атак. Ниже расскажу о каждом этапе.

Убедиться в заражении

Если есть подозрение на вирус, но уверенности нет, надо убедиться в заражении. Для этого я проверяю сайт через онлайн-сканеры, а также в нескольких браузерах и поисковиках.

Проверка сайта на вирусы через онлайн-сканеры

Онлайн-сканеры помогают быстро найти вредоносный код, но я никогда не полагаюсь только на них: не все вирусы можно найти автоматически. Вот пара сервисов:

Поведение в разных браузерах и на разных устройствах

Один из признаков заражения — редирект. Это когда при переходе на ваш сайт пользователи видят другой ресурс. Заражённый сайт с компьютера может открываться нормально, а с телефона посетителей будет перекидывать на фишинговую страницу или страницу с мобильными подписками. Или наоборот.

Поэтому нужно проверять поведение сайта в разных браузерах, операционных системах и мобильных устройствах.

Вид в поиске

Поисковые системы автоматически проверяют сайты на вирусы. Заражённые ресурсы они помечают серым цветом и подписью с предупреждением.

Чтобы проверить свой сайт, введите адрес в поисковую строку Google. Если увидите предупреждение, значит, сайт заражён. Посмотрите вердикты и цепочки возможных заражений.

Способ не универсальный! Поисковые системы находят вредоносный код не сразу. Кроме того, вирус можно научить проверять источник запроса и прятаться от поисковиков. Если такой вирус увидит запрос из поисковой системы, скрипты не отработают — поисковая система не увидит подвоха.

Количество страниц в поисковой выдаче

Еще один вид вируса — дорвеи. Они встраивают на сайт свой контент. Чтобы проверить сайт на дорвеи, снова используйте поиск. Введите запрос site:mysite.com и пересмотрите все результаты поиска. Если найдёте страницы, которые не соответствуют тематике вашего сайта, — это дорвеи.

Найти и удалить зловредов

Когда в заражении нет сомнений, вредоносный код надо найти и удалить. Основная проблема — найти. Я просматриваю файлы сайта вручную, а также использую консоль.

Проанализировать HTML и JS-скрипты

Вредоносные скрипты часто добавляют в исходный код сайта (в браузере нажите Сtrl+U). Проверьте его на наличие посторонних JS-скриптов, iframe-вставок и спам-ссылок. Если найдёте — удалите.

Проверьте все JS-скрипты, которые подключаются во время загрузки страницы, нет ли в них посторонних вставок. Обычно их прописывают в начале и в конце JS-скрипта.Все посторонние вставки удалите.

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

Проверить дату изменения файлов и папок

Если известно, когда взломали сайт, то вредоносный код можно найти по всем файлам, что были изменены с тех пор.

Например, взлом произошел несколько дней назад, тогда для вывода всех PHP-скриптов, которые были изменены за последние 7 дней, нужно использовать команду:

find . –name '*.ph*' –mtime -7

После выполнения команды нужно проанализировать найденные PHP-скрипты на возможные вредоносные вставки.

Проанализировать директории upload/backup/log/image/tmp

Директории

upload/backup/log/image/tmp
потенциально опасны, так как обычно они открыты на запись. В большинстве случаев именно в них заливают shell-скрипты, через которые потом заражают файлы сайта и базу данных. Такие директории нужно проверять на возможные вредоносные PHP-скрипты.

Например, каталог upload можно проверить командой:

find /upload/ -type f -name '*.ph*'

Она покажет все PHP-файлы в каталоге upload.

После анализа заражённые файлы можно удалить вручную или командой:

find /upload/ -name '*.php*' -exec rm '{}' \;

Найти файлы и папки с нестандартными именами

Откройте каталог сайта. Найдите файлы и папки с нестандартными именами и подозрительным содержимым, удалите их.

Найти много PHP или HTML-файлов в одной директории

Все папки на хостинге нужно проверить на множественные php и html файлы в одной директории, сделать это можно командой:

find ./ -mindepth 2 -type f -name '*.php' | cut -d/ -f2 | sort | uniq -c | sort –nr

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

Найти вирусные скрипты по содержимому

Быстро проверить сайт на вирусные скрипты можно командой:

find ./ -type f -name "*.php" -exec grep -i -H "wso shell\|Backdoor\|Shell\|base64_decode\|str_rot13\|gzuncompress\|gzinflate\|strrev\|killall\|navigator.userAgent.match\|mysql_safe\|UdpFlood\|40,101,115,110,98,114,105,110\|msg=@gzinflate\|sql2_safe\|NlOThmMjgyODM0NjkyODdiYT\|6POkiojiO7iY3ns1rn8\|var vst = String.fromCharCode\|c999sh\|request12.php\|auth_pass\|shell_exec\|FilesMan\|passthru\|system\|passwd\|mkdir\|chmod\|mkdir\|md5=\|e2aa4e\|file_get_contents\|eval\|stripslashes\|fsockopen\|pfsockopen\|base64_files" {} \;

Либо можно использовать grep без find.

grep -R -i -H -E "wso shell|Backdoor|Shell|base64_decode|str_rot13|gzuncompress|gzinflate|strrev|killall|navigator.userAgent.match|mysql_safe|UdpFlood|40,101,115,110,98,114,105,110|msg=@gzinflate|sql2_safe|NlOThmMjgyODM0NjkyODdiYT|6POkiojiO7iY3ns1rn8|var vst = String.fromCharCode|c999sh|request12.php|auth_pass|shell_exec|FilesMan|passthru|system|passwd|mkdir|chmod|md5=|e2aa4e|file_get_contents|eval|stripslashes|fsockopen|pfsockopen|base64_files" ./

Эти команды выполнят поиск вредоносного кода в файлах текущего каталога. Они ищут файлы рекурсивно, от того каталога, в котором запущены.

Совпадений будет много, большинство найденных файлов не будут зловредами, так как модули CMS тоже используют эти функции.

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

Проверить базу данных

Часто во время взлома и заражения сайта вредоносный код добавляют в базу данных. Для быстрой проверки базы данных на вирусы нужно зайти в phpmyadmin и через поиск ввести по очереди запросы

<script , <? , <?php , <iframe

Если обнаружите вредоносный фрагмент, удалите его.

Использовать онлайн-сервисы

Для автоматической проверки файлов сайта на вирусы, shell-скрипты, редиректы и дорвеи можно использовать сканеры:

Обычно автоматические сканеры обнаруживают до 90% всех вредоносных скриптов на зараженном сайте, остальные нужно искать вручную, используя вышеперечисленные команды внутренней проверки. Либо проверьте сайт через антивирус, который использует эвристический анализ. Такие антивирусы находят неизвестные угрозы, которые ещё не занесены в вирусную базу.

Защитить сайт от взлома

После удаления всех shell-скриптов и вредоносных вставок сайт обязательно надо защитить от взлома. Тогда он станет неуязвим для атак извне.

Защита панели администратора сайта по IP

Злоумышленники попадают на сайт, взламывая панель администратора. Чтобы помешать им, установите ограничение на вход в панель по IP. Иными словами, разрешите входить в панель администратора только с определённого устройства.

Добавьте в каталог административной панели (administrator, bitrix/admin, wp-admin…) файл .htaccess с содержимым:

Order Deny, Allow Deny from all Allow from 1.1.1.1

Где 1.1.1.1 — IP-адрес, для которого разрешён доступ в админ панель.

Если IP-адрес не статический, можно добавить IP по зоне. Например, провайдер предоставляет IP-адрес вида 192.168.100.34. Тогда в .htaccess можно прописать allow from 192.168.

Защита панели администратора по HTTP-авторизации

Установите на админку сайта дополнительный логин и пароль. Для этого в каталог административной панели (administrator, bitrix/admin, wp-admin…) добавьте файлы .htaccess и .htpasswd .

В файле .htaccess нужно прописать такой код:

ErrorDocument 401 "Unauthorized Access"
ErrorDocument 403 "Forbidden"
AuthName "Authorized Only"
AuthType Basic
AuthUserFile /home/ site.com /admin/.htpasswd require valid-user


Allow from all
satisfy any


Allow from all
satisfy any


Allow from all
satisfy any


Allow from all
satisfy any


Allow from all
satisfy any

Где

home/site.com/admin/.htpasswd
— это полный путь к файлу .htpasswd вашего сервера.

В файле

.htpasswd
нужно прописать дополнительный логин и пароль, который будет использоваться при входе в панель.

Сгенерировать их можно на сайте Htpasswd Generator. Введите логин и пароль и нажмите

Create .htpasswd file
. Результат скопируйте в файл .htpasswd.

Защита каталогов сайта

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

Чтобы обезопасить сайт, нужно сделать hardening, то есть «забетонировать» сайт. Для этого нужно на все системные файлы CMS, плагинов и шаблонов, которые для бесперебойной работы не требуют разрешений на запись, установить права 444, для каталогов права нужно установить 555.

Здесь суть в том, чтобы запретить запись во все каталоги сайта и запретить изменение всех файлов CMS, которые во время работы сайта не требуют изменений. Чтение и выполнение файла при таких правах будет доступно. Для правильной работы сайта надо сделать так:

  1. На все файлы — права 444.
  2. На все папки — права 555.
  3. На файлы, которые должны быть доступны на запись, — 644.
  4. На каталоги, которые должны быть доступны на запись, — 755.

Такие права хорошо подходят как для сайтов, где CMS, плагины и шаблоны сильно изменены и нет возможности все обновить до последних версий, так и для простых сайтов, где CMS, шаблоны и плагины обновляются нечасто.

В любом случае, если потребуется обновить плагины и шаблон, права можно рекурсивно изменить на 644 и 755, все обновить и заново установить права 444 и 555.

Для комфорта обычных пользователей создаются два PHP-скрипта:

mysite.com/protect.php— изменяет все права на файлы и папки 444 и 555,

mysite.com/protect.php— ставит права 644 и 755.

Чтобы права на файлы и каталоги не смогли изменить программным путем, в файл php.ini нужно добавить директиву

disable_functions =chmod

Для каталогов (backup/log/image…), которым нельзя установить права 555 и в которых нет скриптов, нужно добавить файл .htaccess с таким содержимым:

RemoveHandler .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml AddType application/x-httpd-php-source .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml

Этот код блокирует выполнение потенциально опасных скриптов. Это запретит PHP-коду выполняться из директории, где не должно быть исполняемых файлов.

Для защиты сервера ispmanager c антивирусом Dr.Web

Простой способ защитить ваши проекты — пользоваться антивирусом Dr.Web. Он автоматически проверяет сервер на вирусы и устраняет их.

Модуль Dr.Web есть в панели ispmanager. Первый месяц после установки вы можете пользоваться им бесплатно.