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