Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ЛЕЧЕНИЯ ОПЕРАЦИОННЫХ СИСТЕМ MICROSOFT WI...doc
Скачиваний:
29
Добавлен:
29.08.2019
Размер:
1.25 Mб
Скачать

Работа со списком заподозренных файлов

После того, как вы отщелкали по всем ссылкам «Карантин», в самом конце протокола вы обнаружите список файлов, заподозренных вами в неблагонадежности.

Скорее всего, этот список будет длиннее, чем в примере, но ничего страшного в этом нет. Для удобства можно перетащить в это поле имена файлов из текстовой части протокола, если вы не закарантинили их из таблицы подозрительных объектов.

Теперь нужно рассортировать объекты, потому что в список могли попасть еще не известные вам легитимные файлы. Для этих целей используется поисковая система (желательно Google, если вы знаете английский). Введите в строку имя файла или полный путь и запустите поиск. В подавляющем большинстве случаев в первой десятке результатов будет ссылка на какой-либо file advisor, т.е. систему, предоставляющую данные о файле на основании его имени и полного адреса. Внимательно ознакомьтесь с предоставленной информацией, чтобы определить, является ли файл легитимным. Отсеянные легитимные файлы нужно удалить из списка и скрипта (об этом чуть ниже).

После того, как легитимные файлы определены, в вашем распоряжении остается список файлов, о которых вы не нашли информацию или которые известны как нежелательные / вредоносные. Их нужно взять на исследование.

Извлечение файлов и их анализ

Для облегчения процесса извлечения файлов мы применяем возможности автоматизации операций, которые предлагает нам AVZ – скриптовый язык. Настало время сделать в нем первые шаги.

Синтаксис скриптов AVZ идентичен языку программирования Pascal. Если данный язык вам знаком, то скрипты вы освоите без труда; если же нет – что ж, возможно, придется поломать голову, но особенных затруднений тоже не возникнет.

Любой скрипт AVZ начинается со слова

begin

и заканчивается словом

end.

Если нужно объявить переменную, то скрипт начнется со слова

var

, а begin последует за объявлением.

После любой функции ставится точка с запятой, чтобы перейти на следующую функцию.

