MXC-beleid maken en verfijnen met leermodus

Microsoft MXC-sandboxes (Execution Containers) zijn standaard geblokkeerd tenzij toegestaan, zodat een ingesloten workload alleen de bestanden, mogelijkheden en andere resources kan gebruiken die volgens het beleid zijn toegestaan.

Het kan echter lastig zijn om alle resources te voorspellen waartoe een workload mogelijk toegang moet hebben. MXC Learning Mode helpt u bij het maken van een beleid met minimale bevoegdheden voor Windows door de resources vast te leggen waartoe een workload toegang probeert te krijgen, zodat u een beleid kunt maken of verfijnen op basis van bewijs in plaats van trial-and-error.

Note

De leermodus is momenteel beschikbaar voor workloads die worden uitgevoerd in een MXC ProcessContainer op Windows. Gebruik runtime-detectie om ondersteuning voor ProcessContainer op de host te bevestigen.

Gedrag voor de leermodus kiezen

De leermodus kent twee werkwijzen. Ze verschillen in de vraag of MXC het beleid blijft afdwingen terwijl het toegang registreert, waarmee wordt bepaald wie welke van beide moet gebruiken en wanneer.

Characteristic Weigeren en registreren Toestaan en opnemen
Toegang niet verleend Geblokkeerd en geregistreerd Toegestaan en geregistreerd
Beleidsafdwinging Afgedwongen, maar opname kan het isolatieniveau wijzigen Deny-by-default versoepeld voor de uitvoering
Typische gebruikers App-ontwikkelaars en beleidsauteurs IT-beheerders en ontwikkelaars die bestaande workloads evalueren
Wanneer gebruikt u het? Terwijl u een app en het bijbehorende beleid ontwikkelt Voordat er een beleidsregel bestaat, leert u tot welke resources een vertrouwde workload toegang heeft
Waarde registreren mode block (standaard) allow

Weigeren en registreren: apps en beleid ontwikkelen

Gebruik 'Deny and record' (learningModeLogging) tijdens het ontwikkelen van een app of agent en het MXC-beleid ervan. MXC blijft het beleid afdwingen terwijl het registreert, zodat niet-toegestane toegang mislukt zoals voor uw gebruikers. In de leermodus wordt een registratie toegevoegd van elke toegang die door het beleid is geblokkeerd. Op sommige hosts wijzigt Capture het isolatieniveau dat MXC selecteert. Zie Plan voor vereisten voor vastleggen voor meer informatie.

Veelgebruikte toepassingen zijn onder andere:

  • Diagnostiseren waarom een ingesloten workload mislukt en een ontbrekende toekenning onderscheiden van een niet-gerelateerde fout.
  • Itereren op een conceptbeleid totdat de ondersteunde scenario's slagen en de negatieve tests nog steeds mislukken.
  • De mogelijkheden identificeren die een workload vereist.
  • Gebruikers van uw app hun eigen sandbox laten instellen. Uw app registreert wat is geblokkeerd, presenteert deze in een eigen gebruikersinterface en genereert het beleid pas opnieuw nadat de gebruiker de wijziging heeft goedgekeurd.

Omdat MXC het beleid blijft afdwingen, is weigeren en registreren de veiligere keuze. Gebruik dit wanneer u een regel hebt om te testen, zelfs een onvolledige regel.

Toestaan en vastleggen: bestaande workloads evalueren voordat u een beleid maakt

Gebruik toestaan en vastleggen (permissiveLearningMode) wanneer u wilt weten wat een bestaande, vertrouwde workload benadert voordat u een MXC-beleid toepast. Een IT-beheerder kan bijvoorbeeld een line-of-business-hulpprogramma of script de gebruikelijke taken laten doorlopen op een testapparaat en vervolgens de resultaten gebruiken om een basislijnbeleid te maken voordat afdwinging wordt ingeschakeld. Een ontwikkelaar die een bestaand hulpprogramma in MXC brengt, kan dezelfde benadering gebruiken om een eerste policy op te stellen.

Toestaan en registreren versoepelt de handhaving van standaard weigeren voor de uitvoering, dus behandel de workload alsof deze wordt uitgevoerd met de volledige machtigingen van de gebruiker. MXC registreert elke toegangspoging die het beleid zou hebben geweigerd. Wanneer deze modus actief is, retourneert MXC ook een beveiligingswaarschuwing met het uitvoeringsresultaat. Uw host moet die waarschuwing weergeven in plaats van deze te negeren.

