Объект доступа в системе безопасности windows

Разграничения прав доступа в Windows: разграничения прав доступа на уровне операционной системы и с помощью Secret Net

Разграничение прав доступа в Windows
Статья о разграничении прав доступа в операционных системах Windows: дискретном и мандатном. В статье рассматриваются разграничения прав доступа к папкам и файлам на уровне операционной системы Windows и с помощью Secret Net.

Содержание:

  • Разграничение прав доступа на уровне операционной системы (дискретное разграничение в Windows)
  • Разграничение прав доступа с помощью Secret Net

Дискретное разграничение прав доступа

Для того, что бы настроить правила безопасности для папок нужно воспользоваться вкладкой «Безопасность». В Windows XP эта вкладка отключена по умолчанию. Для ее активации нужно зайти в свойства папки (Меню «Сервис» -> «Свойства папки» ->  «Вид») и снять флажок «Использовать простой общий доступ к файлам».

Свойства папки

Основные права доступа к папкам

В файловой системе NTFS в Windows XP существует шесть стандартных разрешений:

  1. Полный доступ;
  2. Изменить;
  3. Чтение и выполнение;
  4. Список содержимого папки;
  5. Чтение;
  6. Запись.

Основные права доступа к папкам Windows XP

В Windows 10 нет стандартного разрешения «Список содержимого папки».

Основные права доступа к папкам Windows10

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

Права доступа назначаются пользователю для каждого объекта (папки и файла). Для назначения прав нужно открыть меню «Свойства» и выбрать вкладку «Безопасность». После этого выбрать необходимо пользователя, которому будут назначаться разрешения.

Создайте папки по названиям разрешений, всего у вас будет 6 папок для Windows XP и для Windows 10. Я рассмотрю на примере Windows XP, на «десятке» вам будет проще. Скачайте папки по ссылке и скопируйте в них содержимое (не сами папки, а то, что в них находится).

Каталоги для примера

Отройте вкладку «Безопасность» в свойствах папки «Список содержимого папки». У меня есть пользователь user, вы можете добавить своего. Для того, что бы изменить право на объект нужно выбрать пользователя и указать ему разрешение, в данном случае «Список содержимого папки». Затем нажмите «Применить» и «ОК».

Выбор пользователя

Выбор пользователя
Список содержимого
Список содержимого

По аналогии установите права для соответствующих папок.

После установки прав доступа проверьте их. Для этого войдите в операционную систему под пользователем, для которого устанавливали права, в моем случае это user.

Смена пользователя

«Список содержимого папки» — предоставляет возможность просмотра файлов и папок в текущем каталоге. То есть вы можете посмотреть, что есть в папке, но запустить и открыть ничего не получиться.

«Чтение» — предоставляет возможность открывать в папке все файлы, кроме исполняемых файлов (например, с расширением .exe).

«Чтение и выполнение» — предоставляет возможность открывать в данном каталоге все файлы.

«Запись» — предоставляет возможность добавления файлов в папку без права на доступ к вложенным в него объектам, в том числе на просмотр содержимого каталога.

«Изменить» — предоставляет возможность открывать и создавать (изменять) файлы в папке.

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

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

Содержимое папки "Список содержимого"

Содержимое папки «Список содержимого»
Ошибка запуска исполняемого файла
Ошибка запуска исполняемого файла
Ошибка текстового файла
Ошибка текстового файла

Элементы разрешений на доступ

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

Просмотреть элементы разрешений на доступ можно, нажав на кнопку «Дополнительно» во вкладке «Безопасность» и выбрав любой элемент разрешений.

Элементы разрешений на доступ

Поэкспериментируйте с элементами и проверьте, как они работаю.

Элементы разрешений на доступ для записи

Элементы разрешений на доступ для записи

Владелец файла

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

Узнать, какой пользователь является владельцем файла или папки можно на закладке «Владелец» в дополнительных параметрах безопасности.

Владелец файла в NTFS

Наследование прав доступа

В файловой системе NTFS поддерживается наследование разрешений. Если вы устанавливаете разрешение на папку, то оно наследуется для всех вложенных файлов и папок.

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

Для изменения унаследованных разрешений нужно открыть вкладку «Разрешения» в дополнительных параметрах безопасности. Там же можно отключить наследование разрешений.

Отключение наследования разрешений

Запреты

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

Запреты на объекты в файловой системе NTFS

Запреты на объекты в файловой системе NTFS

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

Действующие разрешения

Разграничение прав доступа с помощью Secret Net (на примере версии 5.1)

При использовании Secret Net доступ к файлам осуществляется, в случае если пользователю присваивается соответствующий уровень допуска. В примере я использую Windows XP с установленным программным продуктом Secret Net 5.1.