В скрипте AVZ допускаются комментарии, т.е. текстовые фрагменты, которые обходятся при выполнении кода. Комментарий начинается с двойного слэша (//) или заключается в фигурные скобки.

В результате ваших манипуляций со ссылками «Карантин» в текстовом поле «Команды скрипта», расположенном выше списка файлов, уже образовался примитивный скрипт:

begin

QuarantineFile('Fmctrl.EXE','');

QuarantineFile('C:\WINDOWS\system32\svch6f4.dll','');

QuarantineFile('C:\WINDOWS\libHide.dll','');

QuarantineFile('c:\windows\system.exe','');

end.

В этом скрипте используется функция QuarantineFile, которая выполняет карантин указанного ей объекта. В скобках – параметры, передаваемые функции при исполнении; если какого-либо параметра не хватает, AVZ сообщит об ошибке скрипта.

Синтаксис функции карантина следующий:

QuarantineFile(AFileName, AMsg : string)

Это означает:

QuarantineFile('адрес файла','причина карантина')

В качестве адреса можно указывать и полный путь, и просто имя файла. Причину карантина можно не обозначать.

В имени файла разрешаются маски “?” (один любой символ) и “*” (несколько любых символов).

Те строки, в которых указан карантин легитимных файлов (об их легитимности вы уже можете судить после описанной выше проверки через поисковую систему), следует удалить из скрипта. Теперь скрипт уже можно запустить, если со стороны файлов не ожидается никакого сопротивления.

Если возможна или определена деятельность руткита, либо защитные программы могут помешать карантину, используйте расположенную под полем команд ссылку

Нейтрализация перехватов функций при помощи антируткита

или самостоятельно впишите в самое начало скрипта (т.е. после слова begin) функцию поиска и нейтрализации перехватов UserMode и KernelMode:

SearchRootkit(true,true);

Синтаксис функции нейтрализации перехватов такой:

SearchRootkit(UserModeLock, KernelModeLock : boolean)

Это означает:

SearchRootkit(нейтрализовывать перехваты UserMode?, нейтрализовывать перехваты KernelMode?)

Если значение параметра – «false», то нейтрализация перехватов в соответствующем кольце выполняться не будет – только детект. В нашем случае оба параметра истинны (true), поэтому будут нейтрализованы все перехваты.

Однако нейтрализация перехватов нарушает функционал защитных программных продуктов. Поэтому при использовании SearchRootkit в конец скрипта (т.е. перед словом end.) следует обязательно вставить функцию автоматической перезагрузки системы после завершения скрипта. Для этого щелкните по ссылке

Перезагрузка

или впишите функцию

RebootWindows(true);

Синтаксис функции перезагрузки следующий:

RebootWindows(AForce : boolean)

Это означает:

RebootWindows(форсированное завершение работы?)

Если значение параметра – «true», то завершение работы Windows будет выполнено без рассылки приложениям сообщения о том, что система закрывается. Если «false» - будет выполнено обычное завершение работы, позволяющее процессам успеть самостоятельно закрыться.

В результате описанных манипуляций образуется скрипт

begin

SearchRootkit(true, true);

QuarantineFile('Fmctrl.EXE','');

QuarantineFile('C:\WINDOWS\system32\svch6f4.dll','');

QuarantineFile('C:\WINDOWS\libHide.dll','');

QuarantineFile('c:\windows\system.exe','');

RebootWindows(true);

end.

Но некоторые вредоносные файлы неплохо защищены и даже при выполнении противодействия руткитам не дают себя скопировать. В таком случае следует обратиться к процедурам Boot Cleaner.

Чаще всего мы используем команду импорта списка закарантиненных файлов в задание Boot Cleaner. Чтобы передать Boot Cleaner команду карантина всех перечисленных в нашем скрипте файлов, впишите непосредственно за последней командой карантина функцию

BC_ImportQuarantineList;

У этой функции нет параметров.

Теперь, коль скоро мы задействовали Boot Cleaner, перед перезагрузкой его нужно включить. С этой целью щелкните по ссылке

BootCleaner – активация

или впишите перед операцией перезагрузки системы функцию

BC_Activate;

У этой функции также нет параметров. Она выполнит настройку Boot Cleaner для его работы перед загрузкой системы. В случае ее использования также необходима перезагрузка, чтобы Boot Cleaner мог выполнить полученные инструкции.

Кроме BC_Activate, существует функция BC_Execute. Эта функция не требует перезагрузки. Она выполняет настройку и загрузку драйвера Boot Cleaner «на лету», непосредственно во время выполнения скрипта.

Возможно, вам захочется посмотреть на ход работы Boot Cleaner, чтобы определить, какие файлы он не смог поместить в карантин и по какой причине. В таком случае добавьте перед активацией BC функцию протоколирования работы Boot Cleaner:

BC_LogFile(GetAVZDirectory + 'boot_cleaner.log');

Синтаксис функции протоколирования BC такой:

BC_LogFile(AFileName : string);

Это означает:

BC_LogFile('адрес для сохранения протокола');

Обычно мы комбинируем функцию GetAVZDirectory (которая определяет папку, в которой находится AVZ) и имя протокола для сохранения. В приведенном выше примере, если AVZ находится в папке C:\AVZ, то протокол будет сохранен как C:\AVZ\boot_cleaner.log.

Теперь наш скрипт выглядит более внушительно:

begin

SearchRootkit(true, true);

QuarantineFile('Fmctrl.EXE','');

QuarantineFile('C:\WINDOWS\system32\svch6f4.dll','');

QuarantineFile('C:\WINDOWS\libHide.dll','');

QuarantineFile('c:\windows\system.exe','');

BC_ImportQuarantineList;

BC_LogFile(GetAVZDirectory + 'boot_cleaner.log');

BC_Activate;

RebootWindows(true);

end.

Есть еще две функции Boot Cleaner для карантина файлов.

Если вы хотите сразу произвести карантин файла через BC, не прибегая к обычному карантину, используйте функцию

BC_QrFile(AFileName : string);

Вы уже знакомы с обозначениями, которые используются для описания параметров, и, вероятно, догадались, что это означает

BC_QrFile('адрес файла');

Например,

BC_QrFile('C:\WINDOWS\svchost.exe');

Если в вашем скрипте нет обычных операций карантина, функция BC_ImportQuarantineList уже не потребуется. Получится скрипт такого вида:

begin

BC_QrFile('C:\WINDOWS\svchost.exe');

BC_QrFile('C:\WINDOWS\system32\drivers\catchme.sys');

BC_LogFile(GetAVZDirectory + 'boot_cleaner.log');

BC_Activate;

RebootWindows(true);

end.

Но, допустим, зарегистрированные в системе служба или драйвер все время меняют свое имя после каждой перезагрузки, или успешно скрывают его, и выловить их карантином по имени файла не получается. В таком случае нам может помочь еще одна функция – карантин службы / драйвера через BC:

BC_QrSvc(ASvcName : string);

Это означает:

BC_QrSvc('имя службы или драйвера');

Имя службы или драйвера можно найти в соответствующей колонке протокола AVZ.

Для BC-карантина этого драйвера функция будет выглядеть так:

BC_QrSvc('catchme');

По правилам оформления скрипта эта функция не отличается от BC_QrFile: требует активации Boot Cleaner, может сопровождаться протоколированием.

Теперь, когда скрипт карантина готов, запустите AVZ, перейдите Файл – Выполнить скрипт. Скопируйте текст скрипта, вставьте в поле и нажмите кнопку «Проверить синтаксис». Если вы допустили ошибку, AVZ сообщит об этом и обозначит номер строки и знака, где допущена ошибка.

Третья строка, 12 символ: ожидается закрывающая скобка.

Если скрипт корректен, проверка ответит, что ошибок нет. Теперь скрипт можно передать пользователю.

Пользователь должен выполнить те же действия, но нажать на кнопку Запустить. Если в ваш скрипт входит автоматическая перезагрузка, предупредите пользователя, что она будет выполнена.

Теперь пользователю следует упаковать в архив с паролем папку карантина и передать вам на анализ. Вы можете предложить один из трех видов такой упаковки.

1) Ручная. Пользователь пакует папку карантина за текущее число с помощью своего архиватора, задает пароль и присылает вам архив, указав поставленный пароль.

