Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Песочницы Microsoft Execution Containers (MXC) работают по принципу запрета по умолчанию, поэтому рабочая нагрузка в контейнере может использовать только файлы, возможности и другие ресурсы, предоставляемые политикой.
Однако может быть трудно предсказать все ресурсы, к которым рабочей нагрузке может потребоваться доступ. Режим обучения MXC помогает создать политику наименьших привилегий для Windows путем записи ресурсов, к которым рабочая нагрузка пытается получить доступ, чтобы можно было создать или уточнить политику на основе собранных данных, а не методом проб и ошибок.
Note
В настоящее время режим обучения доступен для рабочих процессов, которые выполняются в MXC ProcessContainer на Windows. Используйте обнаружение во время выполнения для подтверждения поддержки ProcessContainer на узле.
Выберите поведение режима обучения
Режим обучения имеет два режима работы. Они различаются в том, продолжает ли MXC применять политику при регистрации фактов доступа, что определяет, кто и когда должен использовать каждый из них.
| Характеристика | Запретить и записать | Разрешить и записать |
|---|---|---|
| Доступ не предоставлен | Заблокировано и записано | Разрешено и зарегистрировано |
| Применение политики | Принудительно, но сбор может изменить уровень изоляции | Запрет по умолчанию смягчен для этого запуска |
| Типичные пользователи | Разработчики приложений и авторы политик | ИТ-администраторы и разработчики, оценивающие существующие рабочие нагрузки |
| Когда его использовать | При разработке приложения и его политики | Чтобы узнать, к чему доверенная рабочая нагрузка получает доступ, до создания политики |
Захват mode значения |
block (по умолчанию) |
allow |
Запретить и регистрировать: разработка приложений и политик
Используйте отклонение и регистрацию (learningModeLogging) при разработке приложения или агента и его политики MXC. MXC продолжает применять политику во время записи, поэтому несанкционированный доступ завершается сбоем, как и для ваших пользователей. Режим обучения добавляет запись о каждом доступе, который был заблокирован политикой. На некоторых узлах capture изменяет уровень изоляции, выбранный MXC. Дополнительные сведения см. в разделе «Предварительные требования для записи».
Распространенные варианты использования:
- Диагностика причины сбоя контейнеризированной рабочей нагрузки и отличение отсутствующего разрешения от несвязанной ошибки.
- Дорабатывайте черновик политики, пока поддерживаемые сценарии не будут успешно выполняться, а отрицательные тесты по-прежнему будут завершаться ошибкой.
- Определение возможностей, которые запрашивает рабочая нагрузка.
- Предоставление пользователям приложения возможности настроить собственную песочницу. Приложение записывает, что было заблокировано, отображает это в собственном пользовательском интерфейсе и повторно создает политику только после утверждения изменения пользователем.
Так как MXC продолжает применять политику, запрет и регистрация являются более безопасным выбором. Используйте его всякий раз, когда у вас есть политика для тестирования, даже неполную.
Разрешить и записать: оцените существующие рабочие нагрузки перед созданием политики
Используйте "разрешить и записывать" (permissiveLearningMode), когда необходимо узнать, к чему обращается существующая доверенная рабочая нагрузка, прежде чем применять к этой рабочей нагрузке политику MXC. Например, ИТ-администратор может запустить бизнес-инструмент или скрипт и выполнить с его помощью типичные задачи на тестовом устройстве, а затем использовать результаты для создания базовой политики перед включением принудительного применения. Разработчик, который переносит существующий инструмент в MXC, может использовать тот же подход для разработки первой политики.
Разрешить и записать отменяет принудительное применение запрета по умолчанию для выполнения, поэтому считайте рабочую нагрузку так, как будто она выполняется с полными разрешениями пользователя. MXC записывает каждый доступ, который был бы запрещён политикой. Каждый раз, когда этот режим активен, MXC также возвращает предупреждение системы безопасности с результатом выполнения. Хост должен отобразить это предупреждение, а не отбрасывать его.
Прежде чем использовать «Разрешить и записать», выполните следующие действия.
- Запустите только доверенный код с репрезентативными нечувствительными данными на контролируемом тестовом устройстве или учетной записи.
- Выполните типичные задачи рабочей нагрузки. Доступ, который не используется при выполнении, не отображается в результатах.
- Рассматривайте результаты как исходный перечень. Удалите ненужные разрешения, а затем проверьте черновик политики в режимах deny и record перед развертыванием.
Important
Не предоставляйте режим обучения с разрешением и записью в качестве рабочего инструмента, который может вызывать агент. Доверенный код узла или человек должен утвердить его использование и любое итоговое расширение разрешений.
Планирование предварительных требований для захвата
MXC собирает результаты режима обучения через один из двух каналов сбора. Он выбирает путь во время выполнения на основе хоста и запрошенной политики. Это относится к captureDenials в любом из двух режимов и к рабочему процессу wxc-exec.exe --audit.
| Путь захвата | Когда MXC использует это | Уровень изоляции | Возвышенность |
|---|---|---|---|
| Нативный захват | Windows предоставляет API-интерфейсы среды безопасности процесса и режима обучения, необходимые MXC, и они могут представлять запрошенную политику. | BaseContainer | None |
| Защищенный захват | Встроенный захват недоступен или не может отобразить запрошенную политику | Совместимый уровень AppContainer | MXC запускает подписанный вспомогательный компонент plm.exe с повышением прав для записи трассировки Windows Performance Recorder (WPR). Пользователь должен утвердить запрос UAC или предоставить учетные данные администратора. |
Собственный механизм захвата не может представлять некоторые политики, такие как processContainer.leastPrivilege, некоторые конфигурации сетевого прокси-сервера и запрещенные пути на узлах, которые не поддерживают их на нативном уровне. Эти запросы используют контролируемый захват даже на узлах, поддерживающих нативный захват. Если ни один из путей не может сохранить полную политику, MXC возвращает ошибку, а не ослабляет политику или пропускает запись.
Чтобы узнать, какой путь будет использовать запрос, проверьте запрос с включенным захватом перед запуском. Зонд не создает контейнер.
| SDK | Call | Результаты для проверки |
|---|---|---|
| .NET | MxcContainer.Probe(request) |
Tier, Probes.NativeCaptureAvailable, Probes.GuardedCaptureAvailable |
| TypeScript | probe(request) |
tier, probes.nativeCaptureAvailable, probes.guardedCaptureAvailable |
| Rust | v1::probe(Some(&request)) |
tier, probes.native_capture_available, probes.guarded_capture_available |
Уровень BaseContainer означает нативный захват. Уровень AppContainer означает защищенный захват и запрос UAC. Факт native capture описывает хост, а не ваш запрос, поэтому проверьте также tier.
Учитывайте эти различия:
- В приложении выполните пробу перед началом захвата и сообщите пользователям, когда захват требует утверждения администратора. Не предполагайте, что запись выполняется незаметно на каждом узле.
- Когда ИТ-администратор оценивает рабочие сценарии, убедитесь, что тестовые устройства поддерживают встроенный захват или что администратор может утвердить диалоговое окно guarded capture. Уровень AppContainer также может требовать подготовки хоста.
- Рассматривать результаты захвата в качестве доказательств для разработки политик. Так как защищенная запись может выполнять рабочую нагрузку на другом уровне обслуживания, чем в рабочей среде, подтвердите окончательную политику с помощью запуска, который не использует защищенную запись.
Пример: включение захвата с помощью пакета SDK MXC
Используйте захват с помощью SDK, когда приложение размещает нагрузку. Чтобы оценить рабочую нагрузку без написания кода хоста, см. раздел "Использование режима обучения" из командной строки.
Начните с краткого руководства по пакету SDK, включая сценарий отказа в записи. Следующие фрагменты расширяют этот пример и используют те же рабочие нагрузки и выделение ресурсов. Вставьте выбранный фрагмент непосредственно перед тем, как пакет SDK запустит рабочую нагрузку.
В примерах используются API пакета SDK MXC 1.0 V1. В каждом пакете SDK вы настраиваете захват для явным образом выбранного контейнера ProcessContainer, который заменяет абстрактное указание процесса из краткого руководства.
Создайте принадлежащий узлу каталог выходных данных для захвата. Он не должен быть доступен для записи содержащейся рабочей нагрузкой.
Задайте параметры захвата для явного включения ProcessContainer в запрос:
string captureDirectory = Path.GetFullPath("captures");
Directory.CreateDirectory(captureDirectory);
request.Containment = new Containment.ProcessContainer
{
CaptureDenials = new CaptureDenialsPolicy
{
Mode = CaptureDenialsMode.Block,
OutputPath = Path.Combine(captureDirectory, "denials.json"),
},
};
В режиме block сценарий отказа записи по-прежнему завершается сбоем. Фиксация отказа не предоставляет право записи. Для утвержденного запуска в режиме allow-and-record измените только режим на CaptureDenialsMode.Allow в C#, 'allow' в TypeScript или CaptureDenialsMode::Allow в Rust.
При адаптации существующей интеграции сохраните другие настройки изоляции. Используйте специальные параметры захвата, а не зарезервированные внутренние имена capability learningModeLogging или permissiveLearningMode.
Найдите завершенный захват
Дождитесь завершения выполнения и завершения захвата перед чтением результата. MXC вставляет уникальный идентификатор запуска в настроенное имя файла, поэтому denials.json становится именем, например denials.<run-id>.json. Используйте указанный путь вместо того, чтобы угадать его или искать самый новый файл.
После завершения MxcContainer.RunAsync(request) и после того, как вы сообщите result.Warnings, проверьте метаданные результата:
if (result.OutputMetadata?.CaptureDenialsError is { } captureError)
{
Console.Error.WriteLine($"Denial capture failed: {captureError.Message}");
return 1;
}
if (result.OutputMetadata?.CaptureDenials is not { } capture)
{
Console.Error.WriteLine("The run did not produce denial capture metadata.");
return 1;
}
Console.WriteLine($"Denial document: {capture.OutputPath}");
Console.WriteLine($"Unique denials: {capture.TotalDenials}");
if (capture.DeniedResourcesTruncated)
{
Console.Error.WriteLine("The capture is incomplete; don't generate a policy from this run.");
return 1;
}
Сохраняйте обработку состояния выхода, времени ожидания и result.Warnings в кратком руководстве. В частности, пакет SDK .NET возвращает предупреждения о разрешительном режиме обучения, а не записывает их автоматически в терминал.
Если вы используете выполнение потоковой передачи, дождитесь завершения работы терминала перед проверкой MxcProcess.OutputMetadata. Освобождение процесса без ожидания не является заменой завершения записи.
Вывод отказа чтения
Документ JSON, пригодный для обработки, определяет ресурсы, попытку доступа и сводку. Для сценария с запретом на запись в Quickstart типичная запись выглядит следующим образом:
{
"denials": [
{
"resource": "C:\\src\\MxcQuickstart\\workspace\\input\\blocked.txt",
"resourceType": "file",
"accessType": "write",
"pid": 1234,
"filetime": "132847890123456789"
}
],
"summary": {
"exitCode": 1,
"totalDenials": 1,
"deniedResourcesTruncated": false
}
}
Документ является подтверждением создания политики, а не исчерпывающим журналом всех действий ворклоада. Значение resourceType определяет, как считывать resource. Например, file запись содержит абсолютный путь, а capability запись содержит имя возможности, например internetClient. Некоторые наблюдения нельзя представить в виде разрешений политики, и один входной набор не охватит все пути выполнения кода.
В режиме Allow документ в настоящее время не включает запросы на возможности. Запустите рабочую нагрузку в режимах deny и record, чтобы определить необходимые разрешения.
Если deniedResourcesTruncated имеет значение true, не создавайте политику из этого запуска. Пустой документ также не доказывает, что рабочая нагрузка безопасна или что каждое предполагаемое ограничение было применено.
MXC также записывает подробный файл рядом с исполняемым документом. Например, denials.<run-id>.json выдает denials.<run-id>.verbose.json. Подробный файл — это ограниченная отредактированная диагностическая запись, включающая наблюдения, на которые политика MXC не может воздействовать, например записи реестра. Выходные метаданные не сообщают о своем пути, поэтому определите его по пути обрабатываемого документа. Используйте файл подробного журнала, чтобы изучить сбой, который не объясняется в документе с рекомендуемыми действиями, а не как перечень предоставленных разрешений.
Различайте отказ от других сбоев
| Результат | Что делать |
|---|---|
| MXC отклоняет конфигурацию | Проверьте схему, сочетания полей и выбранный бэкенд. Не предоставляйте больше доступа для обхода недопустимого запроса. |
| Компонент серверной части или функция захвата недоступны | Проверьте сведения о поддержке и предварительные условия для захвата. Не отключайте обязательное ограничение без уведомления. |
| Задание не выполняется при принудительном применении | Просмотрите состояние выхода, выходные данные ошибок и завершенный журнал регистрации отказа. Сбой рабочей нагрузки не обязательно является отказом в предоставлении ресурсов. |
| Сбой захвата или неполный захват | Обрабатывать свидетельства как недоступные или неполные, даже если задание завершилось успешно. |
Структурированный захват собирает документ, пригодный для обработки. Параметр нижнего уровня ProcessContainer learningMode позволяет записывать события блокировки с записью, но сам по себе не собирает этот документ. Используйте захват, когда узлу необходимо обработать доказательства.
Просмотр отслеживаемого доступа
Классифицируйте каждый результат перед изменением политики. Рассмотрим пример.
| Находка | Потенциальное действие |
|---|---|
| Обязательный входной файл | Добавьте самый узкий путь только для чтения, охватывающий его |
| Необходимый выходной файл или кэш | Добавить путь для чтения и записи для конкретной задачи |
| Учетная запись или несвязанный файл пользователя | При необходимости оставьте его запрещенным и измените рабочую нагрузку. |
| Родительский каталог верхнего уровня | Определите необходимые дочерние пути вместо предоставления доступа родительскому элементу |
| Неожиданный запрос к сети, UI или возможностям | Проверьте, почему рабочая нагрузка нуждается в этом перед предоставлением доступа |
| Ресурс, который MXC не может описать в полисе | Измените рабочую нагрузку или выберите бэкенд, который может обеспечить выполнение этого требования |
Обнаруженный доступ может быть вызван запуском, обнаружением, необязательными функциями, обработкой ошибок или конкретными входными данными, используемыми в одном запуске. Не предполагайте, что каждый запрос необходим. В отрицательном тесте краткого руководства запрещённая операция записи является предполагаемым результатом, а не отсутствующим разрешением.
Пример: использование режима обучения из командной строки
Чтобы оценить рабочую нагрузку без написания кода хоста, запустите ее с помощью средства командной строки wxc-exec.exe и конфигурации JSON. Сведения о формате конфигурации см. в разделе Создание и проверка политики MXC.
Установка пакета SDK MXC не добавляет wxc-exec.exe в ваш PATH. Скачайте mxc-release-binaries.zip из выпуска MXC , соответствующего версии пакета SDK, и запустите средство по полному пути. В следующих примерах предполагается, что вы распаковали архив в C:\Tools\Mxc и использовали папку x64. На устройствах Arm64 используйте папку arm64 .
Запись с любым режимом
Выберите контейнер ProcessContainer и добавьте captureDenials в раздел конфигурации processContainer. Например, ИТ-администратор, который оценивает рабочую нагрузку, которая еще не имеет политики, может использовать режим allow:
{
"$schema": "https://raw.githubusercontent.com/microsoft/mxc/main/schemas/stable/mxc-config.schema.1.0.0.json",
"version": "1.0.0",
"containment": "processcontainer",
"process": {
"commandLine": "C:\\Tools\\Contoso\\ReportTool.exe"
},
"processContainer": {
"captureDenials": {
"mode": "allow",
"outputPath": "C:\\MxcAudit\\denials.json"
}
}
}
Создайте выходной каталог перед выполнением, а затем передайте инструменту файл конфигурации:
C:\Tools\Mxc\x64\wxc-exec.exe audit-config.json
После выполнения wxc-exec записывает одну строку JSON в стандартную ошибку с фактическим выходным путем и сводкой:
{"type":"captureDenials","outputPath":"C:\\MxcAudit\\denials.<run-id>.json","exitCode":0,"totalDenials":2,"deniedResourcesTruncated":false}
Используйте указанный путь для чтения документа. Чтобы проверить черновик политики в режиме принудительного применения, добавьте свои гранты в конфигурацию и измените режим на block.
Предложите скорректированную конфигурацию
Для создания политик разработчиками рабочий процесс аудита выполняет сбор в режиме разрешения и записи, а также предлагает измененную конфигурацию:
C:\Tools\Mxc\x64\wxc-exec.exe --audit --config <path-to-config>
Рабочий процесс аудита записывает документы отказа, файл трассировки, моментальный снимок исходной конфигурации и файл Adjusted_*.json, который вносит наблюдаемые данные о доступе в эту конфигурацию. Скорректированная конфигурация — это предложение для проверки, а не утвержденная политика. MXC не создает его, если захват усечен, а захват SDK вообще его не создает.
Рабочий процесс аудита поддерживает только ProcessContainer. Не сочетайте --audit с явной настройкой processContainer.captureDenials. Сведения о полных контрактах интерфейса командной строки и пакета SDK см. в разделе "Возможности режима обучения" на GitHub.
Завершите цикл обучения
Используйте этот рабочий процесс для перехода от обнаружения к политике принудительного применения:
- Выберите модель изоляции перед включением режима обучения.
- Если рабочая нагрузка еще не имеет политики, и вы не можете написать узкую политику напрямую, запустите её в режимах allow и record в управляемой среде. Протестируйте его типичные задачи.
- Составьте узкую политику на основе доказательств и удалите широкие и несвязанные гранты.
- Запустите рабочую нагрузку в черновой политике в режиме запрета и записи и устраните оставшиеся отказы, включая требуемые возможности.
- Повторяйте с репрезентативными входными данными, представляющими успешные, неуспешные и граничные случаи.
- Удалите все параметры обучения, записи и аудита и выполните заключительный тест в режиме принудительного применения. Capture может изменить уровень изоляции, который выбирает MXC, поэтому этот запуск подтверждает поведение политики в рабочей среде.
Остановите расширение доступа, когда поддерживаемая рабочая нагрузка завершается успешно, и отрицательные тесты по-прежнему завершаются ошибкой.
Агент для программирования может помочь объяснить наблюдения, но убедитесь, что вы просматриваете и утверждаете любые изменения политик доступа к ресурсам.
Связанные материалы
Windows developer