Тема: Функции подсистемы защиты операционной системы

  • Вид работы:
    Диплом
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
  • Формат файла:
    MS Word
  • Размер файла:
    255,46 kb
Функции подсистемы защиты операционной системы
Функции подсистемы защиты операционной системы
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

ГОУВПО "Северо-Кавказский государственный технический университет"

Кафедра защиты информации






Курсовая работа

по дисциплине: Безопасность операционных систем

"Функции подсистемы защиты операционной системы"



Работу выполнил:

студент группы БАС - 081

Борычев Алексей Сергеевич

Проверил:

к. т. н., доцент Гайчук Д.В.




Ставрополь, 2011

Содержание

Введение

1. Теоретическая часть

1.1 Основные защитные механизмы ОС семейства Unix

1.2 Принципиальные недостатки защитных механизмов ОС семейства UNIX

1.3 Принципы защиты

1.4 Идентификаторы пользователя и группы пользователей

1.5 Защита файлов

1.6 Организация контроля доступа в ОС UNIX

1.7 Пароли, уязвимость паролей

1.8 Шифрование пароля

1.9 Авторизация. Разграничение доступа к объектам ОС

1.10 Домены безопасности

1.11 Матрица доступа

1.12 Список прав доступа. Access control list

1.13. Мандаты возможностей. Capability list

1.14 Другие способы контроля доступа

1.15 Смена домена

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

1.17 Выявление вторжений. Аудит системы защиты

1.18 Анализ некоторых популярных ОС с точки зрения их защищенности

2. Аналитическая часть

2.1 Общие сведения о матричных принтерах

2.2 Проектирование символов для матричных принтеров

Заключение

Список используемой литературы

Приложения

Введение

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

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

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

Целью курсовой работы является ознакомление с приемами управления работой печатающих устройств в MS-DOS.

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

1. Теоретическая часть

1.1 Основные защитные механизмы ОС семейства Unix

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

Построение файловой системы и разграничение доступа к файловым объектам имеет особенности, присущие данному семейству ОС. Все дисковые накопители (тома) объединяются в единую ВИРТУАЛЬНУЮ ФАЙЛОВУЮ СИСТЕМУ путем операции монтирования тома. При этом содержимое тома проецируется на выбранный каталог файловой системы. Элементами файловой системы являются также все устройства, подключаемые к защищаемому компьютеру (монтируемые к файловой системе). Поэтому разграничение доступа к ним осуществляется через файловою систему. Каждый файловый объект имеет индексный дескриптор (описатель), в котором среди прочего хранится информация о разграничении доступа к данному файловому объекту. Права доступа делятся на три категории: доступ для владельца, доступ для группы и доступ для остальных пользователей. В каждой категории определяются права на чтение, запись и исполнение (в случае каталога - просмотр). Пользователь имеет уникальные символьный идентификатор (имя) и числовой идентификатор (UID). Символьный идентификатор предъявляется пользователем при входе в систему, числовой используется операционной системой для определения прав пользователя в системе (доступ к файлам и т.д.).

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

1.2 Принципиальные недостатки защитных механизмов ОС семейства UNIX

Отметим, что в ОС семейства UNIX, вследствие реализуемой ею концепции администрирования (не централизованная), невозможно обеспечить замкнутость (или целостность) программной среды. Это связано с невозможностью установки атрибута "исполнение" на каталог (для каталога данный атрибут ограничивает возможность "обзора" содержимого каталога). Поэтому при разграничении администратором доступа пользователей к каталогам, пользователь, как "владелец" создаваемого им файла, может занести в свой каталог исполняемый файл и, как его "владелец", установить на файл атрибут "исполнение", после чего запустить записанную им программу. Эта проблема непосредственно связана с реализуемой в ОС концепцией защиты информации. Не в полном объеме реализуется дискреционная модель доступа, в частности не могут разграничиваться права доступа для пользователя "root" (UID = 0). Т.е. данный субъект доступа исключается из схемы управления доступом к ресурсам. Соответственно все запускаемые им процессы имеют неограниченный доступ к защищаемым ресурсам. При этом если несанкционированная программа запуститься под правами root, то она получит полный доступ к защищаемым ресурсам и т.д. Кроме того, в ОС семейства UNIX невозможно встроенными средствами гарантированно удалять остаточную информацию. Для этого в системе абсолютно отсутствуют соответствующие механизмы. Необходимо также отметить, что большинство ОС данного семейства не обладают возможностью контроля целостности файловой системы, то есть не содержат соответствующих встроенных средств. В лучшем случае дополнительными утилитами может быть реализован контроль конфигурационных файлов ОС по расписанию, в то время, как важнейшей возможностью данного механизма можно считать контроль целостности программ (приложений) перед их запуском, контроль файлов данных пользователя и др.

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

