19.
Обеспечение безопасности системы


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

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

Общие вопросы безопасности ОС

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

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

Удаленные и локальные атаки

Можно поделить угрозы безопасности, называемые также эксплойтами (exploit), на две крупные категории.
Удаленные эксплойты

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

Например, вы запускаете сервер bind на порте 53 (разрешение имен DNS) компьютера, подключенного к сети. Допустим, конкретная версия программного обеспечения имеет уязвимость, из-за которой намеренно неправильно сформированный атакующим запрос может привести к запуску командного процессора от имени учетной записи root для другого порта машины. Атакующий может использовать эту уязвимость для подключения и эффективного "владения" данным компьютером.

Такой тип эксплойта часто называется атакой с переполнением буфера (buffer overrun) или с разрушением стека (stack-smashing). Более подробно этот вид атак описан в статье Алефа Уана (Aleph One) "Smashing the Stack for Fun and Profit" ("Разрушение стека для забавы и выгоды") на странице сайта http://www.insecure.org/stf/smashstack.txt. Для простого разрешения этой проблемы нужно просто знать, какие порты прослушиваются каждым из серверов, и нужно использовать самые последние версии программного обеспечения. Если машина подключена к сети, то не запускайте на ней больше служб, чем это действительно необходимо.

Локальные эксплойты

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

Многие локальные атаки являются следствием неправильного конфигурирования системы (например, неправильно установлены права доступа к файлам) или из-за переполнения буфера при запуске исполняемой программы от имени пользователя root (когда идентификатор пользователя назначается программе путем установки бита setuid). В мире встраиваемых систем — где обычно используется ОСРВ Neutrino — эта проблема для локальных пользователей неактуальна, тем более что для многих систем вообще не поставляется командный процессор (оболочка).

Эффективность атак

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

Для примера, существует очень мало систем, которые злонамеренный локальный пользователь может "поставить на колени". Эти атаки часто можно минимизировать, используя, например, встроенную команду ulimit из командной оболочки ksh.

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

Вирусы

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

В качестве точек входа для вирусов используются:
Для вируса хосты являются интерфейсами с системными вызовами, которые доступны из точки входа (инфицированная программа), например, программа sendmail или HTTP-сервер. Хосты имеют привязку к платформе, поэтому, например, вирус для Linux вероятнее всего прекратит работу хоста под управлением ОСРВ Neutrino, как только он попытается сделать что-нибудь разрушительное.

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

Кроме того, поскольку установленные системы на основе ОСРВ Neutrino настолько сильно специализированы для выполнения конкретных приложений, что в них зачастую просто не содержится программного обеспечения, открытого для вирусных атак (возможности входа пользователя в систему, Web-браузеры, электронная почта, серверы Telnet и FTP).

Общие вопросы безопасности для ОСРВ Neutrino

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

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

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

Более подробно об этом см. раздел 3 и подразд. "Владение файлами и права доступа" раздела 6.

Проблемы безопасности, специфичные для ОСРВ Neutrino

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

Передача сообщений

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

Более подробно о микроядерной архитектуре и передаче сообщений см. в главе по микроядерной архитектуре QNX Neutrino в руководстве "Описание применения. Часть 1. Системная архитектура" КПДА.10964-01 31 01".

 pdebug

Удаленный агент отладки pdebug запускается на целевой системе и взаимодействует с отладчиком gdb на хосте. Агент pdebug может быть запущен как специализированный сервер на порте, быть порожденным процессом от сервиса inetd на входящие соединения или порожденным процессом от сервиса qconn.

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

qconn

Сервис qconn представляет собой сервер, который запускается на целевой машине и обрабатывает все входящие запросы от среды разработки IDE. Сервер qconn порождает процесс pdebug для обработки запросов на отладку, профилирует приложения, осуществляет сбор системной информации и т. д.

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

 Qnet

Qnet — это прозрачный сетевой протокол ОСРВ Neutrino. Он описан в разделе 12 данного руководства и в главе 13 руководства "Операционная система реального времени QNX Neutrino. "Описание применения. Часть 1. Системная архитектура" КПДА.10964-01 31 01.

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

Для того чтобы сделать протокол Qnet более безопасным, используйте ключи maproot и mapany, с помощью которых входящие соединения (с учетной записью root или какой-либо другой) отображаются на идентификатор заданного пользователя. Подробнее об этом см. в разделе по файлу lsm-qnet.so в руководстве "Описание программы. Часть 1. Справочник по утилитам" КПДА.10964-01 13 01.

IPSec

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

У протокола IPSec есть два режима работы:

Примечание. Поддержка протокола IPSec может изменяться по мере доработки протокола.

Более подробно об этом см. в разделе IPSec в руководстве по библиотекам "Neutrino Library Reference". По вопросу включения протокола IPSec см. подразд. "Распознавание устройств" раздела 8.

Установка межсетевого экрана

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

Для создания межсетевого экрана в среде ОСРВ Neutrino применяется комбинация двух механизмов:
Более подробную информацию см. в документации по OpenBSD по адресу ftp://ftp3.usa.openbsd.org/pub/OpenBSD/doc/pf-faq.pdf.