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

Наверх  Предыдущая  Последующая |

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