Добавлен: 29.10.2018
Просмотров: 48110
Скачиваний: 190
9.10. Средства защиты
761
инвертировать. Затем список контрольных сумм для всех значимых файлов в каталоге
записывается в файл
checksum
в этом же каталоге. При следующем запуске она заново
вычисляет все контрольные суммы и смотрит, соответствуют ли они тем, которые со-
хранены в файле
checksum
. Зараженный файл будет тут же обнаружен.
Проблема в том, что Вирджил тоже не собирается сидеть сложа руки. Он может создать
вирус, удаляющий все файлы
checksum
. Хуже того, он может создать вирус, подсчиты-
вающий контрольные суммы зараженных файлов и заменяющий ими старые записи
в файле
checksum
. Для защиты от такого поведения антивирусная программа может
попытаться спрятать файл
checksum
, но это, вероятнее всего, не сработает, поскольку
Вирджил, перед тем как создать вирус, может тщательно изучить устройство антиви-
русной программы. Будет разумнее снабдить файл цифровой подписью, чтобы проще
было обнаружить вмешательство. В идеале цифровая подпись должна использовать
смарт-карту с отдельно хранящимся ключом, до которого программы не могут добраться.
Программы, контролирующие поведение
Третья стратегия, используемая антивирусным программным обеспечением, — это
проверка поведения
(behavioral checking). При таком подходе антивирусная програм-
ма присутствует в памяти при работе компьютера и самостоятельно отлавливает все
системные вызовы. Идея состоит в том, что таким образом она может отслеживать все
действия и пытаться отловить все, что выглядит подозрительно. Например, никакая
обычная программа не станет пытаться переписать загрузочный сектор, поэтому по-
пытка подобного действия практически всегда имеет отношение к вирусу. Точно так же
вызывает серьезное подозрение попытка внести изменения во флеш-память.
Но существует ряд и не столь очевидных случаев. Например, переписывание исполняе-
мого файла — действие весьма своеобразное, если только его не совершает компилятор.
Если антивирусная программа заметит подобную запись, она выдаст предупреждение
в надежде на то, что пользователь знает, есть ли смысл в подобном переписывании
исполняемого файла в контексте его текущей работы. Точно так же программу Word,
переписывающую файл с расширением
.docx
и помещающую в него полный макросов
новый документ, не обязательно считать работой вируса. В Windows программы могут
отделяться от своих исполняемых файлов и становиться резидентными, используя спе-
циальный системный вызов. Опять-таки это может быть вполне законным действием,
но предупреждение все же, наверное, стоит выдать.
Вирусы не должны пассивно ждать, пока антивирусная программа с ними расправится,
уподобляясь скоту, которого ведут на убой. Они могут активно сопротивляться. Осо-
бенно захватывающие сражения могут разворачиваться, если в памяти одной и той же
машины одновременно находятся резидентный вирус и резидентная антивирусная
программа. Много лет назад существовала игра под названием Core Wars, в которой
два программиста мерились силами друг с другом, запуская программу в пустующее
адресное пространство. Программы поочередно исследовали память, а целью игры
было найти и уничтожить противника раньше, чем он уничтожит тебя. Конфронтация
«вирус — антивирус» чем-то похожа на эту игру, только вот полем битвы выступает
машина какого-нибудь бедного пользователя, который совершенно не хотел затевать
это сражение. Хуже того, у вируса есть преимущество, потому что его создатель может
почерпнуть массу информации об антивирусной программе, просто купив ее копию.
Разумеется, после выпуска вируса антивирусная команда может изменить свою про-
грамму, заставляя Вирджила покупать новую копию.
762
Глава 9. Безопасность
Предотвращение проникновения вирусов
У каждой поучительной истории должна быть мораль. У этой истории она звучит так:
«Береженого бог бережет».
Начнем с того, что избежать заражения вирусами намного легче, чем пытаться их отсле-
дить, когда они уже заразили компьютер. Далее будут не только даны рекомендации для
индивидуальных пользователей, но и упомянуты некоторые вещи, которые в целом
вполне под силу промышленности, чтобы существенно снизить остроту проблемы.
Что могут сделать пользователи, чтобы избежать заражения вирусом? Во-первых, вы-
брать операционную систему, предлагающую высокий уровень безопасности, с четкой
границей между режимом ядра и режимом пользователя и отдельными регистрацион-
ными именами и паролями для каждого пользователя и системного администратора.
При таких условиях каким-то образом проникший вирус не сможет заразить системные
двоичные файлы. Кроме того, нужно своевременно устанавливать исправления систе-
мы безопасности от производителя.
Во-вторых, устанавливать только программы в фирменной упаковке, приобретенные
у надежного производителя. Это не дает полной гарантии, поскольку бывали случаи,
когда недовольные чем-то работники подсовывали вирусы в коммерческий про-
граммный продукт, но все же очень помогает уберечься от вирусов. Загрузка программ
с любительских веб-сайтов и электронных досок объявлений, предлагающих условия
слишком хорошие, чтобы быть правдой, — очень рискованное занятие.
В-третьих, приобрести пакет хорошего антивирусного программного обеспечения
и использовать его согласно предписаниям. Регулярно обновлять его с веб-сайта про-
изводителя.
В-четвертых, не щелкать на URL-адресах в сообщениях и на приложениях к электрон-
ной почте и попросить, чтобы они вам их не присылали. Электронная почта, прислан-
ная в виде обычного ASCII-текста, никогда не представляет опасности, но приложения
при их открытии могут запустить вирус.
В-пятых, следует регулярно делать резервные копии ключевых файлов на внешний
носитель, например на USB-накопитель или DVD. Нужно сохранять несколько по-
следовательных копий каждого файла на ряде резервных носителей. Тогда, если будет
обнаружен вирус, у вас будет шанс восстановить файлы в том состоянии, в котором
они существовали до заражения. Восстановление вчерашнего зараженного файла не
поможет, а вот восстановление версии недельной давности вполне может помочь.
И наконец, в-шестых, боритесь с искушением загрузить из неизвестного источника
и запустить новую соблазнительную бесплатную программу. Возможно, она поэтому
и бесплатна, что ее создатель захотел присоединить ваш компьютер к своей армии зом-
би-машин. Хотя если у вас есть программа виртуальной машины, то запуск незнакомой
программы внутри виртуальной машины опасности не представляет.
Промышленность также должна серьезно относиться к угрозе вирусного заражения
и искоренить некоторые опасные привычки. Во-первых, следует упростить операци-
онные системы. Чем больше в них лишнего, тем больше прорех в безопасности. Это
непреложная истина.
Во-вторых, следует забыть об активном содержимом. Отключите JavaScript. С точки
зрения безопасности он представляет собой настоящую катастрофу. Просмотр кем-то
присланного документа не должен требовать запуска присланной вместе с ним про-
9.10. Средства защиты
763
граммы. Например, в JPEG-файлах не содержатся программы, поэтому в них не может
быть и вирусов. Подобным образом должны создаваться все документы.
В-третьих, должен существовать способ избирательной установки защиты от записи на
определенный цилиндр диска, чтобы предотвратить заражение вирусом находящихся
на нем программ. Эта защита может быть реализована за счет размещения битового
массива, в котором перечисляются защищенные от записи цилиндры, внутри контрол-
лера. Возможность внесения изменений в этот битовый массив должна появляться
только в том случае, если пользователь щелкнул механическим переключателем на
передней панели компьютера.
В-четвертых, применение флеш-памяти для BIOS — идея неплохая, но доступ к из-
менению ее содержимого должен появляться только при использовании внешнего
переключателя, что может произойти, только если пользователь преднамеренно про-
водит обновление BIOS. Конечно, все это не будет воспринято всерьез, пока вирусы
не нанесут по-настоящему большой урон. Например, удар по финансовому миру,
обнуляющий все банковские счета. Разумеется, тогда уже будет слишком поздно что-
либо предпринимать.
9.10.3. Электронная подпись двоичных программ
Совершенно иной способ уберечься от вредоносных программ (вспомним понятие
глубоко эшелонированной обороны) заключается в запуске только немодифицирован-
ных программ от надежных поставщиков программного продукта. И тут же возникает
вопрос: а как пользователь узнает о том, что программное обеспечение поступило от
заявленного поставщика и что с момента его выхода из производственного помещения
в него не были внесены изменения? Этот вопрос приобретает особую важность при за-
грузке программ, поступающих из интернет-магазинов с неизвестной репутацией или
при загрузке элементов управления activeX с веб-сайтов. Если элементы управления
activeX поступили от хорошо известной компании по разработке программного обеспе-
чения, в них вряд ли будут находиться, к примеру, троянские кони. Но каким образом
пользователь сможет получить гарантии?
Один из способов, получивших широкое распространение, — использование цифровых
подписей, рассмотренных в соответствующем разделе данной главы. Если пользователь
запускает только те программы, плагины, драйверы, элементы управления activeX и дру-
гие виды программного обеспечения, которые были созданы и подписаны надежными
источниками, то шансы на возникновение каких-нибудь неприятностей ничтожно малы.
Но придется смириться с тем, что новая бесплатная, изящная, привлекательная игра
от Snarky Software окажется слишком хорошей, чтобы быть правдой, и не пройдет тест
электронной подписи, поскольку вам не известно, кто за ней стоит.
Электронная подпись кода основана на шифровании с открытым ключом. Постав-
щик программного обеспечения генерирует пару из открытого и закрытого ключа,
делая первый из них общедоступным, а второй — особо охраняемым. Чтобы поста-
вить электронную подпись на фрагменте программы, поставщик сначала вычисляет
хэш-функцию кода, чтобы получить 160- или 256-разрядное число в зависимости от
того, какая именно хэш-функция используется, SHA-1 или SHA-256. Затем он ставит
подпись на значение хэш-функции, шифруя его своим закрытым ключом (на самом
деле дешифруя его в соответствии с записью, показанной на рис. 9.13). Эта сигнатура
следует вместе с программным обеспечением в пункт назначения.
764
Глава 9. Безопасность
Когда пользователь получает программное обеспечение, к нему применяется хэш-
функция, и результат сохраняется. Затем с использованием открытого ключа по-
ставщика расшифровывается сопроводительная сигнатура, и сравнивается то, что
поставщик заявил в качестве хэш-функции, с тем, что только что было самостоятельно
вычислено. Если результаты сходятся, код принимается как подлинный. В противном
случае он отклоняется. Задействованная здесь математика чрезвычайно затрудняет
любое вмешательство в программное обеспечение, после которого его хэш-функция
может совпасть с хэш-функцией, полученной при расшифровке подлинной подписи.
Точно так же трудно сгенерировать новую поддельную сигнатуру, которая приводила
бы к соответствию, не имея закрытого ключа. Алгоритм работы цифровой подписи
показан на рис. 9.30.
Рис. 9.30. Порядок использования цифровой подписи
Веб-страницы могут содержать код, к примеру элементы управления activeX, а также
код на различных языках сценариев. Часто на все это ставятся цифровые подписи,
и браузер автоматически проверяет сигнатуру. Разумеется, для ее проверки ему необхо-
дим открытый ключ поставщика программы, который обычно сопровождает код наряду
с сертификатом, подписанным каким-нибудь центром сертификации, гарантирующим
подлинность открытого ключа. Если у браузера уже есть сохраненный открытый ключ
центра сертификации, то он может самостоятельно проверить сертификат. Если серти-
фикат подписан не известным браузеру центром сертификации, он выведет диалоговое
окно, спрашивающее, принимать сертификат или нет.
9.10.4. Тюремное заключение
Поговорка гласит: «Доверяй, но проверяй». Понятно, что теперь мы можем отнести
эту мысль и кпрограммному обеспечению. Хотя какая-то часть программного обеспе-
чения снабжена цифровой подписью, все же неплохо было бы проверить программу
на правильное поведение, поскольку цифровая подпись подтверждает лишь источник
ее поступления, а не корректность работы. Техника подобной проверки называется
тюремным заключением
(jailing) и показана на рис. 9.31.
9.10. Средства защиты
765
Рис. 9.31. Действие тюремного заключения
Только что приобретенная программа запускается как процесс, имеющий на рисунке
метку «Узник». В качестве «Тюремщика» выступает надежный (системный) процесс,
который следит за поведением узника. Когда процесс-узник совершает системный
вызов, то вместо выполнения системного вызова тюремщику передается управление
(посредством системного прерывания), а также номер системного вызова и переданные
ему параметры. Затем тюремщик принимает решение о том, может ли быть разрешен
системный вызов. Если, к примеру, процесс-узник пытается открыть сетевое подклю-
чение к удаленному хосту, не известному тюремщику, вызов может быть отклонен,
а узник уничтожен. Если системный вызов вполне приемлем, тюремщик информирует
ядро, которое затем выполняет этот вызов. Таким образом неверное поведение может
быть перехвачено еще до нанесения вреда.
Существуют различные реализации тюремного заключения. Реализация, работающая
почти на любой UNIX-системе без модификации ядра, описана ван Нордентом (Van’t
Noordende et al., 2007). Эта схема использует обычные средства отладки UNIX, где в ка-
честве тюремщика выступает отладчик, а в качестве узника — отлаживаемая программа.
При таких условиях отладчик может предписать ядру осуществление инкапсуляции
отлаживаемой программы и передачу всех его системных вызовов ему на проверку.
9.10.5. Обнаружение проникновения на основе модели
Еще один подход к защите машины заключается в установке системы обнаружения
проникновения
(Intrusion Detection System (IDS)). Существуют две основные разно-
видности систем IDS, одна из которых сконцентрирована на проверке входящих сете-
вых пакетов, а вторая — на поиске аномалий, относящихся к центральному процессору.
Ранее при рассмотрении брандмауэров сетевые IDS уже коротко упоминались, а теперь
скажем несколько слов о централизованных системах IDS. Ограничения, предъявля-
емые к объему книги, удерживают нас от обследования множества разновидностей
централизованных IDS. Поэтому кратко рассмотрим одну из разновидностей, чтобы
дать представление о том, как они работают. Эта разновидность называется статиче-
ским обнаружением проникновения на основе модели
(static model-based intrusion
detection) (Hua et al., 2009). Она может быть реализована, кроме всего прочего, с ис-
пользованием рассмотренной ранее технологии тюремного заключения.
На рис. 9.32, а показана небольшая программа, открывающая файл с именем
data
и осуществляющая его посимвольное чтение до тех пор, пока ей не попадется нулевой