Kako sprečiti DDoS napade preko pingback-ova u WordPress-u
Već neko vreme je sistem pingback-ova, koje WordPress ima od svog nastanka, jedan od najčešćih kanala za napade. Naime, XML-RPC pingback sistem WordPress koristi za komunikaciju sa eksternim aplikacijama, drugim blogovima i slično. Velika količina potpuno legitimne komunikacije se obavlja na ovaj način, pa tako recimo i Jetpack koristi ovaj protokol za komunikaciju. Ipak, statistike kažu da oko 13% svih DDoS napada (distributed denial of service) potiču upravo od pingback napada. Od verzije 3.9 na ovamo, WordPress je uveo logovanje dodatnih parametara, pa je sada moguće videti odakle je upit potekao, a ne samo sa kog je servera stigao.
Ipak, kako je cilj takvih napada da se server napadne na aplikativnom nivou i da se iscrpe svi dostupni resursi i na taj nacin obori sajt. Svaki upit server procesira – što je kompleksniji to mu je više resursa i vremena potrebno. Napadači biraju baš ovakav pristup jer je u pitanju poznata i dokumentovana funkcija, koju ako korisnik potpuno ugasi, gubi mogućnost komunikacije sa raznim spoljnim aplikacijama (na primer, WordPress mobilna aplikacija koristi ovakav pristup).
Najjednostavniji način da ovo rešite je instalacija Disable XML-RPC Pingback plugina. Na taj način, ugasiće se samo pingback funkcija koja nema preteranu svrhu, a sve ostale funkcije koje ima XML-RPC ostaju netaknute. Na taj način sprečićete DDoS napade kroz ovaj kanal.
Alternativno, ukoliko želite, to možete učiniti i ručno, tako što ćete u functions.php vaše teme dodati:
// disable pingbacks add_filter( 'xmlrpc_methods', function( $methods ) { unset( $methods['pingback.ping'] ); return $methods; } );
// remove x-pingback HTTP header add_filter('wp_headers', function($headers) { unset($headers['X-Pingback']); return $headers; });
2 komentara. Ostavi novi
Generalno, XML-RPC bi valjalo isključiti u potpunosti osim u slučajevima kada je neophodan za neke pluginove (npr. Jetpack).
Standardnim blog wp sajtovima, bez nekih dodatnih i ozbiljnih funkcija ova opcija i ne treba.
Pre svega problem nastaje zbog bruteforce napada na login kredencijale.
Iako dosta star exploit i danas se koristi dosta često:
https://blog.sucuri.net/2014/07/new-brute-force-attacks-exploiting-xmlrpc-in-wordpress.html
Ja sam to zbog JetPack-a koji koristim na svom blogu ispeglao na nivou htaccess i od kako sam postavio više nije bilo problema:
RewriteCond %{REQUEST_URI} ^(xmlrpc\.php)$
RewriteCond %{HTTP_USER_AGENT} !^(.*Jetpack.*)$
RewriteRule ^(.*)$ – [F]
Ranije sam whitelistovao WordPress IP adrese za pristup ali ovako je elegantnije rešenje za Jetpack korisnike…inače bih da ne koristim stavio:
Order Deny,Allow
Allow from 192.0.64.0/18
Allow from 209.15.0.0/16
Allow from 66.155.0.0/17
Deny from all