Jump to content

Статия: Важно за антивирусните програми


Препоръчан пост

Копирам го тук от http://monitor.espec.ws/section13/topic66041.html

Много е дълго за да превеждам. И така всичко е ясно.

 

Антивирусные движки.

 

Одной из основных частей любого антивируса является так называемый антивирусный "движок" - модуль, отвечающий за проверку объектов и обнаружение вредоносных программ. Именно от антивирусного "движка", от того, как он разработан, какие он использует методы детектирования и эвристики, зависит качество детектирования вредоносных программ и, как следствие, уровень защиты, предоставляемый антивирусом.

 

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

 

Хороший или плохой "движок"?

 

К сожалению, разработчики антивирусного программного обеспечения очень редко раскрывают детали реализации своих "движков". Однако и по косвенным признакам можно определить, является ли "движок" хорошим или нет. Вот основные критерии, по которым можно определить качество антивирусного "движка":

Качество детектирования. Насколько хорошо антивирус определяет вирусы. Этот критерий можно оценить по результатам различных тестов, которые проводятся несколькими организациями и обычно представлены на web-ресурсах разработчика.

 

Уровень детектирования эвристическими анализаторами. К сожалению, без тестирования на коллекции вирусов определить этот параметр невозможно, однако можно довольно легко определить, каков уровень ложных срабатываний у конкретного "движка".

 

Уровень ложных срабатываний. Если на 100% незараженных файлах антивирус рапортует об обнаружении возможно зараженного файла, то это - ложное срабатывание. Стоит ли доверять такому эвристическому анализатору, который беспокоит пользователя ложными тревогами? Ведь за большим количеством ложных срабатываний пользователь может пропустить действительно новый вирус.

 

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

 

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

 

Возможность обновления "движка" без обновления самой антивирусной программы. Иногда для обнаружения вируса требуется обновить не только антивирусную базу данных, но и сам "движок". Если антивирус не поддерживает такую возможность, то пользователь может остаться без защиты перед лицом нового вируса. Кроме этого, такая возможность позволяет оперативно улучшать "движок" и исправлять в нем ошибки.

 

 

Антивирусный "движок": существующие технологии

 

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

 

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

 

Антивирусный "движок" (Anti-Virus Engine) - это программный модуль, который предназначен для детектирования вредоносного программного обеспечения. "Движок" является основным компонентом любой антивирусной программы, вне зависимости от ее назначения. Движок используется как в персональных продуктах - персональный сканер или монитор, так и в серверных решениях - сканер для почтового или файлового сервера, межсетевого экрана или прокси-сервера. Как правило, для детектирования вредоносных программ, в большинстве "движков" реализованы следующие технологии:

Поиск по "сигнатурам" (уникальной последовательности байт);

Поиск по контрольным суммам или CRC (контрольной суммы с уникальной последовательности байт);

Использование редуцированной маски;

Криптоанализ;

Статистический анализ;

Эвристический анализ;

Эмуляция.

Рассмотрим каждый из этих методов подробнее.

 

 

Поиск по "сигнатурам"

 

Сигнатура - это уникальная "строка" байт, которая однозначно характеризует ту или иную вредоносную программу. Сигнатурный поиск, в той или иной модификации, используется для обнаружения вирусов и других вредоносных программ, начиная с самых первых антивирусных программ и до сих пор. Неоспоримое достоинство сигнатурного поиска - скорость работы (при использовании специально разработанных алгоритмов, разумеется) и возможности детектирования нескольких вирусов одной сигнатурой. Недостаток - размер сигнатуры для уверенного детектирования должен быть довольно большой, как минимум 8-12 байт (обычно для точного детектирования используются гораздо более длинные сигнатуры, до 64 байт), следовательно, размер антивирусной базы будет достаточно большой. Кроме этого, в последнее время большую распространенность получили вредоносные программы, написанные на языках высокого уровня (C++, Delphi, Visual Basic), а у таких программ есть отдельные части кода, которые практически не изменяются (так называемая Run Time Library). Неправильно выбранная сигнатура неизбежно приведет к ложному срабатыванию - детектированию "чистого", не зараженного файла как зараженного вирусом. Как решение этой проблемы предлагается использовать или очень большие сигнатуры или использовать детектирование по некоторым областям данных, например, таблицы перемещений (relocation table) или текстовые строки, что не всегда хорошо.

 

 

Поиск по контрольным суммам (CRC)

 

Поиск по контрольным суммам (CRC - cyclic redundancy check), по сути, является модификацией поиска по сигнатурам. Метод был разработан для избежания основных недостатков сигнатурного поиска - размера базы и уменьшения вероятности ложных срабатываний. Суть метода состоит в том, что для поиска вредоносного кода берется не только "опорная" строка - сигнатура, а, вернее сказать, контрольная сумма этой строки, но и местоположение сигнатуры в теле вредоносной программы. Местоположение используется для того, чтобы не подсчитывать контрольные суммы для всего файла. Таким образом, вместо 10-12 байт сигнатуры (минимально) используется 4 байта для хранения контрольной суммы и еще 4 байта - для местоположения. Однако метод поиска по контрольным суммам несколько медленнее, чем поиск по сигнатурам.

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

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

Для детектирования таких вирусов применяются следующие методы: использование редуцированной маски, криптоанализ и статистический анализ. Рассмотрим эти методы подробнее.

 

 

Использование редуцированной маски

 

При поражении объектов вирус, использующий шифрование, преобразует свой код в шифрованную последовательность данных:

S = F (T), где

T - базовый код вируса;

S - зашифрованные коды вируса;

F - функция шифрования вируса, произвольно выбирающаяся из некоторого множества преобразований {F}.

