Vytvoření a upřesnění zásad MXC pomocí režimu učení

Sandboxy Microsoft Execution Containers (MXC) jsou ve výchozím nastavení zakázané, takže uzavřená úloha může používat pouze soubory, možnosti a další prostředky, které mu jeho zásady povolují.

Může ale být obtížné předpovědět všechny prostředky, ke kterým může úloha potřebovat přístup. Režim učení MXC vám pomůže vytvořit zásadu s nejnižšími oprávněními ve Windows tím, že zaznamenává prostředky, ke kterým se úloha pokouší získat přístup, abyste mohli vytvořit nebo upřesnit zásadu na základě zjištěných dat místo metodou pokus–omyl.

Note

Režim učení je aktuálně k dispozici pro úlohy, které běží v MXC ProcessContainer na Windows. Pomocí zjišťování za běhu potvrďte podporu ProcessContainer na hostiteli.

Zvolte chování režimu učení

Režim učení funguje dvěma způsoby. Liší se v tom, jestli MXC nadále vynucuje zásadu, zatímco zaznamenává přístup, což určuje, kdo by měl kterou z nich používat a kdy.

Characteristic Odmítnout a zaznamenat Povolit a zaznamenat
Nepovolený přístup Blokováno a zaznamenáno Povoleno a zaznamenáno
Vynucení zásad Vynucené, ale zachytávání může změnit úroveň izolace. Výchozí zákaz byl pro toto spuštění uvolněn
Typickí uživatelé Vývojáři aplikací a autoři zásad Správci IT a vývojáři, kteří vyhodnocují stávající pracovní zátěže
Kdy ji použít Při vývoji aplikace a jejích zásad Než zásady vytvoříte, zjistěte, k čemu důvěryhodná úloha přistupuje
Zachytit hodnotu mode block (výchozí) allow

Odepřít a zaznamenat: vyvíjet aplikace a zásady

Při vývoji aplikace nebo agenta a jejich zásad MXC používejte odepření a zaznamenávání (learningModeLogging). MXC zásadu pořád vynucuje i během záznamu, takže nepovolený přístup selže stejně jako pro vaše uživatele. Režim učení přidá záznam o každém pokusu o přístup, který zásady zablokovaly. Na některých hostitelích funkce Capture mění úroveň izolace, kterou MXC vybere. Podrobnosti najdete v tématu Plán pro předpoklady pro zachycení.

Mezi běžné způsoby použití patří:

  • Diagnostika, proč kontejnerizovaná úloha selže, a rozlišení chybějícího grantu od nesouvisející chyby
  • Upravování návrhu zásady, dokud podporované scénáře neprojdou a negativní testy budou stále selhávat.
  • Identifikace schopností, které zatížení vyžaduje.
  • Umožňuje uživatelům vaší aplikace ladit vlastní sandbox. Vaše aplikace zaznamená, co bylo zablokováno, zobrazí to ve vlastním uživatelském rozhraní a znovu vygeneruje zásadu až po schválení změny uživatelem.

Vzhledem k tomu, že MXC zásady vynucuje, je bezpečnější volbou odepřít a zaznamenat. Použijte ho vždy, když máte zásadu zabezpečení k otestování, a to i neúplnou.

Povolit a zaznamenat: Před vytvořením zásady vyhodnoťte existující úlohy zatížení.

Použijte možnost allow and record (permissiveLearningMode), když potřebujete zjistit, k čemu má stávající důvěryhodná úloha přístup, před použitím zásad MXC na ni. Správce IT může například spustit podnikový nástroj nebo skript a provést s ním obvyklé úlohy na testovacím zařízení a pak pomocí výsledků vytvořit základní zásadu před zapnutím vynucení. Vývojář, který do MXC přináší existující nástroj, může stejným způsobem vytvořit první politiku.

Povolit a zaznamenat uvolní pro toto spuštění vynucování zásady implicitního zamítnutí, takže s úlohou zacházejte, jako by běžela s plnými oprávněními uživatele. MXC zaznamenává každý přístup, který by zásada odepřela. Pokaždé, když je tento režim aktivní, vrátí MXC také upozornění zabezpečení s výsledkem spuštění. Váš host by měl na toto varování upozornit, místo aby ho zahodil.

Než použijete funkce Povolit a zaznamenat:

  • Na řízeném testovacím zařízení nebo účtu spusťte jenom důvěryhodný kód se reprezentativními necitlivými daty.
  • Procvičte si typické úlohy pracovní zátěže. Přístup, který spuštění nevyužije, se ve výsledcích nezobrazí.
  • S výsledky zacházejte jako s počátečním inventářem. Odeberte nepotřebná oprávnění a před nasazením ověřte koncept zásady s akcemi Deny a Record.