2) Полуавтоматическая. Пользователь запускает AVZ, переходит Файл – Просмотр карантина. В левой части окна выделяет папку за текущее число, в правой части выполняет правый щелчок мышью и в контекстном меню нажимает «Выделить все», после чего нажимает кнопку Архивировать. В диалоге сохранения он назначает место для создания архива virus.zip, после чего отправляет архив вам. Как вы помните, такой архив будет автоматически защищен паролем virus.

3) Автоматическая. После выполнения основного скрипта (если используется RebootWindows, то после перезагрузки) вы просите пользователя выполнить еще один скрипт, состоящий из функции создания архива карантина:

CreateQurantineArchive(AFileName : string);

Это означает:

CreateQurantineArchive('адрес файла');

Здесь для более легкой ориентации тоже можно использовать процедуру GetAVZDirectory. Типовой скрипт выглядит следующим образом:

begin

CreateQurantineArchive(GetAVZDirectory + 'virus.zip');

end.

После этого пользователь должен найти в папке с AVZ файл virus.zip и прислать вам. Пароль такой же – virus.

***

Итак, архив получен. Можно приступать к анализу файлов.

Как вы помните, скопированные в карантин файлы переименовываются в avzXXXXX.dta. Каждый DTA-файл сопровождается одноименным ему INI, в котором содержится информация о закарантиненном файле.

Если AVZ не удалось осуществить карантин, или часть файлов карантина была уничтожена антивирусом пользователя, то INI-файл будет непарным, т.е. одноименного ему DTA в архиве вы не найдете. Обращайтесь к INI-файлу, чтобы понять, какие объекты вам получить не удалось. Если объекты были удалены антивирусом пользователя, скрипт следует повторить, после чего выполнить архивацию, временно приостановив антивирусное ПО.

В состав INI-файла входят поля:

Src=адрес исходного файла

Infected=имя в карантине

Virus=источник карантина

QDate=дата карантина

Size=размер, байт

MD5=

FileDate=дата исходного файла

AVZVer=версия AVZ

MainAVBase=дата выпуска базы AVZ

Если объект сопротивляется копированию, попробуйте последовать следующим советам.