Способ редуцированной маски заключается в том, что выбирается преобразование R зашифрованных кодов вируса S, такое, что результат преобразования (то есть некоторая последовательность данных S") не будет зависеть от ключей преобразования F, то есть

S = F (T)

S" = R (S) = R (F (T)) = R" (T).

При применении преобразования R к всевозможным вариантам шифрованного кода S результат S" будет постоянным при постоянном T. Таким образом, идентификация пораженных объектов производится путем выбора S" в качестве редуцированной маски и применения к пораженным объектам преобразования R.

 

 

Криптоанализ

 

Этот способ заключается в следующем: по известному базовому коду вируса и по известному зашифрованному коду (или по "подозрительному" коду, похожему на зашифрованное тело вируса) восстанавливаются ключи и алгоритм программы-расшифровщика. Затем этот алгоритм применяется к зашифрованному участку, результатом чего является расшифрованное тело вируса. При решении этой задачи приходится иметь дело с системой уравнений.

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

Причем основная проблема - это математический анализ полученного уравнения или полученной системы уравнений. Во многом задача решения систем уравнений при восстановлении зашифрованного тела вируса напоминает классическую криптографическую задачу восстановления зашифрованного текста при неизвестных ключах. Однако здесь эта задача звучит несколько иначе: необходимо выяснить, является ли данный зашифрованный код результатом применения некоторой известной с точностью до ключей функции. Причем заранее известны многие данные для решения этой задачи: участок зашифрованного кода, участок незашифрованного кода, возможные варианты функции преобразования. Более того, сам алгоритм этого преобразования и ключи также присутствуют в анализируемых кодах. Однако существует значительное ограничение, заключающееся в том, что данная задача должна решаться в конкретных границах оперативной памяти и процедура решения не должна занимать много времени.

 

 

Статистический анализ

 

Также используется для детектирования полиморфных вирусов. Во время своей работы сканер анализирует частоту использования команд процессора, строит таблицу встречающихся команд процессора (опкодов), и на основе этой информации делает вывод о заражении файла вирусом. Данный метод эффективен для поиска некоторых полиморфных вирусов, так как эти вирусы используют ограниченный набор команд в декрипторе, тогда как "чистые" файлы используют совершенно другие команды с другой частотой. Например, все программы для MS-DOS часто используют прерывание 21h (опкод CDh 21h), однако в декрипторе полиморфных DOS-вирусов эта команда практически не встречается.

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

 

 

Эвристический анализ

 

Когда количество вирусов превысило несколько сотен, антивирусные эксперты задумались над идеей детектирования вредоносных программ, о существовании которых антивирусная программа еще не знает (нет соответствующих сигнатур). В результате были созданы так называемые эвристические анализаторы. Эвристическим анализатором называется набор подпрограмм, которые анализируют код исполняемых файлов, макросов, скриптов, памяти или загрузочных секторов для обнаружения в нем разных типов вредоносных компьютерных программ. Существуют два принципа работы анализатора.

 

Статический метод. Поиск общих коротких сигнатур, которые присутствуют в большинстве вирусов (так называемые "подозрительные" команды). Например, большое количество вирусов производит поиск вирусов по маске *.EXE, открывает найденный файл, производит запись в открытый файл. Задача эвристик в этом случае - найти сигнатуры, отражающие эти действия. Затем происходит анализ найденных сигнатур, и, если найдено некоторое количество необходимых и достаточных "подозрительных команд", то принимается решение о том, что файл инфицирован. Большой плюс этого метода - простота реализации и хорошая скорость работы, но при этом уровень обнаружения новых вредоносных программ довольно низок.

 

Динамический метод. Этот метод появился одновременно с внедрением в антивирусные программы эмуляции команд процессора (подробнее эмулятор описан ниже). Суть метода состоит в эмуляции исполнения программы и протоколировании всех "подозрительных" действий программы. На основе этого протокола принимается решение о возможном заражении программы вирусом. В отличие от статического метода, динамический метод более требовательный к ресурсам компьютера, однако и уровень обнаружения у динамического метода значительно выше.

 

 

Эмуляция

 

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

Современные эмуляторы эмулируют не только команды процессора, но и вызовы операционной системы. Задача написания полноценного эмулятора является довольно трудоемкой, не говоря уже о том, что при использовании эмулятора приходится постоянно контролировать действия каждой команды. Это необходимо для того, чтобы случайно не выполнить деструктивные компоненты алгоритма вируса.

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

 

 

База данных антивирусного "движка"

 

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

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

 

 

Поддержка "сложных", вложенных объектов

 

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

Затем новая проблема - вирусы научились заражать архивные файлы (да и сами пользователи зачастую пересылали зараженные файлы в архивах). Антивирусы были вынуждены научиться обрабатывать и архивные файлы. В 1995 году появился первый макровирус, заражающий документы Microsoft Word. Стоит заметить, что формат документов, используемый Microsoft Word, закрытый, и очень сложен. Ряд антивирусных компаний до сих пор не умеют полноценно обрабатывать такие файлы.

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

 

 

Методы детектирования

 

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

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

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

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

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

 

 

Работа со "сложными" объектами

 

Антивирусные "движки" поддерживают работу с огромным числом форматов упаковки и архивирования. Разработчики достаточно редко публикуют полный (или хотя бы достаточно подробный) перечень поддерживаемых форматов. Далее представлена официально опубликованная информация о поддержке "сложных" форматов в Антивирусе Касперского. В других антивирусных продуктах список поддерживаемых форматов должен быть примерно таким же.

"Движок" Антивируса Касперского поддерживает работу с более чем 400 различными утилитами упаковки исполняемых файлов, инсталляторов и архиваторов (всего более 900 модификаций, по состоянию на май 2003). Среди них:

 

Упаковщики исполняемых файлов и системы шифрования. Самые популярные из них: Diet, AVPACK, COMPACK, Epack, ExeLock, ExePack, Expert, HackStop, Jam, LzExe, LzCom, PaquetBuilder, PGMPAK, PkLite, PackWin, Pksmart, Protect, ProtEXE, RelPack, Rerp, Rjcrush, Rucc, Scramb, SCRNCH, Shrink, Six-2-Four, Syspack, Trap, UCEXE, Univac, UPD, UPX (несколько версий), WWPACK, ASPack (несколько версий), ASProtect (несколько версий), Astrum, BitArts, BJFnt, Cexe, Cheaters, Dialect, DXPack, Gleam, CodeSafe, ELFCrypt, JDPack, JDProtect, INFTool, Krypton, Neolite, ExeLock, NFO, NoodleCrypt, OptLink, PCPEC, PEBundle, PECompact (несколько версий), PCShrink, PE-Crypt, PE-Diminisher, PELock, PEncrypt, PE-Pack (несколько версий), PE-Protect, PE-Shield, Petite, Pex, PKLite32, SuperCede, TeLock, VBox, WWPack32, XLok, Yoda.

Поддержка стольких упаковщиков и архиваторов позволяет сократить время анализа новых вирусов, что приводит к увеличению скорости реакции на появление нового вируса, и добиться высокого уровня обнаружения уже известных вирусов.

 

Архиваторы и инсталляторы (всего более 60). Самые популярные из них: CAB, ARJ, ZIP, GZIP, Tar, AIN, HA, LHA, RAR, ACE, BZIP2, WiseSFX (несколько версий), CreateInstall, Inno Installer, StarDust Installer, MS Expand, GKWare Setup, SetupFactory, SetupSpecialist, NSIS, Astrum, PCInstall, Effect Office.

Поддержка большого числа разновидностей архиваторов особенно важно для проверки почтовых систем, так как подавляющая часть вирусов пересылается по почте в архивированном виде. Распаковка объектов происходит вне зависимости от уровня вложенности архивов. Например, если зараженный файл упакован утилитой UPX, а затем файл упакован в архив ZIP, который упакован в архив CAB и т.д., то антивирусный "движок" все равно должен быть в состоянии достать исходный файл и обнаружить вирус.

Следует отметить, что подобные рассуждения носят отнюдь не теоретический характер. Так, широко известна троянская программа Backdoor.Rbot, которая распространялась упакованной множеством различных программ (Ezip, Exe32Pack, ExeStealth, PecBundle, PECompact, FSG, UPX, Morphine, ASPack, Petite, PE-Pack, PE-Diminisher, PELock, PESpin, TeLock, Molebox, Yoda, Ezip, Krypton и др.).

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

 

 

Механизм обновления антивирусных баз и их размер

 

Обновления антивирусных баз обычно выходят по несколько раз в день. Некоторые в состоянии выпускать обновления раз в час, некоторые - раз в два часа. В любом случае, при современном высоком уровне опасности в Интернет такое частое обновление антивирусных баз вполне оправдано.

Размер обновлений указывает на продуманность архитектуры антивирусного "движка". Так, размер регулярных обновлений лидирующих в отрасли компаний, как правило, не превышает 30 Кб. При этом в антивирусные базы обычно заложено около 70% функциональности всего антивирусного "движка". В любом обновлении антивирусной базы может быть добавлена поддержка нового упаковщика или архиватора. Таким образом, ежедневно обновляя антивирусные базы, пользователь получает не только новые процедуры детектирования новых вредоносных программ, но и обновление всего антивируса. Это позволяет очень гибко реагировать на ситуацию и гарантировать пользователю максимальную защиту.

 

 

Эвристический анализатор

 

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

В настоящее время эвристический анализатор позволяет обнаруживать вредоносные коды в исполняемых файлах, секторах и памяти, а также новые скрипт-вирусы и вредоносные программы для Microsoft Office (и других программ, использующих VBA), и, наконец, вредоносный код, написанный на языках высокого уровня, таких как Microsoft Visual Basic.

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

 

 

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

 

 

Как было сказано выше, во время обновления антивирусной базы происходит также обновление и добавление модулей распаковки упакованных файлов и архивов, эвристического анализатора и других модулей антивирусного "движка".

 

 

Оригинальные технологии в антивирусных "движках"

 

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

Начать следует с технологии iChecker. Эта технология и ее аналоги реализованы почти в каждом современном антивирусе. Следует отметить, что iChecker - название, предложенное специалистами "Лаборатории Касперского". Эксперты, например, Panda Software называют её UltraFast. Данная технология позволяет добиться разумного баланса между надежностью защиты рабочих станций (и особенно серверов), и использованием системных ресурсов защищаемого компьютера. Благодаря этой технологии значительно сокращается время загрузки (до 30-40%) операционной системы (по сравнению с традиционными антивирусными защитами) и время запуска приложений при активной антивирусной защите. При этом гарантируется, что все файлы на дисках компьютера были проверены и не инфицированы. Основная идея данной технологии - не надо проверять то, что не изменялось, и уже было проверено. Антивирусный "движок" ведет специальную базу данных, в которой хранятся контрольные суммы всех проверенных (и не инфицированных) файлов. Теперь, прежде чем отдать файл на проверку, "движок" подсчитывает и сравнивает контрольную сумму файла с данными, хранящимися в базе данных. Если данные совпадают, то это значит, что файл был проверен и повторная проверка не требуется. Стоит заметить что время, затрачиваемое на подсчет контрольных сумм файла - значительно меньше, чем время антивирусной проверки.

Особое место в работе антивируса занимает лечение заархивированных инфицированных объектов. Именно об этом пойдет речь далее. iCure - технология лечения инфицированных файлов в архивах. Благодаря этой технологии инфицированные объекты внутри архивных файлов будут успешно вылечены (или удалены, в зависимости от настроек антивируса) без использования внешних утилит архивации. На сегодняшний день большинство антивирусов поддерживают следующие типы архивов: ARJ, CAB, RAR, ZIP. Благодаря модульной архитектуре и технологиям обновления антивирусного "движка" пользователь, как правило, может легко обновлять и расширять список поддерживаемых типов архиваторов без перезагрузки антивируса.

iArc - еще одна технология работы с архивными файлами. Эта технология необходима для работы с многотомными архивами. iArc позволяет проверять многотомные архивы и обнаруживать вирусы даже, если они будут упакованы в многотомный архив, который, в свою очередь, также будет упакован в многотомный архив.

Многопоточность. Антивирусный "движок" является многопоточным модулем, и может одновременно обрабатывать (проверять на наличие вредоносных кодов) несколько объектов (файлы, сектора, скрипты и пр.).

Большинство из перечисленных выше технологий в том или ином виде реализовано в каждом современном антивирусном продукте.

 

 

Полиморфные вирусы

 

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

 

Основные определения: самошифрование и полиморфичность. Используются практически всеми типами вирусов для того, чтобы максимально усложнить процедуру детектирования вируса. Полиморфные вирусы (polymorphic) - это достаточно трудно обнаружимые вирусы, не имеющие сигнатур, то есть, не содержащие ни одного постоянного участка кода. В большинстве случаев два образца одного и того же полиморфного вируса не будут иметь ни одного совпадения. Это достигается шифрованием основного тела вируса и модификациями программы-расшифровщика (декриптора). К полиморфным вирусам относятся те из них, детектирование которых невозможно (или крайне затруднительно) осуществить при помощи так называемых вирусных масок - участков постоянного кода, специфичных для конкретного вируса. Достигается это двумя основными способами - шифрованием основного кода вируса с непостоянным ключом и случайным набором команд расшифровщика или изменением самого выполняемого кода вируса. Существуют также другие, достаточно экзотические примеры полиморфизма: DOS-вирус "Bomber", например, не зашифрован, однако последовательность команд, которая передает управление коду вируса, является полностью полиморфной.

Полиморфизм различной степени сложности встречается в вирусах всех типов - от загрузочных и файловых DOS-вирусов до Windows-вирусов и даже макро-вирусов.

 

 

Полиморфные расшифровщики

 

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

 

MOV reg_1, count ; reg_1, reg_2, reg_3 выбираются из

MOV reg_2, key ; AX,BX,CX,DX,SI,DI,BP

MOV reg_3, _offset ; count, key, _offset также могут меняться

_loop:

xxx byte ptr [reg_3], reg_2 ; xor, add или sub

DEC reg_1

Jxx _loop ; ja или jnc

; дальше следуют зашифрованные код и данные вируса

 

Cложные полиморфные вирусы используют значительно более сложные алгоритмы для генерации кода своих расшифровщиков: приведенные выше инструкции (или их эквиваленты) переставляются местами от заражения к заражению, разбавляются ничего не меняющими командами типа NOP, STI, CLI, STC, CLC и т.д.

Полноценные же полиморфные вирусы используют еще более сложные алгоритмы, в результате работы которых в расшифровщике вируса могут встретиться операции SUB, ADD, XOR, ROR, ROL и другие в произвольном количестве и порядке. Загрузка и изменение ключей и других параметров шифровки производится также произвольным набором операций, в котором могут встретиться практически все инструкции процессора Intel (ADD, SUB, TEST, XOR, OR, SHR, SHL, ROR, MOV, XCHG, JNZ, PUSH, POP ...) со всеми возможными режимами адресации. Появляются также полиморфные вирусы, расшифровщик которых использует инструкции вплоть до Intel386, а летом 1997 года обнаружен 32-битный полиморфный вирус, заражающий EXE-файлы Windows 95.

В результате, в начале файла, зараженного подобным вирусом, идет набор бессмысленных, на первый взгляд, инструкций. Интересно, что некоторые комбинации, которые вполне работоспособны, не берутся фирменными дизассемблерами (например, сочетание CS:CS: или CS:NOP). И среди этой "каши" из команд и данных изредка проскальзывают MOV, XOR, LOOP, JMP - инструкции, которые действительно являются "рабочими".

 

 

Уровни полиморфизма

 

Существует деление полиморфных вирусов на уровни в зависимости от сложности кода, который встречается в расшифровщиках этих вирусов. Такое деление впервые предложил доктор Алан Соломон, через некоторое время Весселин Бончев расширил его:

 

Уровень 1: Вирусы, имеющие некоторый набор расшифровщиков с постоянным кодом; при заражении выбирают один из них. Такие вирусы являются "полу-полиморфными" и носят также название "олигоморфных" (oligomorphic). Примеры: "Cheeba", "Slovakia", "Whale".

 

Уровень 2: Расшифровщик вируса содержит одну или несколько постоянных инструкций, основная же его часть непостоянна.

 

Уровень 3: Расшифровщик содержит неиспользуемые инструкции - "мусор" типа NOP, CLI, STI и т.д.

 

Уровень 4: В расшифровщике используются взаимозаменяемые инструкции и изменение порядка следование (перемешивание) инструкций. Алгоритм расшифровки при этом не изменяется.

 

Уровень 5: Используются все перечисленные выше приемы, алгоритм расшифровки непостоянен, возможно повторное шифрование кода вируса и даже частичное шифрование самого кода расшифровщика.

 

Уровень 6: Permutating-вирусы. Изменению подлежит основной код вируса - он делится на блоки, которые при заражении переставляются в произвольном порядке. Вирус при этом остается работоспособным. Подобные вирусы могут быть незашифрованны.

 

В приведенной выше классификации есть свои недостатки, поскольку она производится по единственному критерию - возможность детектировать вирус по коду расшифровщика при помощи стандартного приема вирусных масок:

 

Уровень 1: для детектирования вируса достаточно иметь несколько масок;

Уровень 2: детектирование по маске с использованием "wildcards";

Уровень 3: детектирование по маске после удаления инструкций-"мусора";

Уровень 4: маска содержит несколько вариантов возможного кода, то есть становится алгоритмической;

Уровень 5: невозможность детектирования вируса по маске.

 

Недостаточность такого деления продемонстрирована в вирусе 3-го уровня полиморфизма, который так и называется - "Level3". Этот вирус, являясь одним из наиболее сложных полиморфных вирусов, по приведенному выше делению попадает в Уровень 3, поскольку имеет постоянный алгоритм расшифровки, перед которым стоит большое количество команд-"мусора". Однако в этом вирусе алгоритм генерирования "мусора" доведен до совершенства: в коде расшифровщика могут встретиться практически все инструкции процессора i8086.

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

Более объективной будет классификация, в которой помимо критерия вирусных масок участвуют и другие параметры, например:

Степень сложности полиморфного кода (процент от всех инструкций процессора, которые могут встретиться в коде расшифровщика);

Использование специальных приемов, затрудняющих эмуляцию антивирусами;

Постоянство алгоритма расшифровщика;

Постоянство длины расшифровщика.

 

Изменение выполняемого кода

 

Наиболее часто подобный способ полиморфизма используется макро-вирусами, которые при создании своих новых копий случайным образом меняют имена своих переменных, вставляют пустые строки или меняют свой код каким

Редактиран от Филипов
Link to comment
Сподели другаде

Няма лошо да го преведеш за тези,които като мен и Night_Raven не знаят руски.

;)

