Как происходит взлом, и что делать, если сайт взломали?

Уровень сложности: 

Безопасность сайта зависит от многих факторов, в том числе человеческого (работы службы поддержки хостинга, имеющей контроль над сервером). Это второй пост в рубрике Безопасность.

Взломать сайт могут:

  • боты-взломщики, которые в автоматическом режиме массово ломают сайты на популярных CMS, эксплуатируя уязвимости CMS, обнаруженные хакером, написавшим бота-взломщика,
  • хакеры, имеющие личный интерес к вашему сайту (оплата взлома вашими конкурентами, желание хакера самоутвердиться, необходимость получить доступ к популярному сайту для увода паролей, получения доступа к платёжной информации, заработка или публикации рекламы),
  • недобросовестные хостеры - если вы чем-то обидели службу поддержки или беспокоите неправильными вопросами, а также если на сервере присутствует хакер в лице тех. поддержки, то возможен не только взлом, но и угон сайтов (домен+хостинг, контролируемый одной компанией).

Чаще взломом сайта занимаются программы-боты, которые обходят Интернет и для каждого сайта на CMS производят стандартное тестирование и попытки взлома.

Какие уязвимости используют боты-взломщики

Взлом в автоматическом режиме осуществляется:

  • через регистрацию и попытку закачки вирусных файлов, вставки sql-инъекций в посты, получения пароля администратора,
  • через перебор паролей для пользователя admin или administrator - наиболее распространённое имя пользователя админа всех CMS,
  • через доступный анонимным пользователям интерактив: поиск по сайту, чат, объявления, комментарии, ввод и обработка данных, отправка любых форм,
  • через get-запрос к файлам CMS с вирусной инъекцией.

Более сложные способы взлома, которые производятся при участии хакера (не автоматически):

  • через вирус на компьютере администратора и увод паролей ftp, хостинга,
  • через сканеры сетевых потоков и незащищённое FTP-соединение (если вы подключаетесь к серверу по ftp, а не по sftp или ssh),
  • через взлом админ-панели хостинга (если в ней можно менять пароли ftp),
  • через взлом других сайтов на этом сервере, если у вас виртуальный хостинг, на котором есть незащищённые сайты, а взлом одного сайта позволяет управлять всеми файлами сервера (то есть сервер настроен неправильно и не защищён),
  • через взлом сервера хостинга, если тех. поддержка допустила грубые ошибки, влияющие на защиту сервера (например, после выполнения настроек, обновления ПО, ликвидации поломок),
  • через взлом локальной сети или при использовании вами локальной сети, в которой есть злоумышленники (храните пароли в защищённом виде на компьютере, работайте с сайтами через собственное Интернет-соединение, не доверяйте компьютер другим пользователям),
  • простой личный взлом тех. поддержкой шаред-хостинга (редкий случай, но тем не менее, риск есть).

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

Мои сайты с очень низкой посещаемостью взламывали:

На CMS WordPress - все 8 сайтов на разных хостингах, с размещением рекламы в футере и с переходом на сайт хакера при клике по любой ссылке, а также с автоматической переадресацией через iframe - возможно, из-за ущербности этой CMS, возможно из-за неправильных прав на файлы и папки, но взломали все сайты на этой CMS.
На самописной CMS без бд - с размещением .htaccess вируса для мобильных и с выпадом сайта из поиска - из-за взлома сервера risp.ru, который оказался не только дешёвым, но и ненадёжным.
На CMS Drupal - на хостинге бегет, с размещением рекламного баннера знакомств в углу в стиле ВК-сообщения, который появлялся только в вечернее время - по непонятным причинам, возможно, из-за прав на папки и присутствие модуля Devel или других ненадёжных, или из-за уязвимости версии Drupal 7.36 и долгого не обновления.
На CMS Drupal из коробки - эти сайты имели включенные неиспользуемые сложные модули, типа rules, commerce... - взлом произошёл из-за этих модулей или из-за ненадёжного хостинг-сервера Aghost (админом было предложено установить доп. защиту после инцидента).

Политика безопасности

Приходится тратить время не только на развитие сайта, но и на его защиту и регулярное изучение уязвимости, поиск и обнаружение вирусов.
Бэкапы сайта - не только возможность восстановления работы и отката назад к рабочему состоянию, но и возможность анализа изменённых вирусом файлов.
Безопасность не терпит изъянов - если вы знаете об уязвимости, её обязательно нужно закрыть. Любой защищённый сайт всё равно не безопасен на 100%, поэтому известные Администрации уязвимости точно должны исключаться.
Обязательно нужно выбрать надёжный хостинг, и менять хостинг на более дорогой и безопасный при увеличении популярности сайта, ужесточении требований к надёжности работы.
Роли и права пользователей должны иметь строгие разграничения, внедряемые новые функции обязательно должны интегрировать функции разграничения доступа по ролям.
Сложные проекты потребуют более сложных правил политики безопасности, чётких рекомендаций не бывает.

Итак, сайты точно взламывают, допустим это произошло с вашим сайтом, что делать?

Что делать после взлома сайта?

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

Обычно взлом предполагает добавление вирусных файлов, и очень редко sql-инъекций. Во всяком случае, для большей надёжности хакер размещает вирусные файлы, чтобы получить доступ снова, когда администратор удалит инъекции. Поэтому нужно чистить сайт от вирусов.

