Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 868

.pdf
Скачиваний:
12
Добавлен:
30.04.2022
Размер:
625.43 Кб
Скачать

V

:=

S

DIV

100

-

M

*

M ;

id1

:=

id2

DIV

int1

-

id3

*

id3 ;

1.id1 :=

<=

2.

id1

:=

id2

<

=

 

<

3.

id1

:=

id2 DIV

<= < N1 >

4.

id1

:= <N1>

DIV

int1

 

<

=

<

<

 

 

5.

id1

:= <N1>

DIV

int1 -

<

=

<

<

N2 >

6.

id1

:= <N1>

DIV

<N2>

-

<

=

<

N3

>

 

7.

id1

:= <N3> -

id3

 

<

=

<

<

 

 

8.

id1

:= <N3> -

id3 *

 

<

=

<

< N4

>

 

9.

id1

:= <N3> - <N4>

*

id3

<

=

<

<

<

 

10.

id1

:= <N3> - <N4>

*

id3 ;

<

=

<

<

< N5 >

11.

id1

:= <N3> - <N4>

* <N5> ;

<

=

<

<

N6

>

12.id1 := <N3> - <N6> ;

<= < N7 >

13.id1 := <N7> ;

<= N8 >

14.<N8>;

Сканирование слева направо продолжается до тех пор, пока не определится фрагмент, ограниченный отношениями < >. Этот фрагмент интерпретируется как нетерминальный символ Ni и не участвует в дальнейшем разборе.

Метод операторного предшествия можно применить ко всей программе целиком.

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

Метод рекурсивного спуска относится к нисходящим методам.

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

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

ГЕНЕРАЦИЯ КОДА

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

ОПТИМИЗАЦИЯ КОДА

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

операция, операнд1, операнд2, результат.

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

-удалению общих подвыражений_3;

-удалению инвариантов цикла_3;

-перестановке вложенных циклов_3;

-замене менее эффективных операций на более эффективные_3;

-вычислению выражения на стадии компиляции_3;

-преобразованию цикла в линейный участок_3;

-слиянию тел различных циклов.

КОМПИЛЯТОРЫ КОМПИЛЯТОРОВ

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

Сгенерированные компиляторы обычно требуют больше памяти и компилируют более медленные программы, чем компиляторы, написанные вручную. Примером КК служит YACC (Yet Another Compiler-Com-

71

piler) OC UNIX, который используется для разработки компиляторов с языков Pаscal, Ratfor, APL, C, системы управления документами и др. С YACC связана программа LEX - генератор программ лексического анализа. Порожденные YACC компиляторы имеют очень хорошую систему обнаружения и диагностики ошибок.

ПРОИЗВОДИТЕЛЬНОСТЬ ОПЕРАЦИОННЫХ СИСТЕМ Поскольку ОС - это прежде всего система управления ресурса-

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

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

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

Исследование производительности проводят с целью:

1.Оценки для выбора системы - стоит ли покупать вычислительную систему у какого-то конкретного поставщика;

2.Планирования производительности - оценки производительности еще несуществующей системы;

3.Контроля производительности - сбора данных об имеющейся системе или ее компоненте.

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

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

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

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

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

- наилучшую организацию аппаратуры; - стратегии управления ресурсами;

- соответствие предъявляемым требованиям по производительности.

ПОКАЗАТЕЛИ ПРОИЗВОДИТЕЛЬНОСТИ

Под производительностью понимают эффективность вычислитель-

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

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

2.Время ответа - время цикла для диалоговых систем. Это время, прошедшее от момента подачи запроса (нажатия на клавишу или кнопку мыши) до момента, когда система начинает выдавать ответ на экран;

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

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

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

4.Дисперсия времени ответа - т.е. мера разброса;

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

ни;

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

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

8.Загрузка - доля времени, в течении которого некоторый ресурс находится в работе.

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

МЕТОДЫ ОЦЕНКИ ПРОИЗВОДИТЕЛЬНОСТИ

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

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

72

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

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

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

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

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

КОНТРОЛЬ ПРОИЗВОДИТЕЛЬНОСТИ

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

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

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

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

