Cum pot să știu dacă site-ul meu folosește fișierul xmlrpc.php?
Am preluat un site web la locul meu de muncă care a fost dezvoltat de un angajat anterior, și se pare că recent acest site a fost victima unei serii de atacuri DDoS prin utilizarea pingback-ului xmlrpc, dovedit de înregistrări în log precum:
154.16.63.40 - - [22/May/2016:06:52:49 +0100] "POST /xmlrpc.php HTTP/1.1" 200 596 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)"
(Evident, acesta nu este un robot Google deoarece nu există niciun motiv pentru ca Google să facă POST către acest fișier.)
Cred că există multe soluții pentru aceasta (Acest tutorial) dar eu tind să mă orientez spre blocarea completă a accesului la fișier. Cu toate acestea, nu sunt sigur dacă acest site folosește efectiv serviciile pe care xmlrpc le permite. Există vreo modalitate specifică prin care pot verifica dacă dezvoltatorul anterior a implementat ceva care folosește funcționalitatea xmlrpc din WordPress? Aș putea verifica funcții în anumite fișiere/există ceva care să indice clar utilizarea acestuia?
orice ajutor ar fi binevenit!
EDITARE: Ar fi util ceva de genul acesta?
<FilesMatch "^(xmlrpc\.php)">
Order Deny,Allow
# Lista albă de adrese IP
Allow from xxx.xxx.xxx.xxx
Deny from all
</FilesMatch>
Dacă permit accesul de la adresa IP a serverului, ar funcționa acest lucru pentru plugin-uri etc. sau acestea au propriile adrese IP care ar trebui adăugate?

După cum ai descris, ai fost victima unui atac DDoS (sau poate nu, doar presupun că știi despre asta). Aceste tipuri de atacuri pot fi direcționate împotriva oricărei părți a unui site web dinamic, de exemplu fișierele index.php sau xml-rpc.php.
Din punctul meu de vedere, soluția corectă nu este blocarea părții atacate, ci blocarea atacatorului.
Deci, nu bloca API-ul XML-RPC în WordPress, acesta este folosit de un număr mare de plugin-uri și clienți externi; blochează-l doar dacă știi cu adevărat ce faci și consecințele acestui lucru. În schimb, blochează atacatorul la nivel de server, de exemplu poți adăuga IP-ul atacatorului într-o listă neagră în firewall-ul serverului sau în fișierul .htaccess.

Acesta este ceva ce fac deja, însă dacă atacatorul este persistent, va schimba pur și simplu adresa IP pe care o folosește cu una pe care încă nu am avut ocazia să o blochez, iar lista va continua să crească fără a rezolva cu adevărat problema la nivel fundamental.

Și dacă atacatorul lovește index.php, ce ai face? Soluția este un firewall, nu blocarea scripturilor folosite de site-ul tău. Oricum, blochează XML-RPC API dacă știi ce faci și nu ai nevoie de el. Din păcate, nu pot răspunde la întrebarea ta despre "Cum să știu dacă am nevoie de XML-RPC".

Aceasta arată mai degrabă ca un bot de spam sau o enumerare decât un atac DDoS. Pentru a fi sigur, ar trebui să analizezi consumul de resurse, dinamica adreselor IP și poate chiar conținutul cererilor.
1. Blocarea accesului la fișierul xmlrpc.php
:
Cred că nu ar trebui să faci asta:
- Nu te va ajuta să supraviețuiești unui adevărat atac DDoS.
- După cum a menționat @cybmeta, ar putea afecta multe servicii terțe.
- Permiterea accesului doar de la anumite IP-uri nu ajută, deoarece IP-urile pot fi falsificate și nu poți enumera toate IP-urile care folosesc serviciul XML-RPC.
Eu înregistrez de obicei toate IP-urile care fac cereri către xmlrpc.php
, folosesc iptables pentru a seta o limită de rată. Apoi, blochez IP-urile care sunt clar malitioase.
2. Cum să afli dacă site-ul tău folosește xmlrpc.php
- Funcțiile și resursele din WordPress care folosesc serviciul XML-RPC au șirul
xmlrpc
în numele funcțiilor sau fișierelor, așa că poți parcurge tema și pluginurile pentru a verifica dacă există astfel de potriviri. - Toate cererile XML-RPC în WordPress trec prin
xmlrpc.php
, care defineștedefine('XMLRPC_REQUEST', true)
, deci poți folosi:
if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) {
// Loghează ceva.
// Sau întrerupe imediat dacă cererea conține ceva rău intenționat.
}
Reține că nu poți folosi acest cod în fișierele temei sau ale pluginurilor. xmlrpc.php
este independent de teme și pluginuri, așa că trebuie să-l plasezi în fișierul wp-config.php
.