Здравейте!

Ще се опитам да направя превода, тъй като виждам, че има интерес. Надявам се, скоро да е готов

и да ви бъде полезен. Немога да претендирам за 100 процентова точност на превода, но ще направя всичко възможно.

Поздрави! :)

Link to comment
Сподели другаде

Здравейте!

Ето го и превода. Надявам се, да ви е полезен.

Термина"движок" по никакъв начин не можах да преведа еднозначно, но съм се постарала да го преведа контекстно. Дано съм успяла.

 

 

Антивирусни „ механизми”

 

Една от основните части на всяка антивирусна програма е така наречения антивирусен „двигател” - модул, отговарящ за проверката на обектите и обезоръжаването на вредоносните програми. Именно от антивирусния „модул” от това, как е разработен, какви методи за откриване и евристика използва той, зависи качеството на откриване на вредоносните програми и като следствие, нивото на защита, предоставено от антивирусната програма.

 

Дадената статия подробно описва стандартните технологии и някои оригинални подходи на различните разработчици на антивирусни програми, реализирани в антивирусния „модул”

Попътно ще бъдат разгледани някои технически въпроси, необходими за оценка на качеството на антивирусния „модул” и уточнения за използваните в него технологии.

 

Добър или лош е „ модула” ?

 

За съжаление, разработчиците на антивирусно програмно обезпечаване много рядко разкриват детайли от реализацията на своя” модул”. Но и по косвени признаци може да се определи дали даден „ модул” е добър или лош. Ето основните критерий по които може да се определи качеството на антивирусния „ модул”:

