Борьба с последствием вируса

14 мая 2011

Случилась беда, небольшая, но очень неприятная. Вирус украл пароль от FTP-сервера и прописал себя во все места, куда надо и не надо. От этого сайты, располагавшиеся на этом хостинге, просто рухнули. Аккуратней надо вирусописателям быть! Если уж взялись за дело, то надо бы поизучать документацию на PHP и javascript.

Это я хорошо придумал - спереть все на вирусо-писателей. Но на самом деле все не так хорошо. И то, что взломали не с моего компьютера - слабое утешение. Ну надо все возвращать на место. Первое, что надо - это попросить Backup у хостера. И очень хотелось бы, чтобы он был свежий. Архив был свежий, но уже зараженный. Конечно, можно откатить на более старую дату. Но я решил побороться с последствеями вируса. План был таков.

  1. Архивируем все, что есть на данный момент
  2. Восстанавливаем сайт из архива на момент до заражения
  3. В свежем архиве удаляем все последствия деятельности вируса
  4. И заливаем по новой на хостинг

Конечно, тут не описаны процедуры по очистке компьютеров от вирусов, смена паролей и так далее.

Для удаления следов деятельности вируса я начал клепать маленькие скрипты на Perl. Не скажу, что я профессионал-программист на Perl. Но документации в интернет много, и к тому же я уже писал подобые скрипты для каких-то своих нужд, но было это давно. Можно было бы написать и на PHP, но выбрал я Perl из-за того, что я именно уже писал подобное на нем. Конечно, то было не борьба с последствиями вируса, но принцип один и тот же.

Я скачал и установил ActivePerl 5.12 для windows и быстро (как только мог быстро) накатал пробный скрипт:
#!/usr/bin/perl

my $dir='D:\temp\vzlom';  #откуда пойдем плясать
my $idx_ext='.js'; #что ищем
&recur($dir);

sub recur            
{
my $dir = shift;
opendir DIR, $dir or return;
my @contents = map "$dir/$_", sort grep !/^\.\.?$/, readdir DIR;
closedir DIR;
foreach (@contents)
{
if (!-l && -d)
{
recur($_);
}
else
{
if ($_ =~ /$idx_ext$/i)
{
$fErr = $_;
open(F,"< $fErr");
@strings=<F>;
close(F);
open(F,"> $fErr");
print $fErr."\n";
foreach $line (@strings)
{
chomp($line);
$line=~ s/document\.write.*firefoxstabs.*\;\}\)\;\}\}\)\;\}\)\;//gix;
print (F $line."\n");
}
close(F);
}
else { next; }
}
}
}

Испытал его и решил уже было залить его на хостинг и там проверить на паре-тройке папок, как обнаружил, что на действующем тарифе хостера не придусмотрен доступ по SSH-протоколу. Пришлось всё копировать сначала на свой компьютер, чистить и потом обратно заливать. Конечно, можно было бы еще попридумывать различные способы выполнения скрипта на стороне сервера, но я решил что не стоит пока тратить время, надо срочно восстанавливать свежую версию сайта.

Хорошо, что дома у меня стоит операционная система Линух, хоть и Ubuntu, но все же linux.

Андрей Лебедев

,

, , ,

Комментарий

  1. Привет.
    Ты всё ещё мучаешься с Убунту? тогда мы идём к тебе виндой!!!=))))
    Ну Эндрю ты колдун…

    serg · 4 июня 2011, 07:38 · #

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