Первым делом нужно запустить локальные параметры безопасности от имени Администратора: «Пуск –> Программы –> Secret Net 5 –> Локальная политика безопасности».

Локальная политика безопасности

Далее необходимо перейти в «Параметры Secret Net» –>  «Настройка подсистем» –> «Полномочное управление доступом: название уровней конфиденциальности».

Полномочное управление доступом: название уровней конфиденциальности

Введите названия уровней. У меня это:

  • Низший – Общедоступно.
  • Средний – Конфиденциально.
  • Высший – Секретно.

Название уровней доступа

Настройка субъектов

Настройка субъектов в Secret Net производится в группе «Локальные пользователи и группы». Зайдите в меню «Пуск» –>  «Программы» –>  «Secret Net 5» –> «Управление компьютером» –>  «Локальные пользователи и группы» –> «Пользователи».

Что бы настроить права администратора нужно выбрать учетную запись «Администратор» и перейти на вкладку Secret Net 5. Установим уровень доступа «секретно».

Настройка субъектов

Далее установите все флажки.

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

Уровни доступа пользователя

После установки всех флажков нажмите «Применить» и «ОК».

Создадим нового пользователя. Для этого нужно перейти «Локальные пользователи и Группы» –> «Пользователи». Создайте новых пользователей, я назову их «Конфиденциальный» и «Секретный». По аналогии с пользователем Администратор  установите для новых пользователей аналогичные уровни доступа и настройки как на рисунках ниже.

Создание нового пользователя

Уровни доступа пользователей

Настройка объектов

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

Автоматическое присваивание категории конфиденциальности можно включить или отключить в окне настройки свойств папки. Этот параметр может редактировать только пользователь, у которого есть права на «Редактирование категорий конфиденциальности».

Автоматическое присвоение категорий конфиденциальности

Изменение категорий конфиденциальности

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

Попробуйте создать в паке новый файл или каталог, а после чего изменить ее уровень (повысить) и установить флажок «Автоматически присваивать новым файлам». У вас появиться окно «Изменение категорий конфиденциальности».

Выберите пункт «Присвоение категорий конфиденциальности всем файлам в каталоге» и нажмите «ОК» для присвоения категории конфиденциальности всем файлам кроме скрытых и системных файлов.

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

Если пользователь с категорией «Общедоступно» попробует прочитать или удалить документ, то он получит соответствующие ошибки.

Отказано в доступе

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

Если вы зайдете под пользователем «Секретный» то вы сможете повысить уровень конфиденциальности файлов и работать с ними.

Повышение уровня конфиденциальности

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

Контроль потоков данных

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

Для этого нужно запустить «Локальные параметры безопасности»: «Пуск» – «Программы» –> «Secret Net 5» –>  «Локальная политика безопасности», затем перейти в группу «Параметры Secret Net» –>  «Настройки подсистем» и выбрать параметр  «Полномочное управление доступом: Режим работы» и включить контроль потоков. Изменения вступят в силу после перезагрузки компьютера.

Полномочное управление доступом: Режим работы

Если зайти (после перезагрузки) под пользователем «Секретный» появиться выбор уровня конфиденциальности для текущего сеанса. Выберите секретный уровень.

Выбор уровня конфиденциальности

Если вы откроете файл с уровнем «Конфиденциально», отредактируете его и попробуете сохранить под другим именем и в другую папку, то вы получите ошибку, так как уровень сеанса (секретный) выше, чем уровень файла (конфиденциальный) и включен контроль потоков данных.

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

Разграничение
доступа к объектам

С объектом
разграничения доступа связывается
дескриптор безопасности SD
(security
descriptor),
содержащий следующую информацию:

  • идентификатор
    безопасности (SID)
    владельца объекта;

  • идентификатор
    безопасности первичной группы владельца;

  • дискреционный
    список
    контроля
    доступа
    (discretionary access control list, DACL);

  • системный
    список контроля доступа (system
    access control list, SACL).

Списки управления
доступом

  1. Список
    SACL
    управляется администратором системы
    и предназначен для аудита безопасности.

  2. Список
    DACL
    управляется владельцем объекта и
    предназначен для идентификации
    пользователей и групп, которым
    предоставлен или запрещен определенный
    тип доступа к объекту. Каждый элемент
    списка DACL
    (access
    control
    entry,
    ACE)
    определяет права доступа к объекту
    одному пользователю или группе.

Состав ACE

Каждый ACE содержит
следующую информацию:

  • идентификатор
    безопасности SID субъекта, для которого
    определяются права доступа;

  • маска
    доступа (access
    mask,
    AM), которая специфицирует контролируемые
    данным ACE права доступа;

  • тип ACE;

  • признак наследования
    прав доступа к объекту, определенных
    для родительского объекта.

Разграничение
доступа к объектам

