🪟2 Windows

2.1 Практическое занятие. Изучение механизма управления доступом к объектам

Необходимое ПО и инструменты

Для проведения лабораторной работы на рабочей станции должно быть установлено ПО:

VMWare Workstation (или VMware Workstation Pro).

Для проведения лабораторной работы на рабочую станцию должна быть скопирована виртуальная машина Win10.

Настройка окружения для работы

Настройка отладчика ядра Windows

Для выполнения ряда заданий данной лабораторной работы предполагается использование отладчика ядра ОС Windows.

Для проведения отладки ядра необходимо выполнить следующие действия:

1. Указать в параметрах загрузки ядра использование режима локальной отладки. Для этого необходимо в командной оболочке, запущенной от имени администратора системы, выполнить команду bcdedit –debug on. После чего перезагрузить виртуальную машину.

2. Настроить WinDbg на загрузку символов ядра с сайта Microsoft. Для этого необходимо открыть ярлык WinDbg (x64) и в строке «Target» добавить к имени файла параметр запуска: -y "srv*c:\symbols*https://msdl.microsoft.com/download/symbols", где c:\symbols – путь к локальному кэшу символов (можно использовать произвольный), а https://msdl.microsoft.com/download/symbolsarrow-up-right - URL сервера символов Microsoft.

3. Запустить WinDbg и перейти в сеанс отладки локального ядра (File → Kernel debug, вкладка Local). Примечание: при первом запуске переход в режим отладки займет длительное время, так как фоном происходит загрузка символов ядра с сайта Microsoft. При последующих запусках переход в режим отладки будет происходить практически мгновенно.

4. В командной строке отладчика выполнить команду lml и убедиться, что успешно загружен модуль отладки ядра (nt) – вывод команды соответствует представленному на рисунке.

Запуск процессов от имени локальной системы

Запуск процессов от имени локальной системы производится при помощи утилиты psexec из пакета sysinternals, при этом утилита должна запускаться с правами администратора.

Команда для запуска процесса с правами локальной системы имеет следующий вид: psexec –s –i –d <команда с указанием полного пути>. Опция –s предписывает произвести запуск от имени локальной системы, опция –i запускает процесс в интерактивном сеансе пользователя (что позволяет взаимодействовать с процессом), опция –d говорит утилите не ждать завершения запущенного процесса (чтобы получить обратно консоль, в которой производился запуск).

Запустите командную оболочку с правами локальной системы с помощью команды psexec –s –i –d c:\windows\system32\cmd.exe. После запуска командной оболочки проверьте, что она работает от имени учетной записи локальной системы с помощью команды whoami (см. рисунок).

Изучение механизма управления доступом к объектам

Списки контроля доступа и права

Списки контроля доступа (и отдельные их записи) используются диспетчером объектов и монитором ссылок (Security reference monitor – SRM) для определения возможного доступа субъекта к объекту. При этом в ядре ОС для каждого объекта формируется специальная структура, состоящая из заголовка (ACL) и записей (ACCESS_ALLOWED_ACE или ACCESS_DENIED_ACE). Ниже представлено объявление структур ACL, ACCESS_ALLOWED_ACE и ACCESS_DENIED_ACE из файла winnt.h.

Вспомогательная структура ACE_HEADER определяет тип ACE (как видно – обе структуры ACE фактически одинаковые), а также дополнительные флаги ACE (например, наследование).

Сами права в ACE представлены битовой маской, общая структура которой представлена на рисунке.

Для маски прав можно выделить 3 основных блока:

1. Общие права, используемые с самых ранних версий Windows NT (GR, GW, GE, GA)

2. Дополнительные права общие для всех типов объектов (Standard Access Rights)

3. Расширенные права, которые специфичны для типа объекта, к которому относятся права (файл, процесс, событие и пр.).

Биты в маске прав не являются независимыми (например, право Generic All подразумевает, что все остальные права также присутствуют). При этом приложения при доступе к объекту могут использовать произвольные блоки прав доступа в маске.

Для объектов, сохраняемых между сеансами пользователей (например, файлов и ключей реестра) предусматривается хранение информации об ACL вне памяти ядра. В случае файловой системы NTFS ACL хранятся в специальном файле $Secure, а в случае реестра – в самом двоичном файле реестра.

Просмотр списков контроля доступа в памяти ядра

Запустите сеанс отладки ядра ОС Windows.

Выполните команду !object \GLOBAL??\C: для получения адреса заголовка объекта типа SymbolicLink (Примечание: указанная команда осуществляет поиск по всем объектам ядра, поэтому она выполняется достаточно длительное время), содержащего ссылку на физический том, которому назначен логический диск «C:». В выводе команды найдите адрес заголовка объекта (ObjectHeader), см. рисунок.

Выполните команду dt nt!_OBJECT_HEADER <адрес> для просмотра заголовка объекта символической ссылки диска C:. В выводе команды найдите адрес Security Descriptor (см. рисунок).

Абсолютный адрес дескриптора безопасности представлен в поле SecurityDescriptor без учета последних четырех бит (т.е. в значении поля необходимо занулить последний нимбл). Вывод содержимого SecurityDescriptor производится командой !sd <адрес> (см. рисунок).

В выводе ACL объекта найдите Well-known SID, соответствующий группе Everyone (все)

В командной оболочке выполните команду set /P var=Input value > c:\out.txt, после чего запустите утилиту Procexp64.exe из пакета sysinternals и найдите в ней соответствующий процесс cmd.exe. Включите отображение дескрипторов процесса (View → Lower Pan View → Handles). Найдите дескриптор файла c:\out.txt и откройте окно его свойств (см. рисунок).

Используйте адрес объекта (а также команды !object, dt и !sd) для просмотра SecurityDescriptor’а файла с помощью отладчика ядра:

  1. Найдите адрес заголовка объекта, указав команду !object <адрес объекта>

  2. Выведите содержимое заголовка объекта, используя команду nt!_OBJECT_HEADER <адрес заголовка>

В конечном счете вы должны получить примерно следующий вывод структуры заголовка объекта:

Значение null в поле SecurityDescriptor указывает, что логика работы с правами доступа к объекту вынесена за пределы диспетчера объектов (в данном случае в драйвер файловой системы – ntfs.sys).

Просмотр списков контроля доступа произвольных объектов

Для просмотра списка контроля доступа произвольных объектов диспетчера объектов можно использовать модуль NtObjectManager для оболочки PowerShell.

Установка модуля NtObjectManager производится следующим образом:

1. Необходимо установить модуль по одному из путей, перечисленных в переменной PSModulePath

2. Проверить, что PowerShell корректно распознал модуль с помощью команды Get-Module -ListAvailable

3. Импортировать модуль с помощью команды Import-Module.

Запустите оболочку PowerShell. Вывести значение переменной PSModulePath можно с помощью команды $Env:PSModulePath. Скопируйте каталог NtObjectManager (расположен по пути C:\Utils) в один из каталогов, содержащихся в переменной PSModulePath. Рекомендуется использовать каталог C:Program Files\WindowsPowerShell\Modules, чтобы установленный модуль был доступен всем пользователям ОС.

Выполните команду Get-Module -ListAvailable и найдите в списке модуль NtObjectManager (см. Рисунок).

Выполните команду Import-Module -name NtObjectManager. Для проверки корректности загрузки модуля перейдите в корневой каталог объектов Диспетчера объектов с помощью команды cd NtObject:\. Дополнительно можете вывести список объектов первого уровня с помощью команды dir (см. Рисунок).

Для вывода списка контроля доступа необходимо использовать стандартный командлет Get-Acl. В частности, для вывода списка контроля доступа к устройству CdRom0 необходимо выполнить команду: Get-Acl \Device\CdRom0 | Format-List (см. рисунок).

Наиболее полно информация представлена в строке SDDL (Secure Descriptor Definition Language), но для ее прочтения необходимо знать синтаксис SDDL или использовать стороннюю утилиту.

Запустите утилиту SDDLViewer (расположена на рабочем столе) и скопируйте в основное поле ввода строку с SDDL представлением ACL. В правой части окна утилиты выберите из выпадающего списка File and Directory Access Rights (это наиболее близкий из представленных в утилите список специальных прав объекта), после чего нажмите кнопку Make Report для получения проанализированного ACL (см. рисунок).

