Яндекс выпустил антивирус для сайтов — Manul

Поиск Яндекса ежесуточно показывает людям больше 8M предупреждений о том, что страница, на которую они хотят перейти, заражена. Часто владелец сайта вспоминает о том, что он может быть атакован вирусом, только тогда, когда худшее уже случилось, трафик упал, и пользователи успели заразиться.Чтобы вебмастера могли как можно быстрее реагировать на проблемы, мы уже несколько лет рассылаем предупреждения о заражении в Яндекс.Вебмастере. В них мы даём подробные инструкции, что нужно делать, а в самых сложных случаях вебмастерам помогает наша служба поддержки.

c4f2f56997f249e2b4ed2454a37fdfdb.jpg

Однако всегда хочется лучшего. Одна из главных проблем, с которыми мы сталкиваемся при общении с владельцами зараженных сайтов, — это поиск источника заражения на стороне сервера. У Яндекса, который каждые сутки размечает тысячи сайтов как зараженные вирусом и опасные для устройств человека, есть регулярно обновляемая база вирусов. И у нашей команды появилась идея, выросшая в большой проект, — антивирус для сайтов. Так мы создали Manul, который решили выложить в open source. Это утилита, которая поможет вебмастеру понять, что произошло с сайтом и вылечить его. Под катом я расскажу подробнее о том, как он устроен и какие проблемы решает.Заражение сайта может произойти не только из-за его взлома, но и из-за размещения на нём кода какого-либо сервиса, который оказался не столь надежным, как вам вначале показалось. Когда такое случается с важными для людей сайтами, это вредит не только их владельцам.

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

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

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

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

У Григория Земскова из Revisium был большой опыт сканирования и лечения сайтов на стороне сервера, а также работающее решение — скрипт Ai-Bolit, в который уже была заложена значительная часть желаемой функциональности. Мы объединили наши знания и пожелания, и получилось нечто новое — Manul.

Как это всё работает? Архив с Manul заливается в корневой каталог сайта — например, через FTP/SFTP, и там распаковывается. Дальше работа с инструментом идет через браузер. При сканировании Manul собирает информацию обо всех файлах, лежащих в корневом каталоге и ниже его, — об их размере, дате последнего изменения, вычисляет хэш-сумму. Параллельно каждый файл проверяется на вредоносность по приложенной антивирусной базе и помечается одним из трех флажков: желтый — в файле присутствует подозрительный код, который по различным признакам может оказаться вредоносным; красный — в файле присутствует известный нам вредоносный код; зеленый — в файле не найдено ничего подозрительного. Завершив проверку, Manul сохраняет всю полученную информацию в виде XML-отчета. Фрагменты кода — как подозрительные, так и вредоносные — также прикладываются в отчет.Для просмотра отчета существует отдельный инструмент — Анализатор логов Manul, доступный онлайн. Он представляет отчет в виде таблицы, позволяет отфильтровать файлы по любым данным, просмотреть фрагменты подозрительного кода. Для различных версий популярных CMS Анализатор автоматически применяет белые списки, чтобы сразу отфильтровать файлы из стандартной комплектации, в которых не было замечено изменений. А нажимая кнопки Quarantine и Delete, расположенные напротив каждого файла, можно сформировать скрипт для Manul, который удалит вредоносные файлы с сервера, а подозрительные поместит в архив для отправки на анализ. Исполнить этот скрипт можно, открыв Manul и перейдя на вкладку Лечение.

Manul не требует доступа к конфиденциальным данным (таким, как пароли). Все производимые с файлами действия контролирует и подтверждает владелец сайта. Чтобы инструментом не смогли воспользоваться третьи лица, при первом запуске его необходимо защитить паролем.

Утилита не требовательна к среде исполнения и рассчитана на то, чтобы запускаться даже на слабых хостингах. Но все же для запуска ей необходимо выполнение некоторых условий: версия PHP не ниже 5.2 и наличие в ней модулей ZipArchive, DOM и XML. Также Manul потребуется доступ на чтение корневого каталога и на запись в каталог manul/tmp.

Что же дальше? Мы решили сделать так, чтобы воспользоваться нашим трудом мог любой вебмастер. Для этого мы разместили наш Антивирус на Яндекс.Вебмастере и теперь всегда будем напоминать о его возможностях вместе с оповещением о том, что с сайт был заражен вирусом.Однако на достигнутом мы решили не останавливаться. Мы хотим, чтобы у каждого разработчика была возможность не просто воспользоваться нашим Манулом, но и дать ему новую жизнь. Manul — это проект с открытым кодом, который выложен на GitHub. Вы можете принять участие в его развитии, добавить новые возможности или адаптировать исходный код под собственные нужды.

© Habrahabr.ru