Загрузка...
Поддержи Openmeetings

среда, 15 июля 2015 г.

Режим виртуализации Linux

Если исследуемая система используется в качестве хост-системы для виртуализации Kilobyte Virtual Machine (KVM), в дополнение к двум упомянутым выше режимам используется третье состояние привилегий: режим гипервизора. Режим гипервизора использует дополнительную поддержку аппаратных средств, обеспеченную процессором. С режимом гипервизора доступны регистры процессора, которые не доступны в других двух состояниях. При помощи этих регистров реализован другой уровень трансляции адресов памяти. Кроме того, при существовании такой возможности, используется виртуализация адресного пространства ввода-вывода. Ядро Linux использует этот режим, когда включен режим виртуализации KVM. В этом случае все ядро Linux работает в режиме гипервизора.

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


среда, 8 июля 2015 г.

Уровни привилегий связанных с аппаратными средствами Linux

Понятие привилегии на примере процессоров на базе Intel или AMD реализуется таким образом: ключевым объектам, распознанным процессором, присваиваются значения от 0 до 3. Это значение называют уровнем привилегий. Следующие объекты, распознанные процессором, содержат уровни привилегий:
  • Дескрипторы содержат поле, названное уровнем привилегий дескриптора (Descriptor Privilege Level, DPL).
  • Селекторы содержат поле, названное уровнем привилегий инициатора запросов (Requestor Privilege Level, RPL). RPL предназначен для того, чтобы представлять уровень полномочий процедуры, которая порождает селектор.
  • Внутренний регистр процессора записывает текущий уровень полномочий (CPL). Обычно CPL равен DPL сегмента, который в настоящее время выполняется процессором. CPL изменяется, когда управление передается сегментам с другими значениями DPL. Рисунок ниже показывает, каким образом данные уровни привилегий могут быть интерпретированы как уровни защиты. В центре расположены сегменты, содержащие наиболее критичное программное обеспечение, обычно это ядро операционной системы. Внешние уровни предназначены для сегментов менее критичного программного обеспечения.

Ядро Linux, как и большинство других ядер операционных систем, подобных UNIX, использует только два из этих режимов выполнения. Режим с самым высоким уровнем привилегий, с уровнем привилегий процессора 0, соответствует привилегированному режиму; режим с самым низким уровнем привилегий, с уровнем привилегий процессора 3, соответствует непривилегированному режиму. Непривилегированный и привилегированный режимы, которые поддерживаются всеми процессорами, реализуют привилегии, связанные с аппаратными средствами, следующим образом:
  • Когда процессор находится в привилегированном режиме, у программы есть привилегии, связанные с аппаратными средствами, потому что она может получить доступ и изменить любые адресуемые ресурсы, такие как память, таблицы состояний страниц, адресное пространство ввода-вывода и регистры управления памятью. Это не возможно в непривилегированном режиме.
  • Когда процессор находится в привилегированном режиме, у программы есть привилегии, связанные с аппаратными средствами, потому что она может выполнить определенные привилегированные инструкции, которые не доступны в непривилегированном режиме. Таким образом любой код, который работает в привилегированном режиме, выполняется с привилегиями, связанными с аппаратными средствами. Программное обеспечение, которое работает с привилегиями, связанными с аппаратными средствами, включает:
    1. Часть ядра Linux, загружаемая в память целиком. Оно составляет значительную часть программного обеспечения, которое осуществляет управление памятью, файловый ввод-вывод и управление процессами.
    2. Отдельно загружаемые модули ядра, такие как различные модули драйверов устройства. Модуль ядра  — объектный файл, код которого может быть соединен (прилинкован) и отсоединен (отлинкован) от ядра на этапе исполнения. Код модуля ядра выполняется в ядре, как любая другая статически скомпонованная функция ядра.