Voordat u Toestaan en opnemen gebruikt:

  • Alleen vertrouwde code uitvoeren, met representatieve niet-gevoelige gegevens, op een gecontroleerd testapparaat of -account.
  • Voer de typische taken van de workload uit. Toegang die door een run niet wordt gebruikt, wordt niet weergegeven in de resultaten.
  • Behandel de resultaten als uitgangspunt voor de inventaris. Verwijder onnodige machtigingen en controleer vervolgens het conceptbeleid met Deny en Record voordat u het implementeert.

Important

Maak de leermodus Voor toestaan en opnemen niet beschikbaar als een door een agent aanroepbare productietool. Vertrouwde hostcode of een vertrouwd persoon moet het gebruik ervan goedkeuren en eventuele resulterende uitbreiding van machtigingen.

Plan voor vereisten voor vastleggen

MXC verzamelt resultaten van de leermodus via een van de twee vastleggingspaden. Het pad wordt tijdens runtime geselecteerd op basis van de host en het aangevraagde beleid. Dit is van toepassing op captureDenials in beide modus en op de wxc-exec.exe --audit workflow.

Opnamepad Wanneer MXC het gebruikt Isolatieniveau Elevation
Native opname Windows biedt de procesbeveiligingsomgeving en Learning Mode-API's die MXC nodig heeft, en zij kunnen het aangevraagde beleid vertegenwoordigen BaseContainer None
Afgeschermde opname Native opname is niet beschikbaar of kan de aangevraagde instelling niet weergeven Een compatibele AppContainer-laag MXC start een ondertekende helper, plm.exe met verhoogde rechten om een WPR-trace (Windows Performance Recorder) vast te leggen. De gebruiker moet een UAC-prompt goedkeuren of aanmeldingsgegevens van een beheerder opgeven.

Systeemeigen vastleggen kan sommige beleidsregels niet weergeven, zoals processContainer.leastPrivilege, sommige netwerkproxyconfiguraties en geweigerde paden op hosts die deze niet systeemeigen ondersteunen. Deze verzoeken maken gebruik van beveiligde capture, zelfs op hosts die systeemeigen capture ondersteunen. Als geen van beide paden het volledige beleid kan behouden, retourneert MXC een fout in plaats van het beleid te verzwakken of het vastleggen over te slaan.

Als u wilt achterhalen welk pad een verzoek gaat gebruiken, probeert u het verzoek met vastleggen ingeschakeld voordat u het start. De probe maakt geen container aan.

SDK Call Te controleren resultaten
.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

Een BaseContainer-tier betekent systeemeigen capture. Een AppContainer-laag betekent beveiligde opname en een prompt voor verhoging van bevoegdheden. Het native capture-feit beschrijft de host, niet uw verzoek, dus controleer ook het serviceniveau.

Plan deze verschillen:

  • Controleer in een app voordat u begint met vastleggen en laat gebruikers weten wanneer voor vastleggen beheerdersgoedkeuring is vereist. Neem niet aan dat capture geruisloos wordt uitgevoerd op elke host.
  • Wanneer een IT-beheerder workloads evalueert, controleert u of de testapparaten native opname ondersteunen of dat een beheerder de prompt voor beveiligde opname kan goedkeuren. De AppContainer-laag kan ook hostvoorbereiding vereisen.
  • Leg capture-resultaten vast als bewijs voor het ontwerpen van beleid. Omdat beveiligde capture de workload op een andere tier kan uitvoeren dan productie, bevestigt u het uiteindelijke beleid met een uitvoering die geen gebruik maakt van capture.

Voorbeeld: vastleggen inschakelen via een MXC SDK

Gebruik SDK-vastlegging wanneer uw app als host fungeert voor de workload. Als u een workload wilt evalueren zonder hostcode te schrijven, raadpleegt u Learning Mode gebruiken vanaf de opdrachtregel.

Begin met de SDK-quickstart, inclusief het scenario voor geweigerde schrijfbewerkingen. De volgende fragmenten bouwen voort op dat voorbeeld en gebruiken dezelfde workload en resourcetoewijzingen. Voeg het geselecteerde fragment direct in voordat de SDK de workload start.

In de voorbeelden worden de MXC 1.0 V1 SDK-API's gebruikt. In elke SDK configureert u het vastleggen met een expliciete ProcessContainer-containmentselectie, die de abstracte procesintentie van de quickstart vervangt.

Maak een uitvoermap in eigendom van de host voor de opname. Het hoeft niet beschrijfbaar te zijn voor de ingesloten workload.

Vastlegopties instellen voor de expliciete ProcessContainer-containment van de request:

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

In de modus block mislukt het geval van geweigerde schrijfbewerkingen nog steeds. Het vastleggen van de weigering geeft geen schrijfrechten. Voor een goedgekeurde allow-and-record-uitvoering wijzigt u alleen de modus naar CaptureDenialsMode.Allow in C#, 'allow' in TypeScript of CaptureDenialsMode::Allow in Rust.

