Ліричний вступ

Чи чули Ви взагалі про ці 6 літер? Основна небезпека саме в тому, що більшість власників сайтів на WordPress не знають, що у WordPress є такий протокол чи механізм, чи називайте як хочете 🙂

Ще за часів, коли біля сільпо бігали мамонти, у WordPress з’явилась можливість “спілкуватись” з іншими сайтами на WordPress, а також можливість віддалено керувати сайтом через певний “інтерфейс”.

Через XML-RPC відправляються трекбеки та пінгбеки, через цей механізм працює досить відомий плагін Jetpack, а також мобільні додатки для керування сайтами WordPress.

То в чому проблема з XML-RPC, нарешті спитаєте ви?

Проблема в тому, що даний механізм, який в більшості описаний та працює через файл xmlrpc.php – надає можливість авторизації на сайті, але такої авторизації, яку не захищають та не контролюють більшість стандартних методів чи плагінів захисту від підбору паролів. Відповідно, майже без обмежень, зловмисник може пробувати підбирати паролі до вашого сайту, і плювати з 5 поверху на ваші захисти адмінки 🙂


            160.153.153.30 - *************************** [19/Dec/2019:17:15:23 +0200] "POST /xmlrpc.php HTTP/1.1" 403 564 "-" rt=0.000 ut="-" cs=-
160.153.153.30 - *************************** [19/Dec/2019:17:15:23 +0200] "POST /xmlrpc.php HTTP/1.1" 403 564 "-" rt=0.000 ut="-" cs=-
46.105.72.16 - *************************** [19/Dec/2019:17:15:35 +0200] "POST /xmlrpc.php HTTP/1.1" 403 162 "-" rt=0.004 ut="-" cs=-
108.162.229.41 - *************************** [19/Dec/2019:17:15:40 +0200] "POST /xmlrpc.php HTTP/1.1" 200 220 "-" rt=1.564 ut="1.564" cs=-
108.169.181.185 - *************************** [19/Dec/2019:17:15:45 +0200] "POST /xmlrpc.php HTTP/1.1" 403 162 "-" rt=0.104 ut="-" cs=-
167.114.144.124 - *************************** [19/Dec/2019:17:15:48 +0200] "POST /xmlrpc.php HTTP/1.1" 403 162 "-" rt=0.092 ut="-" cs=-
103.48.80.23 - *************************** [19/Dec/2019:17:15:01 +0200] "POST /xmlrpc.php HTTP/1.1" 403 162 "-" rt=0.237 ut="-" cs=-
117.48.201.107 - *************************** [19/Dec/2019:17:15:09 +0200] "POST /xmlrpc.php HTTP/1.1" 403 162 "-" rt=1.231 ut="-" cs=-
210.57.217.16 - *************************** [19/Dec/2019:17:15:54 +0200] "POST /xmlrpc.php HTTP/1.1" 403 162 "-" rt=0.209 ut="-" cs=-
178.128.84.200 - *************************** [19/Dec/2019:17:16:01 +0200] "POST /xmlrpc.php HTTP/1.1" 403 162 "-" rt=0.169 ut="-" cs=-
212.64.6.121 - *************************** [19/Dec/2019:17:15:45 +0200] "POST /xmlrpc.php HTTP/1.1" 403 162 "-" rt=1.253 ut="-" cs=-
141.101.69.10 - *************************** [19/Dec/2019:17:16:08 +0200] "POST /xmlrpc.php HTTP/1.1" 200 265 "-" rt=0.573 ut="0.573" cs=-
184.168.27.64 - *************************** [19/Dec/2019:17:16:12 +0200] "POST /xmlrpc.php HTTP/1.1" 403 564 "-" rt=0.000 ut="-" cs=-
45.252.248.18 - *************************** [19/Dec/2019:17:16:32 +0200] "POST /xmlrpc.php HTTP/1.1" 403 162 "-" rt=0.289 ut="-" cs=-Code language: JavaScript (javascript)