Качество на откриване. Колко добре антивирусната програма определя вирусите.Този критерий може да се оцени по резултатите от различни тестове, които се провеждат от няколко организации и обикновено са представени на web - ресурсите на разработчика.

 

Ниво на откриване с евристическите анализатори. За съжаление, без тестване на колекциите от вируси не е възможно да се определи този параметър, но може достатъчно лесно да се определи какво е нивото на неистински сработвания на конкретния"механизъм".

 

Ниво на лъжливите сработвания. Ако за 100% незаразени файлове, антивирусната програма рапортува за разкриването на възможно заразен файл, то това е лъжливо сработване. Струва ли си да се доверяваме на такъв евристически анализатор, който безпокои потребителя с лъжливи тревоги? Нали сред голямото количество лъжливи сработвания, потребителя може да пропусне действителен нов вирус.

 

Поддръжка на голямо количество опаковчици и архиватори. Това е много важен фактор, защото често създателите на вредоносни програми, написали вируси ги опаковат в няколко опаковки на изпълняеми модули и като получат няколко различни вируси, ги пускат в пространството. В същността си всички тези вируси се явяват екземпляри на един и същи вариант. За антивируси, които поддържат всички или почти всички популярни опаковки, няма да е трудно да определят всички тези модификации на един и същи вирус, като при това ги назовава с едно и също име. За други антивируси ще се наложи обновяване на антивирусната база (а така също и време за анализ на модификацията на вируса от антивирусен експерт)

 

Честота и размер на обновяванията на антивирусната база.

Тези параметри се явяват косвени признаци на качеството на антивируса. Честото обновяване гарантира, че потребителя винаги ще бъде защитен и от току що появили се вируси. Размера на обновлението (и количеството на откриваемите вируси в това обновление) говори за качеството на проектиране на антивирусната база и на нейното ядро в частност.

 

 

Възможност за обновяване на самия „двигател” на антивируса, без обновление на самата антивирусна програма. Понякога за изолирането на вируса трябва да се обнови не само антивирусната база данни, но и самия механизъм, двигател. Ако вируса не поддържа такава възможност, то потребителя може да остане без защита пред лицето на новия вирус. Освен това, тази възможност позволява оперативно да се подобри „двигателя” на антивируса и да се поправят възникналите в него грешки.

 

Антивирусен” двигател”: съществуващи технологии.

 

С появяването на първите компютърни вируси, програмистите много бързо се ориентирали в принципите им на работа и създали първите антивирусни програми. От тогава минало много време и съвременния антивирус се отличава от тези първи антивирусни програми, така както персоналния компютър сега се отличава от калкулатора.

 

 

 

В първия абзац на тази статия беше дадено малко наивно определение на антивирусния механизъм (двигател). По нататък ще бъдат приведени няколко точни определения и технологични описания, които в крайна сметка ще ни позволят напълно да разберем структурата и алгоритмите на работа на антивирусния „ двигател”.

 

 

Антивирусния „двигател” (Anti-Virus Engine) – това е програмен модул, който е предназначен за откриване на вредоносни програмни обезпечения. „ Двигателя” се явява основен компонент на всяка антивирусна програма. Използва се както в персонални продукти - персонален скенер или монитор, така и в сървърни решения - скенер за пощенски или файлов сървър или прокси- сървър. Като правило, за откриването на вредоносните програми при повечето „ двигатели” са реализирани следните технологии:

 

Търсене по „сигнатура” (байт с уникална последователност)

Търсене по контролни суми или CRC (контролни суми с уникална последователност на байта)

Използване на редуцирани маски.

Криптоанализ

Статистически анализ.

Евристически анализ.

Емулация.

Ще разгледаме всеки от тези методи подробно.

 

 

Търсене по „сигнатура”.

 

