sonyps4.ru

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

Перед прочтением данной статьи вы должны четко понимать, что 100% гарантии безопасности вашего сайта (не зависимо от CMS) не может дать никто. Дело лишь за тем, сколько стоит информация на сайте. И если она стоит миллионы, для защиты сайта понадобится опытная команда программистов, а если несколько тысяч долларов, то следующие советы помогут здорово улучшить безопасность вашего Wordpress-сайта.

Внимание! Посмотрите основные правила безопасности , которые предназначены для большинства сайтов и не зависят от того, на каком движке они сделаны. Тем более в этой статье они не повторяются, т.к. в ней мы сосредоточились на особенностях Вордпресса.

Как защитить Wordpress от взлома? 1. Обновляйте движок

Постоянно проверяйте обновления вашего Wordpress, т.к. разработчики с помощью патчей устраняют уязвимости системы. Вот простой пример - хакер находит уязвимость в движке, и взламывает его. Учитывая, что этот движок стоит на тысячах сайтов, то используя этот способ можно почти в автоматическом режиме взломать и остальные сайты. Сюда также можно добавить темы и плагины. Поэтому не ленитесь и обновляйте все, что можно обновить.

2. Не используйте подозрительные плагины

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

3. Используйте надежный хостинг

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

4. Установите надежные логин и пароль

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

5. Ограничьте количество попыток входа

Если хакер осуществляет попытку взломать сайт путем подбора логина и пароля, то теоретически когда-нибудь он это сделает. Помешать этому можно путем ограничения попыток неверного ввода с одного IP-адреса. Для этого используют плагины Limit Login Attempts и Login LockDown .

6. Используйте надежные темы

Перед установкой темы обязательно посмотрите кто ее сделал, старайтесь чтобы это была известная и опытная команда. Также следует запретить редактирование файлов вашей темы из админ-панели. Это поможет в том случае, хакер получит доступ к админке. Чтобы это сделать в файле wp-config.php добавляем следующее:

define("DISALLOW_FILE_EDIT", true); 7. Измените ключи шифрования

Следует поменять ключи шифрования, т.к. стандартные могут быть известны взломщикам. Для этого переходим на специальный сервис на официальном сайте Wordpress и в свой wp-config.php вставляем значения указанных там переменных. Или же придумайте сами, любые сочетания букв.

8. Установите компоненты защиты

Используйте следующие компоненты, которые помогут улучшить безопасность сайта на Wordpress:

  • Better WP Security - один из самых популярных плагинов по безопасности с мощным функционалом
  • WP Security Scan - проверяет множество параметров безопасности вашего сайта
  • WP Antivirus - постоянно сканирует файлы сайта на наличие взлома, и при обнаружении присылает сообщение на имейл
  • WP File Monitor - аналогичен предыдущему плагину
  • Securi Scanner - сканер сайта на наличие взлома и уязвимостей.
9. Измените префикс базы данных

Когда хакер хочет сделать SQL-инъекцию, то он уже знает, что в стандартном варианте Wordpress использует префикс wp_, поэтому желательно его изменить. Сделать это можно или с помощью плагина (легкий путь, но не всегда плагины корректно работают) или через PhpMyAdmin (чуть сложнее сделать, поэтому мы создали универсальную инструкцию).

10. Перенесите wp-config.php

Следует вынести этот файл за пределы папки public_html (или ее аналога, в которой установлен Wordpress), например поднять на один уровень вверх. О том как это сделать можно прочитать .

11. Заблокируйте админ-панель для чужих

Сделайте так, чтобы пользоваться вашей админ-панелью могли только вы. Для этого блокируется доступ к папке wp-admin для всех, у кого IP-адрес отличается от вашего. Чтобы так сделать нужно добавить в эту папку файл.htaccess и добавить в него:

order deny,allow
allow from xxx.xx.xxx.xx
deny from all

где "xxx.xx.xxx.xx" - это IP-адрес, с которого можно зайти в админ-панель.

12. Установите нужные права на папки

В классическом варианте нужно установить на все папки - 755, на все файлы - 644. Иногда на папку wp-content ставят права 777, но лучше - 755 (хотя это как правило запрещает добавлять контент для сторонних пользователей).

Если у вы считаете, что в этой статье упущена какая-либо рекомендация, то напишите о ней в комментарии и мы с удовольствием ее добавим.

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