Що це таке страшне вгорі? Це, мої любі читачі, маленький шматочок журналу доступу до одного нашого сервера. Кожен рядок цього коду – це спроба надіслати якісь дані через файл xmlrpc.php до певного сайту. Враховуючи, що xmlrpc “в здоровому глузді” ніхто не використовує (жарт, звісно 🙂 ), напевно маємо спроби підібрати паролі до сайтів. Таких спроб лише за дві третини 19 грудня на одному з серверів я нарахував близько 14 000 разів. Як вам?

Малувато буде …

Тоді ось ще шматочок 🙂 . Трохи вище я писав про те, що вордпрес через xml-rpc спілкується з іншими сайтами на ворпдрес. Ви мабуть цього не застали, але свого часу це була популярна функція. Мова про пінгбеки та трекбеки (докладніше про них будуть окремі статті).

В двох словах, це такі штуки, які при згадуванні на вашому сайті іншого сайту на вордпрес – надсилають йому про це повідомлення. Отримуючи таке повідомлення, цей другий сайт, за умови увімкненого XML-RPC, робить певний набір дій. Якщо таких повідомлень буває десь “раз на рік”, то ніби все ОК, але якщо сотні тисяч на добу – це справжня ДДОС-атака.

Враховуючи також, що можна дещо підшаманити це “повідомлення”, – зловмисники отримують досить потужний і майже безкоштовний спосіб атак на ваш сайт. Далі наведено код, виконання якого імітує пінгбек з одного сайту на інший. А цікавинка цього коду в тому, що вам не потрібно бути власником чи адміном жодного з цих сайтів 🙂

curl http://www.example.com/xmlrpc.php -d 
    '<?xml version="1.0" encoding="iso-8859-1"?><methodCall><methodName>
    pingback.ping</methodName><params><param><value>
    <string>http://attacked.site.com/link_to_post
    </string></value></param><param><value><string>
    http://www.example.com/any_blog_post/
    </string></value></param></params></methodCall>'Code language: HTML, XML (xml)

Звісно, цей код не є робочим з коробки, але він має за мету продемонструвати, що XML-RPC має вади, і їх можуть використовувати не на вашу користь. Хоча в останніх версіях WordPress більшість багів закрито щодо цього.

Як захиститись? Ближче до справи!

Отже, ви поставили собі питання – чи потрібен мені цей протокол? Зазвичай відповідь буде – ні. Ви не користуєтесь пінгбеками/трекбеками, не керуєте сайтом через спеціальні мобільні додатки – відповідь “НІ”. В такому випадку вимикаємо цю штуку, аби не заважала життю.

Спосіб 1 – через файл .htaccess:

# Блокування запитів до XML-RPC
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>Code language: HTML, XML (xml)

або

# Блокування запитів до XML-RPC, 
# окрім запитів з вказаних IP
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from 222.111.121.2
Allow from 164.12.1.250
</Files>Code language: HTML, XML (xml)

Вимкнути функції XML-RPC через плагін чи код:

Встановіть та активуйте плагін https://wordpress.org/plugins/disable-xml-rpc/ , або додайте у functions.php наступний код:

/* Вимкнути XML-RPC */
add_filter('xmlrpc_enabled', '__return_false');Code language: JavaScript (javascript)

Ці два варіанти не захищають від атак, тому я б рекомендував об’єднати їх з захистом через .htaccess

Маєте свої способи захисту? Поділіться в коментарях, усі будуть вам вдячні!

Author

Дмитро Кондрюк в веб-індустрії з 2003 року. В 2009р. заснував проект Український WordPress (що у подальшому став офіційним сайтом команди локалізації WordPress в Україні). З 2010 року засновник і технічний директор проекту Український хостинг для WordPress (WPHost.me) - повноцінного хостинг-сервісу, максимально оптимізованого на використання CMS WordPress.

Коментувати