Сигнатура- това е уникална „ линия” байт, която еднозначно характеризира тази или онази вредоносна програма. Сигнатурното търсене, в тази или друга модификация се използва за изолиране на вируси и други вредоносни програми, като се прилага от времето на най-първите антивирусни програми да сега. Неоспоримо достойнство на сигнатурното търсене е – скоростта на работа (при използване на специално разработени алгоритми по подразбиране) и възможността да открива няколко вируси с една сигнатура. Недостатък - размера на сигнатурите за надеждно откриване трябва да бъде доста голям, като минимумът е 8-12 байта (обикновено за точно откриване се използват много по-дълги сигнатури, до 64 байта), следователно размера на антивирусната база ще бъде доста голям. Освен това, в последно време голямо разпространение получиха вредоносни програми, написани на езици от висок клас (C+, Delphi, Visual Basic), а в такива програми има отделни части на кода, които практически не се изменят (така наречените Run Time Library). Неправилно избраната сигнатура неизбежно ще доведе до лъжливо сработване - разкриване на чист, незаразен файл като заразен с вирус. Като решение на този проблем се предлага да се използват или много големи сигнатури или да се използва разкриване по някои области от данни, например (relocation table) или текстови редове, което не винаги е добре.

 

Търсене по контролни суми (CRC)

 

Търсенето по контролни суми (CRC - cyclic redundancy check), в същността си се явява модификация на търсенето по сигнатури. Метода е разработен за да се избегнат основните недостатъци на сигнатурното търсене - размера на базата и намаляване на вероятността от лъжливи сработвания. Същността на метода се състои в това, че за да се открие вредоносният код се взема не само „опорния” ред - сигнатура, а по-точно казано контролната сума на този ред и местоположението на сигнатурата в тялото на вредоносната програма. Местоположението се използва, за да не се събират контролни суми за целия файл. По този начин, вместо 10-12 байта сигнатура минимално, се използват 4 байта за съхранение на контролната сума и още 4 байта за местоположение. Метода на търсене по контролни суми е по-бавен от метода на търсене по сигнатури.

 

Използването на маски за разкриването на вредоносния код, много често е усложнено от наличието на шифрован код (така наречените полиморфни вируси), защото в тези случаи, или е невъзможно да се избере маска, или маската с максимален размер не удовлетворява условието за еднозначна идентификация на вируса, без лъжливи сработвания.

Не е възможно избора на маска с достатъчен размер в случай на полиморфен вирус да се обясни лесно. По пътя на шифроване на своето тяло, вируса се сдобива с това, че голяма част от неговия код в поразения обект се явява изменена и съответно не може да бъде избрана в качеството на маска. (Подробно самошифроващи се и полиморфни вируси са описани в приложенията в края на статията)

 

За откриването на такива вируси се използват следните методи: използване на редуцирани маски, криптоанализ и статистически анализ. Ще разгледаме тези методи подробно.

 

 

Използване на редуцирана маска.

 

При поражение на обекти от вирус, който използва шифроване, преобразува своя код в шифрована последователност от данни:

S = F (T), къде

T - базов код на вируса

S - зашифровани кодове на вируса

F - функция на шифроване на вируса, произволно избирана от някакво множество преобразования {F}.

Способа на редуцираната маска се състои в това, че се избира преобразование R от зашифрованите кодове на вируса S, такова, че резултата от преобразуването (тоест някаква последователност от данни S) няма да зависи от ключовете на преобразуване на F, или

S = F (T)

S" = R (S) = R (F (T)) = R" (T).

 

При използването на преобразуванията на R към всевъзможни варианти на шифрования код S, резултатът S ще бъде постоянен при постоянно T. В такъв смисъл, идентификацията на поразените обекти се осъществява по пътя на избор на S в качеството на редуцирана маска и прилагането и към поразените обекти на преобразованието на R.

 

Криптоанализ

 

Този способ се състои в следното: по известен базов код на вируса и по известен зашифрован код ( или по подозрителен код, приличащ на зашифровано тяло на вирус) се възстановяват ключовете и алгоритъма на програмите на разшифровчика. След това, този алгоритъм се прилага към зашифрования участък и в резултат от това се явява разшифрованото тяло на вируса. При решението на тези задачи се налага използването на системни уравнения.

Като правило, този способ работи значително по-бързо и заема доста по-малко памет, отколкото емулацията на инструкциите на вируса. Понякога решението на подобни системи се явява задача с висока сложност.

Основния проблем е математическият анализ на полученото уравнение или получената система от уравнения. В много отношения задачата за решаване на система от уравнения при възстановяване на зашифрованото тяло на вируса напомня класическата криптографическа задача за възстановяване на зашифрован текст при неизвестни ключове. Но тук тази задача звучи малко по-различно: необходимо е да се изясни, явяват ли се данните от зашифрования код като резултат от използването на някоя известна с точност до ключ функция. При това отрано са известни много данни за решаването на тази задача: участък на зашифрования код, участък на не зашифрования код, възможни варианти на функциите на преобразуването. Освен това, самия алгоритъм на това преобразование и ключовете също присъстват в анализираните кодове.

Съществува обаче и значително ограничение, което се състои в това, че дадената задача трябва да се решава в конкретни граници на оперативната памет и процедурата по решението не бива да отнема много време.

 

 

Статистически анализ.

 

Той също се използва за откриване на полиморфни вируси. По време на своята работа сканера анализира честотата на използваните команди на процесора, прави таблица на срещащите се команди на процесора и на основата на тази информация прави извод за заразяването на файла с вирус. Този метод е ефективен за търсене на някои полиморфни вируси, защото тези вируси използват ограничен набор команди, докато чистите файлове използват съвсем други команди, с друга честота. Например всички програми за MS-DOS често използват прекъсване 21ч. ( CDh 21h), докато в кода на полиморфните DOS - вируси, тази команда практически не се среща.

Основният недостатък на този метод се състои в това, че има редица сложни полиморфни вируси, които използват почти всички команди на процесора и от копие към копие набора от използваните команди силно се променя, тоест по направената таблица на честотите не е възможно да се разпознае вируса.

 

Евристически анализ.

 

Когато количеството на вирусите е превишило няколко стотин, антивирусните експерти се замислили над идеята за разкриване на вредоносни програми, за съществуването, на които антивирусната програма още не знае (няма съответстващи сигнатури). В резултат били създадени така наречените евристически анализатори. Евристически анализатори се наричат набор от програми, които анализират кода на испълняемите файлове, макроси, скриптове, памети или застрашени сектори за изолиране в тях на различни типове вредоносни компютърни програми. Съществуват два принципа на работа на анализатора.

 

Статистически метод. Търсене на общи кратки сигнатури, които присъстват в повечето вируси (така наречените „ подозрителни” команди”). Например за голямо количество вируси, се прави търсене на вируси по маската *. EXE, открива се намерения файл и се прави запис в открития файл. Задачата на евристика в този случай е да намери сигнатурата, която отразява тези действия. След това се прави анализ на намерените сигнатури и ако е намерено някакво количество необходими и достатъчни „ подозрителни команди”, се взема решение за това, че файлът е заразен. Големия плюс на този метод е простата реализация и добрата скорост на работа, но при това нивото на откриване на нови вредоносни програми е доста нисък.

 

Динамически метод. Този метод се е появил едновременно с внедряването в антивирусните програми на емулации на команди на процесора (подробно емулатора е описан по-долу). Същността на метода се състои в емулация на изпълнение на програмите и протоколиране на всички „ подозрителни” действия на програмите. Въз основа на този протокол се взима решение за възможно заразяване на програмата с вирус. За разлика от статистическия метод, динамическия метод използва повече ресурси от компютъра и нивото на откриване чрез динамическия метод е по-високо.

 

 

