Массовый взлом WordPress. Вопросы и ответы

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

Что тут можно сказать? Истерика она и в Африке истерика. Мы попытались собрать наиболее важные вопросы в связи с ситуацией и спокойно ответить на них.

Вордпрессеры, пожалуйста, поделитесь ссылкой на этот пост со всеми, кому это может быть полезно.

Замечания по существу и поправки принимаются.


Вопрос: Везде говорят об опасной уязвимости WordPress. Каких версий это касается?

Ответ: Это каcается всех версий по 2.8.3 включительно в связи с одной активно обсуждаемой уязвимостью и версий от 2.2.3 до 2.8.2 в связи со второй (более опасной).

Вопрос: Ужас какой! Так их две?!!

Ответ: На самом деле их намного больше, да и эти две «знающие люди» используют никак не меньше года. Никто в результате пока не умер, так что паниковать не следует. Наоборот можно даже порадоваться: раз WordPress массово «ломают», значит, он очень популярен и широко распространен.

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

Вторая «дыра» опаснее. Злоумышленник (через сетевого червя) регистрируется на сайте как обычный пользователь, затем, эксплуатируя уязвимость, повышает свои полномочия до административных и начинает безобразничать. Все это делается не просто так: злоумышленники получают доступ к старым записям блога и публикуют в них вредоносный контент, как правило, скрытый.

Вопрос: Как узнать, взломан мой блог или нет?

Ответ:

1. Загляните в файл .htaccess, который находится в корневой директории вашего сайта. Если вы сами его не редактировали, он должен выглядеть так:

[php]# BEGIN WordPress
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</ifmodule>
# END WordPress[/php]

Эти строки нужны для того, чтобы в вашем блоге работали «Постоянные ссылки» (они же ЧПУ или человекопонятные URL).

Если зловред внес какие-то изменения, вы это сразу заметите. Примеры подозрительных записей вы найдете здесь.

2. В списке пользователей («Панель управления» — «Пользователи») такие лжеадминистраторы не отображаются, однако их можно обнаружить, обратившись непосредственно к базе данных. Например, зайдите в phpMyAdmin, перейдите к нужной базе и кликните по вкладке SQL. В появившемся окне введите следующий запрос:

[php]SELECT u.ID, u.user_login
FROM wp_users u, wp_usermeta um
WHERE u.ID = um.user_id
AND um.meta_key = ‘wp_capabilities’
AND um.meta_value LIKE ‘%administrator%’;[/php]

…и нажмите OK. Вам будет выведен список администраторов. Лишних можно удалить нажатием соответствующей иконки.

Вопрос: И как лечиться?

Ответ:

1. Верните файл .htaccess к первоначальному виду (см. предыдущий вопрос).

2. Свой код в .htaccess мог добавить плагин WP Super Cache. Если сомневаетесь, легитимен ли код, который вы видите, можно удалить все подозрительные строчки, а затем прописать правильные нажатием кнопки в настройках плагина.

3. Перейдите в «Панель управления» — «Настройки» — «Постоянные ссылки». Если вместо ваших настроек стоят какие-то другие — верните к первоначальному виду.

3. Удалите лишних администраторов из базы (см. предыдущий вопрос). Здесь предлагается еще один способ, как это сделать.

4. Проверьте, нет ли невидимого контента в ваших старых записях. Зайдите в phpMyAdmin, выберите нужную базу и снова перейдите на вкладку SQL. Наберите:

[php]SELECT * FROM wp_posts WHERE post_content LIKE ‘%<iframe%’
UNION
SELECT * FROM wp_posts WHERE post_content LIKE ‘%<noscript%’
UNION
SELECT * FROM wp_posts WHERE post_content LIKE ‘%display:%'[/php]

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

Вызвать нужные записи для просмотра и редактирования можно так:

[php]http://ваш-домен.ru/wp-admin/post.php?action=edit&post=XXXX[/php]

…где XXXX — номер записи.

Некоторые программы-клиенты для блоггинга (например, Windows Live Writer) могут добавлять код типа img style="display". Он не является вредоносным.

Вопрос: Если у меня запрещена регистрация, мне нечего бояться?

Ответ: Как уверяют некоторые пользователи, признаки взлома наблюдались и у тех, кто вообще запретил регистрацию. Мы не можем ни подтвердить, ни опровергнуть эти заявления. Но для дополнительной защиты не повредит закрыть доступ к папке /wp-admin на уровне сервера (см. ниже).

Вопрос: Я вычистил весь мусор/У меня ничего и не было. Стоит ли мне обновляться на WordPress с 2.7.1 на 2.8.4?

Ответ: Да, стоит. В свежей версии устранены обе упомянутые уязвимости и улучшен административный интерфейс.