Элементы
списка DACL
могут быть двух типов – элементы,
запрещающие специфицированные в них
права доступа (Access-allowed
ACE), и элементы, запрещающие определенные
в них права доступа (Access-denied
ACE). Элементы для запрещения субъектам
использования определенных прав доступа
должны размещаться в «голове» списка,
до первого из элементов, разрешающих
использование субъектом тех или иных
прав доступа.

Права доступа в
Windows

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

  • Стандартные
    определяют возможность доступа к
    объекту по методу, применимому к любому
    объекту (изменение владельца, изменение
    списка DACL, удаление и т.д.).

Специальные
права для файлов и папок

Стандартные права

Общие права

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

  • Чтение
    (чтение DACL,
    чтение данных, чтение атрибутов и
    расширенных атрибутов, использование
    объекта для синхронизации);

  • Запись
    (чтение DACL,
    запись и добавление данных, запись
    атрибутов и расширенных атрибутов,
    использование объекта для синхронизации).

Разграничение
доступа к объектам

Маркер
доступа субъекта, обращающегося к
некоторому объекту, поступает в локальную
службу безопасности LSA.
От LSA
маркер доступа поступает к монитору
безопасных ссылок (security
reference
monitor,
SRM),
который просматривает DACL
из дескриптора безопасности SD
соответствующего объекта и принимает
решение R
о предоставлении доступа субъекту или
отказе в доступе. Получив от SRM
результат R,
LSA
передает его субъекту, запросившему
доступ к объекту.

Алгоритм проверки
прав доступа к объекту

  1. Если
    SID
    из маркера доступа субъекта AT
    не совпадает с SID,
    содержащемся в элементе ACE
    списка контроля доступа к объекту, то
    осуществляется переход к следующему
    ACE,
    иначе переход к п. 2.

  2. Если в
    элементе ACE
    запрещается доступ к объекту для
    субъекта с данным SID,
    но этот субъект является владельцем
    объекта и запрашиваемая маска доступа
    содержит только попытку доступа к
    объекту по методу «чтение (или) изменение
    дискреционного списка контроля доступа
    к объекту», то доступ субъекта к объекту
    разрешается, иначе осуществляется
    переход к п.3.

  3. Если в элементе
    ACE запрещается доступ к объекту для
    субъекта с данным SID, то сравниваются
    запрашиваемая маска доступа и маска
    доступа, определенная в ACE. Если при
    сравнении находится хотя бы один общий
    метод доступа, то попытка доступа
    субъекта к объекту отклоняется, иначе
    происходит переход к следующему ACE.

  4. Если в
    элементе ACE
    разрешается доступ к объекту для
    субъекта с данным SID,
    то также сравниваются запрашиваемая
    маска доступа и маска доступа, определенная
    в ACE.
    Если при этом маски доступа полностью
    совпадают, то доступ субъекта к объекту
    разрешается, иначе происходит переход
    к следующему ACE.

  5. Если
    достигнут конец списка DACL
    из дескриптора безопасности объекта,
    то попытка доступа субъекта к объекту
    отклоняется.

  • Если
    DACL
    объекта пуст, то любой доступ к нему
    запрещен всем субъектам, за исключением
    владельца объекта, которому разрешены
    чтение и (или) изменение списка контроля
    доступа к объекту.

  • Если у
    объекта нет дескриптора безопасности
    (например, у папок и файлов, размещенных
    на дисках под управлением файловой
    системы FAT),
    то любые пользователи и группы могут
    получить любые права доступа к данному
    объекту.

Контейнерные и
неконтейнерные объекты

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

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

Назначение
дескрипторов безопасности вновь
создаваемым объектам

  1. На
    основе явно заданного дескриптора
    безопасности (например, при вызове
    системной функции CreateFile).

  2. На основе механизма
    наследования (если при создании объекта
    дескриптор безопасности не задается).

  3. Из маркера доступа
    субъекта, создающего объект (если
    наследование невозможно).

Соседние файлы в предмете Защита информации

  • #
  • #
  • #
  • #
  • #
  • #
  • #

Ограничение доступа, права пользователей… Эти слова звучат сладкой музыкой для любого системного администратора, который заботится о безопасности сети, равно как и для пользователя, который следит за конфиденциальностью своей информации. К счастью, в операционных системах Windows NT и Windows 2000 реализованы специальные средства, позволяющие решать многие проблемы защиты информации.

Какие же механизмы включаются, когда мы выбираем пункт меню «Безопасность» из диалогового окна свойств файла? В данной статье я постараюсь ответить на этот вопрос. В качестве примера возьмем технологии получения списка логических дисковых разделов, локальных разделяемых ресурсов, а также рассмотрим две удобные утилиты, одна из которых входит в поставку NT, а вторая — в Resource Kit.

