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.
Используя приведенную
классификацию, можно посмотреть на систему с точки зрения
того, для каких атак система наиболее уязвима и что нужно
сделать для предотвращения имеющейся уязвимости.
Вирусы
Под вирусом обычно
понимается специальная инфицирующая программа, которая
запускает на компьютере некоторый код (например, троянская
программа). Для вирусов необходим хостовый компьютер и точка
входа.
В качестве точек входа для
вирусов используются:
-
открытый интерфейс (например, ActiveX) —
ничего подобного нет в ОСРВ Neutrino;
-
"дыра" в системе безопасности (например,
возможность переполнения буфера) — это имеет место
при наличии дефектов в конкретных услугах, основанных на
стандартных промышленных программах общего применения; у
этого варианта мало возможностей, поскольку мы
поставляем только ограниченный набор стандартных (BSD)
услуг.
Для вируса
хосты являются интерфейсами с системными вызовами, которые
доступны из точки входа (инфицированная программа),
например, программа 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 является
протоколом безопасности для уровня Интернета. Протокол можно
использовать, например, для установления безопасного
туннельного соединения между компьютерами или сетями. В него
входят указанные далее два подпротокола.
-
AH (Authentication Header, аутентификационный
заголовок) — гарантирует целостность IP-пакетов и
защищает их от изменений и подмены на промежуточных
этапах передачи за счет присоединения криптографической
контрольной суммы, вычисляемой с помощью односторонней
хеш-функции.
-
ESP (Encapsulated Security Payload, протокол
шифрования) — защищает содержимое IP-пакетов от
прослушивания за счет шифрования криптографическим
алгоритмом с секретным ключом.
У протокола
IPSec есть два режима работы:
-
транспортный — защищает соединение типа
peer-to-peer между узлами конечных пользователей;
-
туннельный — поддерживает операции
инкапсуляции типа IP-in-IP, предназначен для организации
безопасных шлюзов, например, VPN-конфигураций.
Примечание.
Поддержка протокола IPSec может изменяться по мере доработки
протокола.
Более подробно об этом см. в
разделе IPSec в руководстве по библиотекам "Neutrino Library
Reference". По вопросу включения протокола IPSec см.
подразд. "Распознавание устройств" раздела 8.
Установка межсетевого экрана
При построении зданий или
судов для предотвращения распространения огня в них
используют специально сконструированные стены. В компьютерах
для предотвращения или ограничения доступа к определенным
приложениям или системам и для защиты систем от
злонамеренных атак используют межсетевые экраны
(firewall).
Для создания межсетевого
экрана в среде ОСРВ Neutrino применяется комбинация двух
механизмов:
-
фильтрация IP-пакетов для контроля над доступом
к вашей машине;
-
трансляция сетевых адресов (NAT), известная
пользователям Linux как маскарадинг (masquerading), с
помощью которой можно организовать выход нескольких
компьютеров в сеть через общий внешний интерфейс.
Более подробную информацию см.
в документации по OpenBSD по адресу
ftp://ftp3.usa.openbsd.org/pub/OpenBSD/doc/pf-faq.pdf.