Наш сервер был атакован, и мне нужно удалить вредоносный код, который был внедрен во множество файлов php и html.
Как хорошо заменить код из нескольких файлов? Я пробовал использовать этот скрипт: https://github.com/terry81/Malicious-Web-Scripts-Search/commit/2cdb95adfb667455080468ccaa3e58c822c2bd32 но я не могу заставить его работать. Пожалуйста помоги!
Sed, Perl и т. Д. Могут делать то, что вы хотите. Тем не мение...
я буду не Предположим, что кто-то смог внедрить вредоносный код во множество сценариев и не полностью владеет ящиком. Конечно, вы избавитесь от вредоносного кода в HTML, но как насчет ботнета, который запускается из вашего компьютера?
Стандартная процедура - вытащить ящик из сети и провести полное вскрытие перед его повторным подключением. По крайней мере, если вы сохраняли контрольные суммы в своих резервных копиях, проверьте контрольные суммы всей файловой системы.
Вероятно, безопаснее всего будет выполнить восстановление из последних удачных резервных копий - но это только в том случае, если вы сможете точно определить дату и время первоначального взлома из архивных журналов и т. Д.
Есть много способов найти и заменить текст в нескольких файлах. Сед - фаворит, но правильный ли это инструмент во многом зависит от того, как выглядят ваши файлы. Вы можете привести пример вредоносного кода в контексте?
Ultra Edit - один из лучших инструментов редактирования. Вы можете погуглить и загрузить пробную версию, чтобы опробовать ее. Если для вашего сервера существует резервная копия, я бы рекомендовал использовать Beyond Compare для анализа и восстановления файлов. обратите внимание, что упомянутые мной инструменты не являются бесплатными.
Связанный вами скрипт кажется довольно простым. Вы можете сделать что-то подобное с помощью следующего однострочника:
find $DIRS -print0 | xargs -0 perl -p -i.bak -e 's/\Qcode to be removed\E//'
Вот $DIRS
обозначают каталоги, в которых хранятся ваши файлы, и code to be removed
обозначает вредоносный код. В \Q
будет цитировать любые специальные символы до \E
. Исходные файлы копируются в .bak
файлы. Если вы не хотите, удалите .bak
, т.е. только -i
, но не совмещайте его с -e
, т.е. -i -e
не -ie
.
ВНИМАТЕЛЬНО, ВЫ МОЖЕТЕ УДАЛИТЬ ВАЖНЫЕ МАТЕРИАЛЫ, ЕСЛИ ВЫ ДЕЛАЕТЕ ЭТО НЕПРАВИЛЬНО! СДЕЛАЙТЕ РЕЗЕРВНЫЕ КОПИИ САМИ ПЕРВОЕ
Версия скрипта:
#!/usr/bin/env perl -i.bak
use strict;
use warnings;
my $code = <<'END-OF-MALICIOUS-CODE';
xo=new Date(2010,11,3,2,21,4);t=xo.getSeconds();var huur=[36/t,36/t, ....
END-OF-MALICIOUS-CODE
chomp $code; # remove trailing newline
while (<>) {
s/\Q$code\E//;
print;
}
Но это в файл, лучше всего с .pl
расширение, например remcode.pl
. При желании сделать его исполняемым (chmod +x file.pl
), иначе вы должны называть его perl
явно:
find $DIRS -print0 | xargs -0 perl remcode.pl
Вы можете выполнить часть поиска, а также код Perl, но это не нужно.
Никаких гарантий! Сначала проверьте это на паре файлов!
Вы можете легко исправить (или полностью испортить) множество файлов с помощью этого:
sudo perl -pi.prev -e 's/bad string/new string/g' /path/to/folder/of/bad/files
Конечно, теперь вам нужно регулярное выражение для сопоставления с плохим кодом, поэтому у вас есть две проблемы.
Он сделает копию каждого файла с расширением .prev в конце, а затем заменит, как показано в исходном файле.
**
**