В операционной системe NT существует понятие «защищенный объект» (securable object). Это объект, доступ к которому контролируется и ограничивается операционной системой. В семействе операционных систем производства Microsoft лишь NT и Windows 2000 обеспечивают подобный сервис. К таким объектам относятся: файлы и каталоги файловой системы NTFS; каналы (pipes); процессы и потоки (Process and threads); файлы, спроецированные в память (mapped files); маркеры доступа (access tokens); объекты управления окнами (Window-management objects); разделы реестра (registry keys); службы Win32 (services); принтеры (Printers); разделенные сетевые ресурсы (Network shares); объекты синхронизации процессов (Interprocess synchronization objects — events, mutexes, semaphores, waitable timers); задачи (Job objects).

В модели ограничения доступа Win32 существует два базовых понятия:

Access tokens — маркеры доступа (МД), содержащие информацию о пользователе;

Security descriptors — описатели защиты, содержащие информацию о правах тех или иных учетных записей на доступ к объекту.

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

При создании защищенного объекта ОС присваивает ему описатель защиты (security descriptor, SD) — той защиты, которая имеется у пользователя, создающего объект, или же той, что задана по умолчанию. Приложения Win32 могут использовать функции API как для получения, так и для изменения информации о доступе к объектам.

Security descriptor содержит информацию о владельце объекта, а также может включать следующие списки контроля доступа Access-Contol List (ACL):

Discretionary access-control list (DACL) — разграничительные списки контроля доступа, в которых содержатся пользователи и группы с соответствующими правами на доступ к объекту;

System access-control list (SACL) — системные списки контроля доступа, которые определяют, как осуществляется аудит попыток доступа к объекту.

Список контроля доступа содержит список записей контроля доступа (access-control entries, ACEs). Каждая запись содержит набор битовых флагов и идентификатор SID попечителя (trustee) — пользователя или группы, к которой эти права применены.

Остановимся на упомянутых объектах более подробно.

Security Descriptor

Эти объекты содержат информацию о безопасности, соотнесенную с тем или иным защищенным объектом. Физически этот объект представляет собой структуру SECURITY_DESCRIPTOR, описанную в файле Windows.h:

typedef struct _SECURITY_DESCRIPTOR {
 BYTE Revision;
 BYTE Sbz1;
 SECURITY_DESCRIPTOR_CONTROL Control;
 PSID Owner;
 PSID Group;
 PACL Sacl;
 PACL Dacl;
} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;

Структура SECURITY_DESCRIPTOR используется для доступа к информации о безопасности объектов. Но изменять поля непосредственно в данной структуре невозможно. Для этого необходимо использовать специальные функции (например, SetSecurityDescriptorOwner(…)). Кроме того, Win32 API предоставляет интерфейс для создания и инициализации описателя SD для новых объектов.

Access token

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

Идентификатор защиты SID

Уникальный параметр переменной длины, определяющий учетную запись (account) и хранящийся в базе данных системы безопасности Windows NT, — вот что такое SID. В начале каждого сеанса, как только пользователь идентифицирован в системе, его SID извлекается из БД и помещается в маркер доступа. Далее это значение используется операционной системой при всех действиях пользователя с защищенными объектами.

Существует несколько стандартных SID, применяемых для учетных записей:

NULL — S-1-0-0 — SID группы, в которую не входят пользователи. Используется лишь тогда, когда SID неизвестен;

World — S-1-1-0 — группа, включающая в себя всех пользователей;

Local — S-1-2-0 — пользователи, имеющие непосредственный, физический доступ к системе;

Creator Owner ID — S-1-3-0 — SID, которым заменяется SID пользователя, создавшего объект. Этот SID используется для унаследованных записей ACE (см. ниже);

Creator Group ID — S-1-3-1 — значение, заменяющее SID основной группы, к которой принадлежит пользователь, создавший объект. Этот SID, как и предыдущий, используется для унаследованных записей ACE.

Список управления доступом ACL

ACL представлен структурой, описанной в Windows.h:

typedef struct _ACL { 
 BYTE AclRevision; 
 BYTE Sbz1; 
 WORD AclSize; 
 WORD AceCount; 
 WORD Sbz2; 
} ACL;

Для Windows NT версий 3.5, 3.51, 4.0 определено максимальное число записей управления доступом, задаваемых списком управления доступом (см. статью Q166348 в базе знаний Microsoft). Оно равно 1820.

Запись управления доступом ACE

Система ограничения доступа Windows NT/2000 использует несколько типов записей ACE, которые перечислены в Таблице 1, содержащей, кроме того, и названия соответствующих этим типам структур данных.

