вторник, 23 сентября 2008 г.

SDDL: Учимся описывать безопасность.

image Я уже дважды обещал рассказать о страшных и жутко непонятных строках вида D:(A;;CCLCSWLOCRRC;;;AU), то есть о SDDL (Security Descriptor Definition Language). Но сначала, конечно же, о том, что это такое и зачем это нужно. Думаю, многим известно, что практически к каждому объекту в современном мире Windows прикреплен некий Security Descriptor, который описывает параметры безопасности, связанные с данным объектом, как то: кто владеет объектом, кто и каким образом может получить доступ к объекту, и что об этом доступе следует записать в журнал аудита. Security Descriptor представляет из себя некую бинарную строку, которую человеку читать можно, но сложно. Для того, чтобы облегчить чтение дескриптора, возможно и был придуман этот язык SDDL. Впрочем, для языка эта структура слишком проста – научиться «разговаривать» на этом языке достаточно просто, хотя и не слишком-то необходимо. А вот читать его и писать на нем хотя бы со словарем я считаю полезным. Иногда еще встречаются ситуации, когда это умение облегчает жизнь. Например, команды SC sdshow/sdset используют именно его. В этом же формате умеет выводить разрешения на объекты файловой системы cacls (Vista и выше) и Get-ACL (PowerShell). Да и мой пост, с которого все это началось, тоже делает такое умение полезным.

Итак, приступим. Представим себе, что мы встретились-таки со строкой вида, указанного выше. Благодаря тому, что Вы прочитали весь предыдущий поток сознания, Вы уже в курсе, что это можно прочесть. Понятное дело, что, раз это можно читать, то можно и разбить на некоторые секции, скажем, «смысловые группы». Этими группами являются:

1. Заголовок (Header). Он содержит флаги, показывающие, как данная строка соотносится с наследованием. То есть, разрешено ли оно, или нет, а также – что именно и как наследуется.

2. DACL (D:) – список собственно разрешений

3. SACL (S:) – список атрибутов аудита

4. Primary Group (G:) – оставлена для совместимости. Не используется до тез пор, пока Вы не работаете с Services for UNIX/Mac.

5. Owner (O:) – отображает владельца объекта.

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

Владелец и Primary Group само собой отображаются в виде SID. Некоторые хорошо известные SID’ы отображаются как акронимы. Например, BA = Built-in Administrators. DACL & SACL представляют из себя строки, которые в свою очередь тоже состоят из различных кусков. Эти куски, заключенные в круглые скобки – ACE, которые (Вы мне не поверите!!! =) ) также дробятся на части. Эти части уже неделимы (разве что на те самые лексемы), отделяются точкой с запятой и содержат следующие параметры:

- Тип ACE (Allow, Deny, AUdit)

- Флаги ACE (наследование и настройки аудита)

- Разрешения

- Тип объекта (в виде GUID)

- Унаследованный тип объекта

- Trustee (кто бы сказал, как это нормально перевести ;). В общем это участник безопасности - пользователь, группа, и так далее)

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

5 комментариев:

Артём комментирует...

ну я бы перевёл «Trustee» как «субъект безопасности».

но Microsoft традиционно переводит как «доверенное лицо».

KomatoZo комментирует...

Обычно то, что является группой или пользователем я называю участником безопасности (тоже MS-овское), но тут это может быть не только User/Group и к "лицу" может отношения и вовсе не иметь.
А субъект - хорошо - занес в записную книжку. =)

Артём комментирует...

угу. Я потому и говорю, что «лицо» — это не очень удачный термин. И слово «доверенное» мне тоже не очень нравится. Если мы используем в DACL для него не разрешения, а запреты — какое же оно после этого доверенное?

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

KomatoZo комментирует...

Ну термин участник тебе чем не нравится? То, что в МС с локализованной терминологией туго я в курсе, нам тут даже рассылали опросник как-то. Так что может и сдвинется. Даже можно сказать - уже двигаются. =)

Артём комментирует...

да нет, я не спорю. Участник — приемлемо. Особенно, если оно кем-то уже где-то использовалось. Уж всяко намного лучше, чем лицо =)

ЗЫ. "участник безопасности" — 147 результатов в Яндексе
"субъект безопасности" — 1009 результатов в Яндексе
"Доверенное лицо" — 342 тыс. Но это уже не так интересно.