Important

Nezpřístupňujte režim učení „Povolit a zaznamenávat“ jako produkční nástroj, který může agent volat. Důvěryhodný kód hostitele nebo osoba musí schválit jeho použití a jakékoli výsledné rozšíření oprávnění.

Předpoklady pro zachytávání

MXC shromažďuje výsledky výukového režimu prostřednictvím jedné ze dvou cest zachycení. Vybere cestu za běhu na základě hostu a požadované politiky. To platí pro captureDenials v obou režimech a pro pracovní postup wxc-exec.exe --audit.

Cesta k záznamu Když ho MXC používá Úroveň izolace Elevation
Nativní snímání Windows poskytuje prostředí zabezpečení procesu a rozhraní API režimu učení, které MXC potřebuje, a mohou představovat požadovanou zásadu. BaseContainer None
Chráněný záznam Native capture není k dispozici nebo nemůže vyjádřit požadované zásady Kompatibilní vrstva AppContainer MXC spustí podepsanou pomocnou rutinu se plm.exezvýšením oprávnění k záznamu trasování Windows Performance Recorder (WPR). Uživatel musí schválit výzvu UAC nebo zadat přihlašovací údaje správce.

Nativní zachytávání nemůže reprezentovat některé zásady, například processContainer.leastPrivilege, některé konfigurace síťové proxy a odepřené cesty na hostitelích, které je nativně nepodporují. Tyto požadavky používají strážené zachytávání i na hostitelích, kteří podporují nativní zachytávání. Pokud ani jedna cesta nemůže zachovat úplnou zásadu, vrátí MXC chybu místo toho, aby oslabilo zásadu nebo přeskočilo zachytávání.

Pokud chcete zjistit, kterou cestu požadavek použije, před spuštěním ho otestujte se zapnutým zachytáváním. Sonda nevytváří kontejner.

sada SDK Call Výsledky ke kontrole
platforma .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

Úroveň BaseContainer znamená nativní zachycení. Vrstva AppContainer znamená strážené zachycení a výzvu ke zvýšení oprávnění. Native capture fact popisuje hostitele, ne váš požadavek, takže zkontrolujte i úroveň.

Počítejte s těmito rozdíly:

  • V aplikaci ověřte před spuštěním zachycení a řekněte uživatelům, kdy zachycení vyžaduje schválení správcem. Nepředpokládejte, že se zachytávání spouští bezobslužně na každém hostiteli.
  • Když správce IT vyhodnocuje pracovní zátěže, ověřte, že testovací zařízení podporují nativní zachytávání nebo že správce může schválit výzvu chráněného zachytávání. Úroveň AppContainer může také vyžadovat přípravu hostitele.
  • Považujte výsledky zachycení za podklady pro vytváření zásad. Protože guarded capture může spouštět úlohu v jiné vrstvě než v produkčním prostředí, ověřte konečnou zásadu spuštěním bez použití zachytávání.

Příklad: Povolení zachycení prostřednictvím sady MXC SDK

Používejte záznam pomocí SDK, když vaše aplikace hostuje tuto úlohu. Pokud chcete vyhodnotit úlohu bez psaní hostitelského kódu, přečtěte si téma Použití režimu učení z příkazového řádku.

Začněte rychlým startem sady SDK, včetně případu odepření zápisu. Následující fragmenty rozšiřují tento příklad a používají stejné přidělení úloh a prostředků. Vložte vybraný fragment těsně předtím, než sada SDK spustí úlohu.

Příklady používají rozhraní API sady SDK MXC 1.0 V1. V každé sadě SDK nakonfigurujete zachytávání u explicitního výběru containment objektu ProcessContainer, který nahrazuje záměr abstraktního procesu rychlého startu.

Vytvořte výstupní adresář vlastněný hostitelem pro záznam. Nemusí být zapisovatelný obsaženou úlohou.

Nastavte možnosti zachycení na explicitním obsažení ProcessContaineru požadavku:

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"),
    },
};

V block režimu případ odepřeného zápisu stále selže. Zachycení odepření neudělí právo zápisu. U schváleného spuštění v režimu povolit a zaznamenat změňte režim pouze na CaptureDenialsMode.Allow v jazyce C#, 'allow' v TypeScriptu nebo CaptureDenialsMode::Allow v Rustu.

Při přizpůsobení existující integrace zachováte její další nastavení zahrnutí/omezení kontextu. Používejte specializované možnosti zachytávání, nikoli vyhrazené interní learningModeLogging nebo permissiveLearningMode názvy schopností.

Najděte dokončené zachycení