Вполне вероятно, что в следующих версиях операционной системы появятся новые типы ACE, да и из приведенных в Таблице 1 некоторые поддерживаются только Windows 2000. Для того чтобы унифицировать процедуру анализа структур ACE, разработчики включили во все структуры _ACE одинаковую последовательность полей, которая отображается в структуре ACE_HEADER:

typedef struct _ACE_HEADER { 
 BYTE AceType; 
 BYTE AceFlags; 
 WORD AceSize; 
} ACE_HEADER; 
typedef ACE_HEADER *PACE_HEADER;

Первое поле AceType определяет тип структуры. Очевидно, что указатель на любую структуру _ACE можно преобразовать в указатель на ACE_HEAER, получить тип ACE, после чего этот указатель преобразовать в указатель на соответствующую полученному типу структуру данных. Замечу, что такой прием широко используется в различных API продуктов Microsoft.

Теперь мы имеем общее представление о том, как устроена система безопасности объектов Windows NT. Попробуем применить эти сведения на практике и написать небольшую программу. В качестве примера используется программа, позволяющая выбрать один или несколько разделов диска, которые будут отсканированы, после чего на основе собранной информации будет создан командный файл, устанавливающий права на объекты выбранного раздела. В сценарий также включается список локальных разделяемых ресурсов с правами доступа к ним. После запуска сценария создаются разделяемые ресурсы, восстанавливаются права доступа к ним и параметры безопасности для объектов файловой системы. Ниже я расскажу лишь о ключевых моментах проекта, относящихся, впрочем, не только к API системы безопасности. Полный текст программы можно найти на http://members.xoom.com/alex_ep/NTSec/sec.zip, а соответствующий дистрибутив, в который входят дополнительные модули и файл справки — на сайте http://members.xoom.com/alex_ep/NTSec/RTPermScan.zip.

Список разделов дисковых устройств

На Листинге 1 показано, как получить список логических дисков. Для этого используется функция Win-API NetServerDiskEnum. Ее первый параметр определяет сетевое имя компьютера, список накопителей которого нас интересует. Если этот параметр NULL, то берется локальный компьютер. Список дисковых накопителей возвращается в параметре lpBuf. Он имеет вид последовательности из 3 байт. Каждая последовательность содержит букву — символ диска, двоеточие и разделитель NULL. Количество прочитанных накопителей возвращается в параметре dwReded, а общее количество дисков — в dwTotal. После обработки буфер lpBuf необходимо освободить вызовом функции NetApi-BufferFree(lpBuf).

В коде Листинга 1 вызывается написанная мной функция GetParti-tionTypeEx. Она получает параметры дискового накопителя, возвращает наименование файловой системы, на нем установленной, и проверяет, поддерживает ли файловая система контроль ограничения доступа (cм. Листинг 2).

В Win32 API для получения информации о дисковом разделе используется функция

BOOL GetVolumeInformation( LPCTSTR
lpRootPathName, LPTSTR lpVolumeNameBuf-fer,
 ВWORD nVolumeNameSize, LPDWORD
 lpVolumeSerialNumber, LPDWORD
 lpMaximumComponent-Length, LPDWORD
 lpFileSystem-Flags, LPTSTR lpFileSystemName-
Buffer, DWORD nFileSystem-NameSize ).

Ее параметры описаны в Таблице 2. Чуть подробнее рассмотрим параметр lpFileSystemFlags. Это набор битовых флагов. Среди прочих определен флаг FS_PERSISTENT_ACLS. Наличие этого флага означает, что папки и файлы раздела являются охраняемыми объектами. Перед тем как получать списки ACE для того или иного объекта, неплохо убедиться, что файловая система их поддерживает. Теперь мы знаем, как это делается.

Более подробное описание данной функции можно найти в MSDN по адресу: http://msdn.microsoft.com/library/psdk/winbase/fsys_6wfi.htm.

Список записей управления доступом для защищенных объектов

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

Чтобы получить структуру ACL для именованного объекта, нужно задействовать функцию GetNmedSe-curityInfo. Среди прочих значений она возвращает указатели на DACL и SACL. Нас интересует первый из них. Теперь у нас есть вся информация для создания списка ACE. Функция GetAce позволяет пройти по всему списку заголовков ACE_HEADER, соответствующих ACL. Этой функции передаются три параметра. Первый — указатель на ACL, второй — порядковый номер ACE, указатель на который возвращается в третьем параметре (cм. Листинг 3).

Список разделяемых ресурсов и прав для них

Последний вопрос, который я хочу подробно рассмотреть, касается получения списка локальных ресурсов общего доступа (shares) и прав доступа к ним. Процедура получения прав на объекты идентична описанной процедуре получения прав на доступ к файловым объектам. Поэтому реализующий ее код включен в код процедуры, представленной в Листинге 4, и отдельно не обсуждается. Это характерно для API системы безопасности, которая предоставляет обобщенный интерфейс ко всем защищенным объектам. Действительно, с точки зрения системы ограничения доступа Windows разделяемый ресурс — такой же именованный объект, как, например, и файл. Поэтому алгоритмы работы с ними одни и те же.

