Xsec: Как Изучить Контроль Доступа Windows За Два Часа

Хотите изучить управление доступом Windows за два часа? И знать эту тему как никакой другой ваш учитель? Хотите знать, как использовать функцию Windows API с самым длинным именем — AccessCheckByTypeResultListAndAuditAlarmByHandle? Как насчет просмотра кода, создающего недокументированные структуры Windows? Тогда это место для вас! В статье представлено описание библиотеки и набор тестов, которые позволят любому пользователю изучить подсистему контроля доступа Windows в максимально полном объеме при достаточно небольших начальных знаниях.

Рассмотрены вопросы работы с DACL, SACL, Conditional ACE, обязательной проверкой целостности и многие другие.

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

Представленная библиотека позволит вам разобрать и создать все внутренние структуры подсистемы безопасности Windows, а также позволяет создавать «токены доступа» с произвольными исходными данными.

Давным-давно я начал изучать подсистему безопасности Windows. Я читаю отличные книги, но каждая книга должна быть подкреплена, прежде всего, практикой.

Так я начал свои практические эксперименты.

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

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

Однако, когда я перешел к изучению DAC (Dynamic Access Control), тестовая площадка значительно усложнилась: мне уже пришлось развернуть несколько виртуальных машин, на одной из которых стоял Windows Server, а на другой — обычная клиентская ОС.

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

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

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

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

Я уже реализовал все, что было официально задокументировано Microsoft. Я понял, что по сути вся подсистема безопасности Windows — это всего лишь два понятия: «токен» (токен доступа) и «дескриптор безопасности» (дескриптор безопасности он же SD).

Если представить аналогию с обычной дверью, то токен — это ключ, а дескриптор безопасности — замок.

Все остальные концепции/сущности, существующие в подсистеме безопасности Windows, являются вторичными и основаны только на использовании токенов и дескрипторов безопасности.

А для изучения подсистемы безопасности нужно всего три этапа: 1) умение создать свой токен из ранее сохраненных значений; 2) возможность создания дескриптора безопасности из ранее сохраненных значений; 3) вызвать правильную системную функцию, чтобы проверить доступ полученного токена к полученному дескриптору.

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

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

Программу необходимо запускать от имени администратора.

То есть достаточно войти в систему как обычный пользователь, но сам программный код необходимо запустить с помощью «Запуск от имени Администратора».

В своих тестах я использовал Visual Studio. Для пользователя, под которым выполняются тесты, также необходимо настроить определенные привилегии: SeCreateTokenPrivilege (создать объект-токен), SeTcbPrivilege (действовать как часть операционной системы), SeImpersonatePrivilege (олицетворять клиента после аутентификации).

Сам проект представляет собой стандартный тестовый проект для C++.

То есть у него нет «выходного файла», и все, что он выдает, — это результаты тестов.

Описания всех тестов представлены в этот файл .

Но сам проект здесь .

Все в исходном коде, без внешних зависимостей, с лицензией «делай что хочешь, только оставь авторские права».

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

В конце несколько ответов на вопросы, которые я задал в начале статьи: 1. Теги: #информационная безопасность #Windows #C++ #безопасность #токен доступа #Контроль доступа

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.