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

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

Previous pageReturn to chapter overviewNext page

Поиск файлов по именам малоэффективен для борьбы с современными вредоносными программами, но он может пригодиться в качестве одной из форм своеобразной эвристики. Достоинство метода - высокая скорость поиска и простота реализации. Рассмотрим несколько вариантов реализации этого поиска при помощи скриптов 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 макросов). Дополнительную информацию о поиске файлов можно посмотреть в разделе "Поиск файлов и папок"