Глава 19. Проблемы компьютерной безопасности.

Бди!

Козьма Прутков.

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

I. Общие соображения по поводу безопасности компьютерных систем.

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

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

Рассмотрим основные проблемы, возникающие в данной области, и их краткую характеристику.

1. Защита от случайной потери информации (некомпетентность пользователя, сбой оборудования, вирус и т.п.). Особенно остро эта проблема стоит для компьюте­ров с несколькими пользователями.

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

2. Защита конфиденциальной информации от несанкционированного доступа. Дело

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

Возможные решения: разграничение доступа (см. ниже), правовые средства.

3. Защита программного обеспечения от несанкционированного использования. Здесь скрывается сразу несколько проблем.

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

б) Из программы могут быть извлечены отдельные алгоритмы или процедуры для использования в своих целях.

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

продукт.

г) Наконец, могут быть взяты некоторые оригинальные идеи, положенные в основу написания программы.

Возможныерешения:защитаоткопированияидизассемблера,правовыесредства.

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

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

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

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

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

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

Возможные защиты программ от копирования мы разделим на два класса: про­граммные и прочие. На программных способах остановимся несколько позднее, вна­чале же перечислим способы из класса "прочие".

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

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

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

П. Защита программ от копирования.

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

Другой способ защиты—это привязка к ключевой дискете. Идея его заключается в том, что создается некопируемая метка. Такая метка не переносится на другую дис­кету, по крайней мере при стандартном копировании. Наиболее простым способом является нанесение на дискету физического повреждения. Часто такое повреждениенаносится лазером. В этом случаедефектным может оказаться всего один сектор. Про­грамма, в свою очередь, проверяет наличиетакой метки надискете, и в случае отсут­ствия последней делается вывод о несанкционированном запуске программы. Еще одним способ нанесения метки является нестандартное форматирование. Такую мет­ку называют магнитной. Наиболее часто встречаются следующие варианты:

1. Вынос метки за пределы стандартного поля копирования;

2. Нестандартная разметка дорожки;

3. Привязка к временным параметрам;

4. Комбинированные методы.

На Рис. 19.1 представлены программы установки метки на дорожку 41 (а) и про­верки наличия такой метки надискете (б).

code segment

assume CS:CODE org 100H

BEGIN:

XOR CL,CL

XOR DX,DX        ;диск А,   головка О MOV CH,41        ;дорожка 41 MOV AL, 9 ;число секторов

LEA BX,BUF       ;описатель секторов MOV AH, 5 /форматировать INT 13H ;дорожку

JC KON

;если форматирование прошло успешно, ;заполняем сектор   1  из  буфера BUFFER

XOR DX,DX        ;диск и головка

MOV СН,41        ;дорожка

MOV СЕ, 1 ; сектор 1

MOV AL,1 ;один сектор

MOV АН,3 /писать

LEA  ВХ,BUFFER

INT 13Н

JC KON

LEA DX,MES ■

MOV AH, 9

INT  21H      ;сообщение об успешной установке метки

KON:

RET

BUF DB 41,0,1,2 DB 41,0,2,2 DB 41,0,3,2 DB 41,0,4,2 DB 41,0,5,2

DB 41,0,6,2 DB 41,0,7,2 DB 41,0,8,2 DB 41,0,9,2 BUFFER DB  512 DUP(12)

MES   DB   ' На дискете установлена метка!', 13,10, '$'

CODE ENDS

END BEGIN

(а) Программа установки метки на дискету. Выдается сообщение, если установка

метки прошла успешно.

CODE SEGMENT

ASSUME CS: CODE

ORG 10OH BEGIN:

/вначале проверяем,  является данная дискета на 360 Кб или ; нет

;для этого читаем ВООТ-сектор,  проверяем слово по смещению ;13Н

;см. глава 14

XOR AL,AL MOV СХ, 1 XOR DX,DX LEA BX,BUF PUSH BX INT 25H

