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

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Лекция № 12
Тема: Компьютерные вирусы
Цель: Изучить понятие компьютерного вируса, жизненный цикл вирусов и общие вопросы борьбы с ними.
План лекции
Введение
Введение
Особое место среди вредоносного программного обеспечения занимают компьютерные вирусы. Часто вирусами называют всё вредоносное ПО. На прошлой лекции мы убедились в том, что компьютерные вирусы лишь часть вредоносного ПО. Теперь рассмотрим компьютерные вирусы подробнее.
В настоящее время под компьютерным вирусом принято понимать программный код, обладающий следующими необходимыми свойствами:
1) способностью к созданию собственных копий, не обязательно совпадающих с оригиналом, но обладающих свойствами оригинала (в частности, самовоспроизведением);
2) наличием механизма, обеспечивающего внедрение создаваемых копий в исполняемые объекты вычислительной системы.
Эти свойства являются необходимыми, но недостаточными. Вирусы в большинстве случаев распространяются скрытно и несанкционированно. Следовательно, к этим свойствам необходимо добавить критерий, позволяющий определять, являются ли действия программы, удовлетворяющей свойствам 1 и 2, правомочными в данной вычислительной системе.
Наиболее распространенной классификацией компьютерных вирусов является классификация по типам объектов вычислительной системы, в которые они внедряются. В настоящее время выделяются три типа объектов.
1. Программные файлы операционных систем. Вирусы, поражающие эти объекты, называются файловыми.
2. Системные области компьютеров (в частности, области начальной загрузки операционных систем). Соответствующие вирусы получили название загрузочных вирусов, или Boot-вирусов.
3. Макропрограммы и файлы документов современных систем обработки информации (например, Microsoft Word). Вирусы, связанные с этим типом объектов, именуются макровирусами.
Существует и комбинированный тип файл-загрузочные вирусы.
Естественно, эта классификация не является единственно возможной.
Как правило, все исследователи проблем компьютерных вирусов предлагают множество различных схем типизации. Анализ основных этапов жизненного цикла вирусов позволяет выделить их различные признаки и особенности, которые могут быть положены в основу дополнительных классификаций.
2 Жизненный цикл вирусов
Как и у любой программы, у компьютерных вирусов можно выделить две основные стадии жизненного цикла хранение и исполнение. Стадия хранения соответствует периоду, когда вирус просто хранится на диске совместно с объектом, в который он внедрен. На этой стадии вирус является наиболее уязвимым со стороны антивирусного программного обеспечения, так как он не активен и не может контролировать работу операционной системы с целью самозащиты.
Некоторые вирусы на этой стадии используют механизмы защиты своего кода от обнаружения. Наиболее распространенным способом защиты является шифрование большей части тела вируса. Его использование совместно с механизмами мутаций кода делает невозможным выделение устойчивых характеристических фрагментов кода вирусов сигнатур, что затрудняет обнаружение вирусов антивирусными средствами.
Стадия исполнения компьютерных вирусов, как правило, состоит из пяти этапов:
1) загрузки вируса в память;
2) поиска жертвы;
3) заражения найденной жертвы;
4) выполнения деструктивных функций;
5) передачи управления программе носителю вируса. Рассмотрим эти этапы подробнее.
Загрузка вируса. Загрузка вируса в память осуществляется операционной системой одновременно с загрузкой исполняемого объекта, в который вирус внедрен. В простейшем случае процесс загрузки вируса представляет собой не что иное, как копирование с диска в оперативную память, сопровождаемое настройкой адресов, после происходит передача управления коду тела вируса. Эти действия выполняются операционной системой, а сам вирус находится в пассивном состоянии. В более сложных ситуациях вирусы могут после получения управления выполнять дополнительные действия, которые необходимы для его функционирования. В связи с этим рассматриваются два аспекта.
Первый из них связан с тем, что некоторые вирусы, как отмечалось выше, используют для самозащиты в период хранения механизмы криптографической защиты. В этом случае дополнительные действия, которые выполняет вирус на этапе загрузки, состоят в расшифровании основного тела вируса.
Второй аспект связан с так называемыми резидентными вирусами. Так как вирус и объект, в который он внедрен, для операционной системы являются единым целым, то, разумеется, после загрузки они располагаются в едином адресном пространстве. Следовательно, после завершения работы объекта он выгружается из оперативной памяти и при этом выгружается вирус, переходя в пассивную стадию хранения. Однако некоторые типы вирусов способны сохраняться в памяти и оставаться активными после окончания работы вирусоносителя. Эти вирусы получили название резидентных.
Такие вирусы на стадии загрузки должны позаботиться о закреплении своего кода в оперативной памяти. Это можно реализовать различными способами. Например, операционные системы типа MS-DOS содержат стандартные средства поддержки резидентных модулей. Но, как правило, вирусы не пользуются этими механизмами, а переносят свой код либо в самостоятельно отведенные блоки памяти, либо в зарезервированные под нужды операционной системы участки памяти. Однако размещение кода в оперативной памяти необходимое, но недостаточное действие. Помимо этого, вирус должен позаботиться о том, чтобы этому коду время от времени передавалось управление. Поэтому вирусы должны изменить код системных функций, которые гарантированно используются прикладными программами, добавив в них команды передачи управления своему коду, либо изменить в системной таблице адреса соответствующих системных функций, подставив адреса своих подпрограмм. Такой перехват определенных функций, например чтения (записи) файлов, позволит также вирусу контролировать информационные потоки между операционной системой и прикладными программами. Для многозадачных систем типа Windows вирусы могут обойтись без перехвата системных событий, если не ставится задача контроля информационных потоков. Для того чтобы вирус мог функционировать независимо от программы-носителя, ему достаточно зарегистрировать в системе новую задачу, в контексте которой он будет выполняться.
Перехват системных функций с целью контроля действий операционной системы является обязательным для так называемых стелс-вирусов (Stealth). Эти вирусы способны скрывать свое присутствие в системе и избегать обнаружения антивирусными программами. К примеру, подобные вирусы могут перехватывать системные функции чтения файла для того, чтобы в случае обращения к зараженному файлу эмулировать его чистоту, временно восстанавливая его исходное состояние.
Поиск жертвы. По способу поиска жертвы вирусы можно разделить на два класса. К первому относятся вирусы, осуществляющие активный поиск с использованием функций операционной системы. Примерами являются файловые вирусы, использующие механизм поиска исполняемых файлов в текущем каталоге. Второй класс составляют вирусы, реализующие пассивный механизм поиска, т. е. вирусы, расставляющие ловушки для программных файлов. Как правило, файловые вирусы устраивают подобные ловушки путем перехвата функции Ехес операционной системы, а макровирусы с помощью перехвата команд типа «Save as» из меню «File».
Заражение жертвы. В простейшем случае заражение представляет собой самокопирование кода вируса в выбранный в качестве жертвы объект. Классификация вирусов на этом этапе связана с анализом особенностей этого копирования, а также способов модификации заражаемых объектов.
По способу инфицирования жертвы вирусы можно разделить на два класса. К первому относятся вирусы, которые не внедряют свой код непосредственно в программный файл, а изменяют имя файла и создают под старым именем новый, содержащий тело вируса. Второй класс составляют вирусы, внедряющиеся непосредственно в файлы-жертвы. В зависимости от места внедрения возможны следующие варианты:
1) внедрение в начало файла. При внедрении данным способом вирусы могут либо производить объединение собственного кода и кода программы жертвы, либо переписывать начальный фрагмент файла в конец, освобождая место для себя;
2) внедрение в конец файла. Наиболее распространенный тип внедрения. Передача управления коду вирусов обеспечивается модификацией первых команд программы или заголовка файла;
3) внедрение в середину файла. Как правило, этот способ используется вирусами применительно к файлам с заранее известной структурой или же к файлам, содержащим последовательность байтов с одинаковыми значениями, длина которой достаточна для размещения вируса. Во втором случае вирусы архивируют найденную последовательность и замещают собственным кодом. Помимо этого, вирусы могут внедряться в середину файла, освобождая себе место путем переноса фрагментов кода программы в конец файла или же раздвигая файл.
Особенности этапа заражения для загрузочных вирусов определяются особенностями объектов, в которые они внедряются, загрузочными секторами гибких и жестких дисков и главной загрузочной записью (MBR) жестких дисков. Основной проблемой является ограниченный размер этих объектов. В связи с этим вирусам необходимо каким-то образом сохранить где-то на диске ту свою часть, которая не уместилась на месте жертвы, а также перенести оригинальный код инфицированного загрузчика.
Помимо простого копирования кода вируса в заражаемый объект, на этом этапе могут использоваться более сложные алгоритмы, обеспечивающие защиту вируса на стадии хранения. К числу таких усложнений можно отнести уже упоминавшееся шифрование основного тела вируса.
Выполнение деструктивных функций. Вирусы могут выполнять, помимо самокопирования, деструктивные функции. Согласно классификации вирусы делятся на безвредные, неопасные, опасные и очень опасные. Безвредные вирусы это вирусы, в которых реализован только механизм самораспространения. Неопасные вирусы это вирусы, присутствие которых в системе связано с различными визуальными эффектами, но которые не наносят вред программам и данным. Опасные вирусы это вирусы, которые могут стать причиной сбоя системы. Разрушение программ и данных может стать последствием сбоя. Очень опасные вирусы это вирусы, непосредственно приводящие к разрушениям программ и данных. Дополняя эту классификацию, можно отметить деление вирусов на вирусы, наносящие вред системе вообще, и вирусы, предназначенные для целенаправленных атак на определенные объекты.
Передача управления программе-носителю вируса. По этому признаку вирусы классифицируют на разрушающие и неразрушающие. Разрушающие вирусы не заботятся о том, чтобы при инфицировании программ сохранять их работоспособность, поэтому для них этот этап функционирования отсутствует. Для неразрушающих вирусов этот этап связан с восстановлением в памяти программы в том виде, в котором она должна корректно исполняться, и передачей управления программе носителю вируса.
Для борьбы с компьютерными вирусами в настоящее время используются различные средства, которые можно разделить на три класса: административные, юридические и технические.
1. Административные средства, как правило, включают комплекс мер, действующих в рамках предприятий и направленных на снижение ущерба, наносимого компьютерными вирусами. В качестве примеров можно привести программы проведения профилактических мероприятий, планы действия сотрудников в случае, если их компьютер подвергся вирусной атаке, запреты на самостоятельную установку нового программного обеспечения и т. п.
2. Юридические средства сводятся к привлечению к уголовной (или административной) ответственности лиц, по чьей вине наносится ущерб вычислительным системам. В настоящее время законодательство многих стран имеет разделы, посвященные компьютерным преступлениям, к числу которых относится распространение компьютерных вирусов. В частности, в Уголовном кодексе Российской Федерации имеется ст. 273, в которой предусмотрена ответственность «за создание, использование и распространение вредоносных программ для ЭВМ», заключающаяся в «лишении свободы на срок до трех лет со штрафом от двухсот до пятисот минимальных размеров оплаты трудами.
3. Технические средства разделяются на программные и аппаратные. Под первой группой средств обычно понимают программы, применяемые для предупреждения заражения и выявления факта заражения. К аппаратным средствам относятся различные устройства, позволяющие контролировать обращения к данным жесткого диска, проверять при загрузке операционной системы состояние загрузочного сектора и т. п.
Задача защиты от разрушающих программных воздействий (РПВ) может ставиться в нескольких принципиально различных вариантах. Классический вариант состоит в выявлении и ликвидации вирусов. Ослабленная разновидность данного варианта только выявление вируса. Понятно, что алгоритмы нахождения и удаления вирусов отличаются некоторой принципиальной ненадежностью (возможен пропуск вируса во время процедуры проверки при условии, что вирус в компьютерной системе присутствует (ошибка первого рода)). Кроме того, выше мы говорили о множестве путей внедрения РПВ и их разнообразном негативном воздействии. Следовательно, для защиты важной компьютерной системы необходимо полностью исключить наличие РПВ (или допустить присутствие РПВ с вероятностью не выше заданной и очень малой).
Формализуем общую задачу борьбы с разрушающими программными воздействиями, рассмотрев следующие начальные условия.
1. Априори неизвестно наличие в каком-либо множестве программ фрагментов РПВ. Ставится задача определения факта их наличия или отсутствия; при этом программы не выполняются (статическая задача).
2. При условиях, рассматриваемых в пункте 1, прикладные программы используются по своему прямому назначению. Также ставится задача выявления закладки, но в данном случае динамическая (по результатам работы).
3. Происходит обмен программным продуктом (либо в пространстве передача по каналу связи или пересылка на магнитном носителе, либо во времени хранение), априори свободным от потенциально опасных действий. Программный продукт не исполняется. Задача защиты (статическая) ставится в трех вариантах:
1) не допустить внедрение закладки;
2) выявить внедренный код закладки;
3) удалить внедренный код закладки.
4. При условиях пункта 3 решается динамическая задача защита от воздействия закладок в ходе работы программ.
5. При условии потенциальной возможности воздействия закладок решается задача борьбы с их итоговым влиянием, т. е. закладки присутствуют в системе, но либо не активны при выполнении критических действий прикладных программ, либо результат их воздействия не конструктивен.
Далее рассмотренные задачи будем упоминать как задачи 1 5.
Методы борьбы с воздействием закладок можно разделить на классы и связать с общей проблемой защиты программного обеспечения от несанкционированного доступа.
1. Общие методы защиты программного обеспечения, решающие задачи борьбы со случайными сбоями оборудования и несанкционированным доступом:
1) контроль целостности системных областей, запускаемых прикладных программ и используемых данных (решение задачи 3);
2) контроль критических для безопасности системы событий (решение задачи 2).
Данные методы действенны лишь тогда, когда контрольные элементы не подвержены воздействию закладок и разрушающее воздействие либо инициирующее его событие входят в контролируемый класс. Так, система контроля за вызовом прерываний не будет отслеживать обращение к устройствам на уровне портов. Но также и контроль событий может быть обойден путем:
• навязывания конечного результата проверок;
• влияния на процесс считывания информации;
• изменения контрольных элементов (хеш-функций), хранящихся в общедоступных файлах или в оперативной памяти.
Важно, что контроль должен быть выполнен до начала влияния закладки либо контроль должен осуществляться полностью аппаратными средствами с программами управления, содержащимися в ПЗУ;
3) создание безопасной и изолированной операционной среды (решение задачи 4);
4) предотвращение результирующего воздействия вируса или закладки (например, запись на диск только в зашифрованном виде на уровне контроллера тем самым локальное сохранение информации закладкой не имеет смысла или запрет записи на диск на аппаратном уровне) (решение задачи 5).
2. Специальные методы выявления программ с потенциально опасными последствиями:
1) поиск фрагментов кода по характерным последовательностям (сигнатурам), свойственным закладкам, либо, наоборот, разрешение на выполнение или внедрение в цепочку прерываний только программам с известными сигнатурами (решение задач 1, 2);
2) поиск критических участков кода (с точки зрения безопасности компьютерной системы) методом семантического анализа. При этом анализ фрагментов кода на выполняемые ими функции (например, выполнение НСЗ) часто сопряжен с дизассемблированием или эмуляцией выполнения (решение задач 1, 2).
Рассмотрим процесс создания защищенного фрагмента компьютерной системы применительно к проблеме защиты от РПВ.
Первоначально необходимо убедиться, что в программном обеспечении ПЗУ вычислительных средств системы (например, в BIOS ПЭВМ) не имеется РПВ. Данная задача может решаться в статическом варианте (задача 1) и динамическом варианте (задача 2). С точки зрения экономико-временных параметров целесообразнее решение задачи 1, поскольку в противном случае требуется длительная работа в аппаратной среде в различных режимах. На практике желательно комплексно решать как первую, так и вторую задачу.
Далее следует определить состав программных средств базовой вычислительной среды, т. е. определить конкретную операционную среду, дополнительные сервисные программные средства (например, программные оболочки или средства телекоммуникации) и программные средства поддержки дополнительного оборудования (программы управления принтером и др.).
После этого наступает самый трудоемкий этап, на котором необходимо убедиться в отсутствии РПВ в описанном базовом наборе программных средств. При этом в составе ПО базовой вычислительной среды не должно быть целого класса возможностей (назовем их инструментальными). Прежде всего это возможность вмешательства оператора в содержимое оперативной памяти (запись), возможность инициирования и прекращения выполнения процессов нестандартным образом (помимо механизмов операционной среды).
Обобщенно достаточные условия к базовому набору ПО можно сформулировать следующим утверждением. В составе ПО, которое может быть инициировано в компьютерной системе, не должно быть функций порождения и прекращения выполнения процессов, кроме заранее определенных, и не должно быть возможностей влияния на среду выполнения уже активных процессов и на сами эти процессы.
Затем осуществляются проектирование и разработка программных или программно-аппаратных средств защиты компьютерной системы, а затем их тестирование.
Весь комплекс программного обеспечения, включая и средства защиты, замыкается в изолированную программную среду, при этом предполагается неизменность состава полученного в ходе выполнения шагов 1 3 программного продукта. Подробности механизма реализации этой среды приведены ниже.
Очевидно, что при пустом множестве активизирующих событий для закладки потенциальные деструктивные действия с ее стороны невозможны. Положим, что в ПЗУ (BIOS) и операционной системе отсутствуют закладки. Пусть пользователь работает с программой, процесс написания и отладки которой полностью контролируются, т. е. в ней также исключено наличие закладок или каких-либо скрытых возможностей (проверенная программа). Внедрение закладки в такую систему возможно лишь в следующих случаях:
1) проверенные программы будут использованы на другом компьютере с другой BIOS, которая может содержать закладки;
2) проверенные программы будут использованы в аналогичной, но непроверенной операционной среде, в которой могут содержаться закладки;
3) проверенные программы используются на проверенном компьютере и в проверенной операционной среде, но запускаются еще и непроверенные программы, потенциально несущие в себе закладки.
Следовательно, деструктивные действия закладок гарантированно невозможны, если:
1) на компьютере с проверенной BIOS установлена проверенная операционная среда;
2) достоверно установлена неизменность операционной среды и BIOS для данного сеанса работы;
3) кроме проверенных программ, в данной программно-аппаратной среде не запускалось и не запускается никаких иных программ;
4) исключен запуск проверенных программ в какой-либо иной ситуации, т. е. вне проверенной среды.
При выполнении перечисленных условий программная среда называется изолированной.
Итак, мы видим, что основными элементами поддержания изолированности среды являются контроль целостности и контроль активности процессов. При этом для алгоритмов контроля целостности важно выполнение таких условий, как:
1) надежный алгоритм контроля;
2) контроль реальных данных.
Поясним подробнее пункт 2. Контроль целостности всегда сопряжен с чтением данных (по секторам, по файлам и т. д.). Например, закладка в BIOS может навязывать при чтении вместо одного сектора другой или редактировать непосредственно буфер. Однако даже контроль BIOS может происходить под наблюдением какой-либо дополнительной аппаратуры и не показать ее изменение. Аналогичные эффекты могут возникать и при обработке файла.
Рассмотрим модель безопасной загрузки, или ступенчатого контроля. Она заключается в постепенном установлении неизменности компонентов программно-аппаратной среды: сначала проверяется неизменность BIOS, при положительном исходе через проверенную BIOS считываются загрузочный сектор и драйверы операционной среды (по секторам), и их неизменность также проверяется; через проверенные функции операционной среды загружается драйвер контроля вызовов программ.
При рассмотрении проблемы защищенности информации при ее обработке в компьютерной системе необходимо обращать внимание на наличие скрытых возможностей в базовом ПО. Скрытые возможности сами по себе или в сочетании с другими программами из базового ПО могут привести к опосредованному НСД. Для обеспечения безопасности обрабатываемой информации и всего информационного процесса в целом необходимо в базовом ПО предусмотреть:
1) невозможность запуска никаких иных программ, кроме входящих в состав базового ПО;
2) невозможность повлиять на среду функционирования и сами программы, уже выполняемые в компьютерной системе;
3) невозможность изменить любые программы базового ПО.
Наиболее просто было бы выполнить условия 1 3 в тех случаях, когда все базовое ПО находится в ПЗУ и ПЗУ не содержит более никаких программ и фрагментов кода. Инициирование программ происходит при включении питания. Однако в таком случае система будет представлять собой нечто похожее на микрокалькулятор.
На практике в компьютерной системе работают несколько пользователей, каждый из которых использует некоторое подмножество программ базового ПО. Кроме того, они, как правило, имеют возможность запускать другие программы. Практически в любом компьютере имеется возможность влиять на среду функционирования программ. При этом выполнить условия 1 3 становится практически невозможно.
Рассмотрим функционирование программ в изолированной программной среде (ИПС). Тогда требования к базовому ПО существенно ослабляются. Разумеется, ИПС контролирует активизацию процессов через операционную среду, контролирует целостность исполняемых модулей перед их запуском и разрешает инициирование процесса только при одновременном выполнении двух условий принадлежности к разрешенным программам и неизменности программ. В таком случае от базового ПО требуется:
1) невозможность запуска программ в обход контролируемых ИПС событий;
2) отсутствие возможностей влиять на среду функционирования уже запущенных программ (фактически это требование невозможности редактирования оперативной памяти).
Все прочие действия, являющиеся нарушением условий 1 3 в оставшейся их части, будут выявляться и блокироваться. Таким образом, ИПС существенно снижает трудозатраты на анализ ПО на наличие скрытых возможностей.
При включении питания компьютера происходят тестирование ОП, инициализация таблицы прерываний и поиск расширений BIOS. При наличии расширений управление передается им. После отработки расширений BIOS в память считывается первый сектор дискеты или винчестера, управление передается ему, код загрузчика считывают драйверы. Далее выполняются файлы конфигурации, подгружается командный интерпретатор и выполняется файл автозапуска.
При реализации ИПС на нее должны быть возложены функции контроля запуска программ и контроля целостности. При описании методологии создания ИПС упоминалась проблема контроля реальных данных. Эта проблема состоит в том, что контролируемая на целостность информация может представляться по-разному на разных уровнях.
Если программный модуль, обслуживающий процесс чтения данных, не содержал РПВ и целостность его зафиксирована, то при его последующей неизменности чтение с использованием его будет чтением реальных данных. Из данного утверждения логически вытекает способ ступенчатого контроля. Предварительно фиксируется неизменность программ в основном и расширенных BIOS, далее с помощью функции чтения в BIOS (для DOS int 13h) читаются программы обслуживания чтения (драйверы DOS), рассматриваемые как последовательность секторов, и фиксируется их целостность, затем, используя файловые операции, читают необходимые для контроля исполняемые модули (командный интерпретатор, драйверы дополнительных устройств и т. д.).
При запуске ИПС таким же образом и в той же последовательности происходит контроль целостности. Этот алгоритм можно распространить на произвольную операционную среду. Для контроля данных на i-м логическом уровне их представления для чтения требуются предварительно проверенные на целостность процедуры (i 1)-го уровня. Самым же первым этапом является контроль целостности программ в ПЗУ (этап 0).
Обратимся теперь к вопросу контроля целостности данных. Предположим, что имеются некоторый файл F последовательность байтов и некоторый алгоритм А, преобразующий файл F в некоторый файл М меньшей длины. Этот алгоритм таков, что при случайном равновероятном выборе двух файлов из множества возможных соответствующие им числа М с высокой вероятностью различны. Тогда проверка целостности данных строится так: рассматриваем файл F, по известному алгоритму А строим К = A(F) и сравниваем М, заранее вычисленное как М = A(F), с К. При совпадении считаем файл неизменным. Алгоритм А называют, как правило, хеш-функцией или реже контрольной суммой, а число М хеш-значением. В данном случае является важным выполнение следующих условий:
1) нахождение другого файла, не равного F, такого, что М = A(G) по известному числу М A(F) должно быть очень трудоемким;
2) число М должно быть недоступно для изменения.
Поясним смысл этих условий. Пусть программа злоумышленника изменила файл F. Тогда, с одной стороны, хеш-значение М для данного файла изменится. Если программе злоумышленника доступно число М, то она может по известному алгоритму А вычислить новое хеш-значение для измененного файла и заместить им исходное. С другой стороны, пусть хеш-значение недоступно, тогда можно попытаться так построить измененный файл, чтобы хеш-значение его не изменилось (принципиальная возможность этого имеется, поскольку отображение, задаваемое алгоритмом хеширования, неоднозначно). Выбор хорошего хеш-алгоритма, так же как и построение качественного шифра, крайне сложная задача.
Контрольные вопросы