Bij het aanpassen van een bestaande integratie moet u de andere insluitingsinstellingen behouden. Gebruik specifieke opnameopties, niet de gereserveerde interne learningModeLogging- of permissiveLearningMode-mogelijkheidsnamen.

Zoek de voltooide capture

Wacht op de voltooiing van de uitvoering en de voltooiing van de vastlegging voordat u het resultaat leest. MXC voegt een unieke uitvoerings-id in de geconfigureerde bestandsnaam in, dus denials.json wordt een naam zoals denials.<run-id>.json. Gebruik het opgegeven pad in plaats van te gokken of naar het meest recente bestand te scannen.

Nadat MxcContainer.RunAsync(request) is voltooid en u result.Warnings rapporteert, controleert u de metagegevens van het resultaat:

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

Houd de verwerking van de quickstart van de afsluitstatus, time-outs en result.Warnings. In het bijzonder retourneert de .NET SDK waarschuwingen over de permissieve Leermodus in plaats van deze automatisch in uw terminal weer te geven.

Als u streaming-uitvoering gebruikt, voltooit u de wachtbewerking in de terminal voordat u MxcProcess.OutputMetadata inspecteert. Het proces beëindigen zonder te wachten is geen vervanging voor het voltooien van het vastleggen.

Uitvoer van leesweigering

Het bruikbare JSON-document identificeert resources, toegangspogingen en een samenvatting. Voor het geval van geweigerde schrijfacties van de quickstart ziet een representatieve vermelding er als volgt uit:

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

Het document is bewijs voor het opstellen van beleid, niet een volledig logboek van alles wat de workload heeft gedaan. De resourceType waarde bepaalt hoe resource moet worden gelezen. Een vermelding bevat bijvoorbeeld file een absoluut pad en een capability vermelding bevat een capabilitynaam, zoals internetClient. Sommige waarnemingen kunnen niet worden uitgedrukt als machtigingen in beleid, en met één invoer worden niet alle codepaden doorlopen.

In de modus Toestaan bevat het document momenteel geen aanvragen voor mogelijkheden. Voer de workload uit met Deny en Record om de benodigde mogelijkheden te identificeren.

Als deniedResourcesTruncatedtrue is, genereer geen beleid op basis van die uitvoering. Een leeg document bewijst ook niet dat een workload veilig is of dat elke beoogde beperking is toegepast.

MXC schrijft ook een uitgebreid bestand naast het te verwerken document. Bijvoorbeeld produceert denials.<run-id>.jsondenials.<run-id>.verbose.json. Het uitgebreide bestand is een afgebakend, redacted diagnostisch logbestand dat observaties bevat waar MXC-beleid niet op kan reageren, zoals schrijfbewerkingen in het register. De uitvoermetagegevens rapporteren het pad niet, dus leid het af van het pad van het actiegerichte document. Gebruik het uitgebreide bestand om een fout te onderzoeken die niet wordt uitgelegd in het uitvoerbare document, niet als een lijst met machtigingen.

Een toegangsweigering onderscheiden van andere mislukkingen

Outcome Wat moet u doen?
MXC wijst de configuratie af Controleer het schema, de veldcombinaties en de geselecteerde back-end. Verleen niet meer toegang om een ongeldige aanvraag te omzeilen.
De backend of opnamefunctie is niet beschikbaar Controleer de ondersteuningsinformatie en vereisten vastleggen. Schakel een vereiste beperking niet stilzwijgend uit.
De workload faalt tijdens handhaving Controleer de afsluitstatus, foutuitvoer en voltooide vastlegging van weigeringen. Een workloadfout is niet noodzakelijkerwijs een weigering van resources.
Vastleggen mislukt of is onvolledig Behandel het bewijs als niet beschikbaar of onvolledig, zelfs als de workload succesvol is afgesloten.

Gestructureerde vastlegging verzamelt het document waarop actie kan worden ondernomen. De instelling ProcessContainer learningMode op lager niveau maakt het opnemen van weigeren-en-registreren-gebeurtenissen mogelijk, maar verzamelt dit document niet zelf. Gebruik vastleggen wanneer de host het bewijsmateriaal moet verwerken.

Waargenomen toegang beoordelen

Classificeer elk resultaat voordat u het beleid wijzigt. Voorbeeld:

Bevinding Mogelijke actie
Een verplicht invoerbestand Voeg het smalste pad met het kenmerk Alleen-lezen toe dat dit omvat
Een vereiste uitvoer of cache Een taakspecifiek pad voor lezen/schrijven toevoegen
Een aanmeldingsgegeven of een niet-gerelateerd gebruikersbestand Houd deze afgewezen en wijzig indien nodig de workload
Een algemene bovenliggende map De vereiste onderliggende paden identificeren in plaats van toegang tot het bovenliggende item te verlenen
Een onverwacht netwerk-, gebruikersinterface- of mogelijkheidsverzoek Controleer waarom de workload dit nodig heeft voordat u toegang verleent
Een resource die MXC niet in beleid kan worden vastgelegd Wijzig de workload of kies een back-end die de vereiste kan afdwingen

Geconstateerde toegang kan afkomstig zijn van opstarten, detectie, optionele functies, foutafhandeling of de specifieke invoer die in één uitvoering wordt gebruikt. Neem niet aan dat elke aanvraag nodig is. In de negatieve test van de quickstart is de geweigerde schrijfbewerking het beoogde resultaat, geen ontbrekende machtiging.

Voorbeeld: Leermodus gebruiken vanaf de opdrachtregel

Als u een workload wilt evalueren zonder hostcode te schrijven, voert u deze uit met het wxc-exec.exe opdrachtregelprogramma en een JSON-configuratie. Zie Een MXC-beleid opstellen en valideren voor de configuratie-indeling.

Het installeren van een MXC SDK-pakket voegt wxc-exec.exe niet toe aan uw PATH. Download mxc-release-binaries.zip vanuit de MXC-release die overeenkomt met uw SDK-versie en voer het hulpprogramma uit via het volledige pad. In de volgende voorbeelden wordt ervan uitgegaan dat u het archief naar C:\Tools\Mxc hebt uitgepakt en de map x64 gebruikt. Gebruik de arm64 map op Arm64-apparaten.

Vastleggen met een van beide gedragingen

Selecteer ProcessContainer-insluiting en voeg captureDenials toe aan de processContainer-sectie van de configuratie. Een IT-beheerder die bijvoorbeeld een workload evalueert die nog geen beleid heeft, kan de modus allowgebruiken:

{
  "$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"
    }
  }
}

Maak de uitvoermap vóór de uitvoering en geef het configuratiebestand door aan het hulpprogramma:

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

Na het uitvoeren schrijft wxc-exec één JSON-regel naar de standaardfout met het werkelijke uitvoerpad en een samenvatting:

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

Gebruik het gerapporteerde pad om het document te lezen. Als u een conceptbeleid wilt controleren dat momenteel wordt gehandhaafd, voegt u uw machtigingen toe aan de configuratie en wijzigt u de modus in block.

Een aangepaste configuratie voorstellen

Voor het ontwerpen van door ontwikkelaars gestuurd beleid voert de auditwerkstroom een allow-and-record-capture uit en stelt ook een herziene configuratie voor:

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

De auditworkflow schrijft de denial-documenten, een traceringsbestand, een momentopname van de bronconfiguratie en een Adjusted_*.json-bestand dat de waargenomen toegang in die configuratie samenvoegt. De aangepaste configuratie is een voorstel voor beoordeling, geen goedgekeurd beleid. MXC produceert deze niet wanneer de opname wordt afgekapt en SDK-capture produceert deze helemaal niet.

De controlewerkstroom ondersteunt alleen ProcessContainer. Combineer niet --audit met een expliciete processContainer.captureDenials instelling. Zie Leermodusmogelijkheden op GitHub voor de volledige CLI- en SDK-contracten.

De leerlus voltooien

Gebruik deze werkstroom om over te stappen van detectie naar een afdwingingsbeleid:

  1. Selecteer het insluitingsmodel voordat u de leermodus inschakelt.
  2. Als de workload nog geen policy heeft en u niet rechtstreeks een beperkte policy kunt schrijven, voert u deze uit in de modus Allow and record in een gecontroleerde omgeving. Voer de gebruikelijke taken uit.
  3. Stel op basis van het bewijsmateriaal een specifiek beleid op en verwijder brede en niet-gerelateerde machtigingen.
  4. Voer de workload uit onder het conceptbeleid met weigeren en registreren en los de resterende blokkeringen op, inclusief de vereiste capabilities.
  5. Herhaal dit met representatieve geslaagde, mislukte en edge-case-invoer.
  6. Verwijder alle instellingen voor leren, vastleggen en controleren en voer een laatste afdwingingstest uit. Capture kan het isolatieniveau wijzigen dat MXC selecteert, dus deze uitvoering bevestigt hoe het beleid zich gedraagt in productie.

Stop met het uitbreiden van de toegang wanneer de ondersteunde workload slaagt en de negatieve tests nog steeds mislukken zoals bedoeld.

Een codeeragent kan helpen bij het uitleggen van waarnemingen, maar zorg ervoor dat u wijzigingen in het toegangsbeleid voor resources controleert en goedkeurt.