1.3 Принципы защиты

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

1.4 Идентификаторы пользователя и группы пользователей

С каждым выполняемым процессом в ОС UNIX связываются реальный идентификатор пользователя (real user ID), действующий идентификатор пользователя (effective user ID) и сохраненный идентификатор пользователя (saved user ID). Все эти идентификаторы устанавливаются с помощью системного вызова setuid, который можно выполнять только в режиме суперпользователя. Аналогично, с каждым процессом связываются три идентификатора группы пользователей - real group ID, effective group ID и saved group ID. Эти идентификаторы устанавливаются привилегированным системным вызовом setgid.

При входе пользователя в систему программа login проверяет, что пользователь зарегистрирован в системе и знает правильный пароль (если он установлен), образует новый процесс и запускает в нем требуемый для данного пользователя shell. Но перед этим login устанавливает для вновь созданного процесса идентификаторы пользователя и группы, используя для этого информацию, хранящуюся в файлах /etc/passwd и /etc/group. После того, как с процессом связаны идентификаторы пользователя и группы, для этого процесса начинают действовать ограничения для доступа к файлам. Процесс может получить доступ к файлу или выполнить его (если файл содержит выполняемую программу) только в том случае, если хранящиеся при файле ограничения доступа позволяют это сделать. Связанные с процессом идентификаторы передаются создаваемым им процессам, распространяя на них те же ограничения. Однако в некоторых случаях процесс может изменить свои права с помощью системных вызовов setuid и setgid, а иногда система может изменить права доступа процесса автоматически.

Рассмотрим, например, следующую ситуацию. В файл /etc/passwd запрещена запись всем, кроме суперпользователя (суперпользователь может писать в любой файл). Этот файл, помимо прочего, содержит пароли пользователей и каждому пользователю разрешается изменять свой пароль. Имеется специальная программа /bin/passwd, изменяющая пароли. Однако пользователь не может сделать это даже с помощью этой программы, поскольку запись в файл /etc/passwd запрещена. В системе UNIX эта проблема разрешается следующим образом. При выполняемом файле может быть указано, что при его запуске должны устанавливаться идентификаторы пользователя и/или группы. Если пользователь запрашивает выполнение такой программы (с помощью системного вызова exec), то для соответствующего процесса устанавливаются идентификатор пользователя, соответствующий идентификатору владельца выполняемого файла и/или идентификатор группы этого владельца. В частности, при запуске программы /bin/passwd процесс получит идентификатор суперпользователя, и программа сможет произвести запись в файл /etc/passwd. И для идентификатора пользователя, и для идентификатора группы реальный ID является истинным идентификатором, а действующий ID - идентификатором текущего выполнения. Если текущий идентификатор пользователя соответствует суперпользователю, то этот идентификатор и идентификатор группы могут быть переустановлены в любое значение системными вызовами setuid и setgid. Если же текущий идентификатор пользователя отличается от идентификатора суперпользователя, то выполнение системных вызовов setuid и setgid приводит к замене текущего идентификатора истинным идентификатором (пользователя или группы соответственно).

1.5 Защита файлов

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

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

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

Общие принципы защиты одинаковы для всех существующих вариантов системы: Информация i-узла включает UID и GID текущего владельца файла (немедленно после создания файла идентификаторы его текущего владельца устанавливаются соответствующими действующим идентификатором процесса-создателя, но в дальнейшем могут быть изменены системными вызовами chown и chgrp). Кроме того, в i-узле файла хранится шкала, в которой отмечено, что может делать с файлом пользователь - его владелец, что могут делать с файлом пользователи, входящие в ту же группу пользователей, что и владелец, и что могут делать с файлом остальные пользователи. Мелкие детали реализации в разных вариантах системы различаются. Для определенности мы приведем точную картину того, как это происходит в UNIX System V Release 4 (таблица 2.1).