Приведите проанализированный ACL в отчете.

Применение ACL при управлении доступом к объектам

Порядок применения ACL и эффективные права доступа

Проверка прав доступа по спискам контроля доступа производится только в момент создания дескриптора процессом (например, если речь о файловом объекте, то в момент вызова функции CreateFile).

При этом происходит проверка всех ACL назначенных объекту явно, а также унаследованных от вышестоящих объектов. ACL, запрещающие доступ (Deny ACL) применяются раньше ACL, разрешающих доступ (Allow ACL).

Проверка ведется до первого сработавшего ACL (отфильтрованного по SID и запрошенному доступу). Если это Deny ACL, то доступ запрещается, если Allow ACL – то разрешается. Если не подошел ни один ACL, то доступ также запрещается.

Для определения порядка применения ACL выполните:

1. Создайте папку C:\Workspace.

2. В этой папке создайте файл file.txt с произвольным содержимым.

3. Проверьте эффективные права доступа к каталогу Workspace для пользователя User1 для чего вызовите контекстное меню каталога (правой кнопкой мыши), выберите пункт «Properties», перейдите на вкладку «Security», нажмите кнопку «Advanced» и в открывшемся интерфейсе перейдите на вкладку Effective Access (см. рисунок).

4. Нажмите на ссылку «Select a user» для выбора пользователя, для которого будут отображены эффективные права доступа (User1), после чего нажмите кнопку «View effective access» (см. рисунок).

5. Проанализируйте вывод утилиты, а также списки контроля доступа каталога C:\Workspace

Обратите внимание, что у папки Workspace все ACL унаследованы от корневого каталога (C:\). Отключите наследование ACL с помощью кнопки Disable Inheritance и выберите вариант «Remove all inherited permissions from this object».

Несмотря на то, что вы полностью удалили списки контроля доступа каталога, администратор по-прежнему может просматривать содержимое каталога или менять его списки контроля доступа. Это связано с тем, что администратор является владельцем каталога, а для владельца (на уровне кода ntfs.sys) зафиксирован определенный набор прав (в частности – просмотр и изменение ACL).

Момент проверки ACL

Проверка ACL в ОС Windows происходит в момент формирования дескриптора объекта для процесса его запросившего. Например, для объекта типа файл это происходит при вызове функции CreateFile (несмотря на свое название – эта функция предназначена для любого доступа к файлу, не только для создания).

Настройте для пользователя User1 полный доступ к файлу file.txt (проверьте доступ с помощью инструмента эффективных прав доступа).

Запустите командную оболочку от имени пользователя User1 (воспользуйтесь утилитой psexec или встроенной командой RunAs). Выполните в этой оболочке команду pause >> file.txt, нажмите любую клавишу, убедитесь, что в файле file.txt появилась строка «Press any key to continue . . .».

Повторно запустите указанную команду, но теперь до нажатия клавиши заблокируйте доступ пользователю User1 к файлу file.txt (проверьте, то доступ заблокирован с помощью инструмента эффективных прав доступа). Нажмите любую клавишу в консоли пользователя User1, убедитесь, что в файле file.txt появилась вторая строка «Press any key to continue . . .». Попробуйте запустить команду еще раз – убедитесь, что выводится ошибка доступа к файлу file.txt (см. рисунок).

Попробуйте повторить ту же операцию, используя для редактирования файла редактор notepad.exe. Убедитесь, что notepad не может производить запись в уже открытый файл после того, как пользователю User1 блокируется доступ к файлу.

Запустите утилиту procmon из пакета sysinternals. К существующему фильтру procmon добавьте строку, приведенную на рисунке.

Также для удобства добавьте фильтр «Operation is QueryDirectory then Exclude».

Проанализируйте работу команду pause >> file.txt и редактора notepad с файлом file.txt. Приведите в отчете объяснение, почему в случае с редактором notepad.exe не удается изменить уже открытый файл, к которому заблокирован доступ после его открытия.

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

Запустите с помощью команды RunAs редактор notepad.exe от имени пользователя User1 и не закрывайте окно редактора.

