Привет друзья! Сегодня речь пойдет о вирусах и вариантах их лечения. Хочу рассказать свою методику поиска и лечения зараженных файлов на сервере/хостинге. Столкнулся с такой проблемой несколько месяцев назад, с тех пор выработалась схема поиска и лечения.
С каждым годом вирусы мутируют и заражают все подряд, вплоть до БД. Словил вирусню, которая изначально вносила правки только в файлы: footer.php , header.php , function.php . Со временем вирус мутировал и начал заливать шелы и доры на хостинг. Я что-то там чистил, удалял, но видимо не до конца. В конечном итоге злоумышленникам это не понравилось и они решили прописать свой код в каждый (!) php файл на хостинге.
Можете представить меня, когда я осознал то, что придется либо перезаливать все файлы по новой с бекапов, либо скачивать с инета чистую версию ВП, чистить все файлы темы, делать бекапы, удалять все и перезаливать чистые файлы, либо править все вручную. Перезалил 2 сайта и подварился, ведь надо было еще 5 доменов перезалить:)
Как найти зараженные и вредоносные файлы на сайте
Первый способ известен всем — выкачать файлы с хостинга и проверить их антивирусником. Но этот метод не идеален, потому что не все антивирусники справятся с данной проблемой и посчитают вирусный код за вредоносный. Лично касперыч порезал мне все выкачанные файлы с хостинга. А разбираться в его настройках нет желания.
Второй способ: Проверка сайта онлайн сервисами. Для проверки отношения ПС к сайту можно использовать сервис http://2ip.ru/site-virus-scaner/ .
Проверить сайт с помощью Dr.Web — http://vms.drweb.com/online/
если погуглить — есть еще множество сервисов.
Третий способ самый интересный. Мы будем использовать скрипт Айболит http://www.revisium.com/ai/ Этот скрипт для меня был просто находкой. Инструкция по эксплуатации есть как на сайте, так и внутри архива при скачивании
Чит-код: Многие хостинги активно используют данный скрипт и/или знают о его существовании. По этому если вам сложно самому настроить и запустить скрипт — обратитесь в ТП хостинга — вам обязательно помогут:)
Обработка скриптом может занять прилично времени, по этому следует запастись терпением.
После того, как скрипт обнаружит все зараженные файлы, расшаренные папки, не безопасные файлы, ненужные файлы — сформируется отчет в виде html страницы, которая будет лежать в корне сайта. Выглядит он примерно вот так:
Можно смело просмотреть все зараженные файлы, открыть их и найти вредоносный код. В моем случае было заражено 445 файлов предоносным кодом типа
eval base64_decode(и тут зашифрованый код вида kjlkjgfjrkgl;kj)
Полностью писать не хочу, а то вдруг еще ПС решит, что у меня вредоносный код на странице:)
Следущим шагом необходимо очистить все файлы от данного кода. Можно воспользоваться блокнотиком и заменить код на пробел, уже хотел так и сделать, как мне попалось очень интересное решение данной проблемы с помощью php кода. Его предложил Гендальф Серый вот в этой ветке вебмастерса.
Пожалуй скопирую код сюда в статью для тех, кому религиозные взгляды не позволяют переходить по ссылкам или кому просто лень:)
<?php
//gendalf_grey for webmasters.ru
$virus_text = 'в эти кавычки пишем вредоносный код';
$skip_files = array ('delvir.php');
$del = true;
$dir = getcwd().'/';
$num_infected = 0;
function dir_walk($callback, $dir, $types = null, $recursive = false, $baseDir = '') {
if ($dh = opendir($dir)) {
while (($file = readdir($dh))!== false) {
if ($file === '.' || $file === '..') {
continue;
}
if (is_file($dir . $file)) {
if (is_array($types)) {
if (!in_array(strtolower(pathinfo($dir . $file, PATHINFO_EXTENSION)), $types, true)) {
continue;
}
}
$callback($baseDir, $file);
}elseif($recursive && is_dir($dir . $file)) {
dir_walk($callback, $dir . $file . DIRECTORY_SEPARATOR, $types, $recursive, $baseDir . $file . DIRECTORY_SEPARATOR);
}
}
closedir($dh);
}
}
function del_virus ($fdir, $ffile)
{
$flag = false;
$filename = $fdir.$ffile;
echo $filename;
if (!in_array($ffile, $GLOBALS['skip_files'])){
$handle = fopen($filename, "r");
$fsize = filesize($filename);
if (!$fsize){
$contents = '';
}else{
$contents = fread($handle, $fsize);
}
fclose($handle);
if (strpos($contents, $GLOBALS['virus_text']) !== false) {
if ( $GLOBALS['del'] ) {
$contents = str_replace($GLOBALS['virus_text'], '', $contents);
$handle = fopen($filename, "wb");
fwrite($handle,$contents);
fclose($handle);
echo " - deleted";
}
echo " - infected";
$GLOBALS['num_infected']++;
}
}else{
echo " - skipped";
}
echo "<br/>";
};
dir_walk('del_virus', $dir, array('php','php5','html','htm','shtml'), true, $dir );
echo "Num infected = $num_infected <br/>";
?>
Вместо $virus_text = 'в эти кавычки пишем вредоносный код'; вставляем свой вредоносный код, делаем бекапы сайтов, сохраняем код как delvir.php и заливаем в корень сайта. Затем вызываем файл вбив в адсерсную строку site.ru/delvir.php
Ждем и скрипт нам выдаст кол-во зараженных файлов которые он нашел и очистил от кода. На данном блоге он показал мне Num infected = 445 зараженных файлов.
Шаг номер 3 Проверяем проделанную работу. Запускаем повторно айболит и смотрим не осталось ли еще зараженных файлов.
У меня показывает что все чисто:) Бинго сайт очищен от вирусов. И мало того, как только почистил сайт от вирусов в панели ЯВМ появилась вот такая картинка:
Связанны ли эти 2 события — не знаю. Есть еще 1 пациентик с вирусами и отсутствием страниц в выдаче. Проверю на нем:) Почищу сайтик , отпишусь Платонам. Если сайт влетит в выдачу — будет еще 1 пост:)
Как защитить сервер, хостинг и сайты от взлома
Если вы дуб дубом в этом, как и я — то вариантов не много:)
1) Обратиться к разработчику Айболита — берет 1900 руб за 1 сайт, но по отзывам делает работы больше чем договаривались, любезно разъясняет все «атеншены» и дает рекоммендации на будущее
2) Найти шарящего сисадмина и попросить настоить всю делюгу. Стоимость услуги от 1к руб за сайт.
3) Сменить все логины и пароли. Лично я использую для этого программу KeePass . С помощью ее генерируются случайные логины и пароли из 16 и более символов. Программа хранит все логины и пароли в базе данных, на которую тоже вы устанавливаете пароль. Ее можно так же заинсталить в ДропБокс и будет доступ со всех устройств к ней:) Делайте бекапы базы с ключами, прогу иногда глючит.
4) Настроить дополнительную http авторизацию перед входом в wp-admin. Инструкция от fastvps
1) создать файл с названием «.htpasswd» в корне сайта и при помощи сайта www.htaccesstools.com/htpasswd-generator/ сгенерировать его содержание, указав желаемый логин и пароль.
2) для Joomla в файл «.htaccess» в папке /administrator/ добавить следующие строки:
AuthName «Access Denied»
AuthType Basic
AuthUserFile полный_путь_до_корня_сайта/.htpasswd
require valid-userдля WordPress в файл «.htaccess» в корне сайта добавить следующие строки:
<Files wp_login.php>
AuthName «Access Denied»
AuthType Basic
AuthUserFile полный_путь_до_корня_сайта/.htpasswd
require valid-user
</Files>где «полный_путь_до_корня_сайта» — это абсолютный путь от корня файловой системы.
например, для ISPManager он будет выглядеть так: /var/www/имя_пользователя/data/www/адрес_сайта/.htpasswd
3) проверить работу данной конструкции, попробовав зайти в админ-панель сайта.
5) Использовать плагин Better WP Security.
6) Удалить всех старых и не используемых пользователей. Часто, делая для кодера/редактора/автора акк на сайте мы забываем удалить их после проделанной работы. Это не гуд, у самого есть доступы к парочке сайтов, на которых был в админке более года назад.
На самом деле этот список можно продолжать и продолжать. Вариантов как защититься множество и всех их писать в 1 статью нет смысла. Портянки никто не читает:) Если ты дочитал до этого места — оставляй свой комментарий по поводу статьи.