POP AX /лишнее слово из стека

POP BX JNC NOKON JMP KON NO_KON:

CMP WORD PTR [BX]+13H,720        /количество секторов 720 ? JNZ KON /здесь проверяем метку

XOR  DX,DX /диск и головка

MOV СН,41 /дорожка MOVCL,l /сектор MOVAL,l /один сектор

LEA   BX,BUF /куда читать

MOV АН, 2 /читать INT 13H JC KON

CMP   BYTE PTR  [ВХ+1],12 /проверяем один байт (хотябы все JNZ KON "   LEA DX,MES

MOV АН, 9

INT 21H

KON:

RET

MES    DB   ' КЛЮЧЕВАЯ ДИСКЕТА!  ',13,10, '$'

BUF   DB 512 CODE ENDS

END BEGIN

(б) Программа проверки наличия метки на дискете. Выдается сообщение, если

дискета ключевая.

Рис. 19.1. Пример установки метки вне стандартного поля копирования.

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

дорожки таблица параметров дискеты должна быть такой же, как при форматирова­нии. Можно произвести форматирование дорожки с болынимчислом секторов, а за­тем произвести запись в сектор с большой длиной

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

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

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

проблематично.

При установке пакета на жесткий диск возможна привязка к положению его файлов

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

 Изменить данные на нем невозможно обычном способом, но можно, например, потребовать, чтобы диск всегда был в дисководе для успешной работы программы.может быть помечен какнеперемещаемый (READ ONLY). Однако атрибут файла может быть случайно изменен, что приведет к тому, что пакет не будет работать. В качестве примера, однако, я приведу программу, определяющую начальный кластер заданного файла (Рис. 19.2). Для определения начального кластера файла используется функция 52Н(см.главу14).Конечно,начальныйкластерфайламожнонайти,поработавсРАТ, это гораздо сложнее. Данная программа определяет номер начального кластера фай­ла с именем NONAME.COM и записывает его в негоже по смещению OFSET.

CODE SEGMENT

ASSUME CS:CODE, DS:CODE ORG 100Н

beg:

,-открыть файл

MOV АХ,3D02H LEA   DX,PATH

INT 21H

JC END

PUSH AX

•байт  в  таблице дескрипторов  файлов равен /номеру блока описания файла MOVSI,AX

MOV DL,ES:   [SI+18H] - ■

XOR DH,DH   /номер блока  в  DX '

списка списков MOV АН,52H

INT 21H

/указатель  на   системную  таблицу файлов

LES SI,ES:[BX+4] /bES:SI /ищем блок описания файла

CMP  DX,ES:[SI+4]

JB YES

SUB  DX,ES:[SI+4] LES  SI,ES:[SI]      / второй блок кластера

YES:

MOV AX,59   /размер блока

MUL DL

ADD SI,AX

MOV кластера MOV CLAST,AX

/записываем номер по  смещению OFSET,   вначале сдвиг,

POP BX

MOV АХ,4200Н XOR СХ,СХ

MOV DX,OFSET

INT 21H ;теперь запись

MOV АН,40H

MOV CX,2

LEA DX,CLAST

INT 21H ; закрыть

MOV

INT 21H

_END:

RET

;имя программы

PATH  DB   ' NONAME . COM' , 0

;смещение,   куда должен быть  помещен номер кластера OFSET DW 15

;кластер СLAST DW ?

CODE ENDS

END BEG

Рис. 19,2, Определение начального кластера файла.

Для винчестера возможна длинная запись (функция ОВН) - записывается 516 бай­тов (512+4).Впоследниечетыребайтаможнозаписатьидентификационнуюметку. Содержимое сектора будет меняться, а метка останется (см. Рис. 19.3).

CODE SEGMENT

ASSUME CS:CODE ORG 100H

BEGIN:

;читаем:   головка 2,   дорожка 3,   сектор 4

MOV АН, АН

MOVAL,l

MOV DH,2

MOV CL, 4

MOV CH,3

MOV DL,80H

MOV BX, OFFSET BUF

INT 13H

JC ERR_D ;пишем 516 байт

MOV

MOV AL,1

MOV DH,2 MOV CL, 4 MOV CH, 3

MOV DL,80H

MOV BX, OFFSET BUF

INT 13H

JC ERR_D

MOV  DX, OFFSET MES1

JMP   SHORT WR

err_d:

MOV DX,OFFSET MES2

WR:

MOV AH, 9

INT 21h ■ RET

MES1  DB   'Метка установлена на жесткий диск.', 13,10, '$' MES2  DB   'При установке метки на жесткий диск произошла'

DB   ^ошибка.',13,10, ' $ ' BUF     DB   512 DUP(?)

DB'1234' CODE ENDS

END BEGIN

(а) Установкаметки на жестком диске.

CODE SEGMENT

ASSUME CS-.CODE

ORG 100H

BEGIN: ■ -

/читаем:  головка 2,   дорожка 3,   сектор 4

MOV АН,0АН

MOV AL,1

MOV DL,80H

MOV DH,2

MOV CH, 3 ■ MOV CL, 4

MOV BX,OFFSET BUFFER

INT 13H

JC NO_M /проверка последних 4 байт

CMP BYTE PTR ES: [BX]+512, '1'

JNZNO M

CMP BYTE  PTR ES:   [BX]+513, '2'

JNZ  NO M

CMP BYTE PTR ES: [BX]+514, '3*

JNZ NO_M

CMP BYTE PTR ES: [BX]+515,'4' JNZ NO_M

MOV DX,OFFSET MES2

JMP SHORT WR

NO_M:

MOV DX,OFFSET MES1

WR:

MOV AH, 9

INT 21H

RET

BUFFER      DB   512 DUP(?)

MET DB   4 DUP(?)

-MES1 DB   'Метка на жестком диске не  обнаружена.'

DB 13,10,'$'

MES2 DB   'Метка на жестком диске обнаружена. ',13,10, '$'

CODE ENDS

END BEGIN

(б) Проверка метки на жестком диске.

Рис. 19.3. Пример установки (а) и проверки (б) метки на жестком диске.

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

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

параметров компьютера. Ктаковым относятся:

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

- аппаратная конфигурация данного компьютера;

- содержание ПЗУ (контрольная сумма);

- частотные и временные характеристики отдельных узлов.

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

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

Использование прерываний с номерами 1 и 3. Эти вектора перенаправляют на себя практически все отладчики.53 Первый вектор служит для пошагового выполнения про­граммы. Если флаг трассировки взведен, то после каждой команды происходит обра­щение по этому вектору (INT 1). Вектор 3 служит для установки в программе точек останова. Команда INT 3 (в отличие от других INT) занимает всего один байт. Исполь­зуя изложенные факты, Ваша программа может заставить отладчик идти по ложному пути или вообще отказаться работать. Например, незаметно можно переустановить вектор 1, что даст мгновенный результат. Аналогично можно действовать и с векто­ром 3, хотя некоторые отладчики восстанавливают это вектор после исполнения каж­дой команды. Представленный ниже код будет срабатывать довольно эффективно, осо­бенно если его "разбавить" другими командами.

XOR АХ,АХ MOV ES,AX MOV ВХ, 4

MOV ES : [ВХ+2] , 1234Н

Проверка на наличие в коде точек останова может проверяться по контрольной

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

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

MOV ВХ,OFFSET MET2

JMP МЕТ1

МЕТ1:

MOV BYTE  PTR CS:[BX],0C3H

МЕТ2 :

В реальной ситуации, если команда с меткой МЕТ2 попадает в буфер команд вме­сте с командой ее модификации, то никакого эффекта это не произведет. Под отладчи­ком же она будет модифицирована.

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

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

MOV AL, 2 OUT 21H,AL

Некоторые отладчики, однако, на каждом шаге восстанавливают порт, и такой «фокус» с ними не проходит.

Учет временньгх зависимостей работы программы. Используя прерывание 1СН или 8Н, можно проверять время работы различных участков программы. Естествен­но, под отладчиком эти участки будут работать намного медленнее.

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

Регистрация работы отладчика. Мы уже говорили о регистрации работы отладчи­ка путем проверки векторов 1 и 3. Теперь поговорим о других способах.

а) Проверка содержимого регистров. При входе в программу через обычный DOS'oBCKHft загрузчик почти все регистры общего значения несут содержатель­ную нагрузку, чаще всего имея не нулевое значение. Большинство же отладчи­ков при входе в программу обнуляют эти регистры. Это может служить хоро­шим критерием по проверке наличия отладчика.