Емулация.

 

Технологията на емулиране на кода на програмата (Sandboxing) се появила в отговор на появяването на голям брой полиморфни вируси. Идеята на този метод се състои в това, че емулира изпълнението на програмата (както заразена с вирус, така и чиста) в специално „ заграждение”, наречено още буфер на емулацията. Ако в емулатора попадне заразен с полиморфен вирус файл, то след емулацията в буфера се оказва разшифрованото тяло на вируса, което е готово вече за откриване със стандартните методи (сигнатурно или CRC търсене).

 

Съвременните емулатори емулират не само командите на процесора, но и търсенията на операционната система. Задачата за написване на пълноценен емулатор се явява доста трудоемък процес, да не говорим, че при използването на емулатора се налага постоянно да се контролират действията на всяка команда. Това е необходимо, за да не се изпълнят случайно деструктивните компоненти на алгоритъма на вируса.

Много е важно да се отбележи, че се налага именно да се емулира работата по инструкциите на вируса, а не да се трасират тези инструкции, защото при трасирането на вируса има много голяма вероятност да се извикат деструктивни инструкции или кодове, отговарящи за разпространението на вируса.

 

 

База данни на антивирусния” двигател”.

 

Базата данни се явява неделима част от антивирусния „ двигател”. Още повече, ако смятаме, че добре проектирания „ двигател” не се изменя толкова често, то антивирусната база се изменя постоянно, защото именно в антивирусната база се намират сигнатурите, контролните суми и специални програмни модули за откриване на вредоносните програми. Както е известно, новите вируси, червеи и други вредоносни програми се появяват със завидна честота и затова е много важно обновлението на антивирусната база да става колкото се може по-често. Ако преди пет години е било достатъчно ежеседмично обновление, то днес е наложително да се прави ежедневно обновяване на антивирусната база.

 

Така също е много важно, какво точно се намира в антивирусната база: само записи за вируси или и допълнителни програмни процедури. Във втория случай много по-лесно се обновява функционално антивирусния „ двигател” по пътя на обичайното обновление на базите.

 

 

Поддръжка на „сложни”, вложени обекти.

 

През последните няколко години антивирусните” двигатели” силно са се изменили. Ако за да се смята първата антивирусна програма , за първокласна програма е било достатъчно да проверява системната памет, изпълнимите файлове и застрашените сектори, то след няколко години във връзка с ръста на популярност на специални опаковки на изпълняваните модули пред разработчиците възникнала задача да разопаковат опакования файл преди да го сканират.

 

След това се появява нов проблем- вирусите се научили да заразяват архивни файлове( а и самите потребители все по- често препращали заразените файлове в архивите). Антивирусните програми били принудени да се научат да обработват и архивни файлове. През 1995 г. се появил първия макровирус, който заразява документи на Microsoft Word. Трябва да се отбележи, че формата на документите, използван от Microsoft Word е закрит и много сложен. Редица антивирусни компании до сега не могат пълноценно да обработват такива файлове.

 

Днес, във връзка с огромната популярност на електронната поща, антивирусните механизми обработват и базите на пощенските съобщения и самите съобщения.

 

Методи на откриване.

 

В типичното антивирусно ядро, което е реализирано във всяка антивирусна програма се използват всички необходими технологии за откриване на вредоносните програми: ефективен евристичен анализатор, високопроизводителен емулатор и най-важното грамотна и здрава архитектура на подсистемите за откриване на вредоносни програми, позволяваща използването на всички изброени по-горе методи за разкриване.

 

Почти във всяко антивирусно ядро основен се явява метода за откриване по контролни суми. Този метод е бил избран поради необходимостта от минимализиране размера на антивирусната база. Тъй като архитектурата на „ядрото” често е толкова здрава, че позволява използването на който и да е от изброените по-горе методи за откриване, тя се използва и за някои особено сложни вируси. Това позволява да се постигне високо ниво на разкриване на вирусите. Подробната архитектура на антивирусното „ ядро” е представена на схемата по-нататък в текста.

 

Практическото използване на способите за разпознаване на полиморфните вируси (криптоанализ и статистически анализ, използване на редуцирана маска и емулация), се свежда до избора на най-оптимален по бързодействие и обем на използваната памет метод. Кодът на болшинството от самошифроващите се вируси много лесно се възстановява с процедурата на емулация. Ако използваните емулатори не са оптималното решение, то кода на вируса се възстановява с помощта на подпрограми, реализиращи обратно преобразуване - криптоанализ. За откриване на неподдаващи се на емулации вируси и вируси, за които няма възможност, да се построи обратно преобразуване се използва способа на изграждане на редуцирани маски.

 

 

В някои, много сложни случаи се предприема комбинация от изброените по-горе способи. Част от кода на разшифровчика се емулира, при това от разщифровчика се издават команди, реално отговарящи за алгоритъма на разшифроване. След това на базата на получената информация се строи и решава система от уравнения за възстановяване на кода на вируса и неговото разкриване.

 

 

 

 

 

Комбинация от способите се използва също при няколкократно изменение на шифраването, когато вируса шифрова своето тяло няколко пъти, като при това използва различни алгоритми за шифроване. Комбинираният способ за възстановяване на информацията или „ чиста” емулация на кода на разшифровчика често се използват и поради това, че всеки нов вирус трябва да бъде проанализиран и включен към антивирусната база за минимални срокове, в които не винаги се извършва необходимия математически анализ. И като резултат се налага да се ползват други методи за разкриване на вируса, без да се има предвид, че напълно ще се изменят методите на математическия анализ на алгоритъма на разшифровчика.

 

Работа със „ сложни” обекти.

 

Антивирусните” механизми” поддържат работа с огромно число формати на опаковане и архивиране. Разработчиците много рядко публикуват пълен (или поне достатъчно подробен) списък на поддържаните формати. По-нататък е представена официално публикувана информация за подържането на „ сложни” формати в антивирус „ Касперски”. В другите антивирусни продукти списъка от поддържани формати би трябвало да бъде горе - долу същия.

 

„ Двигателя” на антивирусната програма „ Касперски” поддържа работа с повече от 400 различни по опаковка изпълняеми файлове, инсталатори и архиватори.( Всичко, повече от 900 модификации, считано към май 2003г.). Сред тях:

Упаковчици на изпълняемите файлове и системи за шифроване. Най-популярните от тях са:

Diet, AVPACK, COMPACK, Epack, ExeLock, ExePack, Expert, HackStop, Jam, LzExe, LzCom, PaquetBuilder, PGMPAK, PkLite, PackWin, Pksmart, Protect, ProtEXE, RelPack, Rerp, Rjcrush, Rucc, Scramb, SCRNCH, Shrink, Six-2-Four, Syspack, Trap, UCEXE, Univac, UPD, UPX (няколко версии), WWPACK, ASPack (няколко версии), ASProtect (няколко версии), Astrum, BitArts, BJFnt, Cexe, Cheaters, Dialect, DXPack, Gleam, CodeSafe, ELFCrypt, JDPack, JDProtect, INFTool, Krypton, Neolite, ExeLock, NFO, NoodleCrypt, OptLink, PCPEC, PEBundle, PECompact (няколко версии), PCShrink, PE-Crypt, PE-Diminisher, PELock, PEncrypt, PE-Pack (няколко версии), PE-Protect, PE-Shield, Petite, Pex, PKLite32, SuperCede, TeLock, VBox, WWPack32, XLok, Yoda.

 