Před přečtením výsledku počkejte na dokončení provádění a zachycení. MXC vloží jedinečný identifikátor spuštění do nakonfigurovaného názvu souboru, takže denials.json se stane názvem, například denials.<run-id>.json. Místo uhodnutí nebo vyhledání nejnovějšího souboru použijte hlášenou cestu.

Po dokončení MxcContainer.RunAsync(request) a nahlášení result.Warnings zkontrolujte metadata výsledků:

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;
}

Zachovejte v quickstartu zpracování stavu ukončení, časových limitů a result.Warnings. Konkrétně sada .NET SDK vrací upozornění týkající se permisivního režimu učení místo aby je automaticky zapisovala do terminálu.

Pokud používáte streamované spouštění, počkejte na dokončení čekání terminálu před kontrolou MxcProcess.OutputMetadata. Odstranění procesu bez čekání není náhradou za dokončení snímání.

Výstup zamítnutí čtení

Dokument JSON s možností akce identifikuje prostředky, pokus o přístup a souhrn. Pro případ odepření zápisu quickstartu vypadá reprezentativní položka takto:

{
  "denials": [
    {
      "resource": "C:\\src\\MxcQuickstart\\workspace\\input\\blocked.txt",
      "resourceType": "file",
      "accessType": "write",
      "pid": 1234,
      "filetime": "132847890123456789"
    }
  ],
  "summary": {
    "exitCode": 1,
    "totalDenials": 1,
    "deniedResourcesTruncated": false
  }
}

Dokument je podkladem pro vytváření zásad, nikoli vyčerpávající protokol všeho, co úloha udělala. Hodnota resourceType určuje, jak číst resource. Například položka capability obsahuje absolutní cestu a položka file obsahuje název schopnosti, například internetClient. Některá pozorování nelze vyjádřit jako udělení oprávnění zásadami a jeden vstup nepokryje všechny cesty kódu.

V režimu povolit dokument v současné době neobsahuje žádosti o oprávnění. Spusťte úlohu v režimu deny a record, abyste identifikovali oprávnění, která potřebuje.

Pokud deniedResourcesTruncated je true, nevygenerujte zásadu z tohoto spuštění. Prázdný dokument také neprokazuje, že je úloha bezpečná nebo že bylo uplatněno každé zamýšlené omezení.

MXC také zapíše soubor s podrobným výstupem vedle zpracovatelného dokumentu. Například denials.<run-id>.json vytvoří denials.<run-id>.verbose.json. Podrobný soubor je omezený, upravený diagnostický záznam, který obsahuje pozorování, na která zásady MXC nemohou reagovat, jako jsou zápisy registru. Výstupní metadata neohlašují jeho cestu, proto ji odvozujte z cesty akčního dokumentu. Pomocí souboru s podrobným protokolem můžete prozkoumat selhání, které instruktážní dokument nevysvětluje, nikoli jako seznam oprávnění.

Rozlište odepření od jiných selhání

Outcome Co dělat
MXC odmítá konfiguraci. Zkontrolujte schéma, kombinace polí a vybraný back-end. Neudělujte vyšší úroveň přístupu, abyste obešli neplatný požadavek.
Funkce back-endu nebo snímání není k dispozici. Zkontrolujte informace o podpoře a zaznamenejte předpoklady. Nezakažujte požadované omezení bez upozornění.
Workload selže při vynucování. Zkontrolujte stav ukončení, chybový výstup a dokončené zachycení odepření. Selhání pracovní zátěže nemusí nutně být odepřením prostředků.
Zachycení se nezdařilo nebo je neúplné Považovat důkazy za nedostupné nebo neúplné, i když se úloha úspěšně dokončila.

Strukturované zachycení shromažďuje zpracovatelný dokument. Nastavení ProcessContainer learningMode nižší úrovně umožňuje zaznamenávat události typu odepřít a zaznamenat, ale samo o sobě tento dokument neshromažďuje. Zachytávání použijte, když hostitel potřebuje zpracovat důkazy.

Zkontrolovat zaznamenaný přístup

Klasifikujte každý výsledek před změnou zásad. Příklady:

Nález Potenciální akce
Požadovaný vstupní soubor Přidejte nejužší oprávnění jen pro čtení, které ji pokrývá.
Požadovaný výstup nebo mezipaměť Přidat cestu pro čtení a zápis specifickou pro úlohu
Přihlašovací údaje nebo nesouvisející soubor uživatele Zachovat odepření a v případě potřeby změnit zatížení
Obecný nadřazený adresář Identifikujte požadované podřízené cesty místo udělení oprávnění nadřazené položce
Neočekávaná žádost o síť, uživatelské rozhraní nebo funkce Před udělením přístupu ověřte, proč to zatížení potřebuje.
Zdroj, který MXC nemůže vyjádřit v zásadě Změňte úlohu nebo zvolte back-end, který může vynutit požadavek

