Анализ защищенности программного обеспечения

Угрозы безопасности программного обеспечения и классификация средств атаки на средства защиты ПО. Методы и средства защиты программ от компьютерных вирусов и средств исследования программ. Анализ стандартов в области информационной безопасности.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 29.06.2012
Размер файла 1,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

3.Если u=r, то (r,s) - есть подпись кода программы M, где m=h(M).

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

атака с открытым ключом, когда противник знает только открытый ключ схемы;

атака на основе известного открытого текста (известного кода программы), когда противник получает подписи для некоторого (ограниченного) количества известных ему кодов (при этом противник никак не может повлиять на выбор этих кодов);

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

• направленная атака на основе выбранного открытого текста (то же, что предыдущая, но противник, выбирая код программы, уже знает открытый ключ);

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

Атаки перечислены таким образом, что каждая последующая сильнее предыдущей.

Угрозами для схем цифровой подписи являются раскрытие схемы или подделка подписи. Определяются следующие типы угроз:

полного раскрытия, когда противник в состоянии вычислить секретный ключ подписи;

универсальной подделки, когда противник находит алгоритм, функционально эквивалентный алгоритму вычисления подписи;

селективной подделки, когда осуществляется подделка подписи для кода программы, выбранного противником априори;

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

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

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

Метод эмуляции процессора в защите ПО

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

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

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

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

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

Соответственно, функционирование защищенного таким способом образом продукта происходило бы по следующей схеме

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

Сам компилятор, кроме изменения кодогенерационной фазы, нужно доработать для приобретения им возможностей:

• Различать обращения к внутренней и внешней памяти относительно виртуального процессора (в том числе и вызовы функций)

• Создавать для каждой защищаемой функции так называемую оболочку, выполняющуюся на реальном процессоре, с вызовом защищенной функции через симулятор

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

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

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

Недостатки же метода - следствие его достоинств:

• Скорость работы перенесенного в виртуальную среду кода в разы (ориентировочно в 10-50, в зависимости от архитектуры виртуального процессора и симулятора) ниже, чем кода оригинального

• Объем защищенной программы, как правило, будет несколько выше, чем незащищенной

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

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

Выполнение на стороне сервера.

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

Выполнение на стороне сервера

Клиентскую часть можно распространять бесплатно, это позволит пользователям платить только за использование серверной части.

Часто данный метод защиты используется в различных программах-сценариях, которые располагаются на WEB серверах, и выполняют общие операции, например, контролируют работу других программ (front-end), а также передают им, какие либо данные для обработки.

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

• стойкость такой защиты зависит, прежде всего, от защищенности серверов, на которых он исполняется (речь идет о Интернет-безопасности)

• важно обеспечение конфиденциальности запросов, аутентификации пользователей, целостности ресурса (возможности «горячего» резервирования), и доступности решения в целом

Возникают также вопросы доверия сервису (в том числе правовые), так как ему фактически «в открытом виде» передаются как само ПО, так и данные, которые оно обрабатывает (к примеру, персональные данные пользователей).

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

2.2 Методы обеспечения эксплуатационной безопасности ПО

2.2.1 Методы и средства защиты программ от компьютерных

вирусов

Под компьютерным вирусом (или просто вирусом) понимается автономно функционирующая программа, обладающая способностью к самостоятельному внедрению в тела других программ и последующему самовоспроизведению и самораспространению в информационно-вычислительных сетях и отдельных ЭВМ [9]. Предшественниками вирусов принято считать так называемые троянские программы, тела которых содержат скрытые последовательности команд (модули), выполняющие действия, наносящие вред пользователям. Наиболее распространенной разновидностью троянских программ являются широко известные программы массового применения (редакторы, игры, трансляторы и т.д.), в которые встроены так называемые "логические бомбы", срабатывающие по наступлении некоторого события. Следует отметить, что троянские программы не являются саморазмножающимися.

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

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

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

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

резидентные вирусы - вирусы, которые после активизации постоянно находятся в оперативной памяти компьютера и контролируют доступ к его ресурсам;

транзитные вирусы - вирусы, которые выполняются только в момент запуска зараженной программы.

По объекту внедрения:

файловые вирусы - вирусы, заражающие файлы с программами;

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

В свою очередь файловые вирусы подразделяются на вирусы, заражающие:

• исполняемые файлы;

• командные файлы и файлы конфигурации;

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

• файлы с драйверами устройств;

• файлы с библиотеками исходных, объектных, загрузочных и оверлейных модулей, библиотеками динамической компоновки и т.п.

Загрузочные вирусы подразделяются на вирусы, заражающие:

• системный загрузчик, расположенный в загрузочном секторе дискет и логических дисков;

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

По степени и способу маскировки:

• вирусы, не использующие средств маскировки;

stealth-вирусы - вирусы, пытающиеся быть невидимыми на основе контроля доступа к зараженным элементам данных;

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

MtE-вирусы делятся на

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

• полиморфные вирусы, в разных копиях которых различаются не только зашифрованные тела, но их дешифровщики.

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

• искажение информации в файлах либо таблице размещения файлов (FAT-таблице), которое может привести к разрушению файловой системы в целом;

• имитация сбоев аппаратных средств;

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

• инициирование ошибок в программах пользователей или операционной системы.

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

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

• регламентацию проведения работ на ПЭВМ,

• применение программных средств защиты,

• использование специальных аппаратных средств.

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

• Архивирование. Заключается в копировании системных областей магнитных дисков и ежедневном ведении архивов измененных файлов.

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

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

2.2.2 Методы защиты программного обеспечения от средств

исследования программ

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

• инструменты динамического исследования ПО;

• инструменты статического исследования ПО.

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

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

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

Помимо этих двух основных инструментов исследования, можно использовать:

• "дискомпиляторы", программы, генерирующие из исполняемого кода программу на языке высокого уровня;

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

• "следящие системы", запоминающие и анализирующие трассу уже не инструкции, а других характеристик, например вызванных программой прерывания.

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

Защита от отладчиков.

Отладчики - это программы, позволяющие наблюдать за работой ПО в динамике, отслеживать состояние памяти, регистров и аппаратных средств при работе программы. Принцип их работы заключается в том, что они загружают исследуемую программу в память и запускают ее, перехватывая системные функции для отслеживания их вызовов программой и возможности активизироваться в любой момент. Примером такого инструмента для РС-совместимых компьютеров является отладчик Softice фирмы NuMega. Для системы защиты ПО отладчики опасны тем, что позволяют проследить за ее работой, что может привести к взлому системы защиты. Поэтому в системах защиты ПО часто предусматривают защиту от отладчиков. Исходя из обобщенной схемы системы защиты ПО, защиту от отладчиков следует отнести к подсистеме противодействия нейтрализации защиты. Общий принцип работы антиотладочной защиты таков. Блок регистрации характеристик среды получает характеристики программно-аппаратной среды, в которой работает ПО, и передает их в подсистему противодействия нейтрализации защиты. Полученные характеристики анализируются в подсистеме противодействия нейтрализации защиты. Если они указывают на наличие в памяти какого-то из известных системе противодействия нейтрализации защиты отладчиков, то управление передается в блок ответной реакции, который реагирует соответствующим образом. Ответной реакцией может быть прекращение работы ПО, выгрузка из памяти или нейтрализация отладчика, или еще какие-то действия.

Регистрация отладчиков обычно осуществляется по специфическим особенностям программно-аппаратной среды, указывающих на наличие того или иного отладчика - «следам» отладчика. «Практически каждый отладчик имеет свои специфические особенности, знание и использование которых позволит разработчику значительно повысить надежность создаваемых средств защиты» [12]. Такие особенности специфичны для каждого из отладчиков, хотя в некоторых ОС существуют и штатные средства регистрации наличия в памяти отладчика, например, в Windows существует специальный программный интерфейс средств отладки.[12]

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

Защита от эмулирующих отладчиков.

Существует класс инструментов отладки ПО, отличающихся по принципу работы от обычных отладчиков. Это, так называемые эмулирующие отладчики. В них реализована описанная нами ранее виртуальная машина, исполняющая машинный код процессора, для которого написано отлаживаемое ПО. При этом код ПО реально не исполняется, а лишь эмулируется результат его исполнения. Так же эмулируются все изменения состояния программно-аппаратной среды, которые вызвала бы отлаживаемое ПО, если бы исполнялось в реальности. Такой отладчик имеет гораздо более высокую степень контроля за действиями ПО из-за того, что виртуальная машина логически изолирована от реальной программно-аппаратной среды. Примером такого инструмента является эмулирующий отладчик TRW. Таким образом, система защиты ПО теоретически не имеет возможности ни обнаружить такой отладчик, ни повлиять на каким-либо образом на него, например, выгрузив его. Практически в таких эмуляторах часто не учитываются и не эмулируются различные тонкости и недокументированные особенности работы аппаратных средств и операционной системы. Поэтому, используя такие особенности и проверяя результат их выполнения, ПО имеет возможность определить тот факт, что оно запущено под таким эмулятором. Например, в эмуляторе могут быть не учтены различные недокументированные команды, особенности их выполнения, результаты ввода/вывода в/из несуществующих аппаратных портов. Такие особенности эмуляторов, как и у обычных отладчиков, специфичны для каждого конкретного эмулятора. Поэтому защита от них может работать только против «известных» ей эмулирующих отладчиков.

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

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

