Поиск подозрительных объектов по именам

Наверх  Назад  Вперед |

Поиск файлов по именам малоэффективен для борьбы с современными вредоносными программами, но он может пригодиться в качестве одной из форм своеобразной эвристики. Достоинство метода - высокая скорость поиска и простота реализации.Рассмотрим несколько вариантов реализации этого поииска при помощи скриптов AVZ

 

Пример 1. Простейший поиск по именам

 

// Поиск файла с указанным именем

function CheckByName(Fname : string) : boolean;

begin

 Result := FileExists(FName) ;

 if Result then

  AddToLog('Файл '+FName+' имеет подозрительное имя');

end;

 

begin

 // Проверка файлов 

 CheckByName('%WinDir%\cservv32.exe'); 

 CheckByName('%WinDir%\services.exe'); 

 CheckByName('%WinDir%\lsass.exe'); 

end.

 

В данном примере объявляется функция CheckByName, задачей которой является проверка наличия файла с указанным именем на диске. В случае обнаружения подобного файла функция возвращает true и делает отметку в протоколе при помощи функции AddToLog. Недостатком функции является то, что список файлов как таковой отсутствует - вместо него идут повторяющиеся вызовы  CheckByName. В более сложном примере можно усовершенствовать поиск, разместив список имен в отдельном файле, который будет выступать в роли базы данных.

 

Пример 2. Поиск по именам с использованием загружаемого списка файлов

 

// Поиск файла с указанным именем 

function CheckByName(Fname : string) : boolean;

begin

 Result := FileExists(FName) ;

 if Result then

  AddToLog('Файл '+FName+' имеет подозрительное имя');

end;

 

var

 SuspNames : TStringList;  // Список имен подозрительных файлов

 i : integer;

begin

 // Проверка файлов по обновляемой базе данных

 if FileExists(GetAVZDirectory + 'files.db'then begin

  SuspNames := TStringList.Create; 

  SuspNames.LoadFromFile('files.db'); 

  AddToLog('База имен загружена - количество записей = '+inttostr(SuspNames.Count));

  // Цикл поиска

  for i := 0 to SuspNames.Count - 1 do 

   CheckByName(SuspNames[i]);

 end else

   AddToLog('Ошибка загрузки списка имен файлов');

end.

 

В данном примере используется уже снакомая по примеру 1 функция CheckByName, которая вызывается в цикле. Для работы со списком файлов применяется класс TStringList. Предполагается, что список файлов хранится в текстовом файле files.db, который размещается в каталоге AVZ (путь к этому каталогу определяется при помощи GetAVZDirectory

 

Пример 3. Поиск по именам с использованием загружаемого списка файлов и AV баз AVZ

 

// Поиск файла с указанным именем 

function CheckByName(Fname : string) : boolean;

var

 S : string;

begin

 Result := FileExists(FName) ;

 if Result then begin

  S := '';

  case CheckFile(FName) of

  -1 : S := ', доступ к файлу блокируется';

   1 : S := ', опознан как Malware ('+GetLastCheckTxt+')'

   2 : S := ', подозревается файловым сканером ('+GetLastCheckTxt+')'

   3 : exit; // Безопасные файлы игнорируем

  end;

  AddToLog('Файл '+NormalFileName(FName)+' имеет подозрительное имя'+S);

 end;

end;

 

var

 SuspNames : TStringList;  // Список имен подозрительных файлов

 i : integer;

begin

 // Проверка файлов по обновляемой базе данных

 if FileExists(GetAVZDirectory + 'files.db'then begin

  SuspNames := TStringList.Create; 

  SuspNames.LoadFromFile('files.db'); 

  AddToLog('База имен загружена - количество записей = '+inttostr(SuspNames.Count));

  // Цикл поиска

  for i := 0 to SuspNames.Count - 1 do 

   CheckByName(SuspNames[i]);

 end else

   AddToLog('Ошибка загрузки списка имен файлов');

end.

 

В данном примере появляется еще одно усовершенствование - функция CheckByName проверяет обнаруженный по имени файла по базам AVZ. Для этих целей применяется функция CheckFile (она поддерживается начиная с AVZ 4.23). Анализ результатов сканирования файла позволяет исключить из протокола безопасные файлы и файлы, прошедшие контроль по каталогу Microsoft. Функция CheckFile применяется совместно с GetLastCheckTxt для получения имени зловреда в случае его детектирования или подозрения. Еще одной особенностью является применение функции NormalFileName для нормализации имени файла (которая, в частности, предполагает замену применяемых в AVZ макросов). Дополнительную информацию о поиске файлов можно посмотреть в разделе "Поиск файлов и папок"