Презентация по информационным технологиям на тему Пути и методы защиты информации


Пути и методы защиты информации
в компьютерных системах
1.1 Основные понятия безопасности компьютерных систем
Под безопасностью информации понимается “состояние защищенности информации, обрабатываемой средствами вычислительной техники или автоматизированной системы, от внутренних или внешних угроз”.
Целостность понимается как “способность средств вычислительной техники или автоматизированной системы обеспечивать неизменность вида и качества информации в условиях случайного искажения или угрозы разрушения. Согласно руководящему документу Гостехкомиссии России “Защита от несанкционированного доступа к информации. Термины и определения” угрозы безопасности и целостности состоят в потенциально возможных воздействиях на вычислительную систему (ВС), которые прямо или косвенно могут нанести ущерб безопасности и целостности информации, обрабатываемой системой.
Ущерб целостности информации состоит в ее изменении, приводящем к нарушению ее вида или качества.
Ущерб безопасности подразумевает нарушение состояния защищенности содержащейся в ВС информации путем осуществления несанкционированного доступа (НСД) к объектам ВС.
НСД определяется как “доступ к информации, нарушающий правила разграничения доступа с использованием штатных средств, предоставляемых ВС”. Можно ввести более простое определение НСД: НСД заключается в получении пользователем или программой доступа к объекту, разрешение на который в соответствии с принятой в системе политикой безопасности отсутствует.
Реализация угрозы называется атакой.
Человек, стремящийся реализовать угрозу, называется нарушителем, или злоумышленником.
Существует множество классификаций видов угроз по принципам и характеру их воздействия на систему, по используемым средствам, по целям атаки и т.д. Рассмотрим общую классификацию угроз безопасности ВС по средствам воздействия на ВС. С этой точки зрения все угрозы могут быть отнесены к одному из следующих классов (рис.4):
1. Вмешательство человека в работу ВС. К этому классу относятся организационные средства нарушения безопасности ВС (кража носителей информации, НСД к устройствам хранения и обработки информации, порча оборудования и т.д.) и осуществление нарушителем НСД к программным компонентам ВС (все способы несанкционированного проникновения в ВС, а также способы получения пользователем-нарушителем незаконных прав доступа к компонентам ВС). Меры, противостоящие таким угрозам, носят организационный характер (охрана, режим доступа к устройствам ВС), а также включают в себя совершенствование систем разграничения доступа и системы обнаружения попыток атак (например, попыток подбора паролей).
2. Аппаратно-техническое вмешательство в работу ВС. Имеется в виду нарушение безопасности и целостности информации в ВС с помощью технических средств, например, получение информации по электромагнитному излучению устройств ВС, электромагнитные воздействия на каналы передачи информации и другие методы. Защита от таких угроз, кроме организационных мер, предусматривает соответствующие аппаратные (экранирование излучений аппаратуры, защита каналов передачи информации от прослушивания) и программные меры (шифрация сообщений в каналах связи).
3. Разрушающее воздействие на программные компоненты ВС с помощью программных средств. Такие средства называются разрушающими программными средствами (РПС). К ним относятся компьютерные вирусы, троянские кони (или “закладки”), средства проникновения в удаленные системы с использованием локальных и глобальных сетей. Средства борьбы с подобными атаками состоят из программно и аппаратно реализованных систем защиты.
Чтобы надежно защитить информацию, система защиты должна регулярно обеспечивать защиту:
Системы обработки данных от посторонних лиц.
Системы обработки данных от пользователей.
Пользователей друг от друга.
Каждого пользователя от себя самого.
Систем обработки от самой себя.
Современные программные угрозы информационной безопасности.
Класс РПС составляют компьютерные вирусы, троянские кони (закладки) и средства проникновения в удаленные системы через локальных и глобальных сетей (рис. 5).
В настоящее время эволюция средств РПС от простейших программ, осуществляющих несанкционированный доступ (НСД), к действующим самостоятельно удаленным сетевым агентам, которые представляют собой настоящие средства информационного нападения.
1.2. Вредоносные программы(вирусы)
Суть компьютерного вируса сводится к тому, что программы приобретают свойства, присущие живым организмам, причем самые неотъемлемые — они рождаются, размножаются, умирают. Главное условие существования вирусов — универсальная интерпретация информации в вычислительных системах. Вирус в процессе заражения программы может интерпретировать ее как данные, а в процессе выполнения как исполняемый код. Этот принцип был положен в основу всех современных компьютерных систем, использующих архитектуру фон Неймана.
Дать формальное определение понятию “компьютерный вирус” очень непросто. Традиционное определение, данное Ф. Коэном, “компьютерный вирус — это программа, которая может заражать другие программы, модифицируя их посредством добавления своей, возможно измененной, копии”, ключевым понятием в определении вируса является его способность к саморазмножению, — это единственный критерий, позволяющий отличить программы-вирусы от остальных программ. При этом “копии” вируса действительно могут структурно и функционально отличаться между собой.
История компьютерных вирусов начинается еще с работ теоретика современных компьютеров фон Неймана. Он разрабатывал модели автоматов, способных к самовоспроизведению, и математически доказал возможность существования таких машин. После этого идея саморазмножающихся программ “витала в воздухе” и время от времени находила свою более или менее адекватную реализацию.
С каждым годом число вирусов растет. Сейчас их уже более 7000. Считается признанным, что в последние годы больше всего вирусов создавалось в СССР, а затем в России и других странах СНГ. Но и в других странах, в том числе в США, значителен урон, наносимый вирусами. В США борьба с вирусами ведется на самом высоком уровне. Вскоре после объявления в 1993 году Белым домом о подключении президента Билла Клинтона и вице-президента Альберта Гора к сети Internet администрация поддержала идею проведения Национального дня борьбы с компьютерными вирусами (National Computer Virus Awareness Day). Такой день отмечается теперь ежегодно. Национальной ассоциацией по компьютерной защите США (NCSA) и компанией Dataquest опубликованы следующие данные по результатам исследований” вирусной проблемы(данные 1993 г.):
предполагаемые потери американского бизнеса от компьютерных вирусов в 1994 году составят около 2 млрд. долларов;
идентифицировано более 2100 компьютерных вирусов;
каждый месяц появляется более 50 новых вирусов;
в среднем от каждой вирусной атаки страдает 142 персональных компьютера, на ее отражение в среднем уходит 2,4 дня;
для компенсации ущерба в 1/4 случаев требовалось более 5 дней.
Начиная с конца 1990 г., появилась новая тенденция, получившая название “экспоненциальный вирусный взрыв”. Количество новых вирусов, обнаруживаемых в месяц, стало исчисляться десятками, а в дальнейшем и сотнями. Поначалу эпицентром этого взрыва была Болгария, затем он переместился в Россию. После 1994 г. темп роста вирусов пошел на убыль, хотя их общее количество продолжает увеличиваться. Это связано с тем, что ОС MS DOS, которая и дает 99% существующих компьютерных вирусов, постепенно сдает свои лидирующие позиции как операционная система для персональных компьютеров, уступая их Windows, OS/2, UNIX и т.п. Данные о динамике роста известных вирусов по годам приведены на рис 6.
Современная ситуация характеризуется двумя моментами: появлением полиморфных вирусов и генераторов (конструкторов) вирусов.
Полиморфные вирусы характеризуются тем, что для их обнаружения неприменимы обычные алгоритмы поиска, так как каждая новая копия вируса не имеет со своим родителем ничего общего. Это достигается шифровкой тела самого вируса и расшифровщиком, не имеющим ни одного постоянного бита в каждом своем экземпляре. На сегодняшний день известно около десятка алгоритмов (вирусов намного больше!) генерации таких расшифровщиков. Появление генераторов вирусов позволяет, задав программе-генератору в виде входных параметров способ распространения, тип, вызываемые эффекты, причиняемый вред, получить ассемблерный текст нового вируса. На сегодняшний 430974521399500день известно около пяти таких генераторов вирусов.
Кроме того, вирусы постоянно расширяют свою “среду обитания” и реализуют принципиально новые алгоритмы внедрения и поведения. Так, в 1995 году появились представители, опровергающие ключевые принципы антивирусной защиты — то, что компьютер, загруженный с заведомо чистой системной дискеты, не может содержать вирус; и то, что вирусы не заражают файлы с данными.
Первым появился вирус, который таким образом корректирует конфигурацию компьютера, что при попытке загрузки с дискеты он все равно загружается с зараженного жесткого диска, и вирус активизируется в системе. Другой вирус, появившийся в середине августа 1995 г. в США и ряде стран Западной Европы, использует современные технологии представления информации в виде конгломерата данных и программ. Он заражает документы, подготовленные в системе MS Word for Windows 6.0 — файлы типа .DOC. Так как такие файлы ежедневно десятками тысяч циркулируют в локальных и глобальных сетях, эта способность вируса обеспечила его мгновенное распространение по всему свету в течение нескольких дней и 25 августа он был обнаружен в Москве. Вирус написан на макроязыке пакета Word. Он переносит себя в область глобальных макросов, переопределяет макрос FileSaveAs и копирует себя в каждый файл, сохраняемый с помощью команды Save As. При этом он переводит файл из категории “документ” в категорию “шаблон”, что делает невозможным его дальнейшее редактирование. Обнаружить наличие этого вируса можно по появлению в файле winword6.ini строки ww6i=1.
Троянский конь — это программа, содержащая в себе некоторую разрушающую функцию, которая активизируется при наступлении некоторого условия срабатывания. Обычно такие программы маскируются под какие-нибудь полезные утилиты. Вирусы могут нести в себе троянских коней или “троянизировать” другие программы — вносить в них разрушающие функции.
Троянские кони представляют собой программы, реализующие помимо функций, описанных в документации, и некоторые другие функции, связанные с нарушением безопасности и деструктивными действиями. Отмечены случаи создания таких программ с целью облегчения распространения вирусов. Списки таких программ широко публикуются в зарубежной печати. Обычно они маскируются под игровые или развлекательные программы и наносят вред под красивые картинки или музыку.
Программные закладки также содержат некоторую функцию, наносящую ущерб ВС, но эта функция, наоборот, старается быть как можно незаметнее, т.к. чем дольше программа не будет вызывать подозрений, тем дольше закладка сможет работать.
В качестве примера приведем возможные деструктивные функции, реализуемые троянскими конями и программными закладками:
1. Уничтожение информации. Конкретный выбор объектов и способов уничтожения зависит только от фантазии автора такой программы и возможностей ОС. Эта функция является общей для троянских коней и закладок. 2. Перехват и передача информации. В качестве примера можно привести реализацию закладки для выделения паролей, набираемых на клавиатуре, при работе утилиты DISKREET пакета Norton Utilities ver. 6.0. 3. Целенаправленная модификация кода программы, интересующей нарушителя. Как правило, это программы, реализующие функции безопасности и защиты. Примером реализации этого случая является закладка, маскируемая под прикладную программу—“ускоритель” типа “Turbo Krypton”. Эта закладка заменяет алгоритм шифрования ГОСТ 28147-89, реализуемой платой “Krypton-3” демонстрационный вариант) другим, простым и легко дешифруемым алгоритмом.Если вирусы и троянские кони наносят ущерб посредством лавинообразного саморазмножения или явного разрушения, то основная функция РПС, действующих в компьютерных сетях, — взлом атакуемой системы, т.е. преодоление защиты с целью нарушения безопасности и целостности.В более 80% компьютерных преступлений, расследуемых ФБР, “взломщики” проникают в атакуемую систему через глобальную сеть Internet. Когда такая попытка удается, будущее компании, на создание которой ушли годы, может быть поставлено под угрозу за какие-то секунды.
Этот процесс может быть автоматизирован с помощью специального вида РПС, называемого сетевой червь.
Червями называют вирусы, которые распространяются по глобальным сетям, поражая целые системы, а не отдельные программы. Это самый опасный вид вирусов, так как объектами нападения в этом случае становятся информационные системы государственного масштаба. С появлением глобальной сети Internet этот вид нарушения безопасности представляет наибольшую угрозу, т. к. ему в любой момент может подвергнуться любой из 30 миллионов компьютеров, подключенных к этой сети.
Наиболее известен вызвавший всемирную сенсацию и привлекший внимание к вирусной проблеме инцидент с вирусом-червем в глобальной сети Internet. Второго ноября 1988 года студент Корнелловского университета Роберт Моррис (Robert Morris) запустил на компьютере Массачусетского технологического института программу-червь, которая передавала свой код с машины на машину, используя ошибки в системе UNIX на компьютерах VAX и Sun. В течение 6 часов были поражены 6000 компьютеров, в том числе Станфордского университета, Массачусетского технологического института, Университета Беркли и многих других. Кроме того, были поражены компьютеры Исследовательского института НАСА и Национальной лаборатории Лоуренса в Ливерморе — объекты, на которых проводятся самые секретные стратегические исследования и разработки. Червь представлял собой программу из 4000 строк на языке “С” и входном языке командного интерпретатора системы UNIX. Следует отметить, что вирус только распространялся по сети и не совершал каких-либо разрушающих действий. Однако это стало ясно только на этапе анализа его кода, а пока вирус распространялся, в вычислительных центрах царила настоящая паника. Тысячи компьютеров были остановлены, ущерб составил многие миллионы долларов.
Обычно целью взлома сетей является приобретение нелегальных прав на пользование ресурсами системы. Таким образом, если раньше РПС пассивно вносился в систему, и для его инициализации необходимы были действия пользователя, то сейчас РПС сам проникает в систему и само определяет время и степень своей активности.
Иногда взлому системы предшествует “разведка” — исследование средств защиты атакуемой системы с целью обнаружения слабых мест и выбора оптимального метода атаки. Это могут быть как тривиальные попытки подбора паролей (кстати, 80% атак осуществляются именно этим способом) так и попытки проанализировать имеющееся на атакуемой машине программное обеспечение на предмет наличия в нем “дыр” или “люков”, позволяющих злоумышленнику проникнуть в систему.
Таким образом, возникает специфический вид РПС — программы, осуществляющие проникновение в удаленную систему. Это дает возможность злоумышленнику лично, или с помощью других программ, осуществлять НСД к ресурсам этой системы, нарушать ее безопасность и целостность и т.д.
1.3 . Способы внедрения вредоносных программ (вирусов)
Рассмотрим два варианта внедрения (COM)- вируса.
Вариант первый. Вирус переписывает начало программы в конец файла, чтобы освободить место для себя. После этого тело вируса записывается в начало файла, а небольшая его часть, обеспечивающая перенос вытесненного фрагмента программы, на прежнее место – в конец. При восстановлении первоначального вида программы тело вируса будет затерто, поэтому код вируса, восстанавливающий программу, должен находиться в безопасном месте, отдельно от основного тела вируса. Этот способ внедрения изображен на рис. 1.1.
388620217170 ПРОГРАММА
Начало Основная часть
Свободное ПРОГРАММА ПРОГРАММА место Основная часть Начало
ВИРУСПРОГРАММАПРОГРАММА ВИРУС
Основная частьНачало Конец
00 ПРОГРАММА
Начало Основная часть
Свободное ПРОГРАММА ПРОГРАММА место Основная часть Начало
ВИРУСПРОГРАММАПРОГРАММА ВИРУС
Основная частьНачало Конец

