Sprawa dość świeża (choć problem bardzo stary), bo pierwsze sygnały o atakach pojawiły się już 14 stycznia 2015.
Odporny na skanowanie popularnym “clamscan”, bot wkradł się na wiele serwerów, dokunując ataków typu brute force na inne skrypty, najczęściej WordPress, podając się za “GoogleBot”. Przykładowe logi serwera atakowanego:
IP - - [14/Jan/2015:19:12:04 +0100] "POST wp-login.php HTTP/1.1" 200 3865 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
IP - - [14/Jan/2015:21:20:10 +0100] "POST wp-login.php HTTP/1.1" 200 6166 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
IP - - [14/Jan/2015:19:12:04 +0100] "POST wp-login.php HTTP/1.1" 200 3865 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Zabezpieczenie przed atakami to po prostu ograniczenie dostępu do pliku “wp-login.php” poprzez filtrowanie IP, lub dodatkowa autoryzacja wykorzystując “htpassword”.
Jednak jak wykryć czy nasz serwer nie padł ofiarą owego bota, stając się elementem większego bot-neta:
Dla całego katalogu /home lub odpowiedniego katalogu z danymi www, wykonujemy skanowanie plików php po zawartości:
grep -lir '\\x.\\x.\\x.' /home
Polecenie zwróci listę potencjalnie zainfekowanych plików.
Aby maksymalnie zwiększyć zasięg skanowania, polecenie:
grep -lir "?><?php" /home
Zwróci wszystkie pliki, które korzystają z “doklejonego” fragmentu kodu php.
Dodatkowe metody zabezpieczenia serwera:
– ustawienie chmodów wszystkich plików na : 0666, folderów na: 0755
– wyłączenie funkcji “eval” w php
– regularne skanowanie programem “clamscan”
UPDATE 16.01.2015:
aktualizacja polecenia “grep” – dostosowanie pod większą grupę potencjalnie niebezpiecznych plików.
UPDATE 18.01.2015:
Skrypt automatycznie usuwający zainfekowany kod z plików:
1) Zawartość zapisujemy jako “clean.sh” i nadajemy chmody +x:
#!/bin/bash
FILE=$1
if [ -f $FILE ]
then
`sed '1d' $FILE > $FILE.tmp`
`mv $FILE.tmp $FILE`
`sed -i 1i"<?php" $FILE`
echo "file($FILE) : OK";
else
echo "file($FILE) : NOT FOUND";
fi
2) Generujemy liste zainfektowanych plików:
grep -lir '\\x.\\x.\\x.' /home > all.txt
3) Uruchamiamy skrypt dla każdego znalezionego pliku:
cat all.txt | xargs -n1 ./clean.sh
4) Jeśli wykonywaliśmy skrypt jako root, trzeba jeszcze przywrócić właściciela pliku.
chown user:user -R /home/user