Запустите утилиту procexp64 из пакета sysinternals. Откройте окно с отображением дескрипторов процессов (View → Lower pane view → Handles). Выберите любой процесс и найдите у него дескриптор объекта Desktop с именем \Default (см. рисунок)

С помощью отладчика ядра убедитесь, что у этого объекта присутствует ссылка на структуру SECURITY DESCRIPTOR и для него отображается список контроля доступа.

В окне свойств объекта утилиты Procexp64 перейдите на вкладку «Security» и добавьте запрещающий ACL для пользователя User1.

Убедитесь, что ранее запущенный редактор блокнот по-прежнему работает.

Попытайтесь запустить еще один экземпляр редактора блокнот от имени пользователя User1 – команда завершится с ошибкой.

Откройте теперь редактор прав файла, к которому у пользователя User1 нет доступа (например, все подкаталоги Workspace). Так как у пользователя нет прав доступа к объекту, то он не может видеть текущие списки контроля доступа, но при этом у пользователя User1 активна опция смены владельца (см. рисунок).

Смените владельца объекта на User1 и восстановите полный доступ к объекту.

2.2 Практическое занятие. Упаковка классического приложения в Universal Windows Platform

Упаковка приложения ImageMagick в AppContainer (UWP)

Для упаковки ImageMagick в UWP будет использоваться MSIX Packaging Toolarrow-up-right.

С помощью утилиты можно создать msix-пакет из уже существующего msi- или exe- установщика исходной программы.

Для упаковки был выбран вариант ImageMagick со статической линковкой зависимостей (ImageMagick-7.1.0-52-Q8-x64-static.exearrow-up-right).

Шаги создания пакета:

1. Выбрать пункт меню Application Package

2. Выбрать “Create package on this computer”

3. Выбрать установщик ImageMagick.

4. Задать параметры будущего MSIX-пакета. При переходе на следующий шаг автоматически начнется установка классического приложения ImageMagick.

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

6. Необходимо сохранить пакет

Проблемы, с которыми можно столкнуться при попытке установке пакета и их решения

Проблема 1: Приложение не подписано