Поддържането на толкова упаковчици и архиватори позволява да се съкрати времето за анализ на новите вируси, което води до увеличаване скоростта на реакция при появяването на нов вирус и да се постигне високо ниво на разкриване на вече известни вируси.

 

Архиватори и инсталагори (всичко повече от 60). Най популярните сред тях са:

CAB, ARJ, ZIP, GZIP, Tar, AIN, HA, LHA, RAR, ACE, BZIP2, WiseSFX (няколко версии), CreateInstall, Inno Installer, StarDust Installer, MS Expand, GKWare Setup, SetupFactory, SetupSpecialist, NSIS, Astrum, PCInstall, Effect Office.

 

Поддържането на голям брой разновидности на архиваторите е особено важно за проверка на пощенската система, защото голяма част от вирусите се разпространяват по пощата в архивиран вид. Разопаковката на обектите става в зависимост от нивото на вложените архиви. Например, ако заразения файл е опакован в UPX, а после е опакован и в архив ZIP, който пък е опакован в архив CAB и т.н., то антивирусния „ двигател” трябва да бъде в състояние да достави изходния файл и да разкрие вируса.

 

Трябва да отбележим, че подобни разсъждения са с теоретичен характер. Много широко известна е троянската програма Backdoor. Rbot, която се разпространяваше опакована в множество различни програми (Ezip, Exe32Pack, ExeStealth, PecBundle, PECompact, FSG, UPX, Morphine, ASPack, Petite, PE-Pack, PE-Diminisher, PELock, PESpin, TeLock, Molebox, Yoda, Ezip, Krypton и др.).

 

Алгоритъма за разопаковане на архиви обикновено разполага с достатъчен интелект, за да не разопакова всевъзможни „ архивни бомби” - архиви, с неголям размер, в които са опаковани огромни файлове (с много висока степен на компресия) или няколко еднакви файлове. Обикновено за проверка, а такъв архив трябва много време, но съвременните антивирусни „ механизми” често разпознават подобни бомби.

 

 

 

 

 

 

Механизъм за обновяване на антивирусните бази и техния размер.

 

Обновленията на антивирусните бази обикновено излизат по няколко пъти на ден. Някои са в състояние да пускат обновления по един път на час, някои по един път на два часа. При всички случай при съвременната висока степен на опасност в интернет, такова често обновление на антивирусните бази е напълно оправдано.

 

Размера на обновлението зависи от обмислеността на архитектурата на антивирусния”механизъм”. Така например, размера на регулярните обновления в отраслите на компанията като правило не надвишават 30 кв. При това в антивирусната база обикновено е заложено около 70% от функционалността на целия антивирусен” механизъм”. Във всяко обновяване на антивирусната база може да бъде добавена поддръжка на нов упаковчик или архиватор. По този начин като обновява ежедневно антивирусната база, потребителя получава не само нови процедури за разкриване на нови вредоносни програми, но и обновяване на целия антивирус. Това позволява много точно да се реагира на ситуацията и гарантира на потребителя максимална защита.

 

Евристически анализатор.

 

В евристическия анализатар, който влиза в състава на почти всяка антивирусна програма се използват заедно някои от описаните по-горе методи за анализ- криптоанализ и статистически анализ. Съвременния евристически анализатор първоначално се разработва така, че да бъде разширяем (за разлика от болшинството евристически анализатори от първо поколение, които се разработвали за разкриване на вредоносните програми само в изпълняемите модули).

В днешно време евристическия анализатор позволява да се разкриват вредоносни кодове в изпълняемите файлове, сектори и памети, а така също новия скрипт на вирусите и вредоносните програми за Microsoft Office (и други програми използващи VBA ) и накрая, вредоносния код, написан на езици от висока степен, като Microsoft Visual Basic.

 

Здравата архитектура и комбинация от различни методи позволява да се постигне високо ниво на разкриване на новите вредоносни програми. При това разработчиците влагат всичките си усилия, за да може, количеството на лъжливите тревоги да се сведе до минимум. Продуктите представени от лидерите в антивирусната индустрия, много рядко бъркат при разкриването на вредоносните кодове.

 

В приведената по-долу схема е описан примерен алгоритъм на антивирусния” двигател”.

Трябва да отбележим, че емулацията, търсенето на известни и неизвестни вредоносни програми протича едновременно.

 

Както беше казано по-горе, по време на обновяване на антивирусната база става също и обновяване и добавяне на модули за разопаковане на опаковани файлове и архиви, евристическия анализатор и други модули на антивирусното „ ядро”.

 

 

Оригинални технологии в антивирусните” механизми”.

 

Почти всеки разработчик на антивирусни продукти, реализира някакви свои технологии, позволяващи да се направи работата на програмата по-ефективна и производителна. Някои от тези технологии имат пряко отношение към устройството на „ антивирусния модул”, тъй както именно от неговата работа често зависи производителността на всички решения. По-нататък ще бъдат разгледани ред технологии, позволяващи значително да се ускори проверката на обектите и при това да се гарантира по-добро разкриване и дезинфектиране на вредоносното програмно обезпечение в архивните файлове.

 

Ще започнем с технологията на iChecker. Тази технология и нейните аналози са реализирани в почти всяка съвременна антивирусна програма. Трябва да отбележим, че iChecker е название, предложено от специалистите от лабораторията на „ Касперски”. Експертите например от Panda Software я наричат UltraFast. Дадената технология позволява да се достигне разумен баланс между надеждността на защитата на работещите станции (и особено сървъри) и използването на системни ресурси на защитения компютър.

 

 

Благодарение на тази технология значително се съкращава времето за зареждане (до 30-40%) на операционната система (в сравнение с традиционните антивирусни защити ) и времето за стартиране на приложението при активна антивирусна защита. При това се гарантира, че всички файлове на твърдия диск на компютъра ще бъдат проверени и обезвредени. Основната идея на дадената технология е: - не трябва да се проверява това, което не се е изменяло и вече е било проверено. Антивирусният механизъм съдържа специална база данни, в която се съхраняват контролните суми на всички проверени (и незаразени) файлове. Сега, преди да се вземе даден файл за проверка „антивирусният механизъм” проверява и сравнява контролната сума на файла с данни, съхраняващ се в базата данни. Ако данните съвпадат, то това значи, че файлът е бил проверен и повторна проверка не е необходима. Трябва да отбележим, че времето, използвано за сравняване на контролните суми на файла е значително по-малко от времето за антивирусна проверка.

 

Особено място в работата на антивирусните програми заема обезвреждането на архивирани заразени обекти. Именно за това ще стане дума по-нататък.

iCure е технология за обезвреждане на заразени файлове в архивите. Благодарение на тази технология заразените обекти вътре в архивните файлове ще бъдат успешно извлечени (или премахнати, в зависимост от настройките на антивируса) без използването на външни услуги (допълнения) за архивация. Днес Болшинството от антивирусните програми поддържат следните типове архиви: ARJ, CAB, RAR, ZIP. Благодарение на модулната архитектура и технологията за обновяване на антивирусното ядро, потребителя може лесно да обновява и разширява списъка на поддържаните типове архиватори без повторно пускане (зареждане) на антивируса.

iArc е още една технология за работа с архивни файлове. Тази технология е необходима за работа с многотомни архиви. iArc позволява да се проверяват многотомни архиви и да открива вируси даже, ако те са опаковани в многотомен архив, който от своя страна също е опакован в многотомен архив.