1. Чистка сайта от вирусов

Проверить права на файлы и папки, обычно 755 для папок и 644 для файлов - заново установить для всех файлов и папок такие права (на некоторых хостингах может быть 600 для файлов и 700 для папок)
Проверить файл index.php в корне сайта - обычно там добавляется shell-программа - сравнить index-ный файл с прежними версиями
Проверить .htaccess в корне сайта - там могут добавляться правила переадресации, например для мобильных или для всех пользователей
Проверить наличие новых папок в корне и в подпапках
Проверить папку временных файлов и папку, в которую разрешена запись
Проверить наличие новых файлов с странными названиями (иногда обычными названиями): обычно с расширением php, иногда и неисполняемые файлы могут содержать вирусы: картинки, текстовые файлы, js,
Проверить наличие новых файлов .sh - это файлы, которые могут содержать bash-коды и shell-вирусы,
Проверить старые php-файлы на вирусные вставки.

Следующие сервисы помогают определить вирусы, найти php, js, shell инъекции:

https://www.virustotal.com/ru/ - онлайн сканер вирусов, можно закачать бекап сайта или указать url.
http://revisium.com/ai/ - AI-Bolit - мощный сканер вирусов, работающий со всеми популярными CMS, написан на php.
http://santivi.com/ - Санти - антивирус для сайтов, написанный на php, имеет версию Windows-приложение.
http://www.rfxn.com/projects/linux-malware-detect/ - Linux Malware Detect - сканнер сайта, обнаружение различных видов вирусов
https://github.com/novostrim/watcher4site - Watcher4site - поиск изменённых сайтов.
https://sitecheck.sucuri.net/ - Sucuri - онлайн-проверка сайта на вирусы
https://github.com/emposha/PHP-Shell-Detector - Web Shell Detector - мощный поиск инъекций php/cgi(perl)/asp/aspx
http://2ip.ru/site-virus-scaner/ - онлайн проверка вирусов на сайте

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

2. После чистки сменить пароли

Пароли учётной записи администратора, редакторов, других пользователей, возможно, обновить пароли всех простых пользователей или ограничить их права.
Сменить ftp-пароли, почистить компьютер от вирусов, сменить ОС.

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

3. После смены паролей - обновить систему

Если сайт на популярной CMS - обновить ядро и все модули.

Отключить неиспользуемые модули.

Проверить код самописных модулей.

4. После обновления читать логи, искать уязвимые места

Эта работа самая сложная. Но если не залатать дыры безопасности, развитие проекта будет невозможным - вирусы будут съедать вашу работу с сайтом, заставляя производить чистку, смену паролей и прочие не целевые действия.

Изучить следующие логи:

  • доступ по ftp
  • php-логи
  • mysql-логи
  • apache-логи
  • bash-логи
  • логи авторизации на сайте

Что конкретно там нужно смотреть: чужие ip, с которых производился доступ, работа bash-скриптов, php-скриптов.

Если не обнаружена активность хакера, при невозможности чтения логов:

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

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

Если никакие действия не помогают найти уязвимое место, в том числе, не помогает смена хостинга, придётся перенести сайт на другую CMS: более надёжную или самописную.

Защита сайта на Drupal

Друпал надёжен сам по себе. Только использование непроверенных модулей, ошибки программиста, создающего свои модули для сайта, также ошибки настройки сервера или несоблюдение основ безопасности Друпал могут быть причиной взлома. Также не рекомендуется ставить Друпал из коробки, в том числе Kickstarter и прочие готовые решения на Друпал. Что поможет сделать безопасной CMS Drupal:

https://hackertarget.com/drupal-security-scan/ - онлайн сканер друпал на вирусы
Hacked! - модуль поиска изменённых файлов ядра и контрибных модулей, шаблонов
Security Review - поиск уязвимостей
Secure Code Review - анализ уязвимости кода
Coder - определяет соответствие кода сайта стандартам написания программ для Drupal

Что поможет сделать сайт наиболее надёжным?

  1. Собственный сервер VDS или хотя бы VPS - вместо шаред-хостинга
  2. Использование самописной CMS от надёжного разработчика
  3. Надёжные пароли ftp, базы данных, админа
  4. Разграничение прав доступа к действиям на сайте и страницам администрирования
  5. Отказ от сложных функций с непроверенными кодами или модулями

Где узнать о безопасности и защите сайтов

http://tlito.ru/node/58 - безопасность Drupal
http://tlito.ru/node/168 - обеспечение безопасности при разработке сайта
https://help.yandex.ru/webmaster/protecting-sites/basics.xml - основы безопасности от Яндекс
https://yandex.ru/support/webmaster/security/protecting-site.xml - как защитить сайт от заражения
http://habrahabr.ru/post/12067/ - основы безопасности PHP

Резюме

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

Защищайте сайт, чтобы решение о смене CMS, хостинга, адреса, политики развития ресурса было собственным решением Администрации ресурса, а не принятым в условиях форс-мажора, давления, угроз, шантажа или даже судебных исков.

Да, кстати, за действия хакеров, взломавших сервер, и причинённый пользователям вред ответственность несёт Администрация Интернет-сайта. Поэтому не стоит хранить любую личную информацию, платёжную информацию или предлагать любые функции, которые принесут урон пользователям после взлома сайта хакером.

Вопросы размещайте в вопросах и ответах.