операционная система защита пароль

Рис.1 Представление информации, ограничивающей доступ к файлу, в i-узле файла

Шкала ограничений в восьмеричном виде Описание 04000 Устанавливать идентификатор пользователя-владельца при выполнении файла. 020n0 При n = 7, 5, 3 или 1 устанавливать идентификатор группы владельца при выполнении файла. При n = 6, 4, 2 или 0 разрешается блокирование диапазонов адресов файла. 01000 Сохранять в области подкачки образ кодового сегмента выполняемого файла после конца его выполнения. 00400 Владельцу файла разрешено чтение файла. 00200 Владелец файла может дополнять или модифицировать файл. 00100 Владелец файла может его исполнять, если файл - исполняемый, или производить в нем поиск, если это файл-каталог. 00040 Все пользователи группы владельца могут читать файл. 00020 Все пользователи группы владельца могут дополнять или модифицировать файл. 00010 Все пользователи группы владельца могут исполнять файл, если файл - исполняемый, или производить в нем поиск, если это файл-каталог. 00004 Все пользователи могут читать файл. 00002 Все пользователи могут дополнять или модифицировать файл. 00001 Все пользователи могут исполнять файл, если файл - исполняемый, или производить в нем поиск, если это файл-каталог.

1.6 Организация контроля доступа в ОС UNIX

В ОС UNIX права доступа к файлу или каталогу определяются для трех субъектов:

·членов группы, к которой принадлежит владелец (Group ID, GID);

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

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

Здесь г, w и х обозначают операции чтения, записи и выполнения соответственно. Именно в таком виде выводит информацию о правах доступа к файлам команда просмотра содержимого каталога 1 s. Суперпользователю UNIX все виды доступа позволены всегда, поэтому его идентификатор (он имеет значение 0) не фигурирует в списках управления доступом.

С каждым процессом UNIX связаны два идентификатора: пользователя, от имени которого был создан этот процесс, и группы, к которой принадлежит данный пользователь. Эти идентификаторы носят название реальных идентификаторов пользователя: Real User ID, RUID и реальных идентификаторов группы: Real Group ID, RGID. Однако при проверке прав доступа к файлу используются не эти идентификаторы, а так называемые эффективные идентификаторы пользователя: Effective User ID, EUID и эффективные идентификаторы группы: Effective Group ID, EGID (рис.2).

Рис.2 Проверка прав доступа в UNIX

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

Случаи, когда процесс выполняет системный вызов ехес запуска приложения, хранящегося в некотором файле, в UNIX связаны со сменой процессом исполняемого кода. В рамках данного процесса начинает выполняться новый код, и если в характеристиках безопасности этого файла указаны признаки разрешения смены идентификаторов пользователя и группы, то происходит смена эффективных идентификаторов процесса. Файл имеет два признака разрешения смены идентификатора - Set User ID on execution (SUID) и Set Group ID on execution (SGID), которые разрешают смену идентификаторов пользователя и группы при выполнении данного файла.

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

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

Рис.3 Смена эффективных идентификаторов процесса

Файл Ь. ехе имеет установленные признаки смены идентификаторов SUID и SGID, поэтому одновременно со сменой кода процесс меняет и значения эффективных идентификаторов (35 и 47). Вследствие этого при последующей попытке записать данные в файл f 1. doc процессу А это удается, так как его новый эффективный идентификатор группы совпадает с идентификатором группы файла f1. doc. Без смены идентификаторов эта операция для процесса А была бы запрещена.

Описанный механизм преследует те же цели, что и рассмотренный выше механизм подчиненных сегментов процессора Pentium.

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

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

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

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

·то, чем пользователь владеет (ключ или магнитная карта);

·то, что пользователь знает (пароль);

·атрибуты пользователя (отпечатки пальцев, подпись, голос).

1.7 Пароли, уязвимость паролей

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

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

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

Есть два общих способа угадать пароль. Один связан со сбором информации о пользователе. Люди обычно используют в качестве паролей очевидную информацию (скажем, имена животных или номерные знаки автомобилей). Для иллюстрации важности разумной политики назначения идентификаторов и паролей можно привести данные исследований, проведенных в AT&T, показывающие, что из 500 попыток несанкционированного доступа около 300 составляют попытки угадывания паролей или беспарольного входа по пользовательским именам guest, demo и т.д.