Рис. 1.1 Способ внедрения вируса
Начало программы переписывается в конец файла, освобождая место для вируса. Тело вируса записывается в начало файла, а часть вируса обеспечивающая восстановление программы – в конец. При загрузке зараженного таким способом файла управление получит вирус (так как он находится в начале файла и будет загружен с адреса 100h). После окончания работы вирус передает управление коду, переносящему вытесненную часть программы на прежнее место. После восстановления (в памяти, не в файле) первоначального вида программы, она запускается. Схема работы вируса изображена на рис. 1.2.
Второй вариант отличается от первого тем, что вирус, освобождая для себя место, сдвигает все тело программы, а не переносит ее часть в конец файла. Этот способ внедрения изображен на рис. 1.3. После запуска зараженной программы, как и в предыдущем случае, управление получает вирус.Отработав, вирус передает управление своему коду в конце программы.
11430072390ВИРУСПРОГРАММАПРОГРАММА ВИРУС
Основная частьНачало Конец
ВИРУСПРОГРАММАПРОГРАММА ВИРУС
Основная частьНачало Конец
ПРОГРАММА ВИРУС
Начало Основная часть Конец
00ВИРУСПРОГРАММАПРОГРАММА ВИРУС
Основная частьНачало Конец
ВИРУСПРОГРАММАПРОГРАММА ВИРУС
Основная частьНачало Конец
ПРОГРАММА ВИРУС
Начало Основная часть Конец

Рис. 1.2 Схема работы вируса
1 Восстанавливается первоначальный вид программы
2 После восстановления вирус запускает программу
Дальнейшая работа вируса отличается только тем, что часть вируса, восстанавливающая первоначальный вид программы, переносит к адресу 100h все тело программы, а не только вытесненную часть. Схема работы вируса, заражающего файл таким образом, приведена на рис 1.4.
Тело программы сдвигается ближе к концу файла, освобождая место для
вируса
160020102870ПРОГРАММА
СвободноеПРОГРАММА
место
ВИРУСПРОГРАММАВИРУС
Конец
00ПРОГРАММА
СвободноеПРОГРАММА
место
ВИРУСПРОГРАММАВИРУС
Конец

рис.1.3 Способ внедрения вируса
Тело вируса записывается в начало файла, а часть вируса, обеспечивающая восстановление программы – в конец
01146810ВИРУСПРОГРАММАВИРУС
Конец
00ВИРУСПРОГРАММАВИРУС
Конец
-2286001832610ПРОГРАММАВИРУС
Конец
00ПРОГРАММАВИРУС
Конец
0689610000232410ВИРУСПРОГРАММАВИРУС
Конец
00ВИРУСПРОГРАММАВИРУС
Конец
05016500
Рис 1.4 Схема работы вируса, заражающего файл
EXE – вирусы
EXE – вирусы условно можно разделить на группы, используя в качестве признака для деления особенности алгоритма.Вирусы, замещающие программный код (Overwrite).
Такие вирусы уже стали раритетом. Их главный недостаток – слишком грубая работа. Инфицированные программы не исполняются, так как вирус записывается поверх программного кода, не сохраняя его. При запуске вирус ищет очередную жертву (или жертвы), открывает найденный файл для редактирования и записывает свое тело в начало программы, не сохраняя оригинальный код. Инфицированные этими вирусами программы лечению не подлежат.
Вирусы – спутники (Companion).
Эти вирусы получили свое название из-за алгоритма размножения: к каждому инфицированному файлу создается файл – спутник. Рассмотрим более подробно два типа вируса этой группы:
Вирусы первого типа размножаются следующим образом. Для каждого инфицируемого EXE – файла в том же каталоге создается файл с вирусным кодом, имеющим такое же имя, что и EXE – файл, но с расширением СОМ. Вирус активизируется, если при запуске программы в командной строке указано только имя исполняемого файла. Дело в том, что, если не указано расширение файла, DOS сначала ищет в текущем каталоге файл с заданным именем и расширением СОМ. Если СОМ – файл с таким именем не найден, ведется поиск одноименного ЕХЕ – файла. Если не найден и ЕХЕ – файл, DOS попробует обнаружить и ВАТ (пакетный) файл. В случае отсутствия в текущем каталоге исполняемого файла с указанным именем поиск ведется во всех каталогах, доступных по переменной РАТН. Другими словами, когда пользователь хочет запустить программу и набирает в командной строке только ее имя (в основном так все и делают ), первым управление получает вирус, код которого находится в СОМ – файле. Он создает СОМ – файл еще к одному или нескольким ЕХЕ – файлам (распространяется), а затем исполняет ЕХЕ – файл с указанным в командной строке именем. Пользователь же думает, что работает только запущенная ЕХЕ – программа. Вирус – спутник обезвредить довольно просто – достаточно удалить СОМ – файл.
Вирусы второго типа действуют более тонко. Имя инфицируемого ЕХЕ – файла остается прежним, а расширение заменяется каким – либо другим, отличным от исполняемого (СОМ, ЕХЕ и ВАТ). Например файл может пллучить расширение DAT (файл данных) или OVL (программный оверлей). Затем на место ЕХЕ – файла копируется вирусный код. При запуске такой инфицированной программы управление получает вирусный код, находящийся в ЕХЕ – файле. Инфицировав еще один или несколько ЕХЕ – файлов таким же образом, вирус возвращает оригинальному файлу исполняемое расширение (но не ЕХЕ, а СОМ, посколько ЕХЕ – файл стаким именем занят вирусом), после чего исполняет его. Когда работа инфицированной программы закончена, ее запускаемому файлу возвращается расширение неисполняемого. Лечение файлов, зараженных вирусом этого типа, может быть затруднено, если вирус – спутник шифрует часть или все тело инфицируемого файла, а перед исполнением его расшифровывает.
Вирусы, внедряющиеся в программу (Parasitic)
Вирусы этого вида самые незаметные: их код записывается в инфицируемую программу, что существенно затрудняет лечение зараженных файлов. Рассмотрим методы внедрения ЕХЕ - вирусов в ЕХЕ - файл.
Способы заражения ЕХЕ – файлов
Самый распространенный способ заражения ЕХЕ – файлов такой: в конец файла дописывается тело вируса, а заголовок корректируется (с сохранением оригинального) так, чтобы при запуске инфицированного файла управление получал вирус. Похоже на заражение СОМ – файлов, но вместо задания в коде перехода в начало вируса корректируется собственно адрес точки запуска программы. После окончания работы вирус берет из сохраненного заголовка оригинальный адрес запуска программы, прибавляет к его сегментной компоненте значение регистра DS или ES (полученное при старте вируса) и передает управление на полученный адрес.
Следующий способ – внедрение вируса в начало файла со сдвигом кода программы. Механизм заражения такой: тело инфицируемой программы считывается в память, на ее место записывается вирусный код, а после него – код инфицируемой программы. Таким образом, код программы как бы «сдвигается» в файле на длину кода вируса. Отсюда и название способа – «способ сдвига». При запуске инфицированного файла вирус заражает еще один или несколько файлов. После этого он считывает в память код программы, записывает его в специально созданный на диске временный файл с расширением исполняемого файла (СОМ или ЕХЕ), и затем исполняет этот файл. Когда программа закончила работу, временный файл удаляется. Если при создании вируса не применялось дополнительных приемов защиты, то вылечить инфицированный файл очень просто – достаточно удалить код вируса в начале файла, и программа снова будет работоспособной. Недостаток этого метода в том, что приходиться считывать в память весь код инфицируемой программы (а бывают экземпляры размером больше 1 Мбайт).
Следующий способ заражения файлов – метод переноса – по всей видимости, является самым совершенным из всех перечисленных. Вирус размножается следующим образом: при запуске инфицируемой программы тело вируса из нее считывается в память. Затем ведется поиск неинфицированной программы. В память считывается ее начало, по длине равную телу вируса. На это место записывается тело вируса. Начало программы из памяти дописывается в конец файла. Отсюда название метода – «метод переноса». После того, как вирус инфицировал один или несколько файлов, он приступает к исполнению программы, из которой запустился. Для этого он считывает начало инфицированной программы, сохраненное в конце файла, и записывает его в начало файла, восстанавливая работоспособность программы. Затем вирус удаляет код начала программы из конца файла, восстанавливая оригинальную длину файла, и исполняет программу. После завершения программы вирус вновь записывает свой код в начало файла, а оригинальное начало программы - в конец. Этим методом могут быть инфицированы даже антивирусы, которые проверяют свой код на целостность, так как запускаемая вирусом программа имеет в точности такой же код, как и до инфицирования.
Вирусы под Windows 9x.
Формат Portable Executable используется Win 32, Windows NT , Windows 95, Windows 98, что делает его очень популярным, и в будущем, возможно он станет доминирующим форматом ЕХЕ. Этот формат значительно отличается от NE – executable, используемого в Windows 3.11.
Вызов Windows API.
Обычные приложения вызывают Windows API (Application Program Interface) используя таблицу импортируемых имен. Когда приложение загружено, данные, необходимые для вызова API, заносятся в эту таблицу. В Windows 9x, благодаря предусмотрительности фирмы – производителя Microsoft, модифицировать таблицу импортируемых имен невозможно. Это проблема решается непосредственным вызовом KERNEL32. То есть необходимо полностью игнорировать структуру вызова и перейти непосредственно на точку входа DLL.
Чтобы получить описатель (Handle) DLL/ЕХЕ, можно использовать вызов АРI GetModuleHandle или другие функции для получения точек входа модуля, включая функцию получения адреса API GetProcAddress.
Как вызывать API, имея возможность вызывать его и в то же время такой возможности не имея? Ответ: вызывать API, расположение которого в памяти известно – это API в файле KERNEL32.DLL, он находится по постоянному адресу.
Вызов API приложениями выглядит приблизительно так:
сall API_FUNCTION_NAME
например:
call CreateFileAПосле компиляции этот вызов выглядит так:
db 9Ah; инструкция call
dd ????;смещение в таблице переходов
Код в таблице переходов похож на такой:
jmp far [offset into import table]
Смещение в таблице импортируемых имен содержит адрес диспетчера для данной функции API. Этот адрес можно получить с помощью GetProcAddress API. Диспетчер функций выглядит так:
push function value
call Module EntrypointЗная точки входа, можно вызывать их напрямую, минуя таблицу этого модуля. Поэтому можно заменить вызовы KERNEL32.DLL в его стандартной точке на вызовы непосредственно функций. Просто сохраняем в стеке значение функции и вызываем точку входа в модуль.
Модуль KERNEL32.DLL располагается в памяти статически – именно так и предполагалось. Но конкретное место его расположения в разных версиях Windows 9x отличается. Это было проверено. Оказалось, что одна функция (получение времени/даты) отличается номером. Для компенсации этих различий добавлена проверка двух различных мест на наличие KERNEL32.DLL. Но если KERNEL32.DLL все-таки не найден, вирус возвращает управление программе-носителю.
Адреса и номера функции.
Для June Test Release KERNEL32.DLL находится по адресу 0BFF93B95h, для August Release – по адресу 0BFF93C1Dh. Можно найти другие значения функции, используя 32-битный отладчик. В таблице 1 приведены адреса функций, которые нужны для работы вируса.
Таблица 1.1. Адреса некоторых функций KERNEL32.DLL
Функция Адрес в June Test Release Адрес в August Test Release
GetCurrentDirBFF77744h BFF77744h
SetCurrentDirBFF7771Dh BFF7771Dh
GetTimeBFF9D0B6h BFF9D14Eh
MessageBoxBFF638D9h BFF638D9h
FindFileBFF77893h BFF77893h
FindNextBFF778CBh BFF778CBh
CreateFileBFF77817h BFF77817h
SetFilePointerBFF76FA0h BFF76FA0h
ReadFileBFF75806h BFF75806h
WriteFileBFF7580Dh BFF7580Dh
CloseFileBFF7BC72h BFF7BC72h
Соглашения о вызовах.
Windows 9x написан на языках С++ (в основном) и Assembler. И, хотя соглашения о вызовах просты для применения, Microsoft их не использует. Все АРI под Windows 9x используют Pascal Calling Convention. Пример – АРI, описанный в файлах справки Visual C++:
FARPROCGetProcAddres (
HMODULEhModule,// описатель DLL-модуля
LPCSTRlpszProc// имя функции);
На первый взгляд кажется, что достаточно лишь сохранить в стеке описатель DLL-модуля (он стоит перед указателем на имя функции) и вызвать API. Но это не так. Параметры, согласно Pascal Calling Convention, должны быть сохранены в стеке в обратном порядке:
Push offset lpszProcPushdword ptr [hModule]
CallGetProcAddressИспользуя 32-битный отладчик, можно оттрасировать вызов и найти вызов KERNEL32.DLL для каждого конкретного случая. Это позволит получить номер функции и обойтись без необходимой для вызова таблицы импортируемых имен.
Заражение файлов формата PE – execuatable.
Определение положения начала РЕ – заголовка происходит аналогично поиску начала NE – заголовка. Если смещение таблицы настройки адресов (поле 18h) в заголовке ЕХЕ – файла 40h или больше, то по смещению 3Ch находится смещение PE – execuatable заголовка. Сигнатура PE – execuatable («РЕ») находится, как и у NE – execuatable ЕХЕ – файла, в начале нового заголовка.
Внутри PE – заголовка находится таблица объектов. Ее формат наиболее важен по сравнению с прочими. Для добавления вирусного кода в носитель и перехвата вирусом управления необходимо добавить элемент в таблицу объектов.
Основные действия заражения PE – execuatable файла:
Найти смещение заголовка PE – execuatable в файле.
Считать достаточное количество информации из заголовка для вычисления его полного размера.
Считать весь PE – заголовок и таблицу объектов.
Добавить новый объект в таблицу объектов.
Установить точку входа RVA на новый объект.
Дописать вирус к файлу по вычисленному физическому смещению.
Записать измененный РЕ – заголовок в файл.
Для определения расположения таблицы объектов следует воспользоваться значением переменной «HeaderSize» (не путать с «NT headersize»), которая содержит совместный размер заголовков DOS, PE и таблицы объектов.
Для чтения таблицы объектов необходимо считать HeaderSize байт от начала файла.
Таблица объектов расположена непосредственно за NT – заголовком. Значение «NTheadersize» показывает количество байт, следующих за полем «flags». Итак, для определения смещения таблицы объектов нужно получить NТheadersize и добавить размер поля флагов (24).
Добавление объекта: получив количество объектов, умножить его на 40 (размер элемента таблицы объектов). Таким образом определяется смещение, по которому будет расположен вирус.
Данные для элемента таблицы объектов должны быть вычислены с использованием информации в предыдущем элементе (элементе носителя).
RVA=((prev RVA+ prev Virtual Size)/OBJ Alignment+1)
*OBJ Alignment
Virtual Size=((size of virus+buffer any space)/OBJ Alignment+1)
*OBJ Alignment
Physical Size=(size of virus/File Alignment+1)*File Alignment
Physical Offset=prev Physical Offset+prev Physical Size
Object Flags=db 40h,0,0,C0hEntrypoint RVA=RVA
Теперь необходимо увеличить на единицу поле «количество объектов» и записать код вируса по вычисленному «физическому смещению» в размере физического размера байт.