Операционные системы. Учебное пособие. Марапулец Ю.В. - 153 стр.

UptoLike

Составители: 

На первый взгляд, в структуре SECURITY_ATTRIBUTES нет ничего сложного:
typedef struct _SECURITY_ATTRIBUTES
{
DWORD nLength; // размер структуры SECURITY_ATTRIBUTES;
LPVOID lpSecurityDescriptor; // дескриптор безопасности
BOOL bInheritHandle; // будет ли дескриптор наследоваться
// дочерним процессом.
}
SECURITY_ATTRIBUTES; *LPSECURITY_ATTRIBUTES;
Заполнить поле nLength очень просто (и очень важно!) [1]. Установить флаг bInhe-
ritHandle также несложно: он имеет значение типа Boolean. А вот второе поле, которое
представляет собой указатель структуры SECURITY_DESCRIPTOR, мы рассмотрим бо-
лее подробно. Если вы не хотите использовать механизмы безопасности,
lpSecurltyDescriptor можно присвоить значение NULL. Если вы намерены защитить объ-
ект от несанкционированного доступа, необходимо создать структуру SECURI-
TY_DESCRIPTOR, соответствующую этому объекту, и внести указатель на нее в струк-
туру SECURITY_ATTRIBUTES.
Структура SECURITY_DESCRIPTOR (SD) хранит в себе информацию, связанную
с защитой некоторого объекта от несанкционированного доступа. В этой структуре со-
держится информация о том, какие пользователи обладают правом доступа к объекту и
какие действия эти пользователи могут выполнить в отношении этого объекта. Следует
отметить, что внутреннее строение структуры SECURITY_DESCRIPTOR не документи-
ровано. Указатель на структуру SECURITY_DESCRIPTOR в составе структуры SECU-
RITY_ATTRIBUTES является указателем на тип void. Предполагается, что если вы знае-
те о строении структуры SECURITY_DESCRIPTOR, значит, теоретически вы можете
обойти систему безопасности.
Дескриптор безопасности объекта хранит в себе следующую информацию:
SID (Security ID) владельца объекта;
SID основной группы владельца объекта;
дискреционный список управления доступом (Discretionary Access Control List,
DACL);
системный список управления доступом (System Access Control List, SACL);
управляющая информация (например, сведения о том, как списки ACL передают
информацию дочерним дескрипторам безопасности).
Идентификатор безопасности (SID) представляет собой структуру переменной
длины, которая однозначно идентифицирует пользователя или группу пользователей.
Внутри идентификатора безопасности (среди прочей информации) содержится 48-
разрядный уникальный код аутентифицированного лица (пользователя или группы), со-
стоящий из значения уровня доступа, кода основного лица и кода вторичного лица.
Список DACL определяет, кто обладает (и кто не обладает) правом доступа к объ-
екту. Список SACL определяет, информация о каких действиях вносится в файл журна-
ла.
Но как можно создать дескриптор безопасности, если вы не знаете его структуры?
Для этой цели следует использовать системный вызов InitializeSecurityDescriptor. Этой
функции следует передать указатель на дескриптор безопасности SECURI-
TY_DESCRIPTOR и значение DWORD, которое содержит номер ревизии структуры
SECURITY_DESCRIPTOR. В качестве второго аргумента следует использовать значе-
ние SECURITY_DESCRIPTOR_REVISION.
155
     На первый взгляд, в структуре SECURITY_ATTRIBUTES нет ничего сложного:

typedef struct _SECURITY_ATTRIBUTES
{
       DWORD nLength;               // размер структуры SECURITY_ATTRIBUTES;
       LPVOID lpSecurityDescriptor; // дескриптор безопасности
       BOOL bInheritHandle;         // будет ли дескриптор наследоваться
                                    // дочерним процессом.
 }
 SECURITY_ATTRIBUTES; *LPSECURITY_ATTRIBUTES;

      Заполнить поле nLength очень просто (и очень важно!) [1]. Установить флаг bInhe-
ritHandle также несложно: он имеет значение типа Boolean. А вот второе поле, которое
представляет собой указатель структуры SECURITY_DESCRIPTOR, мы рассмотрим бо-
лее подробно. Если вы не хотите использовать механизмы безопасности,
lpSecurltyDescriptor можно присвоить значение NULL. Если вы намерены защитить объ-
ект от несанкционированного доступа, необходимо создать структуру SECURI-
TY_DESCRIPTOR, соответствующую этому объекту, и внести указатель на нее в струк-
туру SECURITY_ATTRIBUTES.
      Структура SECURITY_DESCRIPTOR (SD) хранит в себе информацию, связанную
с защитой некоторого объекта от несанкционированного доступа. В этой структуре со-
держится информация о том, какие пользователи обладают правом доступа к объекту и
какие действия эти пользователи могут выполнить в отношении этого объекта. Следует
отметить, что внутреннее строение структуры SECURITY_DESCRIPTOR не документи-
ровано. Указатель на структуру SECURITY_DESCRIPTOR в составе структуры SECU-
RITY_ATTRIBUTES является указателем на тип void. Предполагается, что если вы знае-
те о строении структуры SECURITY_DESCRIPTOR, значит, теоретически вы можете
обойти систему безопасности.
      Дескриптор безопасности объекта хранит в себе следующую информацию:
• SID (Security ID) владельца объекта;
• SID основной группы владельца объекта;
• дискреционный список управления доступом (Discretionary Access Control List,
    DACL);
• системный список управления доступом (System Access Control List, SACL);
• управляющая информация (например, сведения о том, как списки ACL передают
    информацию дочерним дескрипторам безопасности).
      Идентификатор безопасности (SID) представляет собой структуру переменной
длины, которая однозначно идентифицирует пользователя или группу пользователей.
Внутри идентификатора безопасности (среди прочей информации) содержится 48-
разрядный уникальный код аутентифицированного лица (пользователя или группы), со-
стоящий из значения уровня доступа, кода основного лица и кода вторичного лица.
      Список DACL определяет, кто обладает (и кто не обладает) правом доступа к объ-
екту. Список SACL определяет, информация о каких действиях вносится в файл журна-
ла.
      Но как можно создать дескриптор безопасности, если вы не знаете его структуры?
Для этой цели следует использовать системный вызов InitializeSecurityDescriptor. Этой
функции следует передать указатель на дескриптор безопасности SECURI-
TY_DESCRIPTOR и значение DWORD, которое содержит номер ревизии структуры
SECURITY_DESCRIPTOR. В качестве второго аргумента следует использовать значе-
ние SECURITY_DESCRIPTOR_REVISION.

                                         155