Однако, увы, не во всех случаях апгрейд полезен. В частности, проведенное нами тестирование показало, что на одном и том же сервере при прочих равных условиях одна и та же страница блога с новой версией движка может генерироваться в среднем от двух до десяти раз дольше (примеры конкретных цифр с нашего VPS: 1,9 секунды против 0,456 на главной странице и 0,356 секунды против 0,045 на странице одиночной записи).

Также вряд ли можно советовать апгрейдиться тем, кто держит свои сайты на российском виртуальном хостинге. В этом году некоторые, в том числе, крупные и раскрученные хостеры, начали активную борьбу за снижение нагрузки на сервера (читай — решили втиснуть больше пользователей на сервер, потеснив в правах остальных). Меры воздействия широко применялись хостерами даже к тем, кто пользовался WordPress 2.7.1. Так, провайдер «Мастерхост» на одном из наших сайтов выдавал предупреждения всего лишь при посещении админки: даже простая операция смены темы оформления блога вызывала превышение допустимой нагрузки на процессор до семи раз. А это была «легонькая» (по сравнению с текущей) версия движка.

Вопрос: Так что же, если у меня виртуальный хостинг, обновляться не стоит?

Ответ: Почему же, могут быть исключения. Способность или неспособность сервера справиться со скриптами WordPress без превышения допустимого уровня нагрузки зависит от мощности оборудования и от грамотного конфигурирования серверного ПО. Само собой разумеется, не у всех провайдерских админов руки растут из нужного места и не у всех есть желание регулярно обновлять «железо». Как обстоят дела у вашего провайдера — вам должно быть виднее.

Попробуйте. Не понравится — сможете безболезненно «откатиться» на прежнюю версию. Мы это делали и никаких проблем не возникло.

Вопрос: Я боюсь обновляться, потому что меня забанит хостер за нагрузки. И что теперь, оставаться с уязвимостями?

Ответ: Есть хорошая новость. Обе этих уязвимости, судя по всему, лечатся просто, и больших изменений не требуется.

1. Для исправления уязвимости со сбросом админ-пароля следует пропатчить файл wp-login.php (скачать патч от одного из разработчиков), находящийся в корневой директории WordPress 2.7.1

2. Для исправления уязвимости с повышением прав необходимо в файл /wp-includes/vars.php после строки

[php]$pagenow = $self_matches[1];[/php]

…добавить следующее выражение:

[php]$pagenow = trim($pagenow, ‘/’);[/php]

(Источник.)

3. Дополнительная мера безопасности: если в вашем блоге не требуется регистрация пользователей, вы можете запаролить папку wp-admin, чтобы туда вообще не могли зайти посторонние.

Вопрос: Как запаролить папку?

Ответ: Для веб-сервера Apache инструкция будет выглядеть так:

1. Создайте (если его там еще нет) файл .htaccess в требуемой папке. Впишите туда:

[php]AuthName "Restricted"
AuthType Basic
AuthUserFile /путь_к_файлу_с_логином_и_паролем/passwd.file
require user имя_пользователя[/php]

2. Скачайте утилиту htpasswd.exe (если опасаетесь скачивать с подозрительных сайтов, вы найдете ее в архиве с веб-сервером Apache для Windows) и запустите ее в командной строке. Для этого перейдите в папку, со скачанной утилитой и наберите:

[php]htpasswd -c passwd.file username[/php]

…где username — желаемое имя пользователя. Утилита дважды попросит ввести пароль для указанного пользователя и создаст файл passwd.file с зашифрованным паролем.

3. Разместите файл там, куда вы указали путь в пункте 1. Желательно, чтобы это была папка, к которой нет доступа у пользователей Интернета.

Если вместо Apache на вашем сервере используется связка Nginx+FastCGI:

1. В конфигурации сервера впишите дополнительный location (или попросите это сделать администратора):

[php]location ~* ^/wp-admin/(?:$|.+/$|.+\.php$) {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/passwd.file; # Путь может быть и другим, если вам удобнее
fastcgi_index index.php;
fastcgi_pass localhost:53217;
fastcgi_param SCRIPT_FILENAME /путь/к/корневой/директории/вордпресса$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}[/php]

2. Файл passwd.file можно создать тем же способом, что и указано выше. Обратите внимание, что Windows-утилита htpasswd по умолчанию кодирует файл иначе, чем та же утилита под Linux. Для Nginx надо использовать линуксовый вариант (шифрование crypt).

3. Перезапустите Nginx.

Один комментарий к “Массовый взлом WordPress. Вопросы и ответы”

  1. Спасибо за толковую статью, Владислав!
    Вижу, много труда положено, чтобы подробно все разъяснить. Буду обновляться до версии 8.4.
    Почитаю и другие статьи, уверен, они тоже принесут мне пользу!
    Еще раз спасибо! :).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *