Механизмы защиты операционных систем

Строки

End.

Begin

Var

End.

Begin

Begin

Begin

Begin

Else

writeln (¢нужных пар элементов в массиве нет¢);

Если по ходу просмотра массива встретятся еще группы элементов, удовлетворяющие условию, значение «флажка» уже не изменится, ответ останется неизменным («да»); если нужная группа не встретится ни разу, сохранится первоначально заданное значение ответа («нет»).

Последний оператор (условный) иллюстрирует использование значения логической переменной в качестве условия.

Примеры типичных условий, накладываемых на элементы массива (А[1..N] – массив, J – индекс элемента массива):

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

А [J] mod K = 0

б) отбор элементов с индексами, кратными К:

J mod K = 0

в) отбор элементов, значения которых попадают в интервал между числами B и C:

(А [J]>B) and (А [J]<C)

г) то же для отрезка между числами B и C:

(А [J]>=B) and (А [J]<=C)

Двумерные массивы и их обработка [1]

Аналогом двумерного массива служит матрица

Каждый элемент массива имеет два индекса, из которых первый (традиционно обозначается i, хотя это не обязательно) указывает номер строки матрицы, второй (традиционно –j) – номер столбца. Для обозначения элемента указывают имя массива и за ним в квадратных скобках – индексы через запятую.

Обработка двумерных массивов производится в основном при помощи вложенных друг в друга циклов со счетчиком (М – число строк, N – столбцов)

Если внешний цикл совершается с использованием в качестве счетчика переменной I (как на схеме), то обработка массива ведется «по строкам». При этом внутренний цикл представляет собой обычную обработку i-строки как одномерного массива, элементы которого различаются по индексу J, так что можно использовать алгоритмы обработки одномерных массивов. Если внешний цикл идет по переменной J, то обработка массива идет по «столбцам».

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

Помимо уже перечисленных условий и аналогичных им, укажем еще два:

а) элемент лежит на главной диагонали квадратной (M = N) матрицы (вариант – ниже главной диагонали):

I=J (ниже диагонали I>J)

б) элемент лежит на побочной диагонали (вариант – ниже нее):

I+J=N+1 (ниже: I+J>N+1).

Пример: в матрице из 3 строк и 4 столбцов найти сумму элементов в каждой строке и вывести на экран справа от матрицы

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

Блок-схема:

 

Текст программы

program Summa;

const M = 3;

N=4;

var I,J: integer;

A: array [1..M, 1..N] of real;

SUM: array [1..3] of real;

{Начало этапа ввода данных – значений элементов массива:}

for I:=1 to M do

for J:=1 to N do

write (¢введите А[¢ , I:2, ¢ , ¢ , J:2 , ¢]: ¢);

readln(A[I,J]);

end;

{Начало этапа обработки}

for I:=1 to M do

SUM [I]:=0;

for J:=1 to N do

SUM [I]:= SUM [I]+A[I, J];

end;

{Начало этапа вывода результатов:}

for I:=1 to M do

for J:=1 to N do

write (А[I, J]:8:3); {цикл печати строки матрицы; курсор остается все время в одной строке}

writeln (¢ ¢ , SUM[I]:8:3); {печать суммы с отступом и перевод строки}

end;

readln;

 

В турбо Паскале можно одним оператором присваивания передать все элементы одного массива другому массиву того же типа, например:

a, b: array [1..10] of integer;

a: = b;

После этого присваивания все десять элементов массива а получат те значения, что и в массиве b.

 

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

1. А.Г. Семенов. Информатика. Кемерово, 2002.

 

Тип String (строка) в Турбо Паскале используется для обработки текста.

Строка – упорядоченная последовательность символов. Каждый символ строковой величины занимает один байт памяти. Количество символов в строке называется ее длиной. Длина строки оговаривается при ее описании и может лежать в диапазоне от 0 до 255.

Строковую переменную необходимо описывать в разделе описания переменных:

var

<идентификатор>: string[<максимальная длина строки>];

 

Например:

st: string[15]

Если в описании строки не указана длина, то предполагается, что длина строки равна максимальной величине – 255 символов.

Строковая константа – это последовательность символов, заключенных в апострофы.

Например:

¢Я изучаю информатику¢, ¢контрольная¢, ¢454¢.

Пустую строку (строку с нулевой длиной) обозначают два следующих друг за другом апострофа.

Например

st:= ¢¢;

Поскольку строка представляет собой упорядоченную последовательность символов, к любому символу в строке можно обратиться так же, как и к элементу одномерного массива array[0..N] of char.

Отдельные символы строки обозначают именем строки с индексом, заключенным в квадратные скобки.

Например:

var

st: string;

begin

….

if st[7]= ¢i¢ then …

end.

Первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый значащий символ строки занимает второй байт и имеет индекс 1.

Строки можно сравнивать между собой. Операция =,<>, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов.

Строки равны, если они полностью совпадают по длине и содержат одни и те же символы.

Для соединения нескольких строк в одну результирующую строку к строкам следует применять операцию сцепления (конкатенации) «+».

Например:

st:= ¢1¢+¢2¢

st:=st+¢3¢

В результате переменная st принимает значение 123.

При обработке строк можно использовать стандартные функции Turbo Pascal:

Length (S) – функция, которая определяет текущую длину строки S.

Concat (S1, S2) – функция сцепления строк S1 и S2. Результатом служит новая строка, в которой за последним символом строки S1 следуют по порядку символы строки S2.

Copy(S1, M, K) – функция, результатом которой является фрагмент строки S1 длиной K символов, начиная с символа с номером M.

Pos(S2, S1) – функция, результатом которой является номер символа, начиная с которого фрагмент S2 содержится в строке S1. Если в строке S1 нет такого фрагмента, значение функции Pos будет равно нулю.

Для преобразования строк применяется стандартные процедуры:

Delete(S1, M, K) – удаляет из строки S1 K символов, начиная с символа с номером М.

insert(S2, s1, M) – вставляет строку S2 в строку S1, начиная с позиции М – то есть, первый символ строки S2 будет иметь в преобразованной строке S1 номер М.

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

 

Задача.

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

Решение.

Для решения поставленной задачи необходимо проверить принадлежность каждого символа исходной строки символьному интервалу от ¢0¢ до ¢9¢.

Если очередной символ принадлежит указанному интервалу его следует присоединить к новой строке.

Блок-схема алгоритма имеет следующий вид:

program p1;

var

st1, st2: string

i, l: integer;

begin

writeln(¢введите исходную строку¢);

readln(st1);

st2:= ¢¢;

l:=length(st1);

for i:= 1 to l do

if (st1[i]>= ¢0¢) and

(st1[i]<= ¢9¢) then

st2=st2+st1[i];

writeln(¢Новая строка: ¢, st2);

end.

 

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

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

– управление всеми ресурсами системы;

– наличие встроенных механизмов, которые прямо или косвенно влияют на безопасность программ и данных, рабо­тающих в среде ОС;

– обеспечение интерфейса пользователя с ресурсами системы;

– размеры и сложность ОС.

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

Рассмотрим типовые функциональные дефекты ОС, которые могут привести к созданию каналов утечки данных.

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

2. Пароли. Большинство пользователей выбирают простейшие пароли, которые легко подобрать или угадать.

3. Список паролей. Хранение списка паролей в незашифрованном виде дает возможность его компрометации с после­дующим НСД к данным.

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

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

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

7. Разрыв связи. В случае разрыва связи ОС должна немедленно закончить сеанс работы с пользователем или повтор­но установить подлинность субъекта.

8. Передача параметров по ссылке, а не по значению (при передаче параметров по ссылке возможно сохранение па­раметров в ОП после проверки их корректности, нарушитель может изменить эти данные до их использования).

9. Система может содержать много элементов (например, программ), имеющих различные привилегии.

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

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

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

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

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

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

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

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

Отношение "субъекты-объекты" можно представить в виде матрицы доступа, в строках которой перечислены субъекты, в столбцах – объекты, а в клетках, расположенных на пересечении строк и столбцов, записаны дополнительные условия (на­пример, время и место действия) и разрешенные виды доступа.

Тема логического управления доступом – одна из сложнейших в области информационной безопасности. Дело в том, что само понятие объекта (а тем более видов доступа) меняется от сервиса к сервису.

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

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

Матрицу доступа, ввиду ее разреженности (большинство клеток – пустые), неразумно хранить в виде двухмерного мас­сива. Обычно ее хранят по столбцам, т.е. для каждого объекта поддерживается список "допущенных" субъектов вместе с их правами. Некоторые проблемы возникают только при удалении субъекта, когда приходится удалять его имя из всех списков доступа; впрочем, эта операция производится нечасто.

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

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

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

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

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

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

1) идентификатор субъекта (идентификатор пользователя, сетевой адрес компьютера и т.п.). Подобные идентификато­ры являются основой произвольного управления доступом;

2) атрибуты субъекта (метка безопасности, группа пользователя и т.п.). Метки безопасности – основа мандатного управления доступом.