Pozorovaný přístup k prostředkům může pocházet ze spuštění, zjišťování, volitelných funkcí, zpracování chyb nebo konkrétního vstupu použitého v jednom spuštění. Nepředpokládejte, že každý požadavek je nezbytný. V negativním testu rychlého startu je odepřený zápis zamýšleným výsledkem, nikoli důsledkem chybějícího oprávnění.

Příklad: Použití režimu učení z příkazového řádku

Pokud chcete vyhodnotit úlohu bez psaní kódu hostitele, spusťte ji pomocí nástroje příkazového řádku wxc-exec.exe a konfigurace JSON. Informace o formátu konfigurace najdete v tématu Vytvoření a ověření zásady MXC.

Instalace balíčku MXC SDK nepřidá PATH do vašeho wxc-exec.exe. Stáhněte si mxc-release-binaries.zip z vydání MXC, které odpovídá vaší verzi sady SDK, a spusťte nástroj pomocí jeho úplné cesty. Následující příklady předpokládají, že jste extrahovali archiv do složky C:\Tools\Mxc a použijete složku x64. Na zařízeních Arm64 použijte arm64 složku.

Zachytávání pomocí jednoho z chování

Vyberte containment ProcessContainer a přidejte ho captureDenials do oddílu processContainer konfigurace. Správce IT, který vyhodnocuje úlohu, která ještě nemá zásadu, může použít režim 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"
    }
  }
}

Vytvořte výstupní adresář před spuštěním a pak předejte konfigurační soubor nástroji:

C:\Tools\Mxc\x64\wxc-exec.exe audit-config.json

Po spuštění wxc-exec zapíše jeden řádek JSON do standardní chyby se skutečnou výstupní cestou a souhrnem:

{"type":"captureDenials","outputPath":"C:\\MxcAudit\\denials.<run-id>.json","exitCode":0,"totalDenials":2,"deniedResourcesTruncated":false}

Ke čtení dokumentu použijte nahlášenou cestu. Pokud chcete ověřit návrh zásady v režimu vynucování, přidejte svá oprávnění do konfigurace a změňte režim na block.

Navrhněte upravenou konfiguraci

Při vytváření zásad řízeném vývojářem pracovní postup auditu spouští zachytávání v režimu povolit a zaznamenat a navrhuje také revidovanou konfiguraci:

C:\Tools\Mxc\x64\wxc-exec.exe --audit --config <path-to-config>

Pracovní postup auditu zapíše dokumenty o zamítnutí, trasovací soubor, snímek zdrojové konfigurace a soubor Adjusted_*.json, který sloučí zjištěný přístup do této konfigurace. Upravená konfigurace je návrh k posouzení, nikoli schválená zásada. MXC ho nevygeneruje, když je záznam zkrácený, a záznam sady SDK ho vůbec nevygeneruje.

Pracovní postup auditu podporuje pouze ProcessContainer. Nekombinujte --audit s explicitním processContainer.captureDenials nastavením. Úplné specifikace rozhraní příkazového řádku a sady SDK najdete v tématu Možnosti režimu učení na GitHubu.

Dokončete cyklus učení

Pomocí tohoto pracovního postupu přejděte ze zjišťování na zásadu vynucování:

  1. Před povolením režimu učení vyberte model omezení.
  2. Pokud úloha ještě nemá zásadu a nemůžete ji přímo napsat úzceji, spusťte ji v režimu allow a record v řízeném prostředí. Procvičovat jeho typické úkoly.
  3. Navrhnout úzkou zásadu z důkazů a odstranit rozsáhlá a nesouvisející oprávnění.
  4. Spusťte zatížení v rámci návrhu zásady s akcemi Odepřít a Zaznamenat a vyřešte zbývající zamítnutí, včetně požadovaných oprávnění.
  5. Opakujte s reprezentativními vstupy pro úspěšné, neúspěšné a hraniční případy.
  6. Odeberte všechna nastavení učení, zachycení a auditování a spusťte konečný vynucující test. Zachytávání může změnit úroveň izolace, kterou MXC vybere, takže toto spuštění potvrzuje, jak se zásady chovají v produkčním prostředí.

Přestaňte rozšiřovat přístup v případech, kdy podporovaná úloha proběhne úspěšně a negativní testy stále selžou podle očekávání.

Kódovací agent vám může pomoct vysvětlit pozorování, ale nezapomeňte zkontrolovat a schválit všechny změny zásad přístupu k prostředkům.