Контроль производительности можно использовать для выяснения распределения заданий различных типов.

ОПЕРАЦИОННЫЕ СИСТЕМЫ В КОМПЬЮТЕРНЫХ СЕТЯХ

Если наличие электричества можно сделать видимым в любой точке цепи, я не вижу причин, почему было бы нельзя при помощи электричества мгновенно передавать сведения. Самуэл Ф.Б. Морзе

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

Сетевые операционные системы выполняют функции

-обеспечения доступа к ресурсам хост-компьютеров;

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

сурсам;

-обеспечения прозрачности сети и специфики хост-компьюте-

ров;

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

-унификации процедуры расчетов за оказываемые услуги;

-поддержки справочной и сервисной информации по сети;

-повышения надежности.

73

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

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

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

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

Различают два подхода к миграции данных:

1.Передача запроса в удаленный сервер с последующей обратной передачей запрошенного элемента клиенту. Такой подход предпочтительнее при относительно редких запросах.

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

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

СЕТЕВЫЕ И РАСПРЕДЕЛЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМЫ

Операционные системы для сетей делят на сетевые и распределенные.

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

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

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

деленным операционным системам.

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

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

ЗАЩИТА ОПЕРАЦИОННЫХ СИСТЕМ Где тонко, там и рвется

Пословица

По мере развития вычислительной техники в течение последних десятилетий она становилась все более доступной. За этот период в огромной степени возросло количество компьютеров и компьютерных систем. Однокомпьютерные системы с разделением времени и системы с удаленным доступом выдвинули на первый план среди вопросов защиты ЭВМ уязвимость передаваемых данных. Эта проблема еще более обостряется в связи с распространением компьютерных сетей.

В течение этого периода на плечи компьютеров легла большая часть повседневной работы по управлению различными бытовыми и производственными процессами. Компьютеры проводят рутинную обработку самой секретной корреспонденции. Банковские системы переводят наши деньги в виде потока битов. Системы авианаблюдения взяли на себя основную долю тяжелой работы, прежде выполнявшейся диспетчерами. Широко используются микропроцессорные устройства, имплантируемые человеку (например, кардиостимуляторы).

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

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

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

74

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

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

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

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

Внешняя безопасность Составными частями внешней безопасности являются физическая

безопасность и операционная безопасность.

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

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

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

Надзор

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

Профилактический контроль

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

Защита с помощью паролей

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

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

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

75

Дополнительное шифрование списка паролей системы значительно повышает уровень безопасности.

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

Ревизия

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

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

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

Контроль доступа

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

Для субъектов в системе обеспечивается авторизация (распределение полномочий). Субъекты обычно классифицируются по типам: пользователи, процессы, задачи и т.п.

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

Безопасные ядра

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

В выполненных до сих пор проектах исследователи обычно приходили к выводу, что выделение всевозможных требующих защиты

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

Аппаратная защита

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

Живучие системы

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

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

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

Основные элементы живучести:

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

2.Использование прозрачного мультипроцессорного режима; это позволяет, не меняя программ, работать на аппаратуре с уменьшившейся производительностью.

3.Использование нескольких подсистем ввода-вывода.

4.Включение в аппаратуру значительной части ОС.

Полномочия

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

76

ся одновременно и как объекты, поэтому у одного субъекта могут быть права доступа к другому субъекту. Субъекты - это активные элементы, объекты - пассивные.

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

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

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

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

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

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

ПРЕОДОЛЕНИЕ ЗАЩИТЫ ОПЕРАЦИОННЫХ СИСТЕМ

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

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

дефектах, разработанная компанией System Development Corporation, включает

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

2.Подтверждение гипотез о дефектах - запуск тестов для проверки наличия подозреваемых дефектов.

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

Типовые функциональные дефекты Как оказывается, ряд дефектов кочуют из одной системы в дру-

гую. В их число входят

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

2.Шифрование. Главный список паролей должен храниться в зашифрованном виде. Это зачастую не так.

3.Реализация. Прекрасно задуманная конструкция защитного механизма может быть неадекватно реализована.

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

5.Общая память. Система может нечаянно оставить критическую информацию в адресном пространстве пользователя.

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

7.Проверка законности. Система недостаточно сторого контролирует параметры пользователя.

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

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

10.Пароли. Часто оказывается возможным легко угадать пароли или определить их с помощью повторных проб.

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

12.Привилегии. Слишком много программ имеют слишком большие привилегии.

77

13.

Изоляция программ. Программа, взятая у другого пользова-

системного механизма проверки корректности.

теля может действовать подобно "троянскому коню": она может

 

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

СИСТЕМА БЕЗОПАСНОСТИ WINDOWS NT

14.

Запреты. Пользователей часто предупреждают, что некото-

 

рые возможности

нельзя использовать, поскольку могут получиться

Литература:

непредсказуемые результаты, но в действительности эти возможности

 

остаются доступными для пользователей.

1. Ресурсы Windows NT: пер. с англ. - СПб.: BHV, 1996. - 720 с.

15.

Отходы.

Зачастую, чтобы найти список паролей, злоумыш-

 

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

Безопасность для Windows NT является частью начальных требо-

после работы системных программ остаются "отходы" в памяти. Преж-

ваний к проекту и проходит через всю операционную систему. Модель

де чем освобождать ресурс,

хранящий секретные сведения,

следует

безопасности включает компоненты для управления доступом к объек-

обязательно очистить его или уничтожить.

 

 

 

 

 

 

там

-

файлам

или разделяемым принтерам - для определения того,

16. Экранирование.

Подключение

к линии связи с компьютером

кем осуществляются действия над объектом, и для назначения списка

возможно через электромагнитное поле,

возникающее вокруг провод-

протоколируемых событий.

 

 

 

 

 

 

 

ника. Для предотвращения такого "вторжения" используется электри-

 

Модель безопасности Windows NT включает следующие компоненты:

ческое экранирование.

 

 

 

 

 

 

 

 

 

 

- процессы входа в систему (Logon Processes), которые прини-

17. Пороговые значения. Этот механизм предназначен для пре-

мают

 

запросы

пользователей на вход в систему.

Они включают на-

дотвращения таких действий, как, например, повторные попытки вхо-

чальный интерактивный вход в систему,

который отображает началь-

да в систему. После определенного числа некорректных попыток вхо-

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

да следует заблокировать данного пользователя

(или

терминал,

с

му для обеспечения доступа удаленным

пользователям

к

серверным

которого пытались войти в систему) и сообщить об этом системному

процессам;

 

 

 

 

 

 

 

 

 

 

 

администратору. Многие системы не используют это средство.

 

 

- распорядитель локальной безопасности (Local Security

Aut-

Типовые атаки на операционные системы

 

 

 

hority),

который гарантирует, что пользователь имеет разрешение

Против ОС возможно

применение

перечисленных

ниже

методов

на обращение к системе. Распорядитель генерирует маркеры доступа,

преодоления защиты.

 

 

 

 

 

 

 

 

 

управляет

политикой

локальной безопасности и обеспечивает инте-

1. Асинхронность. При наличии нескольких асинхронно выполня-

рактивный сервис аутентификации пользователя.

Распорядитель

ло-

ющихся процессов у программмы появляется возможность изменить па-

кальной безопасности также управляет политикой контроля и регист-

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

но еще

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

не использовал.

 

 

 

 

 

 

 

 

 

 

- диспетчер

бюджета безопасности (Security Account Manager)

2. Просмотр. Пользователь путем просмотра пытается

опреде-

поддерживает базу данных бюджетов пользователя.

База данных

со-

лить, где в системе хранится привилегированная информация.

 

держит

информацию

по

бюджетам всех пользователей и групп.

SAM

3. Подключение к линии. Выполняется подключение к линии свя-

обеспечивает аутентификацию

пользователя,

которая

используется

зи, принадлежащей пользователю, который вошел в систему.

 

 

распорядителем локальной безопасности;

 

 

 

 

 

 

4. Подпольные команды ("Троянский конь").

В

ОС под видом

 

- монитор безопасности (Security Reference Monitor) проверя-

