Глава 1.

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

 

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

1.1. Классы существующих антивирусных средств.

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

1.1.1. Детекторы и фаги.

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

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

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

Имеется два алгоритма поиска вирусов в исполняемых файлах.

Первый связан с поиском сигнатур или регулярных выражений.

Сигнатурой вируса называется последовательность байтов,

а) встречающаяся во всех его копиях и

б) не встречающаяся ни в какой другой программе.

Однако истинность условия б) невозможно проверить на практике, поэтому для уменьшения вероятности ложных срабатываний необходимо использовать сигнатуры как можно большей длины. (Скорость хорошего алгоритма поиска подпоследовательности только возрастает с увеличением ее длины). Идеальным с точки зрения теории представляется вариант, когда сигнатура совпадает с самим телом вируса, при этом условия а) и б) выполняются автоматически. К сожалению, такой вариант существует на практике чрезвычайно редко, но сигнатуры длиной до 90% от длины вируса для вирусов простой структуры выделить можно. На практике детекторы используют в качестве сигнатуры характерный для этого вируса фрагмент кода (например, из обработчика прерывания) длиной в несколько десятков байт (при средней длине вируса 2-3 Кбайта), что, конечно, ставит истинность условия б) под вопрос.

Таким образом, принцип работы таких детекторов очень прост — если в каком-либо объекте обнаружена сигнатура, то он считается зараженным. Следует не забывать, что в последнее время появились вирусы, не поддающиеся обнаружению ни с помощью обычных, ни с помощью регулярных сигнатур (подробнее см. п. 3.2.1).

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

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

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

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

Наиболее известными программами данного типа для операционной системы MS DOS являются программы Aidstest Д. Н. Лозинского, Scan/Clean фирмы McAfee Associates, Microsoft AntiVirus фирмы Central Point Software, входящий в дистрибутив MS DOS 6.0.

В табл. 1.1 представлена информация о количестве вирусов, обнаруживаемых известными фагами на конец 1994 г.

 

Программа

Число обнаруживаемых вирусов

Aidstest

Scan/Clean

Microsoft Antivirus

1058

2738

более 1000

 Табл. 1.1. Количество обнаруживаемых вирусов программами-детекторами для MS DOS на конец 1994 г.

 

1.1.2. Сторожа.

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

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

Несомненным достоинством сторожей является их уникальная способность блокировать РПС в момент попытки нанесения ими ущерба. Таким образом, сторожа защищают не только от вирусов, но и от троянских коней.

Наиболее известными программами этого класса для IBM PC являются пакет Flu-shot+ и антивирусный монитор -D Е.Касперского. Сравнительный анализ функций этих программ приведен в табл. 1.2.

 

Функция

Flu-Shot+ -D

Изменение или переименование СОМ, ЕХЕ и SYS -файлов

+ +

Оставление резидента

+ +

Уменьшение размера свободной памяти DOS

- +

Уменьшение размера системных буферов

+ +

Запись на диск по абсолютному адресу

+ +

Форматирование диска

+ +

Запись в MBR или BOOT-сектор

+ +

Вызов нестандартных функций DOS

- +

 Табл. 1.2. Сравнительный анализ сторожей для MS DOS.

 

1.1.3. Ревизоры.

 

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

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

Наиболее известная программа этого класса — Adinf Д. Мостового.

1.1.4. Вакцины.

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

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

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

Успешно вакцины можно применять тогда, когда способ заражения объекта не может сильно варьироваться (в связи со свойствами самого объекта). Для MS DOS такими объектами служат BOOT-сектора и MBR, и в последнее время они с успехом вакцинируются, в т.ч. на уровне BIOS.

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

 1.1.5. Перспективные средства защиты.

 К этой группе относятся следующие средства:

Универсальные средства — это те, которые претендуют на противостояние абсолютно всем вирусам. С точки зрения практики невозможность создания такого средства очевидна, причем очевидно также и обратное — нет "универсального вируса" (типа СПИДа), против которого бессильно любое средство. Как для любого вируса можно создать программу, борющуюся с ним тем или иным способом, так и для любого антивируса можно написать вирус, преодолевающий его. Ф. Коэн в своей классической работе [9] доказал, что нельзя создать универсальную процедуру, решающую, есть ли в предъявляемой ей программе вирус или нет (см. п. 2.1.2). Л. Адлеман подтвердил этот факт, показав, что множество всех вирусов не перечислимо [10].

К адаптивным и самообучающимся средствам относят те, которые автоматически расширяют список вирусов, которым они противостоят. Это в первую очередь средства, содержащие постоянно пополняемые базы вирусов. Наиболее привлекательной выглядит идея создания самообучающегося средства, которое при встрече с неизвестным ему вирусом автоматически анализирует его и добавляет в свой арсенал. Для простых типов вирусов такой алгоритм, автоматически выделяющий сигнатуру вируса, уже создан [11].

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

 1.1.6. Сравнительный анализ существующих средств защиты от вирусов

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

 

Характеристика Детекторы Фаги Сторожа Ревизоры Вакцины Перспективн. Коэф. значим.

Обнаружение/ неразмножение известных вирусов

+ + + + + + 8
Лечение известных вирусов - + - +/- ? + 4
Обнаружение/не размножение неизвестных вирусов - - + + - + 16
Лечение неизвестных вирусов - - - +/- - +/- 4
Возможность борьбы с большим количеством вирусов + + + + - + 8
Количество обнаруживаемых типов вирусов С С С В Н В 12
Надежность (отсутствие ошибок первого рода) В В С В В С 6
Адекватность (отсутствие ошибок второго рода) В В Н Н ? С 4
Нетребовательность к ресурсам (памяти, времени) В В С Н Н Н 4
Взвешенная оценка, балл 4.0 4.4 4.8 6.0 2.0 6.1 7.3

 Символы означают:

+/- — функция реализована не полностью

? — программа для этого не предназначена

В — высокая

С — средняя

Н — низкая

 

Табл. 1.3. Сравнительная характеристика антивирусных средств для операционной системы MS DOS.

 

1.2. Недостатки существующих антивирусных средств применительно к современной ситуации.

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

1) с одной стороны, это — экспоненциальный вирусный взрыв и появление генераторов вирусов, приводящее к тому, что тысячами появляются примитивные вирусы, которые нетрудно исследовать и включить в базу данных фага, но за их количеством просто не успеть;

2) с другой стороны, появление новых изощренных типов вирусов, затрудняющих их обнаружение или лечение, таких как: вирусы-драйверы (знаменитый Dir), полиморфные вирусы (в т.ч. широко известные MtE-вирусы) и другие, многие из которых описаны в [12]. Причем фантазия авторов вирусов неисчерпаема, и появление в будущем абсолютно новых типов вирусов не исключено.

Недостатки детекторов и фагов вытекают из их основной характеристики, что они могут бороться только с известными им вирусами. В последнее время появились программы, не требующие для обновления версии получения новой программы, а использующие открытую и постоянно пополняемую (в т.ч. и самим пользователем) базу данных. Но это, конечно, нельзя назвать решением проблемы 1. Более того, проблема 2 также оказывается непосильной для детекторов — вирусы с само модифицирующимся расшифровщиком не могут быть обнаружены простым сигнатурным поиском. Эта проблема вроде бы успешно решалась до последнего времени введением понятия "регулярная сигнатура" (см. п. 3.2.1), но после появления полиморфных вирусов такие сигнатуры оказались также непригодны для детектирования зараженных объектов.

Все вышесказанное относится и к вакцинам, которые оказываются еще более худшим антивирусным средством. Дело в том, что защита даже от нескольких известных вирусов с помощью них невозможная. Вакцинация от десятка вирусов приведет к тому, что вычислительная среда будет настолько сильна изменена (появятся новые обработчики прерываний, все файлы будут сильно искажены), что компьютерная система будет работать неустойчиво или не будет работать вовсе. О каких тысячах вирусов может тогда вестись речь! Также нетрудно представить себе 2 вируса, использующие такие условия возможности заражения, что ложность первого из них эквивалентна истинности второго, и поэтому вакцинация от обоих этих вирусов сразу просто невозможна. (Например, пусть один гипотетический вирус заражает только файлы длиной больше 32K, а другой — только меньше).

Рассмотрим далее классы антивирусных средств, вроде бы направленных на борьбу с неизвестными вирусами.

Сторожам в принципе все равно, известный или новый вирус пытается отформатировать жесткий диск. Но! Только если он пытается сделать это каким-то предусмотренным автором антивируса способом. Таким образом, проблема 2 — появление новых вирусных идей остается для сторожей открытой. Ну и большое неудобство, что на очень многие полезные программы сторож будет "ругаться", доводя пользователя до исступления.

Ревизоры, как уже подчеркивались, являются на сегодняшний день наиболее надежным и дающим хоть какую-то гарантию антивирусным средством. В частности, с проблемой 1 они прекрасно справляются. Но они также имеют несколько существенных недостатков. Первый очевиден — если в момент установки ревизора в компьютерную систему там уже присутствовал вирус, он это никак не обнаружит ни при установке, ни в дальнейшем (если вирус будет достаточно аккуратен), вплоть до часа Х, когда присутствие вируса в системе уже будет понятно и без ревизора. Проблема 2 дает себя знать во втором недостатке — если вирус применяет какую-то новую идею по внедрению в компьютерную систему, неизвестную ревизору, он не будет обнаружен. И наконец, информация, сформированная ревизором, в 99% случаев потенциально доступна любой программе, а, значит, и вирусу, который может ее исказить так, что ревизор не будет реагировать на его внедрение; или просто уничтожить, в результате чего ревизор вынужден будет собирать всю информацию заново при наличии активного вируса в системе!

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

 1.3. Постановка задачи работы.

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

Однако концепция полностью закрытой системы вряд ли сможет стать жизнеспособной (кроме разве что военных, секретных и т.п. систем — но даже в этом случае то программное обеспечение, функционирующее внутри, должно быть сертифицировано, в т.ч. и на предмет отсутствия РПС). Поэтому была сформулирована идея "полуоткрытой" (или "полузакрытой", если вы пессимист) компьютерной системы, иначе "шлюзовой" системы [13] (см. рис. 1.1). В ней предполагается контроль всей поступающей информации на предмет наличия в ней РПС. Естественно, что РПС должны находиться в информации, подлежащей исполнению, т.е. в программном коде (на любом языке). Проблема сертификации программного обеспечения на языке высокого уровня является трудной, но в достаточной степени исследованной и здесь рассматриваться не будет.

Рис. 1.1. Схема шлюзовой компьютерной системы.

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

Она разбивается на ряд подзадач:

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

2) Особенности поиска РПС в исполняемом коде и возможность использования традиционных методов анализа ПО.

3) Разработка структуры интеллектуальной системы анализа исполняемого кода программ ИСАИПК. Этим две задачи рассматриваются в главе 3.

4) Реализация такой системы. В главе 4 будут описаны некоторые принципы построения и конкретные алгоритмы системы SubLVA.