SOCL.cz
blog nejen o Internetu

Útok na xmlrpc.php ve WordPressu prakticky

publikováno 24. 4. 2016 v 22:31

O víkendu, zrovna když jsem nebyl doma a neměl přístup ke svému e-mailu, mi napsal provozovatel jednoho většího webového projektu, že mu nejede webserver a zda bych se na něj nepodíval. Druhý den mi psal, že již netřeba, že vše vypadá OK a weby běží. Ale OK to nebylo, asi jen nějaká světlá chvilka...

WordPress logo

Kdysi dávno jsem na tomto serveru řešil problém, jak zvládat nárazovou zátěž. Již z minulosti jsem měl zkušenosti s nasazením reverzního proxy serveru Nginx, který může servírovat statický webový obsah a zbytek ponechá na webserveru (Apache). Pokud vás to zajímá, tento zmíněný server, na kterém jsem toto řešil, je nejvýkonější verze VPS u WEDOSu, tj. 120GB HDD, 3 procesorová vlákna a 8GB RAM, takže žádné ořezávátko. Přesto je maximálně vytížený, když na něj přijde vlna návštěvníků z Facebooku. Dříve, než zde byl nasazen Nginx, obvykle vytuhnul...

Když jsem tedy došel domů, pročetl e-maily a zkusil pokusně zadat URL webu, nic se nestalo. Za pár desítek vteřin server odpověděl chybou 504 Gateway Time-out - fajn, Nginx běží, něco je s Apachem. Přihlásím se do konzoly a bádám. V logu se nalézá chyba, která říká, že server dosáhnul na maximum souběžných spojení (MaxClients). To se mi nějak nezdá. Přeci jen je vše nastaveno tak, aby to zvládalo větší zátěž a celou dobu to běželo dobře. Tak co se to děje?

Napadlo mne, že jde o útok. Tak se mrkneme na síťová spojení:

root@server:~# netstat -ntp
...
tcp        0      1 fe80::5054:ff:fe00:2c:34876 2a01:4f8:200:808d::2:80     SYN_SENT    7382/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34879 2a01:4f8:200:808d::2:80     SYN_SENT    7371/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34878 2a01:4f8:200:808d::2:80     SYN_SENT    7398/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34873 2a01:4f8:200:808d::2:80     SYN_SENT    7357/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34872 2a01:4f8:200:808d::2:80     SYN_SENT    7352/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34875 2a01:4f8:200:808d::2:80     SYN_SENT    7378/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34874 2a01:4f8:200:808d::2:80     SYN_SENT    7359/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34821 2a01:4f8:200:808d::2:80     SYN_SENT    7474/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34820 2a01:4f8:200:808d::2:80     SYN_SENT    7492/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34823 2a01:4f8:200:808d::2:80     SYN_SENT    7533/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34822 2a01:4f8:200:808d::2:80     SYN_SENT    7491/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34819 2a01:4f8:200:808d::2:80     SYN_SENT    7537/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34818 2a01:4f8:200:808d::2:80     SYN_SENT    7500/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34829 2a01:4f8:200:808d::2:80     SYN_SENT    7525/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34828 2a01:4f8:200:808d::2:80     SYN_SENT    7530/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34830 2a01:4f8:200:808d::2:80     SYN_SENT    7528/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34825 2a01:4f8:200:808d::2:80     SYN_SENT    7524/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34834 2a01:4f8:200:808d::2:80     SYN_SENT    7171/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34841 2a01:4f8:200:808d::2:80     SYN_SENT    7217/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34840 2a01:4f8:200:808d::2:80     SYN_SENT    7245/httpd
tcp        0      1 fe80::5054:ff:fe00:2c:34842 2a01:4f8:200:808d::2:80     SYN_SENT    7258/httpd 
...

Ale fuj! Apache útočí na nějaký webový server v Internetu, asi snaha o menší DoS útok (synflood? bruteforce?). Na chvilku jsem zapnul log Nginxu, zda se nedozvím něco přímo z něj, protože mne napadlo, zda za tím vším nestojí třeba WordPress, který je náchylný na zranitelnosti:

85.25.106.227 - - [24/Apr/2016:21:23:31 +0200] "POST /xmlrpc.php HTTP/1.1" 499 0 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)" "-"
62.138.3.43 - - [24/Apr/2016:21:23:31 +0200] "POST /xmlrpc.php HTTP/1.1" 499 0 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)" "-"
85.25.106.227 - - [24/Apr/2016:21:23:31 +0200] "POST /xmlrpc.php HTTP/1.1" 499 0 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)" "-"
85.25.106.227 - - [24/Apr/2016:21:23:31 +0200] "POST /xmlrpc.php HTTP/1.1" 499 0 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)" "-"
85.25.106.227 - - [24/Apr/2016:21:23:31 +0200] "POST /xmlrpc.php HTTP/1.1" 499 0 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)" "-"
85.25.106.227 - - [24/Apr/2016:21:23:31 +0200] "POST /xmlrpc.php HTTP/1.1" 499 0 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)" "-"
85.25.106.227 - - [24/Apr/2016:21:23:31 +0200] "POST /xmlrpc.php HTTP/1.1" 499 0 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)" "-"
85.93.93.157 - - [24/Apr/2016:21:23:31 +0200] "POST /xmlrpc.php HTTP/1.1" 499 0 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)" "-"
85.25.106.227 - - [24/Apr/2016:21:23:31 +0200] "POST /xmlrpc.php HTTP/1.1" 499 0 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)" "-"

Nejedná se o Googlebota, jak by někdo chtěl, abychom si mysleli, ale jde o útočníka, který využívá zranitelnosti v xmlrpc.php (nevím, k čemu tento soubor slouží, nepoužívám WordPress) a útočí na jiné servery v Internetu. A odrovná tím Apache, který už nedokáže obsloužit regulérní požadavky. Rychlé řešení, co mne v tu chvíli napadlo, bylo zakázat přístup k souboru xmlrpc.php. Kdybych zakázal těch pár útočících IP adres, útočník může přijít odjinud a blokování podle IP adresy by nebylo moc efektivní:

<Files ~ "xmlrpc\.php$">
 Order deny,allow
 Deny from all
</Files>

Tohle prozatím pomohlo. Server už sviští jako dřív. To byl prosím pěkně můj úplně první útok na webový server, přesněji na WordPress! Hádám, že by pomohlo aktualizovat WP na nejnovější verzi. A do té doby zůstane xmlrpc.php raději zablokováno.

štítky: bezpečnost DoS PHP upgrade WordPress zranitelnost
4511x přečteno

Komentáře k článku (0)

Zatím nikdo nic nenapsal, chcete být první?
Vaše jméno/přezdívka: (max 40 znaků)

Web: (nepovinné, zadejte s http(s)://, max 100 znaků)

Opiště sekvenci znaků:

captcha!

Zde napište komentář: (max 512 znaků)

Copyright © 2015-2024 SOCL.cz, RSS 2.0 RSS kanál blogu
Všechna práva vyhrazena, nebo tak nějak.

WEDOS BANNER