Защита от дизассемблеров.

Дизассемблеры - это средства статического анализа исполняемого кода. Их применение угрожает системе защиты ПО тем, что с их помощью злоумышленник, изучив полученный дизассемблером листинг, может раскрыть алгоритм ее работы. Современные дизассемблеры снабжены широким диапазоном средств для полноценного изучения кода человеком в полуавтоматическом режиме. Наиболее ярким представителем инструмента такого рода является дизассемблер IDA.[13] Некоторые способы защиты кода, рассмотренные ранее при анализе способов защиты кода от исследования, эффективно действуют против дизассемблеров. В первую очередь, это шифрование исполняемых модулей. Очевидно, что при шифровании исполняемого модуля у исследователя не будет возможности корректно дизассемблировать и проанализировать код и данные до тех пор, пока модуль не будет расшифрован.

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

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

2.3 Правовая поддержка процессов разработки и применения ПО

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

Программное обеспечение состоит из трех компонент:

• замысла (основания, подосновы);

• собственно программ;

• сопровождающей документации.

Замысел - это идеи, концепции, алгоритмы, соображения по реализации и т.п.

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

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

Правовая защита программного обеспечения по своей проблематике во многом совпадает с более широкой задачей - правовой защитой интеллектуальной собственности.

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

Два основных механизма - это авторское и патентное право.

Сменяемость компьютерных систем составляет характерную для рынка аппаратных средств величину: 40 месяцев. Но никто не проводил анализа сменяемости программных изделий. Можно предположить, что это примерно 24-30 месяцев. Эта оценка важна потому, что срок патентования составляет несколько лет (до 5 и более). Так что даже если бы не было никаких правовых трудностей с патентованием программного обеспечения, механизм патентной защиты плохо подходил бы к программному обеспечению.

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

Авторское право обеспечивает автоматическую защиту. Защита авторским правом возникает вместе с созданием произведения независимо от того, предоставил ли автор копию произведения в Бюро по авторскому праву для регистрации. Однако без регистрации держатель авторского права не может реализовать свои права. Например, он не может возбудить иск о нарушении его права и не может получить возмещение.

Авторское право защищает произведение от копирования, но не защищает независимого создания эквивалентов. Таким образом, риск монополизации знания при использовании авторского права существенно меньше, чем при использовании патентного права и, как следствие, стандарты защиты авторским правом не столь строги, как стандарты защиты патентным правом.

Вообще, различают две категории прав:

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

• моральные права, обеспечивающие защиту личности автора в его произведении.

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

Кроме патентной защиты и защиты авторским правом выделяют:

• Статус производственного секрета для программы ограничивает круг лиц, знакомых или допущенных к ее эксплуатации, а также определяет меру их ответственности за разглашение секретов;

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

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

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

• знак авторского права (обычно ©) и название разработчика, года выпуска программы, прочих ее атрибутов;

• знак патентной защиты или производственного секрета;

• торговые марки, соответствующие использованным в программе другим программным изделиям (обычно ™ и название фирмы-разработчика программного продукта);

• символ зарегистрированного права на распространение программного продукта (обычно ®).

Существует несколько типов лицензий на программные продукты.

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

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

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

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

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

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

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

• устанавливать один экземпляр программы на компьютер, если не предусмотрено иное соглашение с правообладателем;

• исправлять явные ошибки;

• адаптировать программный продукт;

• изготавливать страховые копии.

2.3.1 Стандарты в области информационной безопасности

Можно выделить следующие международные стандарты и другие документы, в которых определяются основные модели безопасности ИТ:

• ISO/IEC 7498-2-89 - «Информационные технологии. Взаимосвязь открытых системы. Базовая эталонная модель. Часть 2. Архитектура информационной безопасности» (кратко описанная выше);

• ISO/IEC DTR 10181-1 - «Информационные технологии. Взаимосвязь открытых систем. Основы защиты информации для открытых систем. Часть 1. Общее описание основ защиты информации ВОС»;

• ISO/IEC DTR 10745 - «Информационные технологии. Взаимосвязь открытых систем. Модель защиты информации верхних уровней»;

• ISO/IEC DTR 11586-1 - «Информационные технологии. Взаимосвязь открытых систем. Общие функции защиты верхних уровней. Часть 1. Общее описание, модели и нотация»;