Введение

На сегодняшний день WordPress среди систем управления контентом популярнее всего. Его доля составляет 60,4% от общего числа сайтов, использующих CMS-движки. Из них, согласно статистике, 67,3% сайтов базируется на последней версии данного программного обеспечения. Между тем за двенадцать лет существования веб-движка в нем было обнаружено 242 уязвимости различного рода (без учета уязвимостей, найденных в сторонних плагинах и темах). А статистика сторонних дополнений выглядит еще печальней. Так, компания Revisium провела анализ 2350 русифицированных шаблонов для WordPress, взятых из различных источников. В результате они выяснили, что более половины (54%) оказались зараженными веб-шеллами, бэкдорами, blackhat seo («спам») ссылками, а также содержали скрипты с критическими уязвимостями. Поэтому устраивайся поудобней, сейчас мы будем разбираться, как провести аудит сайта на WordPress и устранить найденные недостатки. Использовать будем версию 4.1 (русифицированную).

Индексирование сайта

Первым этапом любого теста обычно бывает сбор информации о цели. И тут очень часто помогает неправильная настройка индексирования сайта, которая позволяет неавторизованным пользователям просматривать содержимое отдельных разделов сайта и, например, получить информацию об установленных плагинах и темах, а также доступ к конфиденциальным данным или резервным копиям баз данных. Чтобы проверить, какие директории видны снаружи, проще всего воспользоваться Гуглом. Достаточно выполнить запрос Google Dorks типа site:example.com intitle:"index of" inurl:/wp-content/ . В операторе inurl: можно указать следующие директории:

/wp-content/ /wp-content/languages/plugins /wp-content/languages/themes /wp-content/plugins/ /wp-content/themes/ /wp-content/uploads/

Если сможешь просмотреть /wp-content/plugins/ , следующий шаг по сбору информации об установленных плагинах и их версиях значительно упрощается. Естественно, запретить индексирование можно с помощью файла robots.txt . Так как по умолчанию он не включен в установочный пакет WordPress, его необходимо создать самому и закинуть в корневую директорию сайта. Мануалов по созданию и работе с файлом robots.txt довольно много, поэтому оставлю эту тему для самоподготовки. Приведу лишь один из возможных вариантов:

User-Agent: * Disallow: /cgi-bin Disallow: /wp-login.php Disallow: /wp-admin/ Disallow: /wp-includes/ Disallow: /wp-content/ Disallow: /wp-content/plugins/ Disallow: /wp-content/themes/ Disallow: /?author=* Allow: /

Если в файлах, хранящихся в папке uploads , имеются сведения конфиденциального характера, добавляем к этому списку строчку: Disallow: /wp-content/uploads/ .
С другой стороны, в файле robots.txt не рекомендуется размещать ссылки на директории, которые были созданы специально для хранения чувствительной информации. Иначе этим самым ты облегчишь злоумышленнику задачу, так как это первое место, куда обычно все заглядывают в поисках «интересненького».

Определение версии WordPress

