Блог

Как защитить сайт от взлома. 6 базовых действий, которые остановят хакеров

Как защитить сайт от взлома
Вадим Корчинский
Лечит сайты с 2012

Любой взлом сайта начинается с разведки, сбора и анализа информации. Для этого хакеры используют вредоносных ботов, поисковую систему Google, брутфорс (перебор) каталогов и файлов сайта.

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

Статья будет полезна владельцам сайтов, маркетологам, веб-разработчикам и всем-всем, кто заботится о безопасности сайта.

Совет 1. Не храните бэкапы в корневом каталоге сайта

Часто бывает, что неопытные сотрудники техподдержки хостинга, программисты и владельцы сайтов создают в корневом каталоге сайтов бэкапы с простым названием backup.zip, site.zip, 1.zip… 

В таком случае злоумышленник легко может скачать архивы и узнать пароли от базы данных и другую конфиденциальную информацию через брутфорс запросов к сайту. В лог-файле запросы злоумышленников будут отображаться так:
"GET / backup.zip HTTP/1.0" 200
"GET / site.zip HTTP/1.0" 200
"GET / 1.zip HTTP/1.0" 200

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

К примеру, брутфорс каталога JCE, популярного компонента CMS Joomla, в лог файлах будет отображаться так:
"GET /components/com_jce/editor/extensions/filesystem/joomla.xml HTTP/1.0" 200 1335 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36".

В логе есть число 200, оно означает, что файл joomla.xml существует, значит компонент JCE на сайте установлен. Узнав это, злоумышленник отправляет к файлам компонента вредоносные запросы, и если версия компонента уязвима, злоумышленник заливает на сайт shell-скрипт, через который получает полный доступ к сайту.

Как защитить сайт
Не храните бэкапы в корневом каталоге сайта, для архивов всегда используйте сложные названия. Для файлов популярных скриптов, к примеру adminer.php, меняйте название, а после работы с ними обязательно удаляйте с хостинга.

Совет 2. Запретите индексировать системные каталоги

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

Например, команда inurl:/ckeditor найдёт все url-адреса, в которых будет название популярного и в ранних версиях уязвимого редактора ckeditor. Команда intitle:”index of” найдет все сайты, каталоги которых доступны к просмотру.

Из-за неправильно настроенной конфигурации сервера поисковые роботы индексируют и отображают в поисковой выдаче ошибки PHP-скриптов, файлы логов (access_log, error_log, awstat…), бэкапы баз данных и другую конфиденциальную информацию, которая может быть использована для взлома сайта.

Как защитить сайт
Правильно настройте файл robots.txt. В нём запретите индексацию всех системных каталогов и каталогов всех скриптов, которые не должны отображаться в поисковой выдаче. Сделать это можно строкой
Disallow:/your_catalog

Совет 3. Обновляйте CMS и софт на сервере

Бесплатные системы управления и большинство дополнений к ним имеют открытый исходный код, злоумышленники могут легко проанализировать его и найти уязвимости. Готовые скрипты для эксплуатации уязвимостей (exploit) часто появляются в открытом доступе.

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

Совет 4. Регулярно проверяйте сайт на уязвимости

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

Как защитить сайт
Сами проверяйте скрипты на уязвимость. Для этого в поисковую систему можно отправить запрос: exploit + название CMS, плагина, модуля, шаблона… После анализа исходного кода эксплойта можно определить, какой вектор атаки используется, какие файлы уязвимы и как правильно закрыть уязвимость. Наиболее популярными сайтами для поиска уязвимых скриптов считаются CVE Details и Exploit Database.

Совет 5. Закройте доступ к папкам — забетонируйте сайт

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

Как защитить сайт
Необходимо сделать hardening, то есть «забетонировать» сайт. Надо запретить запись во все каталоги сайта и запретить изменение всех файлов CMS, плагинов и шаблонов, которые во время работы сайта не требуют изменений. Чтение и выполнение файлов при таких правах будет доступно. Для правильной работы сайта надо сделать так:

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

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

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

  • mysite.com/protect.php — изменяет все права на файлы и папки 444 и 555;
  • mysite.com/unprotected.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-коду выполняться из директории, где не должно быть исполняемых файлов.

Совет 6. Ограничьте доступ к панели управления

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

Как защитить сайт
Установите на админку сайта дополнительный логин и пароль. Для этого в каталог административной панели (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

<Files ~ ".(css)$">
Allow from all
satisfy any
</Files>
<Files ~ ".(js)$">
Allow from all
satisfy any
</Files>
<Files ~ ".(png)$">
Allow from all
satisfy any
</Files>
<Files ~ ".(gif)$">
Allow from all
satisfy any
</Files>
<Files ~ ".(jpg)$">
Allow from all
satisfy any
</Files>

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

Если сайт уже взломан

Чтобы определить уязвимость, через которую взломали сайт, сделайте анализ логов доступа к сайту — access_log. В файле тщательно проанализируйте все подозрительные post и get-запросы.

На сайтах с большой посещаемостью access_log бывают очень большие. Чтобы упростить поиск уязвимости, сначала узнайте приблизительное время взлома. Для этого рассортируйте все файлы сайта по дате последнего изменения, найдите антивирусным сканером shell-скрипты и время, когда они появились на сайте. Далее в логах найдите post и get-запросы, которые близки по времени к изменению файлов или появлению shell-скриптов.

Подписывайтесь на блог Vepp!

И вот ещё статьи про безопасность сайта, почитайте:

 

Подписаться!

Как управлять сайтом

Узнайте, как автоматизировать запуск и поддержку WordPress

Смотреть видео
Вадим Корчинский
Лечит сайты с 2012

Подписывайтесь на статьи от экспертов WordPress


Сайт защищён с помощью reCAPTCHA. Политика конфиденциальности и Условия сервиса Google.

 

 

 

Мошенники не смогут отправлять письма от вашего имени, а ваши собственные письма не будут попадать в спам.

Настя Кузнецова

Редактор

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

Настя Кузнецова

Редактор

Можно вручную запустить проверку сайта и лечение зараженных файлов: первое бесплатно, второе платно.

Даня Колесников

Маркетолог