исправления ошибки вставляются некоторые дополнительные фрагменты

ет

права

пользователя для доступа к объекту и отслеживает любое

кода. Они открывают путь для последующего

несанкционированного

предпринимаемое пользователем действие. SRM

выполняет

проверку

входа в систему.

 

 

 

 

 

 

 

 

 

правильности

доступа и политику контроля генерации маркеров дос-

5. Лишение доступа. Осуществляется с помощью программы, ко-

тупа, опеределенную распорядителем локальной безопасности. Мони-

торая разрушает систему, вводит ее в бесконечный цикл или монопо-

тор

обеспечивает сервис к привилегированному и пользовательскому

лизирует системные ресурсы. Цель - лишить законных пользователей

режимам для осуществления доступа к объектам только пользователям

услуг ОС.

 

 

 

 

 

 

 

 

 

и процессам, имеющим необходимые разрешения.

 

 

 

 

 

6. Взаимодействующие

синхронизированные процессы.

Процессы

 

Вместе эти компоненты

составляют

подсистему

безопасности,

используют системные примитивы синхронизации, чтобы совместно ис-

пронизывающую всю операционную систему Windows NT.

 

 

 

пользовать и передавать друг другу информацию.

 

 

 

 

 

Модель безопасности разработана в соответствии с уровнем бе-

7. Разрыв связи.

Получение доступа

к

задаче

пользователя

зопасности C2, который поддерживает следующие требования:

 

после разрыва связи, но до того, как система узнает о разрыве.

 

 

1. Владелец ресурса должен иметь возможность управлять

дос-

8. Маскарад. Злоумышленник принимает облик законного пользо-

тупом к ресурсу.

 

 

 

 

 

 

 

 

 

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

 

2. Операционная система должна защищать объекты от несанкци-

ли.

 

 

 

 

 

 

 

 

 

онированного использования другими процессами.

Например, система

9. Обман системного администратора или оператора.

Злоумыш-

должна защищать память так, чтобы ее содержимое не могло читаться

ленник путем обмана может заставить представителя

персонала

со-

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

вершить действия, ведущие к нарушению секретности системы.

 

обращения к данным файла.

 

 

 

 

 

 

 

10. Паразитирование. Перехват сообщений на линии связи, исп-

 

3. Перед

получением

доступа к системе каждый пользователь

равление или подмена их.

 

 

 

 

 

 

 

 

должен идентифицировать себя, задавая уникальное имя входа в сис-

11. Непредусмотренные

параметры.

Передача

супервизору при

тему и пароль. Система должна быть способна использовать эту уни-

вызове непредусмотренных параметров,

извлекая выгоду из слабости

кальную идентификацию для контроля действий пользователя.

 

78

4.Администратор системы должен иметь возможность контроля связанных с безопасностью событий (audit security-related events). Доступ к этим контрольным данным должен быть ограничен администратором.

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

ПОЛЬЗОВАТЕЛИ, ОБЪЕКТЫ, РАЗРЕШЕНИЯ

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

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

1.Чтение (Read)

2.Запись (Write)

3.Удаление (Delete)

4.Модификация разрешения (Change Permission)

5.Выполнение (Executive)

6.Монопольное использование (Take Ownership)

7.Отсутствие доступа (No Access).

Способность назначать разрешения по усмотрению владельца называется контролируемым управлением доступом.

ЗАПИСЬ СОБЫТИЙ БЕЗОПАСНОСТИ В ЖУРНАЛ

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

ИНФОРМАЦИЯ БЕЗОПАСНОСТИ ДЛЯ ПОЛЬЗОВАТЕЛЕЙ

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

СОЗДАНИЕ МАРКЕРА ДОСТУПА

Маркер доступа создается в процессе интерактивного входа пользователя в систему. Вход осуществляется следующей последовательностью шагов:

1.Уведомление системы о входе нажатием Ctrl+Alt+Del. Ввод имени и пароля пользователя.

2.Вызов распорядителя локальной безопасности.

3.Запуск распорядителем пакета аутентификации.

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

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

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