Список разделяемых ресурсов предоставляется функцией

Win32 API NET_API_STATUS 
NetShareEnum( LPWSTR servername, DWORD level, LPBYTE *
bufptr, DWORD prefmaxlen, DWORD entriesread, LPDWORD
 totalentries, LPDWORD resume_handle )

возвращающей в параметре bufptr указатель на массив структур, который нужно освободить вызовом функции NetBufferFree. Подробное описание этой функции можно найти по адресу: http://msdn.microsoft.com/library/psdk/network/ntlmapi2_4l2l.htm.

Для получения SD ресурса используется функция

NET_API_STATUS NetShareGetInfo( LPWSTR 
servername, LPWSTR netname, DWORD level,
 LPBYTE *bufptr ),

описание которой находится по адресу: http://msdn.microsoft.com/library/psdk/network/ntlmapi2_18bz.htm. В параметре level передается необходимый уровень детализации информации. В соответствии с этим параметром в параметре bufptr возвращается указатель на ту или иную структуру. Уровню детализации 502 соответствует структура SHARE_INFO_502, описанная в файле Lmshare.h:

typedef struct _SHARE_INFO_502 {
 LPWSTR shi502_netname;
 DWORD shi502_type;
 LPWSTR shi502_remark;
 DWORD shi502_permissions;
 DWORD shi502_max_uses;
 DWORD shi502_current_uses;
 LPWSTR shi502_path;
 LPWSTR shi502_passwd;
 DWORD shi502_reserved;
 PSECURITY_DESCRIPTOR shi502_security_descriptor;
} SHARE_INFO_502, *PSHARE_INFO_502, *LPSHARE_INFO_502;

Для получения списка ACE используется поле shi502_security_descriptor, содержащее необходимый Security Descriptor.

Восстановление параметров безопасности

Результатом работы утилиты, которую можно загрузить по указанному адресу, является командный файл. Прекрасно, скажете вы, а что дальше? Вообще говоря, наш файл состоит из двух частей: в первой создаются и устанавливаются права доступа к разделяемым файлам и каталогам, а во второй выясняются параметры безопасности для объектов файловой системы. Для работы с разделяемыми ресурсами из командной строки в Microsoft WindowsNT (R) Resource Kit есть небольшая программа — RMTSHARE.EXE. Сценарий создан с использованием этой программы.

Параметры команды такие:

Rmtshare.exe 
serversharename=drive:path
 [/USERS:number | /UNLIMITED]
    [/REMARK:"text"]
    [/GRANT [user[:perm][ /GRANT
 user[:perm]]]]
    [/REMOVE user]

Для просмотра и установки параметров доступа к объектам NTFS используется утилита cacls.exe, входящая в WinNT.

Cacls.exe filename [/T][/E][/C][/G 
user:perm][/R user [...]][/P user:perm
 [...]] [/D user [...]]

Filename — без других параметров выводит на экран список пользователей и их прав на доступ к объекту Filename.

/T — изменяет список записей управления доступом к объекту, а если это папка, то ко всем вложенным папкам.

/E — заменяет список записей управления доступом.

/C — позволяет продолжить работу в случае ошибки отказа в доступе.

/G user:perm — устанавливает для пользователя, определяемого параметром user, права на доступ к объекту, определяемые параметром perm:

N — нет; R — чтение; W — запись; C — изменение; F — полный контроль.

/R user — удаляет для указанного пользователя права на доступ к объекту.

/P user:perm — изменяет для указанного в параметре user пользователя права на доступ к объекту, которые описываются параметром perm и могут быть следующими:

N — нет; R — чтение; W — запись; C — изменение; F — полный контроль.

/D user — запрещает применять пользователю доступ к указанному объекту.

Утилита позволяет применять маски, например *.*, в именах файлов и папок, а также указывать в одной команде несколько пользователей. В Knowledge Base описан метод использования утилиты cacls.exe для изменения прав доступа не только пользователей, но и групп к объектам файловой системы. В этом случае синтаксис сохраняется, но имена групп берутся в кавычки (Q162786).

Active Directory и доступ к информации о безопасности

В Windows 2000 реализована новая служба качественно меняющая, кроме всего прочего, и механизмы работы с объектами файловой системы. Это Active Directory. Программный интерфейс к ней называется Active Directory Service Interfaces (ADSI). ADSI представляет собой набор COM-объектов, обеспечивающий программный интерфейс к функциям службы Active Directory. Базовые объекты системы безопасности (ACL, SID, ACE и т. д.) в ADSI те же, что и описанные выше. Существенные изменения коснулись лишь механизмов манипуляции с ними. Подробнее об ADSI я планирую рассказать в следующей статье.

