Рано или поздно веб-разработчик, веб-мастер или любой другой специалист, обслуживающий сайт, может столкнуться с проблемами безопасности: ресурс попадает под санкции поисковой системы или начинает блокироваться антивирусом, с хостинга могут прислать уведомление об обнаружении вредоносного кода, а посетители начинают жаловаться на всплывающую рекламу или редиректы на “левые” сайты.
В этот момент возникает задача поиска источника проблемы, то есть диагностики сайта на проблемы безопасности. При грамотном подходе диагностика состоит из двух этапов:
проверки файлов и базы данных на хостинге на наличие серверных вредоносных скриптов и инжектов,
проверки страниц сайта на вирусный код, скрытые редиректы и другие проблемы, которые, порой, невозможно выявить статическим сканером файлов.
Предположим, вы уже проверили файлы на хостинге специализированными сканерами и почистили аккаунт хостинга от «вредоносов» (или ничего подозрительного на нем не нашлось), но поисковик все равно ругается на вирусный код или на сайте по-прежнему активен мобильный редирект. Что делать в этом случае? На помощь приходят веб-сканеры, которые выполняют динамический и статический анализ страниц сайта на вредоносный код.
Немного теории
Статический анализ страниц – это поиск вредоносных вставок (преимущественно javascript), спам-ссылок и спам-контента, фишинговых страниц и других статических элементов на проверяемой странице и в подключаемых файлах. Обнаружение подобных фрагментов выполняется на основе базы сигнатур или некоторого набора регулярных выражений. Если вредоносный код постоянно присутствует на странице или в загружаемых файлах, а также известен веб-сканеру (то есть он добавлен в базу сигнатур), то веб-сканер его обнаружит. Но так бывает не всегда. Например, вредоносный код может загружаться с другого ресурса или выполнять какие-то несанкционированные действия при определенных условиях:
по завершении загрузки страницы в нее добавляется javascript, который выполняет drive-by download атаку
пользователь уходит со страницы, в этот момент подгружается код и открывает popunder с контентом “для взрослых”
посетитель сайта находится на странице несколько секунд и только после этого его перенаправляют на платную подписку за смс
и т.п.
Несколько таких примеров:
Если заранее неизвестно, какой код провоцирует данные несанкционированные действия, то обнаружить его статическим анализом чрезвычайно сложно. К счастью, есть анализ динамический или иногда его еще называют “поведенческим”. Если веб-сканер умный, он будет не просто анализировать исходный код страницы или файлов, но еще и пытаться совершать какие-то операции, эмулируя действия реального посетителя. После каждого действия или при определенных условиях робот сканера анализирует изменения и накапливает данные для итогового отчета: загружает страницу в нескольких браузерах (причем, не просто с разных User-Agent’ов, а с разными значениями объекта navigator в javascript, разными document.referer и т.п.), ускоряет внутренний таймер, отлавливает редиректы на внешние ресурсы, отслеживает то, что передается в eval(), document.write() и т.п. Продвинутый веб-сканер всегда будет проверять код страницы и объекты на ней как до начала выполнения всех скриптов (сразу после загрузки страницы), так и спустя некоторое время, поскольку современные “вредоносы” динамически добавляют или скрывают объекты на javascript, а также выполняют фоновые загрузки внутри динамических фреймов. Например, код зараженного виджета может через 3 секунды или по движению мыши загрузить скрипт, который вставит на страницу javascript с редиректом на загрузку опасного .apk файла. Естественно, никакой статический анализ (кроме как заранее знать, что виджет опасен) или поиск по файлам такое не выявит.
А теперь, с пониманием требований к диагностике сайта и веб-сканерам, попробуем найти те, которые действительно эффективны. К сожалению, то что представлено на первой странице поисковика по запросу “проверить сайт на вирусы онлайн” сразу никуда не годится. Это или “поделки”, которые в лучшем случае могут выполнить статический анализ страницы (например, найти IFRAME, который может быть и не опасен), или агрегаторы сторонних API, проверяющие URL сайта по базе Google Safe Browsing API, Yandex Safe Browing API или VirusTotal API.
Если проверять сайт десктопным антивирусом, то анализ будет скорее всего также статический: антивирус умело блокирует загрузки с известных ему зараженных сайтов, но какого-то глубокого динамического анализа страниц сайта от него не стоит ожидать (хотя некоторые антивирусы действительно обнаруживают сигнатуры в файлах и на странице).
В итоге, после проверки двух десятков известных сервисов, я бы хотел остановиться на представленных ниже.
Выполняет поиск вредоносного кода на страницах, используя бессигнатурный анализ. То есть обладает некой эвристикой и выполняет динамический анализ страниц, что позволяет обнаруживать 0-day угрозы. Из приятных особенностей стоит отметить возможность проверки сразу нескольких страниц сайта, поскольку проверять по одной не всегда эффективно.
Хорошо обнаруживает угрозы, связанные с загрузкой или размерещением троянов, завирусованных исполняемых файлов. Ориентирован на западные сайты с их характерными заражениями, но часто выручает и при проверке зараженных сайтов рунета. Поскольку сервис бесплатный, есть очередь на обработку задач, поэтому придется немного подождать.
Выполняет динамический и статический анализ сайта. Поведенческим анализом детектятся скрытые редиректы, статический анализ ищет вирусные фрагменты на страницах и в загружаемых файлах, а базой черного списка определяются ресурсы, загружаемые с зараженных доменов. Ходит по внутренним ссылкам, поэтому кроме основного URL проверяет еще несколько смежных страниц сайта. Приятным дополнением является проверка сайта по блек-листам Яндекс, Google и VirusTotal. Ориентирован в основном на вредоносы, которые обитают в рунете. Поскольку сервис бесплатный, лимит на проверку – 3 запроса с одного IP в сутки.
Ищет вирусный код по сигнатурам и с помощью эвристики. Отправляет запросы к нескольким URL на сайте с различными User Agent / Referer. Обнаруживает спам-ссылки, дорвей-страницы, опасные скрипты. Кроме того, умеет проверять актуальные версии CMS и веб-сервера. Ограничений на число проверок не замечено. Из небольшого минуса обнаружилось, что список проверенных сайтов с результатами индексируется поисковыми системами, то есть можно посмотреть, какой сайт и чем был заражен (сейчас в поисковом индексе около 90 000 страниц), тем не менее эффективности сканера это не умаляет.
Redleg's File Viewer
Еще один западный веб-сканер сайтов. Может немного отпугивать своим аскетичным интерфейсом из 90-х, но, тем не менее, он позволяет выполнить полноценный статический анализ сайта и подключенных на странице файлов. При сканировании пользователь может задать параметры User Agent, referer, параметры проверки страницы. В настройках есть проверка страницы из кэша Google. Лимитов на проверку сайтов не обнаружено.
Ну и, наконец, знакомый многим VirusTotal. Он не является в полной мере веб-сканером, но его также рекомендуется использовать для диагностики, так как он является агрегатором нескольких десятков антивирусов и антивирусных сервисов.
***
Упомянутые веб-сканеры можно добавить в закладки, чтобы при необходимости провести диагностику сразу эффективными инструментами, и не тратить время на платные или неэффективные сервисы.