SDDL для объектов устройств
Язык определения дескрипторов безопасности (SDDL) используется для представления дескрипторов безопасности. Безопасность для объектов устройств может быть задана строкой SDDL, которая помещается в INF-файл или передается в IoCreateDeviceSecure. Язык определения дескриптора безопасности полностью описан в документации по Microsoft Windows SDK.
Хотя INF-файлы поддерживают весь диапазон SDDL, подпрограмма IoCreateDeviceSecure поддерживает только подмножество языка. Это подмножество определено здесь.
Строки SDDL для объектов устройств имеют форму "D:P", за которой следует одно или несколько выражений формы "(A;; Доступ;; SID)". Значение SID указывает идентификатор безопасности, определяющий, к кому применяется значение Access (например, к пользователю или группе). Значение Access указывает права доступа, разрешенные для идентификатора безопасности. Значения Access и SID приведены ниже.
Примечание При использовании SDDL для объектов устройств драйвер должен связаться с Wdmsec.lib.
Доступа
Задает значение ACCESS_MASK , определяющее разрешенный доступ. Это значение может быть записано в виде шестнадцатеричного значения в формате "0xhex" или как последовательность символьных двухбуквенный кодов, представляющих права доступа.
Следующие коды можно использовать для указания универсальных прав доступа.
Код | Универсальное право доступа |
---|---|
GA |
GENERIC_ALL |
GR |
GENERIC_READ |
GW |
GENERIC_WRITE |
GX |
GENERIC_EXECUTE |
Следующие коды можно использовать для указания определенных прав доступа.
Код | Определенное право доступа |
---|---|
RC |
READ_CONTROL |
SD |
DELETE |
WD |
WRITE_DAC |
WO |
WRITE_OWNER |
Обратите внимание, что GENERIC_ALL предоставляет все права, перечисленные в двух приведенных выше таблицах, включая возможность изменения списка управления доступом.
SID
Указывает идентификатор безопасности, которому предоставляется указанный доступ. Идентификаторы безопасности представляют учетные записи, псевдонимы, группы, пользователей или компьютеры.
Следующие идентификаторы безопасности представляют учетные записи на компьютере.
SID | Описание |
---|---|
SY |
Система Представляет саму операционную систему, включая ее компоненты пользовательского режима. |
LS |
Локальная служба. Предопределенная учетная запись для локальных служб (которые также относятся к прошедшим проверку подлинности и world). Этот идентификатор безопасности доступен начиная с Windows XP. |
NS |
Сетевая служба. Предопределенная учетная запись для сетевых служб (которые также относятся к прошедшим проверку подлинности и world). Этот идентификатор безопасности доступен начиная с Windows XP. |
Следующие идентификаторы БЕЗОПАСНОСТИ представляют группы на компьютере.
SID | Описание |
---|---|
BA |
Администраторы Встроенная группа "Администраторы" на компьютере. |
Подразделение |
Встроенная группа пользователей Группа, охватывающая все локальные учетные записи пользователей и пользователей в домене. |
BG |
Встроенная гостевая группа Группы, охватывающие пользователей, войдите в систему с помощью локальной учетной записи или гостевой учетной записи домена. |
Следующие идентификаторы безопасности описывают степень проверки подлинности пользователя.
SID | Описание |
---|---|
AU |
Прошедшие проверку пользователи Любой пользователь, распознанный локальным компьютером или доменом. Обратите внимание, что пользователи, вошедший в систему с помощью встроенной гостевой учетной записи, не проходят проверку подлинности. Однако участники группы "Гости" с отдельными учетными записями на компьютере или в домене проходят проверку подлинности. |
AN |
Анонимный пользователь, выполнивший вход Любой пользователь, вошедший в систему без удостоверения, например анонимный сетевой сеанс. Обратите внимание, что пользователи, в которых выполняется вход с помощью встроенной гостевой учетной записи, не проходят проверку подлинности и не являются анонимными. Этот идентификатор безопасности доступен начиная с Windows XP. |
Следующие идентификаторы безопасности описывают, как пользователь вошел на компьютер.
SID | Описание |
---|---|
МЕ |
Интерактивные пользователи Пользователи, которые изначально вошли на компьютер в интерактивном режиме, например локальные и удаленные рабочие столы. |
NU |
Пользователь с сетевым входом Пользователи, обращаюющиеся к компьютеру удаленно, без интерактивного доступа к рабочему столу (например, общий доступ к файлам или вызовы RPC). |
WD |
World До Windows XP этот идентификатор безопасности охватывал каждый сеанс, будь то прошедшие проверку подлинности пользователи, анонимные пользователи или учетная запись Builtin Guest. Начиная с Windows XP, этот идентификатор безопасности не распространяется на сеансы анонимного входа; он охватывает только прошедших проверку подлинности пользователей и учетную запись Builtin Guest. Обратите внимание, что ненадежный или ограниченный код также не охватывается идентификатором безопасности world. Дополнительные сведения см. в описании идентификатора безопасности ограниченного кода (RC) в следующей таблице. |
Следующие идентификаторы безопасности заслуживают особого упоминание.
SID | Описание |
---|---|
RC |
Ограниченный код Этот идентификатор безопасности используется для управления доступом с помощью ненадежного кода. Проверка ACL по маркерам с rc состоит из двух проверок: одна из них соответствует обычному списку идентификаторов безопасности маркера (например, содержит WD), а другая — по отношению ко второму списку (обычно содержит rc и подмножество исходных идентификаторов БЕЗОПАСНОСТИ маркеров). Доступ предоставляется только в том случае, если маркер проходит оба теста. Таким образом, rc фактически работает в сочетании с другими идентификаторами БЕЗОПАСНОСТИ. Любой список ACL, указывающий rc, также должен указывать WD. При связывании версии-кандидата с WD в ACL описывается надмножество "Все", включая ненадежный код. Ненадежный код может быть запущен с помощью параметра Запуск от имени в Обозреватель. По умолчанию World не охватывает ненадежный код. |
UD |
Драйверы User-Mode Этот идентификатор безопасности предоставляет доступ к драйверам в пользовательском режиме. В настоящее время этот идентификатор безопасности охватывает только драйверы, написанные для платформы User-Mode Driver Framework (UMDF). Этот идентификатор безопасности доступен начиная с Windows 8. В более ранних версиях Windows, которые не распознают сокращение "UD", необходимо указать полную форму этого идентификатора безопасности (S-1-5-84-0-0-0-0-0), чтобы предоставить доступ к драйверам UMDF. Дополнительные сведения см. в разделе Управление доступом к устройствам документации по платформе драйверов User-Mode. |
Примеры SDDL для объектов устройств
В этом разделе описываются предопределенные строки SDDL, найденные в Wdmsec.h. Их также можно использовать в качестве шаблонов для определения новых строк SDDL для объектов устройств.
SDDL_DEVOBJ_KERNEL_ONLY
"D:P"
SDDL_DEVOBJ_KERNEL_ONLY является "пустым" ACL. Код пользовательского режима (включая процессы, выполняемые как системные) не может открыть устройство.
Драйвер шины PnP может использовать этот дескриптор при создании PDO. Затем в INF-файле можно указать более слабые параметры безопасности для устройства. Указав этот дескриптор, водитель шины будет гарантировать, что никакие попытки открыть устройство до обработки INF не будут успешными.
Аналогичным образом драйвер, отличный от WDM, может использовать этот дескриптор, чтобы сделать объекты устройства недоступными до тех пор, пока соответствующая программа пользовательского режима (например, установщик) не установит окончательный дескриптор безопасности в реестре.
Во всех этих случаях по умолчанию используется строгий уровень безопасности, который при необходимости ослабляется.
SDDL_DEVOBJ_SYS_ALL
"D:P(A;; GA;;; SY)"
SDDL_DEVOBJ_SYS_ALL похожа на SDDL_DEVOBJ_KERNEL_ONLY, за исключением того, что в дополнение к коду в режиме ядра коду пользовательского режима, работающему как Система, также разрешено открывать устройство для любого доступа.
Устаревший драйвер может использовать этот список управления доступом, чтобы начать с жестких параметров безопасности и позволить службе открывать устройство во время выполнения для отдельных пользователей с помощью функции SetFileSecurity в пользовательском режиме. В этом случае служба должна быть запущена как Система.
SDDL_DEVOBJ_SYS_ALL_ADM_ALL
"D:P(A;; GA;;; SY)(A;; GA;;; BA)"
SDDL_DEVOBJ_SYS_ALL_ADM_ALL позволяет ядру, системе и администратору полностью контролировать устройство. Другие пользователи не могут получить доступ к устройству.
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R
"D:P(A;; GA;;; SY)(A;; GRGWGX;;; BA)(A;; ГР;;; WD)"
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R позволяет ядру и системе полностью контролировать устройство. По умолчанию администратор может получить доступ ко всему устройству, но не может изменить список управления доступом (сначала администратор должен взять на себя управление устройством).
Всем пользователям (world SID) предоставляется доступ на чтение. Ненадежный код не может получить доступ к устройству (ненадежный код может быть запущен с помощью параметра Запуск от имени в Обозреватель. По умолчанию World не охватывает ограниченный код.)
Также обратите внимание, что доступ к обходу не предоставляется обычным пользователям. Таким образом, это может быть не подходящим дескриптором для устройства с пространством имен.
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_R
"D:P(A;; GA;;; SY)(A;; GRGWGX;;; BA)(A;; ГР;;; WD)(A;; ГР;;; RC)"
SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_R_RES_R позволяет ядру и системе полностью контролировать устройство. По умолчанию администратор может получить доступ ко всему устройству, но не может изменить список управления доступом (сначала администратор должен взять на себя управление устройством).
Всем пользователям (world SID) предоставляется доступ на чтение. Кроме того, ненадежный код также может получить доступ к коду. Ненадежный код может быть запущен с помощью параметра Запуск от имени в Обозреватель. По умолчанию World не охватывает ограниченный код.
Также обратите внимание, что доступ к обходу не предоставляется обычным пользователям. Таким образом, это может быть не подходящим дескриптором для устройства с пространством имен.
Обратите внимание, что приведенные выше строки SDDL не содержат модификаторов наследования. Таким образом, они подходят только для объектов устройств и не должны использоваться для файлов или разделов реестра. Дополнительные сведения об указании наследования с помощью SDDL см. в документации по Microsoft Windows SDK.