Александр ЭПШТЕЙН — разработчик коммерческого и свободно распространяемого ПО для Windows и UNIX. Начальник отдела разработки ПО компании «КиберПлат.КОМ». С ним можно связаться по адресу: alex_ep@hotmail.com.

Из этой статьи вы узнаете про ещё один компонент безопасности операционной системы Windows, а именно про дескрипторы безопасности.

Дескрипторы безопасности

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

Дескриптор безопасности — это информация, связанная с объектом, которая определяет, кто и какие действия с объектом может выполнять.

В дескриптор безопасности входят:

  • Номер версии модели монитора безопасности SRM.
  • Дополнительные флаги.
  • SID владельца объекта.
  • Избирательный список управления доступом — DACL. Это список, кто и какой доступ имеет к объекту.
  • Системный список управления доступом — SACL. Это список операций которые должны регистрироваться в журнале аудита безопасности.

ACL состоит из субъектов доступа (кто может обращаться к объекту) и набора прав для каждого субъекта (писать, читать, исполнять). DACL — указывает какой доступ имеет определенный субъект к этому объекту. SACL — указывает какие события нужно заносить в журнал аудита безопасности.

Практика

Давайте посмотрим дескриптор безопасности какого-нибудь процесса. Заметьте, дескриптор безопасности процесса определяет кто может что-то сделать с этим процессом, а не то что может сделать сам процесс. Посмотреть на дескриптор безопасности можно из Process Explorer. Я выбираю любой процесс svhost (процесс какой-то службы), открываю его свойства. Затем перехожу на вкладку “Securuty” и внизу нажимаю кнопку “Permision“:

Права объекта «Процесс»

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

Если погрузиться дальше, нажимаем кнопку “Дополнительно“, далее два раза щелкаем по группе “Администраторы“, и в открывшемся окне нажимаем ссылку “Отображение дополнительных разрешений“. Вы увидите такую ACE запись (записи в ACL называются ACE):

Просмотр дополнительных прав

То есть Администраторы могут запрашивать информацию о процессе.

Вот еще некоторые сведения о DACL:

  • Владельцы объекта имеют возможность редактировать DACL записи. То есть могут дать себе полные права, или дать права к этому файлу другому пользователю.
  • Запрещающие правила ACL всегда имеют приоритет над разрешающими.

Если открыть свойства файла или папки, перейти на вкладку “Безопасность“, а затем нажать кнопку “Дополнительно“. И перейти на вкладку “Действующие права доступа“, то можно выбрать пользователя и проверить его права доступа к этому файлу или каталогу:

Аудит прав файла или папки

Динамическое управление доступом (DAC)

В дополнение к перечисленному выше стоит упомянуть ещё одну технологию – динамическое управление доступом.

Механизм избирательного управления доступом, описанный выше был еще с первой версии Windows NT. Но начиная с Windows 8 и Server 2012 появилось динамическое управление доступом (DAC). Оно рассчитано на домен.

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

Дополнительно к этому на файлы и каталоги стало возможно навешивать различные теги.

Благодаря расширению маркера доступа и тегам, DAC позволяет настраивать гибкие правила. Например, можно настроить такое поведение, чтобы сотрудник из Москвы мог прочитать файлы только с определённым тегом.

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

Вот ещё примеры действий, которые можно совершить используя DAC:

  • дать доступ пользователю к файлу только с определенного компьютера, при этом с других компьютеров у него не будет доступа;
  • открыть доступ к файлу сотруднику, если у него соответствующая должность;
  • дать доступ пользователю из определённого города, к файлу с определённым тегом.

Конфигурация DAC определяется в Active Directory и распространяется через групповые политики. Для этого был расширен протокол Kerberos. Подробнее про DAC может посмотреть в этом видео.


Вернуться к оглавлению

Сводка

Дескрипторы безопасности и управление доступом

Имя статьи

Дескрипторы безопасности и управление доступом

Описание

Из этой статьи вы узнаете про ещё один компонент безопасности операционной системы Windows, а именно про дескрипторы безопасности

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

Введение

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

Для построения формальных моделей безопасности принято представлять ИС в виде совокупности взаимодействующих сущностей — субъектов (s) и объектов (o).

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

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

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

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

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

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

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

Инструментальные средства управления безопасностью

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