Решение проблемы: создать self-signed pfx сертификат по инструкции (https://docs.microsoft.com/ru-ru/windows/msix/package/create-certificate-package-signingarrow-up-right). Затем подписать приложение с помощью MSIX Packaging Tool.

Теперь для установки приложения нужно добавить сертификат в доверенные сертификаты системы.

Проблема 2: Не работает команда “magick”

Решение проблемы: Отредактировать файл манифеста пакета (AppxManifest.xml) с помощью программы упаковки.

В манифесте нужно добавить ссылку на пространство имен (тег “Package”) xmlns:uap5=http://schemas.microsoft.com/appx/manifest/uap/windows10/5arrow-up-right А так же добавить расширение с добавлением алиаса для командной строки:

<uap5:Extension Category="windows.appExecutionAlias" Executable="VFS\ProgramFilesX64\ImageMagick-7.0.10-Q16\magick.exe" EntryPoint="Windows.FullTrustApplication"> <uap5:AppExecutionAlias> <uap5:ExecutionAlias Alias="magick.exe" /> </uap5:AppExecutionAlias> </uap5:Extension>

Executable – путь до исполняемого файла, к которому мы создаем алиас

EntryPoint – точка входа при вызове алиаса

Alias – алиас для запуска приложения в контейнере через командную строку

После этого пересобрать пакет.

Проверки работоспособности пакета

Проверка работоспособности приложения в графическом интерфейсе пользователя

1. В меню «Пуск» должен появиться пункт “ImageMagick Display”

2. Необходимо произвести его запуск

3. Открыть файл изображения

4. Применить к нему трансформацию

5. Сохранить файл

6. Сохранение должно пройти успешно

Проверка работоспособности приложения в консольном режиме

1. Необходимо произвести вывод программы по команде “magick”. Обнаружить справочную информацию

2. Произвести конвертацию изображения PNG в JPG

3. Изображение должно быть сохранено успешно

Проверка запуска приложения в контейнере

1. Для проверки возможно использовать приложение UWP TaskMonitor, доступное в магазине Windows.

2. После запуска ImageMagick и необходимо найти данный процесс его в списке. Тип приложения должен быть Packaged.

Данные приложение получает с помощью API Windows.System.Diagnostics.ProcessDiagnosticInfo (https://blogs.windows.com/windowsdeveloper/2017/06/28/uwp-app-diagnostics/arrow-up-right)

2.3 Практическое занятие. Настройка аутентификации по виртуальной смарт-карте. Политика целостности кода (Device Guard)

Открыть файл .vmx виртуальной машины Windows 10 и прописать следующий настройки для включения UEFI Secure Boot:

Добавить TPM на виртуальную машину.

Создать теневую копию диска с помощью команд:

Отсканировать снимок диска и получить xml-файл с подписями и хэш-кодами неподписанных исполняемых файлов:

Тем временем... Windows Server 2016

Active Directory Certificate Services

Произвести установку Active Directory

Выбрать Tools -> Active Directory Users and Computers

  • Открыть вкладку домена и открыть Users

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

  • Кликнуть правой кнопкой и выбрать Properties

  • Выбрать вкладку Member Of

  • Нажать кнопку Add… Добавить пользователя в группу IIS_IUSRS

Далее выбрать Manage -> Add Roles and Features

При установке поставить отметки в полях:

  • Active Directory -> Certificate Enrollment Policy Web Server

  • Active Directory -> Certificate Enrollment Web Server

После установки рядом с кнопкой Manage кликнуть на флажок Выбрать configure Active Directory Certificate Services При выборе ролей выбрать:

  • Certificate Enrollment Policy Web Server

  • Certificate Enrollment Web Server

Указать CA, выбрав “CA name” Выбрать тип аутентификации User name and password Указать аккаунт, выбрав select и введя данные того пользователя, которого ранее добавили в группу IIS_IUSRS Снова выбрать тип аутентификации User name and password Дождаться завершения конфигурации

Internet Information Services Manager

  • Открыть Server Manager

  • Выбрать Tools -> Internet Information Services Manager

  • Кликнуть на домен

  • Кликнуть на Sites

  • Кликнуть на Default Web Site

  • Выбрать часть, которая содержит подстроку “ADPolicyProvider_CEP“

  • В центральном окне выбрать Application Settings

  • Указать FriendlyName

  • Скопировать адрес URI и сохранить его где-то для дальнейшего использования

Перезапустить сервер

  • Открыть Server Manager

  • Выбрать Tools -> Internet Information Services Manager

  • Кликнуть на домен

  • Кликнуть на Sites

  • Кликнуть на Default Web Site

  • Выбрать Bindings... -> https -> Edit... -> Выбрать промежуточный SSL-сертификат

Group Policy Management

  • Открыть Server Manager

  • Выбрать Tools -> Group Policy Management

  • Открыть Forest:Domain.com -> Domains -> DOMAIN.com

  • Правой кнопкой кликнуть по DOMAIN.local и выбрать “Create a GPO in this domain, and link it here”

  • В поле Name ввести имя объекта групповой политики

  • Нажать ОК

  • Кликнуть по только что созданному объекту

  • При выводе ошибки кликнуть ОК

  • Кликнуть правой кнопкой мыши по новому созданному объекту и выбрать Edit...

  • Открыть User Configuration -> Policies -> Windows Settings -> Security Settings -> Public Key Policy

  • Дважды кликнуть по Certificate Services Client - Certificate Enrollment Policy

  • Включить модель

  • Нажать кнопку Add…

  • В поле URI вставить тот URI, который запомнили ранее

  • В поле Autentication type выбрать тип Username/password

  • Нажать кнопку Validate Server

  • Ввести данные пользователя

  • Дождаться прохождения валидации. Нажать Add

Создание шаблона Smartcard

Открыть консоль управления (запустить mmс) в режиме администратора

Выбрать вкладку File -> Add/Remove Snap-in

Выбрать в списке Certificate Templates и Certification Authority, нажать Add

При запросе выбрать Local Computer. Нажать ОК

На левой панели дважды кликнуть по Certificate Templates

Найти в списке Smartcard Logon, кликнуть по ней правой кнопкой мыши и выбрать Duplicate Template

Откроются свойства нового шаблона

Во вкладке Compatibility установить Certification authority и Certificate recipient Во вкладке General указать имя шаблона Во вкладке Request Handling установить Purpose в состояние Signature and smartcard login и выбрать Prompt the user during enrollment Во вкладке Cryptography установить минимальный размер ключа 2048 и кликнуть по Requests must use one of the following providers, выбрав Microsoft Base Smart Card Crypto Provider Во вкладке Security добавить группу пользователей (например, Authenticated Users) для регистрации, указав им разрешение на регистрацию. Allow -> Enroll Нажать ОК

В левой панели найти Certificate Templates кликнуть правой клавишей -> New -> Certificate Template to Issue

Выбрать шаблон, который был создан. Нажать ОК

В левой панели кликнуть правой кнопкой мыши по имени CA и нажать -> All tasks -> Stop Service и аналогично Start Service для перезапуска сервиса

Windows 10

Device Guard Part

Полученный XML-файл необходимо скомпилировать в бинарный формат и поместить в системную папку C:\Windows\System32\CodeIntegrity\

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

Ключ -Audit указывает, что необходимо создать политику на основе записей в журнале аудита. Файл AuditPolicy.xml аналогичен по структуре файлу BasePolicy.xml, сформированному ранее. Для объединения результатов первичного сканирования и собранной в режиме аудита информации существует команда объединения политик

Чтобы включить принудительное применение политики, в полученном файле отключаем режим аудита

В результате удаляется запись Enabled:Audit Mode из XML-файла, и такая политика будет блокировать всё неучтенное в ней ПО. Далее компилируем XML-файл в бинарный формат, снова выполнив команду

Распространить политику на целевые компьютеры можно как скопировав удобным способом файл SIPolicy.bin, так и воспользовавшись групповой политикой Windows 10 в разделе Computer Configuration\Administrative Templates\System\Device Guard

SmartCard part

У адаптера в свойствах IPv4 указать в поле адрес DNS сервера адрес Windows Server 2016

Открыть панель управления. Выбрать System and Security -> System В части настроек рабочей группы нажать “Change settings” Для изменения домена кликнуть на Change Выбрать домен DOMAIN.local Ввести данные пользователя Дождаться перезагрузки системы

Открыть редактор локальной групповой политики (Например с помощью win+r -> gpedit.msc) Перейти в Computer Configuration -> Administrative Templates -> System ->Device Guard Дважды кликнуть по Turn On Virtualization Based Security Установить политику, выбрав Enabled Установить Credential Guard Configuration в значение Enabled with UEFI lock Сохранить изменения, нажав OK

circle-info

В старых версиях Windows открыть Программы и компоненты (Например с помощью win+r -> appwiz.cpl) В левой панели найти Turn Windows features on or off. Найти Isolated User Mode и поставить напротив него галочку. Нажать OK. Перезагрузить машину

Открыть управление модулем TPM (Например с помощью win+r -> tpm.msc) Убедиться, что его статус “ready for use” Если это не так, то в правой части нажать Prepare the TPM, перезагрузить машину и при перезагрузке подтвердить инициализацию модуля TPM

Открыть командную строку в режиме администратора. Ввести команду

Ввести PIN, подтвердить Ввести PUK, подтвердить При этом Admin key будет таким 010203040506070801020304050607080102030405060708 Дождаться создания виртуальной смарт карты Проверить, что она создалась, с помощью команды

Открыть консоль сертификатов(например с помощью win+r -> certmgr.msc) Выбрать Active Directory Enrollment Policy В списке шаблонов выбрать шаблон для смарт карты Нажать Enroll Ввести PIN Дождаться завершения регистрации и нажать Finish

Открыть локальные политики безопасности (Например с помощью win+r -> secpol.msc)

circle-info

Или групповые политики домена (gpmc.msc) на сервере

Перейти в Security Settings -> Local Policies -> Security Options Найти Interactive logon: Require smart card и дважды кликнуть Выбрать Enabled Перезапустить машину, теперь вход в учётную запись может производиться только по смарт карте

Last updated