Прогон программы получения информации из дескриптора защиты файла — КиберПедия 

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

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

Прогон программы получения информации из дескриптора защиты файла

2017-06-11 438
Прогон программы получения информации из дескриптора защиты файла 0.00 из 5.00 0 оценок
Заказать работу

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

#define _WIN32_WINNT 0x0500

#ifndef UNICODE

#define UNICODE

#endif

 

#include <windows.h>

#include <stdio.h>

#include <sddl.h>

#include <Aclapi.h>

 

void main(void){

 

PSID pSid;

PSECURITY_DESCRIPTOR pSD;

PACL pDACL;

LPTSTR StringSid = NULL;

ULONG Error;

HANDLE hFile;

 

hFile = CreateFile(TEXT("MyFile.txt"), READ_CONTROL, 0, NULL, OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL, NULL);

 

Error = GetSecurityInfo(hFile,

SE_FILE_OBJECT, // тип объекта

OWNER_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,

&pSid, // Sid владельца

NULL, // Sid группы

&pDACL, NULL, // списки прав доступа

&pSD // дескриптор защиты);

if(Error!= ERROR_SUCCESS) printf("GetSecurityInfo Error\n");

 

 

if (!ConvertSidToStringSid(pSid, &StringSid)) /* память для строки выделяет сама функция */

printf("Convert SID to string SID failed.");

 

wprintf(L"StringSid %s\n", StringSid);

 

LocalFree(pSD);

LocalFree(StringSid);

}

Задача данной программы - открыть существующий файл MyFile.txt и применить функцию GetSecurityInfo для извлечения идентификатора безопасности владельца из дескриптора защиты файла. Затем идентификатор преобразуется в текстовую форму и выводится на экран.

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

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

Субъекты безопасности. Процессы, потоки. Маркер доступа

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

Вслед за оболочкой (Windows Explorer) все процессы (а также все потоки процесса), запускаемые пользователем, наследуют этот маркер. Когда один процесс создает другой при помощи функции CreateProcess, дочернему процессу передается дубликат маркера, который, таким образом, распространяется по системе.

Основные компоненты маркера доступа показаны на рис. 13.2.

 

Рис. 13.2. Основные компоненты маркера доступа

Включая в маркер информацию о защите, в частности, DACL, Windows упрощает создание объектов со стандартными атрибутами защиты. Как уже говорилось, если процесс не позаботится о том, чтобы явным образом указать атрибуты безопасности объекта, на основании списка DACL, присутствующего в маркере, будут сформированы права доступа к объекту по умолчанию. Настройку стандартной защиты можно осуществить при помощи функции SetTokenInformation. При этом, поскольку объекты в Windows отличаются большим разнообразием, в списке DACL "по умолчанию" можно указать только так называемые базовые права доступа, из которых система будет формировать стандартные права доступа в зависимости от вида создаваемого объекта. То, как это делается и как сформировать список DACL, по умолчанию присутствующий в маркере, подробно описано в [4], [5].

Задание

Осуществить просмотр данных маркера доступа с помощью утилиты WhoAmi

Если процесс обладает правом TOKEN_QUERY доступа к объекту, то большую часть содержимого маркера можно считать при помощи функции GetTokenInformation. Чтобы получить описатель маркера, необходимо воспользоваться функцией OpenProcessToken.

В качестве примера рассмотрим программу, задача которой - получение текстового значения Sid владельца процесса из маркера доступа данного процесса.

#define _WIN32_WINNT 0x0500

#ifndef UNICODE

#define UNICODE

#endif

 

#include <windows.h>

#include <stdio.h>

#include <sddl.h>

 

void main(void){

 

DWORD TokenUserBufSize=256;

LPTSTR StringSid;

TOKEN_USER *ptUser;

HANDLE hHeap;

HANDLE hToken = NULL;

 

hHeap = GetProcessHeap();

ptUser = (TOKEN_USER *)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, TokenUserBufSize);

 

if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))

printf("OpenProcessToken Error\n");

 

if (!GetTokenInformation(hToken, // описатель маркера доступа

TokenUser, // нужна информация о пользователе

ptUser, // буфер для информации

TokenUserBufSize, &TokenUserBufSize))

printf("GetTokenInformation Error\n");;

 

if (!ConvertSidToStringSid(ptUser->User.Sid, &StringSid))

printf("Convert SID to string SID failed.");

wprintf(L"StringSid %s\n", StringSid);

 

CloseHandle(hToken);

LocalFree(StringSid);

HeapFree(hHeap,0,ptUser);

}

Задача данной программы - получить описатель текущего процесса при помощи функции OpenProcessToken и применить функцию GetTokenInformation для извлечения из него идентификатора безопасности владельца. После чего идентификатор преобразуется в текстовую форму и выводится на экран.

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


Поделиться с друзьями:

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.013 с.