б) В PSP по смещению 2ЕН находится область, куда DOS помещает указатель на стек при обращении к системным функциям. Выполните какую-нибудь коман­ду DOS, а потом сравните:

MOV AX,SS

CMP AX,ES:[30H]   ;ES на PSP

Отладчик помещает в ячейку указатель на свой стек, поэтому содержимое АХ и ES:[30H] не должно совпадать.

в) В дочерней программе PSP по смещению 16Н хранится сегментный адрес пред­ка. Для COMMAND.COM это всегда ссылка на свой PSP, даже если запущена копия командного микропроцессора.

MOV AX,ES: [16Н]

MOV ES,AX

CMP AX,ES: [1бН]

Если содержимое АХ не равно ES:[16H], то работает отладчик. Разумеется, в дан­ном случае за отладчик будет принята любая программа, запускающая Вашу.

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

1. Отслеживание перехвата прерываний после запуска программы. Программа мо­жет расценивать такой перехват как попытку несанкционированного доступа к ней.

2. Вызов прерываний обходным путем. Определение значения векторов, которые они имели сразу после загрузки системы. Например, функция 13Н прерывания 2FH позволяет определить адрес вызова прерывания 13Н в BIOS. Косвенный вызовпрерывания 21 Нчерез функцию 5DH.

