Поиск подозрительных объектов по именам
Поиск файлов по именам малоэффективен для борьбы с современными вредоносными программами, но он может пригодиться в качестве одной из форм своеобразной эвристики. Достоинство метода - высокая скорость поиска и простота реализации. Рассмотрим несколько вариантов реализации этого поиска при помощи скриптов 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.
В примере использовались: AddToLog, CheckFile, FileExists, GetAVZDirectory, GetLastCheckTxt, NormalFileName
В данном примере появляется еще одно усовершенствование - функция CheckByName проверяет обнаруженный по имени файла по базам AVZ. Для этих целей применяется функция CheckFile (она поддерживается начиная с AVZ 4.23). Анализ результатов сканирования файла позволяет исключить из протокола безопасные файлы и файлы, прошедшие контроль по каталогу Microsoft. Функция CheckFile применяется совместно с GetLastCheckTxt для получения имени зловреда в случае его детектирования или подозрения. Еще одной особенностью является применение функции NormalFileName для нормализации имени файла (которая, в частности, предполагает замену применяемых в AVZ макросов). Дополнительную информацию о поиске файлов можно посмотреть в разделе "Поиск файлов и папок"