• ISO/IEC DTR 13335-1 - «Информационные технологии. Руководство по управлению безопасностью информационных технологий. Часть 1. Концепции и модели безопасности информационных технологий».

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

• аутентификации субъектов и объектов информационного взаимодействия, предназначенные для предоставления взаимодействующим сторонам возможности удостовериться, что противоположная сторона действительно является тем, за кого себя выдает;

• шифрования информации, предназначенные для защиты информации в случае перехвата ее третьими лицами;

• контроля целостности, предназначенные для обеспечения того, чтобы информация не была искажена или подменена;

• управления доступом, предназначенные для разграничения доступа к информации различных пользователей;

• повышения надежности и отказоустойчивости функционирования системы, предназначенные для обеспечения гарантий выполнения информационной системой целевых функций;

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

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

• ISO/IEC 9798-91 - «Информационные технологии. Защита информации. Аутентификация объекта».

Часть 1. Модель.

Часть 2. Механизмы, использующие симметричные криптографические алгоритмы.

Часть 3. Аутентификация на базе алгоритмов с открытыми ключами.

Часть 4. Механизмы, использующие криптографическую контрольную функцию.

Часть 5. Механизмы, использующие алгоритмы с нулевым разглашением.

• ISO/IEC 09594-8-88 - «Взаимосвязь открытых систем. Справочник. Часть 8. Основы аутентификации»;

• ISO/IEC 11577-94 - «Информационные технологии. Передача данных и обмен информацией между системами. Взаимосвязь открытых систем. Протокол защиты информации на сетевом уровне»;

• ISO/IEC DTR 10736 - «Информационные технологии. Передача данных и обмен информацией между системами. Протокол защиты информации на транспортном уровне»;

• ISO/IEC CD 13888 - «Механизмы предотвращения отрицания».

Часть 1. Общая модель.

Часть 2. Использование симметричных методов.

Часть 3. Использование асимметричных методов;

• ISO/IEC 8732-88 - «Банковское дело. Управление ключами»;

• ISO/IEC 11568-94 - «Банковское дело. Управление ключами».

Часть 1. Введение. Управление ключами.

Часть 2. Методы управления ключами для симметричных шифров.

Часть 3. Жизненный цикл ключа для симметричных шифров;

• ISO/IEC 11166-94 - «Банковское дело. Управление ключами посредством асимметричного алгоритма».

Часть 1. Принципы процедуры и форматы.

Часть 2. Принятые алгоритмы, использующие криптосистему RSA;

• ISO/IEC DIS 13492 - «Банковское дело. Управление ключами, относящимися к элементам данных»;

• ISO/IEC CD 11770 - «Информационные технологии. Защита информации. Управление ключами».

Часть 1. Общие положения.

Часть 2. Механизмы, использующие симметричные методы.

Часть 3. Механизмы, использующие асимметричные методы;

• ISO/IEC DTR 10181- «Информационные технологии. Взаимосвязь открытых систем. Основы защиты информации для открытых систем».

Часть 1. Общее описание основ защиты информации в ВОС.

Часть 2. Основы аутентификации.

Часть 3. Управление доступом.

Часть 4. Безотказность получения.

Часть 5. Конфиденциальность.

Часть 6. Целостность.

Часть 7. Основы проверки защиты.

К этому же уровню следует отнести стандарты, описывающие интерфейсы механизмов безопасности ИТ:

• ISO/IEC 10164-7-92. «Информационные технологии. Взаимосвязь открытых систем. Административное управление системы. Часть 7. Функции уведомления о нарушениях информационной безопасности».

• ISO/IEC DTR 11586. «Информационные технологии. Взаимосвязь открытых систем. Общие функции защиты верхних уровней».

Часть 1. Общее описание, модели и нотация.

Часть 2. Определение услуг сервисного элемента обмена информацией защиты.

Часть 3. Спецификация протокола сервисного элемента обмена информацией защиты.

Часть 4. Спецификация синтаксиса защищенной передачи.

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

Отечественная нормативно-правовая база