Многопоточност. Антивирусния „ механизъм” се явява многопоточен модул и може едновременно да обработва (проверява за наличие на вредоносни кодове) няколко обекти (файлове, сектори, скриптове и др.).

Повечето от изброените по-горе технологии в този или друг вид са реализирани във всеки съвременен антивирусен продукт.

 

Полиморфни вируси.

 

В изложението често използвахме термините” полиморфни” и „ самошифроващи се” вируси. Както трябваше да стане ясно от предишните разсъждения, именно този тип вредоносни кодове са оказали силно влияние на развитието на антивирусните технологии. По-нататък следва информация за полиморфните вируси, предоставена от експертите на лабораторийте „ Касперски”.

 

Основни определения: Самошифроване и полиморфичност. Използват се практически всички типове вируси, за да може максимално да се усложни процедурата по разкриване на вируса.

Полиморфните вируси (polymorphic) – това са достатъчно трудно разкриваеми вируси, които нямат сигнатура, тоест несъдържащи нито един постоянен участък от кода. В повечето случаи два образеца на един и същ полиморфен вирус няма да имат нито едно съвпадение. Това се достига чрез шифроване на основното тяло на вируса и модификации на програмите на разшифровчика ( декриптора). Към полиморфните вируси се отнасят тези от тях, откриването, на които е невъзможно (или крайно затруднено) да се осъществи с помощта на така наречените вирусни маски - участъци от постоянен код, специфични за конкретния вирус. Това се достига чрез два основни способа: шифроване на основния код на вируса с непостоянен ключ и случаен набор от команди на разшифровчика или изменение на самия изпълняем код на вируса. Съществуват също други, достатъчно екзотични примери на полиморфизъм: DOS-вирус "Bomber", например не е зашифрован, но последователността от команди, която предава управлението на кода на вируса се явява напълно полиморфна.

Полиморфизмът в различни степени на сложност се среща във вируси от всички типове – от зареждащи и файлови DOS-вируси до Windows-вируси и даже макро - вируси.

 

Полиморфни разшифровчици.

 

Елементарен пример за частично полиморфен разшифровчик се явява следващия набор от команди, в резултат на изпълнението, на които нито един байт от кода на самия вирус и неговия разшифровчик не е постоянен при заразяване на различни файлове:

MOV reg_1, count ; reg_1, reg_2, reg_3 избират се от

MOV reg_2, key ; AX,BX,CX,DX,SI,DI,BP

MOV reg_3, _offset ; count, key, _offset също могат да се изменят

_loop:

xxx byte ptr [reg_3], reg_2 ; xor, add или sub

DEC reg_1

Jxx _loop ; ja или jnc

; по- нататък следват зашифрования код и данните на вируса

 

Сложните полиморфни вируси използват значително по- сложни алгоритми за генериране на кода на своите разшифровчици: Приведените по- горе инструкци ( или техните еквиваленти)

преустроиват местата си от заразяване на заразяване, като се заменят с нищо непроменящи команди от типа NOP, STI, CLI, STC, CLC и т.д.

Пълноценните полиморфни вируси използват още по-сложни алгоритми и в резултат на работата им в разшифровчика на вируса могат да се срещнат операции SUB, ADD, XOR, ROR, ROL и други в произволно количество и ред. Зареждане и изменение на ключовете и други параметри на шифровката се осъществява също от произволен набор операции, в които мога практически да се срещнат всички инструкции на процесора Intel (ADD, SUB, TEST, XOR, OR, SHR, SHL, ROR, MOV, XCHG, JNZ, PUSH, POP...) с всички възможни режими на адресиране. Появяват се също полиморфни вируси, чийто разшифровчик използва инструкции пригодени за Intel386,, а през лятото на 1997г. е разкрит 32- битов полиморфен вирус, заразяващ EXE- файловете в Windows 95.

 

Като резултат, в началото файлът, заразен с подобен вирус, върши набор от безсмислени на пръв поглед инструкции. Интересното е, че някои комбинации, които са напълно работоспособни не се вземат от фирмените асемблери ( например, съчетанието CS:CS: или CS:NOP). И сред тази каша от команди и данни рядко се вземат MOV, XOR, LOOP, JMP - инструкции, които действително се явяват работещи.

 

Нива на полиморфизъм.

 

Съществува деление на полиморфните вируси на нива в зависимост от сложността на кода, който се среща в разшифровчиците на тези вируси. Такова деление за пръв път предложил доктор Алан Соломон, а след известно време Веселин Бончев го разширил:

 

Ниво 1: Вируси, които имат някакъв набор от разшифровчици с постоянен код; при заразяване избират един от тях. Такива вируси се явяват полу- полиморфни и носят още названието „ олигоморфни” (oligomorphic). Примери: "Cheeba", "Slovakia", "Whale".

 

Ниво 2: Разшифровчика на вируса съдържа една или няколко постоянни инструкции, но основната му част е непостоянна.

 

Ниво 3: Разшифровчика съдържа неизползваеми инструкции - от типа на NOP, CLI, STI и т.н.

 

Ниво 4: В разшифровчика се използват взаимозаменяеми инструкции и изменение на реда на извършване на инструкциите. Алгоритъма на разшифроване при това не се изменя.

 

Ниво5: Използват се всички изброени по- горе примери, алгоритъма на разшифровка е непостоянен, възможно е повторно шифроване на кода на вируса и даже частично шифроване на самия код на разшифровчика.

 

Ниво6: Permutating-вируси. На изменение подлежи основния код на вируса - той се дели на блокове, които при заразяване се представят в произволен ред. При това вируса си остава работоспособен. Подобни вируси могат да бъдат назашифровани.

 

Направената по-горе класификация има своите недостатъци, защото тя е направена по един единствен критерий - възможност за разкриване на вируси по кода на разшифровчика с помощта на стандартното използване на вирусни маски:

 

Ниво 1: За разкриване на вируса е достатъчно да има няколко маски.

Ниво2: Разкриване по маска с използване на "wildcards"

Ниво 3: Разкриване по маска след отделянето на инструкциите – „заблудите”

Ниво 4: Маската съдържа няколко варианта на възможния код, тоест явява се алгоритмическа.

 

Ниво5: невъзможност за разкриване на вируса по маската.

Недостатъчността на такова деление е демонстрирана вече във вирус от трето ниво на полиморфизъм, който така се и нарича - „Level3". Този вирус се явява един от най-сложните полиморфни вируси, по приведеното по-горе деление попада в ниво 3, има постоянен алгоритъм на разшифровка, пред който стои голямо количество команди – „заблуждаващи” В този вирус, алгоритъма за генериране на „ заблуди” е доведен до съвършенство: в кода на разшифровчика могат да се срещнат практически всички инструкции на процесора i8086.

Ако се прави деление на нива от гледна точка на антивирусните програми, използващи системи за автоматично разшифроване на кода на вируса (эмулатори), то деленето по нива ще зависи от сложността на емулация на кода на вируса. Възможно е и разкриване на вируси и с други приоми, например разшифровка с помощта на елементарни математически закони и т.н.

По-обективна ще бъде класификация, в която покрай критериите на вирусните маски участват и други параметри например:

Степен на сложността на полиморфния код (процент от всички инструкции на процесора

Link to comment
Сподели другаде

Гост
Отговори на тази тема

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   Не можете да качите директно снимка. Качете или добавете изображението от линк (URL)

Loading...
×
×
  • Създай ново...