Следующий фрагмент демонстрирует использование прерывания 2FH.

mov

INT 2fh push ds push вх int 2fh pop вх pop ds

Поясню работуданного фрагмента. Функция 1ЗН одновременно и устанавливает вектор, и возвращает данные. Перед вызовом DS: ВХ должен содержать новое значе­ние вектора 13Н. Возвращаетсяжевтехжерегистрахадрес прерывания 13HbBIOS. Наш фрагмент сразу устанавливает вектор. Если какой-либо программой этот вектор был раньше перехвачен, она будет исключена из цепочки прерываний. Можно посту­пить по-другому - не трогать вектор 1 ЗН, а использовать вместо него другой свобод­ный вектор.

Ниже (Рис. 19.4) представлена программа, где косвенно вызывается функция 9 DOS через функцию 5DH.

CODE SEGMENT

ASSUME   cs:code,ds:code ORG 100h

BEGIN:

MOV dx,ds

MOV _ds,dx

MOV _ax,0900h

MOV _dx,offset MES

MOV dx,offset _AX

MOV ax,5d00h

INT 21H

ret

MES    DB   'Косвенный вызов функции 09,   прерывания 21Н1,13,10, ' $ ' регистров

ах dw ? вх dw ? сх    dw ?

_DX DW ?

__SI DW ?

_DI DW ?

_DS DW ?

_ES DW ?

code ends

END BEGIN

Puc. 19.4. Косвенный вызов функций DOS.

IV. Защита жестких дисков от несанкционированного доступа.

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

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

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

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

4. Резидентный модуль осуществляет разграничение доступа к разделам жесткого диска, каталогам и отдельным файлам, а также блокирование отдельных опера­ций с гибкими дисками (например, запуск и копирование программы с них) посредством контроля над прерываниями 13Н.21 Н, 25Н, 26Н. Блокирование операций с гибкими дисками не позволяет запускать какие-либо программы, которые могли бы помочь снять защиту.

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

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

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

