- •I. Введение
- •II. Работа с инструментами диагностики и лечения
- •Описание HiJackThis и работа с ней
- •Вступление
- •Предупреждение
- •Назначение
- •Начало работы
- •Раздел Misc Tools.
- •Описание avz и работа с ней
- •Ключевые компоненты avz
- •Главное окно программы
- •Меню «Файл»: avz как единый инструмент
- •1. Функции анализа и восстановления
- •2. Функции скриптового движка
- •3. Обновление баз
- •4. Функции карантина
- •5. Отложенное удаление файла
- •Меню «Сервис»: диспетчеры и менеджеры avz
- •1. Общие характеристики диспетчеров и менеджеров avz
- •2. Подсистемы поиска
- •3. Прочие инструменты
- •AvzGuard
- •Boot Cleaner
- •III. Основы диагностики
- •1. Подготовка
- •2. Протокол hjt
- •3. Протоколы avz
- •Чтение протоколов HiJackThis
- •Анализ лога
- •Чтение протоколов avz
- •1. Цветовая схема
- •2. Состав таблиц
- •1) Список процессов (данные Диспетчера процессов)
- •2) Модули пространства ядра (данные одноименного диспетчера)
- •3) Службы (данные Диспетчера служб и драйверов, часть 1)
- •4) Драйверы (данные Диспетчера служб и драйверов, часть 2)
- •5) Автозапуск (данные Менеджера автозапуска)
- •6) Модули расширения Internet Explorer (bho, панели…) (данные Менеджера расширений ie)
- •7) Модули расширения проводника (данные Менеджера расширений проводника)
- •8) Модули расширения системы печати (данные Менеджера расширений системы печати)
- •9) Задания планировщика задач Task Scheduler (данные Менеджера планировщика задач Task Scheduler)
- •10) Настройки spi/lsp (данные Менеджера Winsock spi)
- •11) Порты tcp/udp (данные диспетчера «Открытые порты tcp/udp»)
- •12) Downloaded Program Files (данные Менеджера Downloaded Program Files)
- •13) Апплеты панели управления (cpl) (данные Менеджера апплетов панели управления)
- •3. Общие сведения
- •4. Поиск RootKit и программ, перехватывающих функции api (в соавторстве с Олегом Зайцевым)
- •1.1 Поиск перехватчиков api, работающих в UserMode
- •1.2 Поиск перехватчиков api, работающих в KernelMode
- •1.2 Поиск перехватчиков api, работающих в KernelMode
- •1.3 Проверка idt и sysenter
- •1.4 Поиск маскировки процессов и драйверов
- •1.4 Поиск маскировки процессов и драйверов
- •1.4 Поиск маскировки процессов и драйверов
- •5. Проверка памяти
- •2. Проверка памяти
- •6. Сканирование дисков
- •3. Сканирование дисков
- •7. Проверка Winsock Layered Service Provider
- •4. Проверка Winsock Layered Service Provider (spi/lsp)
- •4. Проверка Winsock Layered Service Provider (spi/lsp)
- •8. Поиск перехватчиков событий клавиатуры/мыши/окон (Keylogger, троянские dll)
- •5. Поиск перехватчиков событий клавиатуры/мыши/окон (Keylogger, троянские dll)
- •9. Поиск открытых портов tcp/udp, используемых вредоносными программами
- •6. Поиск открытых портов tcp/udp, используемых вредоносными программами
- •10. Эвристическая проверка системы
- •7. Эвристичеcкая проверка системы
- •11. Поиск потенциальных уязвимостей
- •8. Поиск потенциальных уязвимостей
- •8. Поиск потенциальных уязвимостей
- •12. Мастер поиска и устранения проблем
- •9. Мастер поиска и устранения проблем
- •9. Мастер поиска и устранения проблем
- •Критерии вредоносности файла
- •Зоны особого внимания
- •Примечание
- •Дополнительная диагностика
- •Работа со списком заподозренных файлов
- •Извлечение файлов и их анализ
- •Если файл не удается поместить в карантин
- •1) Попытаться выполнить карантин в безопасном режиме.
- •3) Попробовать применить специализированный антируткит (например, IceSword, позволяющий копировать скрытые и защищенные файлы).
- •Vms@drweb.Com
- •Virus_malware@avira.Com
- •IV. Лечение
- •Лечение с помощью HiJackThis
- •Лечение с помощью avz
- •1. Удаление файлов
- •2. Восстановление системы и исправление ошибок
- •1. Настройки spi/lsp
- •1) Ручной.
- •2. Файл hosts
- •3. Эвристическая проверка системы
- •4. Мастер поиска и устранения проблем
- •Восстановление системы по жалобам пользователя
- •3. После лечения
- •Если вредоносное программное обеспечение восстанавливается после удаления
- •1) Убедитесь, что Восстановление системы Windows отключено.
- •Если лечение прошло успешно
- •Чего не следует делать уважающему себя и других антивирусному консультанту
- •3) Выполнять ненужные / бесполезные для обрабатываемого случая операции
- •6) Содействовать поиску и использованию вредоносного и / или взломанного программного обеспечения
- •V. Заключение
Работа со списком заподозренных файлов
После того, как вы отщелкали по всем ссылкам «Карантин», в самом конце протокола вы обнаружите список файлов, заподозренных вами в неблагонадежности.
Скорее всего, этот список будет длиннее, чем в примере, но ничего страшного в этом нет. Для удобства можно перетащить в это поле имена файлов из текстовой части протокола, если вы не закарантинили их из таблицы подозрительных объектов.
Теперь нужно рассортировать объекты, потому что в список могли попасть еще не известные вам легитимные файлы. Для этих целей используется поисковая система (желательно 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
Если объект сопротивляется копированию, попробуйте последовать следующим советам.