Для управления системой безопасности в ОС Windows имеются разнообразные и удобные инструментальные средства. В частности, в рамках данной темы потребуется умение управлять учетными записями пользователей при помощи панели «Пользователи и пароли». Кроме того понадобится контролировать привилегии пользователей при помощи панели «Назначение прав пользователям». Рекомендуется также освоить работу с утилитой просмотра данных маркера доступа процесса WhoAmI.exe, утилитами просмотра и редактирования списков контроля доступа (cacls.exe, ShowACLs.exe, SubInACL,exe, SvcACL.exe), утилитой просмотра маркера доступа процесса PuList.exe и рядом других.

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

Пользователи и группы пользователей

Каждый пользователь (и каждая группа пользователей) системы должен иметь учетную запись (account) в базе данных системы безопасности. Учетные записи идентифицируются именем пользователя и хранятся в базе данных SAM (Security Account Manager) в разделе HKLM/SAM реестра.

Учетная запись пользователя содержат набор сведений о пользователе, такие, как имя, пароль (или реквизиты), комментарии и адрес. Наиболее важными элементами учетной записи пользователя являются: список привилегий пользователя в отношении данной системы, список групп, в которых состоит пользователь, и идентификатор безопасности SID (Security IDentifier). Идентификаторы безопасности генерируются при создании учетной записи. Они (а не имена пользователей, которые могут не быть уникальными) служат основой для идентификации субъектов внутренними процессами ОС Windows.

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

Создание учетной записи пользователя

Основным средством создания учетной записи пользователя служит Win32-функция NetUserAdd, принадлежащая семейству сетевых ( Net ) функций ОС Windows, подробное описание которой имеется в MSDN. При помощи Net -функций можно управлять учетными записями пользователей, как на локальной, так и на удаленной системе (более подробно об использовании Net -функций можно прочитать в
[
Рихтер
]
,
[
Рихтер, Кларк
]
).

Для успешного применения Net -функций достаточно знать следующее. Во-первых, Net -функции входят в состав библиотеки NetApi32.Lib, которую нужно явным образом добавить в проект, а прототипы функций объявлены в заголовочном файле Lm.h. Во-вторых, Net -функции поддерживают строки только в формате Unicode (см.
«Разработка Win32 приложений. Инструментальные средства изучения системы»
). Наконец, информацию об учетной записи Net -функции нужно передавать с помощью специализированных структур, наименее сложная из которых структура USER_INFO_1.

Прогон программы создания новой учетной записи

Для иллюстрации рассмотрим несложную программу, задача которой — создать новую учетную запись для пользователя «ExpUser».

#ifndef UNICODE
#define UNICODE
#endif

#include <stdio.h>
#include <windows.h> 
#include <lm.h>


BOOL CreateUser(PWSTR pszName, PWSTR pszPassword) {
  USER_INFO_1 ui = {0};
  NET_API_STATUS nStatus;
  ui.usri1_name = pszName;              // имя пользователя
  ui.usri1_password = pszPassword;      // пароль пользователя
  ui.usri1_priv = USER_PRIV_USER;       // обычный пользователь

  nStatus = NetUserAdd(NULL, 1, (LPBYTE)&ui, NULL);
  return (nStatus == NERR_Success);
}


void main() {
   if(!CreateUser(L"ExpUser", L"123"))
      printf("A system error has occurred");
   }

Результат работы программы — создание нового пользователя — можно проконтролировать при помощи апплета панели управления «Локальные пользователи». После создания пользователя целесообразно наделить его минимальным набором прав, например, правом входа в систему. Самое разумное — включить пользователя в какую-либо группу, например, в группу обычных пользователей. В этом случае вновь созданный пользователь получит привилегии члена данной группы. Это можно сделать при помощи того же апплета. О том, как обеспечить пользователя необходимыми привилегиями программным образом, будет рассказано ниже.

Для удаления учетной записи пользователя используется функция NetUserDel.

Написание, компиляция и прогон программы, удаляющей из системы учетную запись

На основе предыдущей программы рекомендуется написать программу удаления учетной записи конкретного пользователя.

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

Идентификатор безопасности SID

Структура идентификатора безопасности

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

Узнать свой идентификатор безопасности пользователь легко может при помощи утилит whoami или getsid из ресурсов Windows. Например, так:

При помощи команды whoami /all можно получить всю информацию из маркера доступа процесса, см. следующие разделы.

Задание

Выполните следующую последовательность действий.

  1. Создайте учетную запись пользователя при помощи инструментальных средств ОС Windows
  2. Выясните значение его SID’а.
  3. Затем удалите эту учетную запись и вновь создайте под тем же именем.
  4. Сравните SID нового пользователя с предыдущим значением SID’а.

Понравилась статья? Поделить с друзьями:
  • Объект windows предназначенный для объединения файлов в группы
  • Объединить физические диски в один логический windows 7
  • Объединить файлы jpg в один pdf windows
  • Объединить сетевые карты в одну windows server 2016
  • Объединить разделы жесткого диска windows 10 командная строка