V. Защита в локальной сети.

В настоящее время нельзя обойти вопрос безопасности компьютеров, работаю­щих в локальной сети. Здесь в первую очередь следует разделить информациьо, храня­щуюся на локальныхдискахи информацию, хранящуюся на сетевыхдисках (сетевая информация). Кпервой информации всецело относится всето, что было сказано выше. Сетевая информация защищена средствами сетевой операционной системы. Мы рас­смотрим средства операционной системы Novel Netware вер. 3.12 и выше.

Здесь, как было сказано выше, можно также ввести понятие объекта. Все множе­ство объектов можно разделить на два подмножества: подмножество файлов и катало­гов, с одной стороны, и подмножество пользователей - точнее, имен, под которыми может зарегистрироваться пользователь. Безопасность компьютерной сети определя­ется взаимодействием прав и ограничений, накладываемых на элементы данных под­множеств.

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

Пользователи.

1-й уровень.

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

2. Ограничение времени работы. Для каждого имени можно указать время (часы,

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

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

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

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

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

2- й уровень.

Назначение опекуна в каталоги и файлы.

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

1. Администраторское (права Supervisor'a- можно делать все с каталогом или файлом)

2. Запись

3. Изменение

4. Контроль доступа (изменение прав доступа к каталогу или файлу)

5. Поиск файла

6. Создание (только для каталогов)

7. Удаление

8. Чтение.

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

3- й уровень.

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

4- й уровень.

Атрибуты файла или каталога.

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

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

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

Так выпьем же за то, чтобы, как бы высоко мы ни поднима­лись, никогда бы не отрывались от коллектива!

Из кинофильма "Кавказская пленница"

Как быстро летит время! Вотуже 386-е АТ-ишки стали музейной редкостью. А стало быть, пора познакомиться с возможностями всего семейства микропроцессоров. Данная глава и содержит в себе сравнительный анализ того, как менялись возможности микро­процессоров семейства INTEL. Рассмотрение будет касаться в основном программной части (регистры, команды), т.е. того, что может пригодиться при программировании.

Первым полноправным членом семейства INTEL был процессор 8086 (1978). Этот микропроцессор имел 16-битную структура как внутри, так и при обмене с памятью. Через год появился микропроцессор 8088, который был полностью совместим с мик­ропроцессором 8086, но работал с 8-битной шиной данных. Для программиста это было совершенно незаметно, так как выполнялись те же самые команды. Просто ко­манда типа МОУМЕМ,АХ выполнялась в таком микропроцессоре в два приема. Мик­ропроцессор 8088 использовался с дешевыми микросхемами памяти, поэтому нашел широкое применение. Если теперь читатель попытается найти в настоящее время ЕХТ-ишку, то скорее всего это будет компьютер на базе микропроцессора 8088.

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

I. Регистры. МП 8086/8088.

Регистры - указатели 15 0

SP Указатель (стека)

BP Указатель базы

SI Индекс источника

DI Индекс получателя

Сегментные регистры

І5

CS

DS

SS

ES

Сегмент кода Сегмент данных Сегмент стека

Дополнительный сегмент

Программный счетчик 15 О

IP

Регистр флагов 15 О

FLAGS

Значение флагов:

0 (СБ) - флажок переноса.

1 (1) - резерв.

2 (РБ) - флажок приоритета.

3 (0) - резерв.

4 (АБ) - флажок дополнительного переноса.

5 (0) - резерв.

6 (гБ) - флажок нуля.

7 (ББ) - флажок знака.

8 (ТБ) - флажок трассировки.

9 (1Р) - флажок разрешения прерываний. 10(ББ) - флажок направления.

11 (ОБ) - флажок переполнения. 12-15-резерв (0).

МП 80186/80188.

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