Еще один важный шаг - идентификация версии CMS. Иначе как подобрать подходящий сплоит? Существует три быстрых способа для определения используемой на сайте версии WordPress:

  • Найти в исходном коде страницы. Она указана в метатеге generator:

    или же в тегах :

  • Найти в файле readme.html (рис. 1), который входит в состав установочного пакета и находится в корне сайта. Файл может иметь и другие названия типа readme-ja.html .
  • Найти в файле ru_RU.po (рис. 2), который входит в состав установочного пакета и расположен по адресу /wp-content/languages/ : "Project-Id-Version: WordPress 4.1.1\n"

  • Один из вариантов защиты в данном случае - ограничить доступ к файлам readme.html и ru_RU.po с помощью.htaccess .

    Автоматизация процесса тестирования

    Исследованием безопасности WordPress занялись не вчера, поэтому существует достаточное количество инструментов, позволяющих автоматизировать рутинные задачи.

    • определение версии и темы с помощью скрипта http-wordpress-info nmap -sV --script http-wordpress-info
    • подбор пароля по словарям nmap -p80 --script http-wordpress-brute --script-args "userdb=users.txt,passdb=passwords.txt" example.com
    • модуль для определения версии: auxiliary/scanner/http/wordpress_scanner ;
    • модуль для определения имени пользователя auxiliary/scanner/http/wordpress_login_enum .
    • перечисление установленных плагинов: wpscan --url www.exmple.com --enumerate p ;
    • перечисление установленных тем: wpscan --url www.exmple.com --enumerate t ;
    • перечисление установленного timthumbs: wpscan --url www.example.com --enumerate tt ;
    • определение имени пользователя: wpscan --url www.example.com --enumerate u ;
    • подбор пароля по словарю для пользователя admin: wpscan --url www.example.com --wordlist wordlist.txt --username admin ;
    • подбор пароля с использованием связки имя пользователя / пароль с числом потоков, равным 50: wpscan --url www.example.com --wordlist wordlist.txt --threads 50 .
    Определение установленных компонентов

    Теперь давай соберем информацию об установленных плагинах и темах независимо от того, активированы они или нет. Прежде всего такую информацию можно выудить из исходного кода HTML-страницы, например по JavaScript-ссылкам, из комментариев и ресурсов типа CSS, которые подгружаются на страницу. Это самый простой способ получения информации об установленных компонентах. Например, строчки ниже указывают на используемую тему twentyeleven:

    Так как информация о плагинах не всегда отображается в исходном коде HTML-страницы, то обнаружить установленные компоненты можно с помощью утилиты WPScan (см. врезку). Только не забывай, что перебор путей плагинов зафиксируется в логах веб-сервера.
    Получив данные об установленных компонентах, уже можно приступать к поиску уязвимостей своими силами либо найти общедоступные эксплойты на ресурсах типа rapid7 или exploit-db .

    Определение имени пользователей

    По умолчанию в WordPress каждому пользователю присваивается уникальный идентификатор, представленный в виде числа: example.com/?author=1 . Перебирая числа, ты и определишь имена пользователей сайта. Учетная запись администратора admin, которая создается в процессе установки WordPress, идет под номером 1, поэтому в качестве защитной меры рекомендуется ее удалить.

    Брутфорс wp-login

    Зная имя пользователя, можно попробовать подобрать пароль к панели администрирования. Форма авторизации WordPress на странице wp-login.php весьма информативна (рис. 3), особенно для злоумышленника: при вводе неправильных данных появляются подсказки о неверном имени пользователя или пароле для конкретного пользователя. Разработчикам известно о данной особенности, но ее решили оставить, так как подобные сообщения удобны для пользователей, которые могли забыть свой логин и/или пароль. Проблему подбора пароля можно решить, используя стойкий пароль, состоящий из двенадцати и более символов и включающий буквы верхнего и нижнего регистра, числа и спецсимволы. Или же, например, при помощи плагина Login LockDown.

    Заливаем Shell

    После того как мы сбрутили пароль, ничто не мешает залить шелл на скомпрометированный веб-ресурс. Для этих целей вполне сгодится фреймворк Weevely , который позволяет генерировать шелл в обфусцированном виде, что делает его обнаружение довольно сложным. Чтобы не вызывать подозрения, полученный код можно вставить в любой файл темы (например, в index.php) через редактор темы консоли WordPress. После чего с помощью того же Weevely можно подключиться к машине жертвы и вызывать различные команды:

    Python weevely.py http://test/index.php Pa$$w0rd [+] weevely 3.1.0 [+] Target:test [+] Session: _weevely/sessions/test/index_0.session [+] Browse the filesystem or execute commands starts the connection [+] to the target. Type:help for more information. weevely> :help

    Подключаем.htaccess

    Для запрета доступа к чувствительной информации лучше воспользоваться файлом.htaccess - это файл конфигурации, используемый в Apache Web Server. Рассмотрим возможности этого файла с точки зрения безопасности. С его помощью можно: запретить доступ к директориям и файлам, заблокировать различные SQL-инъекции и вредоносные скрипты. Для этого стандартный файл.htaccess для CMS WordPress 4.1 нужно немного расширить. Чтобы закрыть список файлов и папок, добавляем:

    Options +FollowSymLinks -Indexes

    RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) заблокирует ссылки, содержащие кодировку Base64. Избавиться от ссылок, содержащих тег :

    RewriteCond %{QUERY_STRING} (|%3E)

    Противодействовать скриптам, пытающимся установить глобальные переменные или изменить переменную _REQUEST через URL:

    RewriteCond %{QUERY_STRING} GLOBALS (=|\[|\%{0,2}) RewriteCond %{QUERY_STRING} _REQUEST (=|\[|\%{0,2})

    Для противодействия SQL-инъекциям блокируем запросы к URL, содержащие определенные ключевые слова:

    RewriteCond %{query_string} concat.*\( RewriteCond %{query_string} union.*select.*\( RewriteCond %{query_string} union.*all.*select RewriteRule ^(.*)$ index.php

    Чтобы испортить жизнь распространенным хакерским утилитам, отфильтровываем определенные user-agent’ы:

    SetEnvIf user-agent «Indy Library» stayout=1 SetEnvIf user-agent «libwww-perl» stayout=1 SetEnvIf user-agent «Wget» stayout=1 deny from env=stayout

    Защищаем файлы

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

    • wp-config.php , содержит имя БД, имя пользователя, пароль и префикс таблиц;
    • .htaccess ;
    • readme.html и ru_RU.po , которые содержат версию WordPress;
    • install.php .

    Делается это следующим образом:

    Order Allow,Deny Deny from all

    Причем файл.htaccess , содержащий эти строки, должен находиться в той же директории, что и защищаемый файл. Затем запрещаем перечисление пользователей (помнишь, чуть выше мы говорили о том, как легко получить список пользователей?):

    RewriteCond %{QUERY_STRING} author=\d RewriteRule ^ /?

    Так, что еще? Можно разрешить вход только с указанных IP-адресов. Для этого создай файл.htaccess в папке wp-admin со следующими правилами:

    AuthUserFile /dev/null AuthGroupFile /dev/null AuthName "Access Control" AuthType Basic order deny,allow deny from all allow from 178.178.178.178 # IP домашнего компа allow from 248.248.248.248 # IP рабочего компа

    Метод не слишком гибкий и применим только в случае, если ты работаешь с ограниченным числом фиксированных IP-адресов. В противном случае рекомендуется установить пароль на папку wp-admin через хостинг-панель (при наличии такого функционала).

    Дополнительные меры

    К тому, что было сказано выше, можно добавить следующие рекомендации. Во-первых, использовать только актуальные версии WordPress и его компонентов - это позволит устранить известные уязвимости. Во-вторых, удалить неиспользуемые плагины и темы, которые также могут быть проэксплуатированы. В-третьих, скачивать темы и плагины WordPress из достоверных источников, например с сайтов разработчиков и официального сайта WordPress. Как и домашний ПК, нужно периодически проверять свой веб-ресурс веб-антивирусом, например AI-Bolit . Если у тебя есть доступ к веб-серверу, настрой права доступа к файлам и каталогам. Как правило, WordPress устанавливает все необходимые права на стадии установки, но в случае необходимости chmod можно выставить вручную. Для каталогов - chmod 755 , для файлов - chmod 644 . Убедись, что права 777 присвоены только тем объектам, которые в этом нуждаются (иногда это необходимо для нормальной работы некоторых плагинов). Если WordPress перестал нормально функционировать, поэкспериментируй с правами доступа: сначала попробуй 755, затем 766 и, наконец, 777. Для всех htaccess-файлов выставь chmod 444 (только чтение). Если сайт перестанет работать, попробуй поэкспериментировать со значениями 400, 440, 444, 600, 640, 644.

    Перемести файл wp-config.php . Данный файл содержит информацию о настройках MySQL, префикс таблиц, секретные ключи и прочее. Поэтому его необходимо перенести для того, чтобы файл не был доступен из интернета. Если сайт не располагается в папке public_html , то перенеси файл wp-config.php в папку уровнем выше, и WordPress автоматически найдет его в этой корневой директории (применимо, если на хостинге имеется только один сайт на этой CMS).

    Чтобы усложнить заливку шелла, отключи возможность редактирования темы через консоль WordPress. Для этого вставь следующую строчку в файл wp-config.php: define("DISALLOW_FILE_EDIT", true); .

    Еще одно слабое место - файл install.php (что в папке wp-admin). Поэтому его лучше удалить, заблокировать или изменить. Выполни один из вариантов:

  • Просто удали этот файл - после установки в нем нет больше необходимости.
  • Запрети доступ к файлу с помощью.htaccess .
  • Переименуй оригинальный файл install.php (например, install.php.old) и создай новый файл install.php со следующим содержимым: Error Establishing Database Connection

    We are currently experiencing database issues. Please check back shortly. Thank you.

  • Помимо уведомления посетителей сайта, данный скрипт выполняет следующие действия:

    • отправляет клиенту и поисковым системам код состояния 503 («Сервис временно недоступен»);
    • указывает промежуток времени, через который клиенты и поисковые системы могут вернуться на сайт (настраиваемый параметр);
    • уведомляет по электронной почте о проблеме с БД для принятия соответствующих мер.

    Дело в том, что в ранних версиях WordPress (> Добавить нового .

    Введите всю необходимую информацию для нового пользователя, определив его роль как «Администратор» и нажмите «Добавить нового пользователя» .

    Шаг 2 – Удаление пользователя admin

    После этого выйдите из системы управления, войдите под новой учетной записью и удалите пользователя admin из системы одним из способов:

    Способ 1 – В главном меню слева выберите Пользователи >> Все пользователи . Наведите на имя пользователя admin , и вы увидите функцию «Удалить» .

    Способ 2 — В главном меню слева выберите Пользователи >> Все пользователи . Найдите пользователя admin , отметьте его галочкой и из выпадающего меню «Действия» выберите «Удалить» . После этого нажмите на опцию «Применить» под списком пользователей. Эта опция удобна, если вам необходимо удалить сразу несколько пользователей.

    Так же вы можете изменить имя пользователя admin через запрос к базе данных:
    UPDATE wp_users SET user_login = ‘новый_логин’ WHERE user_login = ‘admin’;

    У данного способа есть минус: автор для постов, написанных пользователем admin , не будет изменен. Для того, чтобы это исправить, необходимо сделать еще один запрос к базе данных:
    UPDATE wp_posts SET post_author = ‘новый_логин’ WHERE post_author = ‘admin’;

    2. Используйте сложный и уникальный пароль.

    Защита админки WordPress, конечно, невозможна без сложного хорошего пароля. Важно, чтобы он был уникальным и включал в себя цифры, буквы разных регистров, знаки пунктуации, символы и прочее. Пароли типа: pass, 1q2w3e4r5t6y, 87654321, qwerty, abc123, 111111, 1234, дата вашего рождения и т.д. – не являются надежными, но многие пользователи продолжают их использовать. Пример хорошего пароля: pcVaOF8r39. Конечно, вам сложно будет запомнить такой пароль, но для этого существует ряд программ, которые хранят и генерируют пароли, а также могут быть интегрированы в интерфейс вашего браузера (например, Password Agent, KeyPass, Roboform и т.д.)

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

    Не забывайте регулярно обновлять свои пароли.

    3. Обновляйте версию WordPress.

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

    4. Скрывайте версию WordPress.

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

    С помощью файла functions.php можно запретить вывод информации о версии вашей платформы. Для этого вам необходимо открыть файл functions.php , расположенный в корневой папке текущей темы вашего веб-сайта (wp-content/themes/текущая_тема_wordpress) , и добавить следующий код:
    remove_action(‘wp_head’, ‘wp_generator’);

    Или же можно добавить следующий код в файл functions.php :

    /* Hide WP version strings from scripts and styles
    * @return {string} $src
    * @filter script_loader_src
    * @filter style_loader_src
    */
    function fjarrett_remove_wp_version_strings($src) {
    global $wp_version;
    parse_str(parse_url($src, PHP_URL_QUERY), $query);
    if (!empty($query[‘ver’]) && $query[‘ver’] === $wp_version) {
    $src = remove_query_arg(‘ver’, $src);
    }
    return $src;
    }
    add_filter(‘script_loader_src’, ‘fjarrett_remove_wp_version_strings’);
    add_filter(‘style_loader_src’, ‘fjarrett_remove_wp_version_strings’);

    /* Hide WP version strings from generator meta tag */
    function wpmudev_remove_version() {
    return »;
    }
    add_filter(‘the_generator’, ‘wpmudev_remove_version’);

    Помимо вышесказанного, в папке любой темы WordPress, вы найдете header.php файл. В нём также указывается версия вашей установки, что для хакера является очень интересным, как упоминалось ранее. Удалив следующую строку из файла, вы избавитесь от этой лишней информации:



    Загрузка...