7.Создается маркер доступа, содержащий SID пользователя, группы Everyone и других групп. Маркер доступа содержит права пользователя, назначенные совокупности идентификаторов безопасности. Этот маркер доступа возвращается процессу входа в систему со статусом успешного (Success). В случае, если вход в систему отклонен, сеанс входа в систему удаляется и процессу входа в систему возвращается ошибка.

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

ПРАВА ПОЛЬЗОВАТЕЛЯ

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

СУБЪЕКТЫ И ВОПЛОЩЕНИЯ

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

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

79

считается, что выполнение производится в контексте безопасности (Security Context) этого пользователя. Контекст безопасности управляет доступом субъекта к объектам и сервису системы.

Для реализации модели "клиент-сервер" архитектура безопасности Windows NT включает два класса субъектов:

1.Простой субъект (Simple Subject) - процесс, которому был назначен контекст безопасности пользователя.

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

Windows NT позволяет одному процессу заимствовать атрибуты безопасности другого через воплощение (Impersonation). Например, процесс сервера обычно становится воплощением процесса клиента при выполнении задачи с задействованием объектов, к которым сервер в обычной ситуации не имеет доступа.

СИСТЕМА БЕЗОПАСНОСТИ WINDOWS NT (часть 2)

ИНФОРМАЦИЯ БЕЗОПАСНОСТИ ДЛЯ ОБЪЕКТОВ

Атрибуты безопасности для объекта описываются дескриптором безопасности (Security Descriptor). Он содержит информацию о безопасности объекта, классифицированную по четырем разделам:

1.Идентификатор владельца

2.Идентификатор группы

3.Контролируемый список управления доступом (ACL)

4.Системный ACL

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

·Файлам

·Пользовательским, или оконно-управляемым объектам

·Объектам ядра

·Объектам реестра

·Личным объектам

Чтобы пользоваться дескрипторами безопасности файлов и папок, приложение может использовать функции GetFileSecurity и SetFileSecurity.

Дескрипторы безопасности объектов ядра и пользовательских объектов управляются соответственно функциями GetKernelObjectSecurity, SetKernelObjectSecurity, GetUserObjectSecurity и SetUserObjectSecurity.

Функции RegGetKeySecurity и RegSetKeySecurity позволяют оп-

ределять и устанавливать дескрипторы для ключей реестра.

Для личных объектов определены функции CreatePrivateObjectSecurity , GetPrivateObjectSecurity, SetPrivateObjectSecurity,

и DestroyPrivateObjectSecurity.

Ряд функций Win32 позволяют приложениям запросить данные из дескриптора безопасности или установить в нем требуемые значения:

GetSecurityDescriptorControl

GetSecurityDescriptorDacl

GetSecurityDescriptorGroup

GetSecurityDescriptorLength

GetSecurityDescriptorOwner

GetSecurityDescriptorSacl

SetSecurityDescriptorDacl

SetSecurityDescriptorGroup

SetSecurityDescriptorOwner

SetSecurityDescriptorSacl

Чтобы проверить уровень доступа и структурную целостность дескриптора безопасности, приложение может вызвать функцию IsValidSecurityDescriptor.

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

туры SECURITY_DESCRIPTOR.

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

Структура SECURITY_DESCRIPTOR

typedef PVOID PSECURITY_DESCRIPTOR;

Структура SECURITY_DESCRIPTOR содержит информацию безопасности, относящуюся к объекту. Приложение может использовать эту структуру для установки или запроса состяния безопасности объекта. Приложение не может изменять SECURITY_DESCRIPTOR непосредственно. Для создания и манипуляции дескриптором используются специальные функции.

Дескрипторы безопасности включают списки управления доступом (ACL) и идентификаторы безопасности (SID).

Список управления доступом (ACL)

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

typedef struct _ACL {

 

BYTE AclRevision;

// Уровень доступа

BYTE Sbz1;

// Нулевой байт выравнивания на границу слова

WORD AclSize;

 

// Размер ACL

WORD AceCount;

 

// Число элементов ACE в списке

WORD Sbz2;

 

// Нулевое слово выравнивания

 

 

// на границу двойного слова

80