Остальное программное обеспечение в системе включая пользовательские процессы, такие как оболочки, клиентское сетевое ПО и редакторы, обычно работает в непривилегированном режиме, без привилегий, связанных с аппаратным обеспечением. Процессы непривилегированного режима работают с привилегиями, связанными с аппаратным обеспечением, когда они используют системные вызовы. Выполнение системного вызова или прерываний процессора (таких как ошибки страниц), вызванное приложениями, выполняемыми в пространстве пользователя, переключает режим из пользовательского в привилегированный, и исполнение продолжается с определенного адреса в ядре, где размещен код обработчика системного вызова или обработчика прерывания.
Привилегии, связанные с аппаратным обеспечением, для архитектур процессоров, отличных от архитектуры x86:
  1. PowerPC. Эта архитектура процессора поддерживает три режима исполнения, идентифицированные битом PR (бит 49) и битом HV (бит 3) регистра состояния машины (Machine State Register, MSR) процессора. Значения 0 и для битов PR и HV указывают режим выполнения гипервизора. Битовое значение HV, равное 1 и битовое значение PR, равное 0, задают режим исполнения супервизора, или ядра. Битовое значение HV, равное 1, и битовое значение PR, равное 1, задают пользовательский режим исполнения.
  2. SystemZ Системы System Z также поддерживают два режима исполнения, идентифицированные битом задачного режима (бит 15) регистра состояния программы (Program Status Word, PSW) процессора. Значение 0 указывает режим выполнения супервизора, или ядра, значение 1 указывает задачный режим, или пользовательский режим исполнения.
  3. Процессоры ARM работают в различных режимах: пользовательском, режиме быстрого прерывания, режиме прерывания, режиме супервизора, режиме аварийного прерывания и системном режиме. У каждого режима есть свой собственный стек и среда, в которой он существует. В руководствах ARM эти режимы указаны как различные, однако эти различия касаются не области, связанной с их уровнями привилегий, а их целей. В ARM есть по существу два уровня полномочий: в руководствах они называются привилегированные режимы и непривилегированные режимы. Из упомянутых выше режимов, пользовательский режим - единственный непривилегированный режим, в то время как все остальные - привилегированные режимы для данной архитектуры. Эти режимы  — просто состояния, в котором находится процессор, в случае определенного типа исключения, или определенного типа прерывания (IRQ).
  • Режим супервизора  — стандартный режим работы ядра, в котором, как ожидается, он будет работать.
  • Системный режим не переключается на ни на какой общедоступный вектор. Он похож (на основании описания, приведенного в руководстве, и факта, что ни одно из определенных прерываний фактически не переключается в системный режим) на прерывание системного управления #SMI (System Management Interrupt), которое переключается в режим системного управления на персональном компьютере. После переключения в системный режим ядро будет обрабатывать программное прерывание (SWI), затем переключится в пользовательский режим.
  • В режим аварийного прерывания процессор переключается в случае, аналогичном случаю ошибки страницы в архитектуре x86. Процессор переключается в привилегированный режим, а именно в режим аварийного прерывания, упомянутый выше. Большинство ядер ARM просто принимает во внимание факт, что процессор находился в режиме аварийного прерывания при входе в ядро, затем переключаются на режим супервизора и обрабатывают исключение.
  • Режимы прерывания и быстрого прерывания  — почти одно и то же, за исключением того, что режиму быстрого прерывания FIQ назначается его собственный набор регистров (регистры фактически переключаются с вызывающей стороны, однако, их имена все еще сохраняются (r8, например, все еще будет называться r8 в вашей сборке; однако вы должны принимать во внимание, что если в регистре r8 в непривилегированном режиме содержалась информация, вы не сможете считать те же самые данные из регистра r8 в режиме FIQ); таким образом, обеспечивается возможность выполнения обработчиков IRQ, без необходимости полного сохранения контекста. По существу, как и в x86, в рассматриваемой архитектуре есть часть аппаратных средств, которые могут быть сконфигурированы ядром. Ядро, у которого есть только 7 векторов и два из них выделены только для прерываний IRQ, выдаст номер IRQ одного из двух векторов IRQ (векторов прерываний IRQ или быстрых прерываний FIQ). Для устройства, сконфигурированного таким образом, что оно отправляет сигналы IRQ на вектор IRQ, процессор, получив сигнал прерывания на векторе IRQ, переключится в привилегированный режим в состоянии режима IRQ. Для прерывания, полученного на векторе быстрых прерываний (FIQ), процессор переключится в привилегированный режим, но в состоянии режима FIQ.
  • В неопределенный режим процессор переключается при возникновении на ЦПУ неопределенного исключения.


вторник, 7 июля 2015 г.

Принципы идентификации TSF

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

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

Файл может быть включен в TSF как следствие одной или нескольких из следующих причин:
  • Он содержит код, такой как ядро, модуль ядра и драйверы устройств, который работает в привилегированном аппаратном состоянии процессора.
  • Он относится к реализации политики безопасности системы.
  • Он предоставляет разрешение на SUID или SGID привилегированному пользователю (например, учетной записи root) или группе пользователей.
  • Он предоставляет одну или несколько возможностей переопределить установленные системой правила безопасности для пользователя, осуществляющего вызов.
  • Он запущен как демон, выполняющийся с полномочиями пользователя root или с системным UID / GID (например, процесс, запущенный как /etc/rc.d/init.d).
  • Он представляет собой программное обеспечение, которое должно функционировать определенным образом, чтобы поддерживать механизмы безопасности системы.
  • Он требуется для выполнения функций системного администрирования.
  • В его состав входят данные TSF или конфигурационные файлы.
  • В его состав входят библиотеки, связанные с программами TSF.
  • Он запущен как приложение с полномочиями, отличными от полномочий вызвавшего его пользователя; например, с использованием таких механизмов как udev, PolicyKit, modprobe, или даже ядра.
  • Он предоставляет одну или более возможностей переопределения MLS для вызвавшего его пользователя.
Есть различие между ПО, не относящимся к TSF, выполняемым в непривилегированном режиме, которое может загружаться и выполняться в системе, и программным обеспечением, которое должно быть исключено из системы. Чтобы удостовериться, что опасное программное обеспечение не может быть использовано для нарушения политики безопасности системы, используются следующие методы проверки:
  • Добавление модулей ядра не разрешено.
  • Устанавливаемое программное обеспечение может изменить конфигурацию (например, биты режима) таким образом, чтобы программа не могла нарушить политику безопасности.
  • Добавление программ с включенным битом SUID с UID пользователя root или системным UID.
  • Добавление программ с включенным битом SGID с GUID пользователя root или системным GUID.
  • Дополнение битов, отвечающих за возможности программ, включено.
  • Добавление демонов, выполняющихся под учетной записью root или системным UID / GID.
  • Изменения набора правил для платформ, которые позволяют порождать процессы с различными полномочиями, такими как udev или PolicyKit.
  • Добавление программ с возможностями переопределения MLS.

понедельник, 6 июля 2015 г.

Работа и администрирование системы Linux

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

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

Интерфейсы TSF

Интерфейсы TSF включают локальные интерфейсы, предоставляемые каждым узловым компьютером и сетевыми клиент-серверными интерфейсами, предоставляемыми парами узловых компьютеров. Локальные интерфейсы, предоставляемые каждым отдельным узловым компьютером, включают следующие интерфейсы ядра:

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

2. Несмотря на то, что с технической точки зрения следующие интерфейсы ядра представляют собой семантическое расширение системных вызовов open, ioctl или системных вызовов, связанных с сокетами, их нужно считать независимыми интерфейсами во время анализа безопасности:
  • Файлы устройства: файлы устройства разрешают прямой доступ к аппаратным ресурсам. Доступ устанавливается на чтение, запись и/или исполнение функции mmap, или вызов ioctls для реализации более определенных механизмов доступа. Кроме того, некоторое ограниченное число файлов устройства предоставляют доступ к внутренним структурам данных ядра, используя семантику файловой системы, а также ioctls.
  • Виртуальные файловые системы: виртуальные файловые системы обеспечивают доступ к внутренним структурам данных ядра, используя семантику файловой системы. Доступ ограничен следующими операциями: чтение, запись и/или вызов функции mmap.
  • Сетевые сокеты, использующие протокол AF_NETLINK: сокеты netlink обеспечивают доступ к внутренним структурам данных ядра используя сетевую семантику. Доступ ограничен операциями отправки и/или получения информации.
  • Сетевые сокеты, использующие протокол PF_KEY: сокеты PF_KEY используются для взаимодействия с логикой преобразования сетевых пакетов внутри ядра.
  • 3. Все анализаторы/синтаксические анализаторы сетевых протоколов, реализованные ядром.

Следующий список содержит протоколы, доступные в исследуемой конфигурации:
 — Ethernet
 — ARP
 — Семейство протоколов TCP/IP
 — Маркированная передача с использованием протоколов IPSec
 — CIPSO
Следующие интерфейсы реализованы доверенными процессами в пространстве пользователя:

  • Сетевые интерфейсы, предоставляемые парами узлов вычислительной сети SSHv2 и IKEv1
  • Символьные массивы argv и envp, которые являются параметрами системного вызова execve. Эти два массива могут быть определены выполняемым приложением. Обратите внимание на то, что ряд переменных окружения, которым можно предоставить использование envp, реализованы библиотеками, которые обычно загружаются большинством, если не всеми, приложениями (например, библиотека C).
  • Файлы, являющиеся частью базы данных TSF, которые определяют параметры конфигурации, используемые функциями безопасности.
  • Интерфейсы межпроцессного взаимодействия, экспортированные приложением.
  • Вызовы гипервизора, а также имитация и эмуляция инструкции, реализованная ядром Linux для поддержки среды виртуализации KVM. Это включает имтиацию и эмуляцию аппаратных средств, поддерживаемые ядром Linux.
Интерфейсы, которые не рассматриваются как интерфейсы TSF:

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

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

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

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

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

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

4. В случае, если вычислительная среда обеспечивает среду виртуализации, такую как z/VM или PR/СМ в системах s390x или POWER LPAR в системах IBM POWER, спроектированные интерфейсы гипервизора среды виртуализации (как вызовы гипервизора) не рассматривают как интерфейсы TSF, т.к. они недоступны непривилегированным процессам в задачном режиме работы вычислительной системы и не реализуют функции безопасности. Следует особо отметить, что функциональные возможности гипервизора, реализованные ядром Linux и его интерфейсами, не относится к рассматриваемому здесь случаю.

5.Состояние режима системного управления (SMM, System Management Mode) процессоров, основанных на архитектуре Intel, не относится к области безопасности, поскольку программное обеспечение, выполняющееся в этом состоянии, не реализует функции безопасности. Кроме того, непривилегированный код не может получить доступ или изменить программное обеспечение, выполняющееся в этом состоянии процессора.

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

Политика безопасности Linux

Пользователь  — авторизованное лицо, обладающее учетной записью. Пользователи могут использовать систему одним из следующих способов:

  • Взаимодействуя непосредственно с системой через сеанс в консоли (в этом случае пользователь может использовать дисплей, предоставленный в качестве физической консоли).
  • Взаимодействуя непосредственно с системой через сеанс в терминале с последовательным доступом.
  • Посредством отложенного выполнения заданий, используя механизм cron.
  • При помощи служб различных приложений, получая доступ к этим службам локально или удаленно.
  • Используя среды виртуальных машин, получая доступ к этим средам локально или удаленно.
Пользователь должен выполнить вход в локальной системе, чтобы получить доступ к защищенным ресурсам системы. После аутентификации пользователь может получить доступ к файлам или выполнить программы на локальном компьютере, либо выполнить сетевые запросы к другим компьютерам в системе. Единственные субъекты в системе  — процессы. Процесс состоит из адресного пространства и контекста исполнения. Процесс ограничен компьютером; не существует никакого механизма, позволяющего диспетчеризировать процесс, чтобы запустить его удаленно (по TCP/IP) на другом узле. У каждого процесса есть идентификатор процесса (PID), который уникален на локальном компьютере, где выполняется процесс, однако идентификатора процессов не уникальны в пределах всех систем. Например, у каждого узла в системе есть процесс init, идентификатор которого PID=1. Далее в этой статье объясняется, как родительский процесс создает дочерний процесс, создавая его клон с помощью системного вызова clone, fork или vfork; дочерний элемент тогда может использовать системный вызов execve, чтобы загрузить новую программу.

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


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

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

В дополнение к политике DAC, Linux также осуществляет политику MAC для всех именованных объектов. Политика DAC осуществляется первой, а политика MAC применяется, только если DAC не запрещает разрешенные ею операции. Политика MAC не авторитетная, т.е. отказ в доступе, определенный политикой DAC, не может быть переопределен политикой MAC. Реализация политики MAC, означает ее различное применение к различным классам объектов; во всех случаях в основе этой политики лежат данные о домене пользователя и типе объекта.

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

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

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

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

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

Архитектура системы обеспечивает самозащиту TSF и механизмы изоляции процессов.