Come faccio a sapere se il mio sito sta utilizzando il file xmlrpc.php?
Ho preso in gestione un sito web dove lavoro che è stato sviluppato da un dipendente precedente. Recentemente questo sito è stato vittima di una serie di attacchi DDoS attraverso l'uso del pingback xmlrpc, come dimostrato da voci di log come questa:
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)"
(Ovviamente questo non è un googlebot perché Google non ha motivo di fare POST a questo file.)
Credo ci siano molte soluzioni a questo problema (Questo tutorial) ma tendo a propendere per bloccare completamente l'accesso al file. Tuttavia non sono sicuro se questo sito stia effettivamente utilizzando i servizi che xmlrpc permette di usare. C'è un modo particolare per verificare se lo sviluppatore precedente ha implementato qualcosa che utilizza le funzionalità xmlrpc di WordPress? Potrei controllare le funzioni in file specifici/c'è qualcosa che indica chiaramente l'utilizzo?
qualsiasi aiuto sarebbe molto apprezzato!
MODIFICA: Potrebbe essere utile qualcosa del genere?
<FilesMatch "^(xmlrpc\.php)">
Order Deny,Allow
# Lista IP consentiti
Allow from xxx.xxx.xxx.xxx
Deny from all
</FilesMatch>
Se consento l'accesso dall'indirizzo IP del server, questo funzionerebbe per i plugin ecc. o hanno tutti il proprio indirizzo IP che dovrebbe essere aggiunto?

Come hai descritto, sei stato vittima di un attacco DDoS (o forse no, suppongo tu lo sappia). Questi tipi di attacco possono essere rivolti a qualsiasi parte di un sito web dinamico, ad esempio i file index.php o xml-rpc.php.
Dal mio punto di vista, la soluzione corretta non è bloccare la parte attaccata ma bloccare l'attaccante.
Quindi, non bloccare l'API XML-RPC in WordPress, è utilizzata da un gran numero di plugin e client esterni; bloccarla solo se sai davvero cosa stai facendo e le sue conseguenze. Invece, blocca l'attaccante a livello di server, ad esempio potresti inserire l'IP dell'attaccante in una blacklist nel firewall del server o nel file .htaccess.

Questo è qualcosa che sto già facendo, ma se un attaccante è persistente cambierà semplicemente l'indirizzo IP che sta utilizzando con uno che non ho ancora avuto modo di bloccare, e quindi la lista crescerà sempre più senza effettivamente risolvere il problema alla radice.

E se l'attaccante colpisse index.php, cosa faresti? La soluzione è un firewall, non bloccare gli script utilizzati dal tuo sito web. In ogni caso, blocca XML-RPC API se sai cosa stai facendo e non ne hai bisogno. Sfortunatamente non posso rispondere alla tua domanda su "Come sapere se ho bisogno di XML-RPC".

Sembra più un bot spam o un'enumerazione piuttosto che un attacco DDoS. Per esserne sicuri, dovresti controllare il consumo delle risorse, la dinamica degli indirizzi IP e possibilmente i payload.
1. Bloccare l'accesso al file xmlrpc.php
:
Penso che non dovresti farlo:
- Non ti aiuterà a sopravvivere a un vero attacco DDoS.
- Come ha detto @cybmeta, potrebbe interrompere molti servizi di terze parti.
- Permettere l'accesso da determinati IP non aiuta perché gli IP possono essere falsificati e non puoi elencare tutti gli IP che utilizzeranno il servizio XML-RPC.
Io solitamente registro tutti gli IP che effettuano richieste a xmlrpc.php
, uso iptables per impostare un limite di frequenza. Poi, blocco gli IP che sono sicuramente dannosi.
2. Come sapere se il tuo sito utilizza xmlrpc.php
- Le funzioni e le risorse in WordPress che utilizzano il servizio XML-RPC hanno la stringa
xmlrpc
nel nome delle funzioni o dei file, quindi puoi scorrere il tema e i plugin per verificare se ci sono corrispondenze. - Tutte le richieste XML-RPC in WordPress passano attraverso
xmlrpc.php
che definiscedefine('XMLRPC_REQUEST', true)
, quindi puoi usare:
if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) {
// Registra qualcosa.
// Oppure termina immediatamente se c'è qualcosa di dannoso nella richiesta.
}
Nota che non puoi usare questo codice nei file del tema/plugin. xmlrpc.php
è indipendente dai temi e dai plugin, quindi devi inserirlo nel file wp-config.php
.
