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...
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.
Tweetštítky: bezpečnost DoS PHP upgrade WordPress zranitelnost
4686x přečteno
Copyright © 2015-2024 SOCL.cz, RSS 2.0
Všechna práva vyhrazena, nebo tak nějak.