К ocнoвным cтaндaртaм и нoрмaтивным техничеcким дoкументaм пo безoпacнocти инфoрмaции, в первую oчередь, oтнocитcя кoмплект рукoвoдящих дoкументoв Гocтехкoмиccии Рoccии (1998 г), кoтoрые в cooтветcтвии c Зaкoнoм «O cтaндaртизaции» мoжнo oтнеcти к oтрacлевым cтaндaртaм, в тoм чиcле «Cредcтвa вычиcлительнoй техники. Зaщитa oт неcaнкциoнирoвaннoгo дocтупa к инфoрмaции. Пoкaзaтели зaщищеннocти cредcтв вычиcлительнoй техники»», «Aвтoмaтизирoвaнные cиcтемы. Зaщитa oт неcaнкциoнирoвaннoгo дocтупa к инфoрмaции. Клaccификaция aвтoмaтизирoвaнных cиcтем и требoвaния пo зaщите инфoрмaции», «Временнoе пoлoжение пo oргaнизaции рaзрaбoтки, изгoтoвления и экcплуaтaции прoгрaммных и техничеcких cредcтв зaщиты инфoрмaции oт неcaнкциoнирoвaннoгo дocтупa в aвтoмaтизирoвaнных cиcтемaх и cредcтвaх вычиcлительнoй техники», «Cредcтвa вычиcлительнoй техники. Межcетевые экрaны. Зaщитa oт неcaнкциoнирoвaннoгo дocтупa к инфoрмaции. Пoкaзaтели зaщищеннocти oт НCД к инфoрмaции», ГOCТ Р 50739-95 «Cредcтвa вычиcлительнoй техники. Зaщитa oт неcaнкциoнирoвaннoгo дocтупa к инфoрмaции. Oбщие техничеcкие требoвaния».

Особенности защиты программ нашли свое отражение в следующих руководящих документах: РД «Защита информации от несанкционированного доступа к информации. Программное обеспечение средств защиты информации. Классификация по уровню контролю отсутствия недекларированных возможностей» и проект РД «Антивирусные средства. Показатели защищенности и требования по защите от вирусов».

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

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

Кроме того, следующие нормативные документы, так или иначе косвенно регламентируют отдельные вопросы обеспечения безопасности ПО:

• ГОСТ 28195-89. Оценка качества программных средств. Общие положения;

• ГОСТ 21552-84. Средства вычислительной техники. ОТТ, приемка методы испытаний, маркировка, упаковка, транспортировка и хранение;

• ГОСТ ВД 21552-84. Средства вычислительной техники. ОТТ, приемка методы испытаний, маркировка, упаковка, транспортировка и хранение;

• ТУ на конкретный вид продукции (ПО).

2.4 Оценка защищенности ПО

2.4.1 Качества систем защиты программного обеспечения

Анализ методов оценки качества программного обеспечения и методов построения систем защиты ПО показал следующее:

1. Системы защиты существенно отличаются по характеру реализованных в них алгоритмов.

2. Системы защиты можно разбить на сходные по функциональному признаку подсистемы.

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

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

5. При оценке качества защиты конкретного ПО необходимо рассматривать не просто примененную в ней систему защиты ПО, а систему «защищаемое ПО - система защиты ПО» в целом.

На основе определения качества ПО (см. стр. 28) введем определение качества системы защиты ПО.

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

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

Рассмотрим функционирование системы «защищаемое ПО - система защиты ПО». Для этого представим эту систему в виде модели.

Модель системы «защищаемое ПО - система защиты ПО» имеет два

блока:

• защищаемое ПО;

• система защиты ПО.

Эти блоки связаны функционально. Все связи подразделяются на следующие классы:

• инициализация работы защищаемого ПО (I);

• проверка среды функционирования защищаемого ПО (C);

• функции, необходимые для работы защищаемого ПО (F);

• деинициализация работы защищаемого ПО (D) Инициализация работы защищаемого ПО (I) - это выполнение системой защиты ПО действий, необходимых для начала работы защищаемого ПО. Это могут быть: начальная загрузка данных и исполняемого кода в память, их расшифровка, передача управления защищаемому ПО, начальная проверка среды функционирования защищаемого ПО.

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

Функции, необходимые для работы защищаемого ПО (F) - вызовы защищаемым ПО системы защиты ПО для выполнения действий, необходимых для работы защищаемого ПО:

• расшифровка участков данных или исполняемого кода необходимых по ходу работы ПО;

• выполнение элементов алгоритма работы защищаемого ПО.

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

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

Таким образом, систему «защищаемое ПО - система защиты ПО» можно представить в виде набора множеств (I,C,F,D). При этом степень защиты ПО определяется количеством связей каждого вида и количеством передаваемой ими информации.

Методика оценки качества систем защиты программного обеспечения

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

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

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

Таким образом, показатели корректности характеризуют способность системы защиты ПО выполнять свои функции при отсутствии возмущающих факторов, таких, как попытки взлома системы защиты. Для оценки корректности представляется целесообразным использовать экспоненциальную модель, предложенную в работе [25].

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

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

Некоторые показатели качества ПО из общепринятой номенклатуры (см. стр. 28) не позволяют оценивать качество систем защиты.

Такими показателями являются:

1. Сложность.

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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.