"Вирусы" на сайтах

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

Заражение

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

Второй путь - через уязвимость в рабочей станции любого сотрудника, который имеет административный доступ на сайт. Обычно с помощью вирусов крадутся пароли на ftp и уже с другого компьютера модифицируются файлы. Также злоумышленик может украсть пароли в админки.

Еще бывает, когда заражение одного сайта приводит к заражению другого, если они на одной хостинговой площадке.

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

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

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

Что делать, чтобы не было заражения

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

  2. Если используемый скрипт есть в репозиториях используемого дистрибутива, лучше использовать дистрибутивную версию - они обновляются автоматически. Проверить наличие скрипта в дистрибутиве можно командой apt-cache search <название> или на сайте дистрибутива - http://www.debian.org/distrib/packages. Если скрипт присутсвует - попросите администратора его установить.

  3. Правильно настройте права на файлы. При разработке PHP-сайтов часто смешивают данные и код, что приводит к тому, что код легко модифицировать. Для новых хостинговых площадок (которые на azure и ec2) разработана система управления правами, которая может защитить код от изменений. Подробности по ссылке. Сайты со старых площадок имеет смысл переносить на новые.

  4. Используйте систему контроля версий, например git. Кроме других очевидных преимуществ, это поможет легко найти сторонние правки и убрать их. Вы можете попросить администратора сделать для вас репозиторий.

  5. Обеспечте безопасность рабочих станций разработчиков и других пользоватлей, имеющих доступ к файлам сайта. Нужна регулярная провека на уязвимости, обновления.

  6. Не размещайте много сайтов на одной хостинговой площадке (для ITK-площадок - под одним пользователем. Если сомневаетесь - спросите). Уязвимость в одном сайте компроментирует все сайты, которые лежат рядом.

  7. Желательно ограничить доступ к админкам и FTP/SSH сайтов по IP-адресам или через VPN. Напишите администратору, чтобы он настроил доступ.

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

Если сайт заражен

  1. Нужно просмотреть его код и убрать сторонние правки. Система контроля версий может это сильно облегчить. Рекомендую начать с недавно измененных файлов. У Яндекса есть хорошая инструкция, как искать вредоносный код.

  2. Попросите администратора поменять пароли на ftp/ssh и базы данных и поменяйте доступы в админки.

  3. Если есть подозрение, что сайт заражен через уязвимость в другом сайте, лучше всего сразу перенести сайт на отдельную площадку.

  4. Убедитесь, что делаете все, чтобы не было повторного заражения.

Анитивирусы

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