Другой способ - попытаться перебрать все наиболее вероятные комбинации букв, чисел и знаков пунктуации (атака по словарю). Например, четыре десятичные цифры дают только 10 000 вариантов, более длинные пароли, введенные с учетом регистра символов и пунктуации, не столь уязвимы, но тем не менее таким способом удается разгадать до 25% паролей. Чтобы заставить пользователя выбрать трудноугадываемый пароль, во многих системах внедрена реактивная проверка паролей, которая при помощи собственной программы-взломщика паролей может оценить качество пароля, введенного пользователем.

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

1.8 Шифрование пароля

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

Например, в ряде версий Unix в качестве односторонней функции используется модифицированный вариант алгоритма DES. Введенный пароль длиной до 8 знаков преобразуется в 56-битовое значение, которое служит входным параметром для процедуры crypt (), основанной на этом алгоритме. Результат шифрования зависит не только от введенного пароля, но и от случайной последовательности битов, называемой привязкой (переменная salt). Это сделано для того, чтобы решить проблему совпадающих паролей. Очевидно, что саму привязку после шифрования необходимо сохранять, иначе процесс не удастся повторить. Модифицированный алгоритм DES выполняется, имея входное значение в виде 64-битового блока нулей, с использованием пароля в качестве ключа, а на каждой следующей итерации входным параметром служит результат предыдущей итерации. Всего процедура повторяется 25 раз. Полученное 64-битовое значение преобразуется в 11 символов и хранится рядом с открытой переменной salt.

В ОС Windows NT преобразование исходного пароля также осуществляется многократным применением алгоритма DES и алгоритма MD4.

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

При удаленном доступе к ОС нежелательна передача пароля по сети в открытом виде. Одним из типовых решений является использование криптографических протоколов. В качестве примера можно рассмотреть протокол опознавания с подтверждением установления связи путем вызова - CHAP (Challenge Handshake Authentication Protocol).

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

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

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

1.9 Авторизация. Разграничение доступа к объектам ОС

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

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

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

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

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

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

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

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

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

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

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

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

1.10 Домены безопасности

Чтобы рассмотреть схему дискреционного доступа более детально, введем концепцию домена безопасности (protection domain). Каждый домен определяет набор объектов и типов операций, которые могут производиться над каждым объектом. Возможность выполнять операции над объектом есть права доступа, каждое из которых есть упорядоченная пара <object-name, rights-set>. Домен, таким образом, есть набор прав доступа. Hапример, если домен D имеет права доступа <file F, {read, write}>, это означает, что процесс, выполняемый в домене D, может читать или писать в файл F, но не может выполнять других операций над этим объектом. Пример доменов можно увидеть на рис.4 <#"141" src="doc_zip3.jpg" />

Рис.4 Специфицирование прав доступа к ресурсам

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

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

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

·Каждая процедура может быть доменом. В этом случае набор доступных объектов соответствует локальным переменным, определенным внутри процедуры. Заметим, что когда процедура выполнена, происходит смена домена.

Рассмотрим стандартную двухрежимную модель выполнения ОС. Когда процесс выполняется в режиме системы (kernel mode), он может выполнять привилегированные инструкции и иметь полный контроль над компьютерной системой. С другой стороны, если процесс выполняется в пользовательском режиме, он может вызывать только непривилегированные инструкции. Следовательно, он может выполняться только внутри предопределенного пространства памяти. Наличие этих двух режимов позволяет защитить ОС (kernel domain) от пользовательских процессов (выполняющихся в user domain). В мультипрограммных системах двух доменов недостаточно, так как появляется необходимость защиты пользователей друг от друга. Поэтому требуется более тщательно разработанная схема.

В ОС Unix домен связан с пользователем. Каждый пользователь обычно работает со своим набором объектов.

1.11 Матрица доступа

