Не способный скопировать исходный главный исполняемый файл команды по злонамеренному

Один способ использовать perl.

Содержание script.pl:

use warnings;
use strict;
use Archive::Extract;
use List::Util qw|first|;
use File::Copy qw|move|;
use File::Spec;
use File::Path qw|remove_tree|;

## Path to save 'xml' and 'zip' files.
my $big_files_dir = qq|$ENV{HOME}/big_files/|;

## Temp dir to extract files of 'zips'.
my $zips_path = qq|/tmp/zips$$/|;

## Size in bytes to check 'xml' files.
my $file_max_size_bytes = 100 * 1024 * 1024;

my (@zips_to_move, $orig_zip);

## Get files to process.
my @files = <*.xml *.zip>;                                                                                                                                                                                                                   

## From previous list, copy 'xml' files bigger than size limit.                                                                                                                                                                              
for my $file ( @files ) {                                                                                                                                                                                                                    
        if ( substr( $file, -4 ) eq q|.xml| and -s $file > $file_max_size_bytes ) {                                                                                                                                                          
                move $file, $big_files_dir;                                                                                                                                                                                                  
        }                                                                                                                                                                                                                                    
}                                                                                                                                                                                                                                            

## Process now 'zip' files. For each one remove temp dir to avoid mixing files                                                                                                                                                               
## from different 'zip' files.                                                                                                                                                                                                               
for ( grep { m/\.zip\Z/ } @files ) {                                                                                                                                                                                                         
        remove_tree $zips_path;                                                                                                                                                                                                              
        $orig_zip = $_;                                                                                                                                                                                                                      
        handle_zip_file( $orig_zip );                                                                                                                                                                                                        
}                                                                                                                                                                                                                                            

## Copy 'zip' files got until now.                                                                                                                                                                                                           
for my $zip_file ( @zips_to_move ) {                                                                                                                                                                                                         
        move $zip_file, $big_files_dir;                                                                                                                                                                                                      
}                                                                                                                                                                                                                                            

## Traverse recursively each 'zip file. It will look for 'zip' file in the                                                                                                                                                                   
## subtree and will extract all 'xml' files to a temp dir. Base case is when                                                                                                                                                                 
## a 'zip' file only contains 'xml' files, then I will read size of all 'xmls'                                                                                                                                                               
## and will copy the 'zip' if at least one of them if bigger than the size limit.                                                                                                                                                            
## To avoid an infinite loop searching into 'zip' files, I delete them just after                                                                                                                                                            
## the extraction of its content.                                                                                                                                                                                                            
sub handle_zip_file {                                                                                                                                                                                                                        
        my ($file) = @_;                                                                                                                                                                                                                     

        my $ae = Archive::Extract->new(                                                                                                                                                                                                      
                archive => $file,                                                                                                                                                                                                            
                type => q|zip|,                                                                                                                                                                                                              
        );                                                                                                                                                                                                                                   

        $ae->extract(
                to => $zips_path,
        );

        ## Don't check fails. I don't worry about them, ¿perhaps should I?
        unlink( File::Spec->catfile( 
                                (File::Spec->splitpath( $zips_path ))[1], 
                                (File::Spec->splitpath( $file ))[2],
                        )
        );

        my $zip = first { substr( $_, -4 ) eq q|.zip| } <$zips_path/*>;
        if ( ! $zip ) {
                for my $f ( <$zips_path/*.xml> ) {
                        if ( substr( $f, -4 ) eq q|.xml| and -s $f > $file_max_size_bytes ) {
                                push @zips_to_move, $orig_zip;
                                last;
                        }
                }
                return;
        }

        handle_zip_file( $zip );
}

Некоторые проблемы:

  • xml файлы с тем же именем в поддереве a zip файл будет перезаписан при копировании во временный dir.
  • Это содержание извлечений программы всех zip-файлов того же дерева и затем проверяет на a xml больше, чем 100 МБ. Это было бы быстрее для проверки каждый раз, когда я извлекаю zip-файл. Это может быть улучшено.
  • Это не кэширует zip-файлы, обработанные несколько раз.
  • ~/big_files должен существовать и быть перезаписываемыми.
  • Сценарий не принимает аргументы. Необходимо выполнить его в том же каталоге как zip и xml файлы.

Это не прекрасно, как Вы видите в предыдущих точках, но это работало в моем тесте. Я надеюсь, что это может быть полезно для Вас.

Выполните его как:

perl script.pl
0
02.07.2013, 03:11
1 ответ

Каталог, возможно, был сделан только для чтения, или возможно файл был сделан неизменным через расширенные атрибуты. Но я сознательно не скажу Вам, как зафиксировать это, потому что это не правильный способ продолжиться. Когда машина была заражена вредоносным программным обеспечением, Вы не можете знать что не так. Существует хороший шанс, что ядро заражено также, и что любой фиксирует Вас, попытка, будет только казаться, будет успешно выполняться.

Уничтожьте его с орбиты. Другими словами, выбросьте существующую установку и переустановите систему с нуля. Вы захотите скопировать данные. Идеально, восстановите его от известного хорошего резервного копирования. Если Вы не имеете полного хорошего резервного копирования, восстановления от последнего хорошего резервного копирования и тщательно копируете более свежие файлы. Но необходимо переустановить операционную систему. Обязательно вытрите существующее ядро и установку системы, постарайтесь не случайно иметь в наличии зараженные файлы. Лучше, установите на новом диске, имея в наличии старый (ничего никогда не выполняя от него) для выяснения то, что произошло так, чтобы этого не происходило снова.

4
28.01.2020, 02:21
  • 1
    на самом деле, я не могу переустановить ОС в короткое время, это - сервер, используемый различными группами, таким образом, по крайней мере, потребуется неделя, чтобы обновить всех парней и расположить резервное копирование. Так, будет действительно полезно, Если можно предложить временное приспособление, пока новая ОС не установлена. Спасибо –  user42238 02.07.2013, 02:30
  • 2
    @user42238 Затем Вы ничего не могли бы также сделать. Если вредоносное программное обеспечение не является критической проблемой для Вас, не удаляйте его. Если это - проблема, удалите его. Нет никаких полумер. –  Gilles 'SO- stop being evil' 02.07.2013, 02:40
  • 3
    Спасибо, я полностью соглашаюсь с Вами, что установка ОС является лучшим шагом. Проблема, мы должны выполнить вершину, PS и netstat утилиты для контроля этого сервера и всех, что они затронуты этим вредоносным программным обеспечением, из-за которого результаты, о которых сообщают команды, неточны, как вершина сообщает, что 95% ЦП используются, но в на самом деле только 5% используется, таким образом, я хочу сначала зафиксировать эти команды вывод, пока мы не пиво для переустанавливания. Поскольку один из временного файла фиксирует, я исказил пути команды к исходному исполняемому файлу. Но будет хорошо, если я могу скопировать их в стандартных путях. –  user42238 02.07.2013, 02:49

Теги

Похожие вопросы