Модель безопасности, специфицированная в предыдущем разделе (см. рис.4 <#"center">1.12 Список прав доступа. Access control list

Каждая колонка в матрице может быть реализована как список доступа для одного объекта. Очевидно, что пустые клетки могут не учитываться. В результате для каждого объекта имеем список упорядоченных пар <domain, rights-set>, который определяет все домены с непустыми наборами прав для данного объекта.

Элементами списка могут быть процессы, пользователи или группы пользователей. При реализации широко применяется предоставление доступа по умолчанию для пользователей, права которых не указаны. Например, в Unix все субъекты-пользователи разделены на три группы (владелец, группа и остальные), и для членов каждой группы контролируются операции чтения, записи и исполнения (rwx). В итоге имеем ACL - 9-битный код, который является атрибутом разнообразных объектов Unix.

1.13. Мандаты возможностей. Capability list

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

Примерами систем, использующих перечни возможностей, являются Hydra, Cambridge CAP System.

1.14 Другие способы контроля доступа

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

Существует также схема lock-key, которая является компромиссом между списками прав доступа и перечнями возможностей. В этой схеме каждый объект имеет список уникальных битовых шаблонов (patterns), называемых locks. Аналогично каждый домен имеет список уникальных битовых шаблонов, называемых ключами (keys). Процесс, выполняющийся в домене, может получить доступ к объекту, только если домен имеет ключ, который соответствует одному из шаблонов объекта.


1.15 Смена домена

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

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

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

1.17 Выявление вторжений. Аудит системы защиты

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

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

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

·вход или выход из системы;

·операции с файлами (открыть, закрыть, переименовать, удалить);

·обращение к удаленной системе;

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

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

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

·короткие или легкие пароли;

·неавторизованные set-uid программы, если система поддерживает этот механизм;

·неавторизованные программы в системных директориях;

·долго выполняющиеся программы;

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

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

·изменения в системных программах, обнаруженные при помощи контрольных сумм.

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

1.18 Анализ некоторых популярных ОС с точки зрения их защищенности

Итак, ОС должна способствовать реализации мер безопасности или непосредственно поддерживать их. Примерами подобных решений в рамках аппаратуры и операционной системы могут быть:

·разделение команд по уровням привилегированности;

·сегментация адресного пространства процессов и организация защиты сегментов;

·защита различных процессов от взаимного влияния за счет выделения каждому своего виртуального пространства;

·особая защита ядра ОС;

·контроль повторного использования объекта;

·наличие средств управления доступом;

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

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

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

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

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

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

Обычно, говоря о защищенности Unix, рассматривают защищенность автоматизированных систем, одним из компонентов которых является Unix-сервер. Безопасность такой системы увязывается с защитой глобальных и локальных сетей, безопасностью удаленных сервисов типа telnet и rlogin/rsh и аутентификацией в сетевой конфигурации, безопасностью X Window-приложений. Hа системном уровне важно наличие средств идентификации и аудита.

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

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

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

·владелец файла;

·члены группы владельца;

·прочие пользователи.

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

·право на чтение;

·право на запись;

·право на выполнение (для каталогов - право на поиск).

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

Аналогичным образом защищены и другие объекты ОС Unix, например семафоры, сегменты разделяемой памяти и т.п.

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

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

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

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

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

2. Аналитическая часть

2.1 Общие сведения о матричных принтерах

Матричный принтер (Dot-Matrix-Printer) - старейший из ныне применяемых типов принтеров, был изобретён в 1964 году корпорацией Seiko Epson.

Принцип работы матричного принтера следующий. Изображение формируется с помощью печатающей головки, которая представляет собой один или два ряда вертикально расположенных тонких иголок (игольчатая матрица), приводимых в действие электромагнитами. Головка устанавливается на ракетке и передвигается построчно вдоль листа, при этом иголки в нужный момент времени ударяют через красящую ленту по бумаге, формируя точечное изображение. Этот тип принтеров называется SIDM (англ. Serial Impact Dot Matrix - последовательные ударно-матричные принтеры).

Существуют принтеры с 9, 12, 14, 18 и 24 иголками в головке. Основное распространение получили 9-ти (дешевые модели) и 24-х игольчатые принтеры. Качество печати и скорость графической печати зависят от числа иголок: больше иголок - больше точек. Качество печати в 9-ти игольчатых принтерах улучшается при печати информации не в один, а в два или четыре прохода печатающей головки вдоль печатаемой строки. Более качественная и быстрая печать обеспечивается 24-игольчатыми принтерами, называемыми LQ (англ. Letter Quality - качество пишущей машинки). Однако эти принтеры не только более дорогостоящи, но и менее надежны, а также замена вышедших из строя печатающих головок представляет определенные трудности.

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

Для перемещения красящей ленты используется передаточный механизм, использующий движение каретки. За перемещение каретки отвечает шаговой двигатель. Еще один шаговой двигатель отвечает за перемещение бумагоопорного валика. Именно поэтому скорость печати матричных принтеров невысока. В зависимости от выбранного качества печати и модели принтера скорость печати составляет от 10 до 60 секунд на страницу. Скорость печати матричных принтеров измеряется в CPS (англ. characters per second - символах в секунду).

Матричные принтеры оборудованы внутренней памятью (буфером) для хранения данных, полученных от персонального компьютера. Объем памяти недорогих принтеров составляет от 4 до 64 Кбайт. Хотя существуют модели, имеющие и больший объем памяти (например, Seikosha SP-2415 имеет буфер размером 175 Кбайт).

2.2 Проектирование символов для матричных принтеров

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

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

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

Проектирование и воспроизведение произвольных литер состоит нз следующих этапов:

. Сначала изображается кривая, образующую литеру.

. Далее рассчитываются данные, необходимые для описания кривой.

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

Рассмотрим механизм формирования символов на примере принтера Epson LX1050. Этот матричный принтер имеет печатающую головку с 24 иголками и может воспроизводить символы в нескольких режимах. В каждом из режимов допускается конструирование символов с помощью матриц различной ширины и высоты (таблица 2). Минимальная ширина символов - 5.

Таблица 2 - Таблица соответствия размеров матриц режимам принтера

РежимШиринаВысотаDraft924LQ pica2924LO elite2324LQ semi-. condensed1524LQ proportional3724Draft super subscript716LQ super subscript2316LQ prop, super subscript2316

Номера иголок* * * * * * * * * *1* * * * * ** * * * * * * * * *2* * * * * * ** * * * * * * * * *3* * * ** * * * * * * * * *4* * * ** * * * * * * * * *5* * * ** * * * * * * * * *6 * * * * * * * * ** * * * * * * * * *7* * * ** * * * * * * * * *8* * * ** * * * * * * * * *9* * * *1 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 10Номера позицийНомера позицииРисунок 2 - Пример формирования матрицы для печати символа "А"

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

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

При описании символа количество колонок (ml), образующих символ, и общее пространство (m0+ml+m2). занимаемое символом, не должны превышать значений, представленных в таблице 3.

Таблица 3 - Таблица соответствия значения количества колонок и общего пространства режимам принтера

Режимmlm0+ml+m2Draft912LQ pica2936LO elite2330LQ semi-. condensed1524LQ proportional3742Draft super subscript712LQ super subscript2336LQ prop, super subscript2342

В соответствии с условием поставленной задачи рассматриваемым режимом матричного принтера является Draft super subscript, следовательно, матрица имеет размеры в ширину 7 позиций и в высоту 16 иголок. Ширину отступов от символа слева (m0) и справа (m2) выберем равными одной иголке, общее пространство символа m0+ml+m2=1+7+1=9, что не превышает максимального значения 12.

Чтобы связать описание символа с соответствующим кодом, необходимо послать на принтер набор команд, указывающих режим, номер кода загружаемого символа, три байта общего описания символа (m0, ml, m2) и байты описания столбцов матрицы. Данные операции прослеживаются на примере листингов приложений.

Заданием на курсовую работу было проектирование своих инициалов (Борычев Алексей Сергеевич) - т.е. Б, А, С.

Проектирование символа "Б"

1.На клеточном поле 15х24 изображается кривая проектируемого символа, затем на ее основе проектируется матрица (Рисунок 3)

123456789101112131415128 64 32 16 8 4 2 1 128 64 32 16 8 4 2 1 1286432168421Рисунок 1. - Матрица символа "Б"

. Каждый столбец матрицы кодируется тремя байтами (таблица 4).

Таблица 1 - Значение кодирующих байтов матрицы для символа "Б"

123456789101112131415байт 101276464646464646464646464640байт 202554444444444470байт 30254222222222222540

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

Проектирование символов "А", "С" осуществляется аналогично.

Проектирование символа "А"

123456789101112131415128 64 32 16 8 4 2 1 128 64 32 16 8 4 2 1 1286432168421Рисунок 2 - Матрица символа "А"

Таблица 2 - Значение кодирующих байтов матрицы для символа "А"

123456789101112131415байт 100314832329696969632483100байт 20025588888888825500байт 30025400000000025400

Листинг второго этапа проектирования приведен в приложении 2.

Проектирование символа "С"

123456789101112131415128 64 32 16 8 4 2 1 128 64 32 16 8 4 2 1 1286432168421

Таблица 3 - Значение кодирующих байтов матрицы для символа "С"

123456789101112131415байт 101276464646464646464646464640байт 202550000000000000байт 302542222222222220

Листинг третьего этапа проектирования приведен в приложении 3.

Заключение

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

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

Была так же выполнена поставленная задача - формирование новых символов, разработка команд для их загрузки в оперативную память принтера и программы, реализующей вывод данных символов на печать - выполнена путем разработки начертания символов, составляющих мою фамилию (НАУМЕНКО), и реализации необходимых программных кодов на языке BASIC.

Список используемой литературы

1.Гайчук Д.В., Подопригора Н.Б. Методические указания к выполнению курсовой работы по дисциплине "Безопасность операционных систем"для студентов специальности 090105 "Комплексное обеспечение информационной безопасности автоматизированных систем", Ставрополь 2006-05-15

2.Гордеев А.В. Операционные системы: Учебник для вузов. - 2-е изд. - СПб.: Питер <#"center">Приложения

Приложение 1

Листинг вывода на печать символа "Б" на языке QBASIC

1000 LPRINTCHR$ (27); "xl";

LPRINT CHR$ (27); "&"; CHR$ (0); CHR$ (31); CHRS (31);

RESTORE 1540

FORN=31 TO 31

READ LS: LPRTNT CHR$ (LS);

READ CW: LPRTNT CHR$ (CW);

READ RS: LPRTNT CHR$ (RS);

FOR M=l TOCW*3

READ MM

LPRINT CHR$ (MM);

NEXT M

NEXTN

'Symbol'

DATA 2,15,2

DATA 0,0,0, 127,255,254, 64,4,2, 64,4,2, 64,4,2

DATA 64,4,2, 64,4,2, 64,4,2, 64,4,2, 64,4,2

DATA 64,4,2, 64,4,2, 64,4,2, 64,7,254, 0,0,0

Приложение 2

Листинг вывода на печать символа "А" на языке QBASIC

1000 LPRINTCHR$ (27); "xl";

LPRINT CHR$ (27); "&"; CHR$ (0); CHR$ (31); CHRS (31);

RESTORE 1540

FORN=31 TO 31

READ LS: LPRTNT CHR$ (LS);

READ CW: LPRTNT CHR$ (CW);

READ RS: LPRTNT CHR$ (RS);

FOR M=l TOCW*3

READ MM

LPRINT CHR$ (MM);

NEXT M

NEXTN

DATA 1,15,1

DATA 0,0,0, 0,0,0, 31,255,254, 48,8,0, 32,8,0

DATA 32,8,0, 96,8,0, 96,8,0, 96,8,0, 96,8,0

DATA 32,8,0, 48,8,0, 31,255,254, 0,0,0, 0,0,0

Приложение 3

Листинг вывода на печать символа "С" на языке QBASIC

1000 LPRINTCHR$ (27); "xl";

LPRINT CHR$ (27); "&"; CHR$ (0); CHR$ (31); CHRS (31);

RESTORE 1540

FORN=31 TO 31

READ LS: LPRTNT CHR$ (LS);

READ CW: LPRTNT CHR$ (CW);

READ RS: LPRTNT CHR$ (RS);

FOR M=l TOCW*3

READ MM

LPRINT CHR$ (MM);

NEXT M

NEXTN

'Symbol'

DATA 2,15,2

1560 DATA 0,0,0, 127,255,254, 64,0,2, 64,0,2, 64,0,2

DATA 64,0,2, 64,0,2, 64,0,2, 64,0,2, 64,0,2

DATA 64,0,2, 64,0,2, 64,0,2, 64,0,2, 0,0,0

Похожие работы

 

Не нашел материал для курсовой или диплома?
Поможем написать качественную работу
Без плагиата!