Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Piaskownice Microsoft Execution Containers (MXC) są domyślnie skonfigurowane tak, aby wszystko było zabronione, dzięki czemu obciążenie uruchomione w kontenerze może używać tylko plików, uprawnień i innych zasobów przyznanych przez jego zasady.
Jednak może być trudno przewidzieć wszystkie zasoby, do których obciążenie może potrzebować dostępu. MXC Learning Mode ułatwia tworzenie zasad o najniższych uprawnieniach w Windows dzięki rejestrowaniu zasobów, do których obciążenie robocze próbuje uzyskać dostęp, dzięki czemu można utworzyć lub udoskonalić zasady na podstawie dowodów zamiast prób i błędów.
Note
Tryb uczenia jest obecnie dostępny dla obciążeń uruchamianych w aplikacji MXC ProcessContainer w Windows. Użyj wykrywania środowiska uruchomieniowego, aby potwierdzić obsługę usługi ProcessContainer na hoście.
Wybierz zachowanie trybu nauki
Tryb nauki ma dwa zachowania. Różnią się tym, czy usługa MXC nadal egzekwuje politykę podczas rejestrowania dostępu, co określa, kto powinien używać każdego z nich i kiedy.
| Characteristic | Odmów i zarejestruj | Zezwalaj i rejestruj |
|---|---|---|
| Nieprzyznany dostęp | Zablokowane i zarejestrowane | Dozwolone i zarejestrowane |
| Egzekwowanie zasad | Wymuszone, ale capture może zmienić poziom izolacji | Złagodzono domyślną odmowę dla uruchomienia |
| Typowi użytkownicy | Deweloperzy aplikacji i autorzy zasad | Administratorzy IT i deweloperzy oceniający istniejące obciążenia robocze |
| Kiedy należy go używać | Podczas tworzenia aplikacji i jej polityki | Zanim powstanie zasada, aby dowiedzieć się, do czego uzyskuje dostęp zaufane obciążenie |
Przechwyć wartość mode |
block (ustawienie domyślne) |
allow |
Odmów i rejestruj: tworzenie aplikacji i zasad
Podczas opracowywania aplikacji lub agenta i zasad MXC należy używać opcji Deny and record (learningModeLogging). Usługa MXC wymusza zasady podczas rejestrowania, więc nieudzielony dostęp kończy się niepowodzeniem, tak jak w przypadku użytkowników. Tryb uczenia dodaje rejestr każdego dostępu zablokowanego przez zasadę. Na niektórych hostach przechwytywanie zmienia warstwę izolacji wybraną przez MXC. Aby uzyskać szczegółowe informacje, zobacz Plan wymagań wstępnych dotyczących przechwytywania.
Najczęstsze zastosowania to:
- Diagnozowanie przyczyn niepowodzenia obciążenia w kontenerze i odróżnienie brakującego uprawnienia od niepowiązanego błędu.
- Iterowanie nad wersją roboczą zasad, aż obsługiwane scenariusze będą kończyć się pomyślnie, a testy ujemne nadal będą kończyć się niepowodzeniem.
- Identyfikowanie możliwości żądanych przez obciążenie.
- Umożliwienie użytkownikom aplikacji dostrajania własnej piaskownicy. Aplikacja rejestruje, co zostało zablokowane, przedstawia to we własnym interfejsie użytkownika i ponownie generuje zasadę dopiero po zatwierdzeniu zmiany przez użytkownika.
Ponieważ MXC nadal wymusza tę zasadę, odmowa i rejestrowanie jest bezpieczniejszym wyborem. Używaj go zawsze, gdy masz politykę do testowania, nawet niekompletną.
Zezwalaj i rejestruj: oceń istniejące obciążenia przed utworzeniem zasady
Użyj opcji zezwalania i rejestrowania (permissiveLearningMode), jeśli musisz dowiedzieć się, do czego uzyskuje dostęp istniejące, zaufane obciążenie robocze przed zastosowaniem do niego zasad MXC. Na przykład administrator IT może uruchomić narzędzie biznesowe lub skrypt, wykonując za jego pomocą typowe zadania na urządzeniu testowym, a następnie użyć wyników, aby utworzyć zasady punktu odniesienia przed włączeniem wymuszania. Deweloper, który wprowadza istniejące narzędzie do usługi MXC, może użyć tego samego podejścia do utworzenia pierwszej polityki.
Zezwalanie i rejestrowanie łagodzi egzekwowanie zasady domyślnej odmowy dla uruchomienia, więc traktuj obciążenie robocze tak, jakby działało z pełnymi uprawnieniami użytkownika. Usługa MXC rejestruje każdy dostęp, którego zasady by zabroniły. Za każdym razem, gdy ten tryb jest aktywny, funkcja MXC zwraca również ostrzeżenie o zabezpieczeniach z wynikiem uruchomienia. Host powinien wyświetlić to ostrzeżenie, a nie zignorować je.
Przed użyciem opcji „Zezwól i rejestruj”:
- Uruchom tylko zaufany kod z reprezentatywnymi danymi niewrażliwymi na kontrolowanym urządzeniu testowym lub koncie.
- Przećwicz typowe zadania obciążenia roboczego. Dostęp, którego dane uruchomienie nie sprawdza, nie jest wyświetlany w wynikach.
- Potraktuj wyniki jako inwentarz początkowy. Usuń niepotrzebne uprawnienia, a następnie przed wdrożeniem zweryfikuj wersję roboczą zasad w trybach odmowy i rejestrowania.
Important
Nie udostępniaj trybu uczenia zezwalania i rejestrowania jako wywoływanego przez agenta narzędzia produkcyjnego. Użycie zaufanego kodu komputera hosta lub osoby oraz wszelkie wynikające z tego rozszerzenie uprawnień muszą zostać zatwierdzone.
Plan wymagań wstępnych dotyczących przechwytywania
MxC zbiera wyniki trybu uczenia za pomocą jednej z dwóch ścieżek przechwytywania. Wybiera ścieżkę w czasie wykonywania na podstawie hosta i żądanej zasady. Dotyczy captureDenials w obu trybach oraz przepływu pracy wxc-exec.exe --audit.
| Ścieżka przechwytywania | Gdy używa go MXC | Poziom izolacji | Elevation |
|---|---|---|---|
| Natywne przechwytywanie | Windows zapewnia środowisko zabezpieczeń procesu i interfejsy API trybu uczenia, które są potrzebne MXC, i mogą reprezentować żądaną zasadę | BaseContainer | Żaden |
| Chronione przechwytywanie | Przechwytywanie natywne jest niedostępne lub nie może reprezentować żądanej zasady | Zgodna warstwa AppContainer | MXC uruchamia podpisany pomocnik, plm.exe, z podwyższonymi uprawnieniami do rejestrowania śladu Windows Performance Recorder (WPR). Użytkownik musi zatwierdzić monit kontroli dostępu użytkownika lub podać poświadczenia administratora. |
Przechwytywanie natywne nie może reprezentować niektórych zasad, takich jak processContainer.leastPrivilege, niektóre konfiguracje serwera proxy sieci i ścieżki objęte odmową na hostach, które nie obsługują ich natywnie. Te żądania używają chronionego przechwytywania nawet na hostach, które obsługują przechwytywanie natywne. Jeśli żadna ścieżka nie może zachować pełnej polityki, funkcja MXC zwraca błąd zamiast osłabiać zasady lub pomijać rejestrowanie.
Aby dowiedzieć się, która ścieżka będzie używana przez żądanie, sprawdź żądanie z włączonym przechwytywaniem przed jego uruchomieniem. Sonda nie tworzy kontenera.
| SDK | Call | Wyniki do sprawdzenia |
|---|---|---|
| .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 |
Poziom BaseContainer oznacza przechwytywanie natywne. Poziom AppContainer oznacza chronione przechwytywanie i monit kontroli konta użytkownika. Parametr Native Capture Fact opisuje hosta, a nie Twoje żądanie, więc sprawdź również poziom.
Uwzględnij te różnice:
- W aplikacji sprawdź przed rozpoczęciem przechwytywania i poinformuj użytkowników, kiedy przechwytywanie wymaga zatwierdzenia przez administratora. Nie zakładaj, że przechwytywanie działa po cichu na każdym hoście.
- Gdy administrator IT ocenia obciążenia, upewnij się, że urządzenia testowe obsługują przechwytywanie natywne lub że administrator może zatwierdzić monit dotyczący chronionego przechwytywania. Warstwa AppContainer może również wymagać przygotowania hosta.
- Traktuj wyniki przechwytywania jako dowód na tworzenie polityk. Ponieważ guarded capture może uruchamiać obciążenie w innej warstwie niż w środowisku produkcyjnym, potwierdź ostateczne zasady, wykonując uruchomienie, które nie używa przechwytywania.
Przykład: włączanie przechwytywania za pomocą zestawu SDK MXC
Użyj SDK Capture, gdy aplikacja obsługuje obciążenie robocze. Aby ocenić obciążenie bez pisania kodu hosta, zobacz Używanie trybu uczenia z wiersza polecenia.
Rozpocznij od przewodnika Szybki start zestawu SDK, w tym przypadku z odmową zapisu. Poniższe fragmenty rozszerzają ten przykład i używają tych samych przydziałów obciążeń roboczych i zasobów. Wstaw zaznaczony fragment bezpośrednio przed uruchomieniem obciążenia roboczego przez zestaw SDK.
W przykładach użyto interfejsów API zestawu SDK MXC 1.0 V1. W każdym zestawie SDK można skonfigurować przechwytywanie dla jawnie wybranego kontenera ProcessContainer, który zastępuje abstrakcyjną intencję procesu z przewodnika Szybki start.
Utwórz katalog wyjściowy należący do hosta na potrzeby przechwytywania. Nie musi być zapisywalny przez zawarte obciążenie robocze.
Ustaw opcje przechwytywania w jawnej relacji zawierania ProcessContainer żądania:
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"),
},
};
W block trybie przypadek odmowy zapisu nadal kończy się niepowodzeniem. Przechwytywanie odmowy nie przyznaje uprawnień do zapisu. W przypadku zatwierdzonego uruchomienia w trybie zezwalania i rejestrowania zmień tylko tryb na CaptureDenialsMode.Allow w języku C#, 'allow' w języku TypeScript lub CaptureDenialsMode::Allow w języku Rust.
Podczas dostosowywania istniejącej integracji zachowaj inne ustawienia ograniczeń. Użyj dedykowanych opcji przechwytywania, a nie zastrzeżonych wewnętrznych nazw możliwości learningModeLogging lub permissiveLearningMode.
Znajdź ukończony zrzut
Poczekaj na ukończenie wykonywania i finalizację przechwytywania przed odczytaniem wyniku. MxC wstawia unikatowy identyfikator uruchomienia do skonfigurowanej nazwy pliku, więc denials.json staje się nazwą taką jak denials.<run-id>.json. Użyj zgłoszonej ścieżki zamiast ją zgadywać lub przeszukiwać w poszukiwaniu najnowszego pliku.
Po zakończeniu MxcContainer.RunAsync(request) i zgłoszeniu result.Warnings sprawdź metadane wyników:
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;
}
Zachowaj obsługę stanu zakończenia, limitów czasu i result.Warnings szybkiego startu. W szczególności zestaw SDK .NET zwraca ostrzeżenia dotyczące permisywnego trybu Learning Mode, zamiast automatycznie zapisywać je w terminalu.
Jeśli używasz wykonania strumieniowego, zaczekaj do zakończenia operacji w terminalu przed sprawdzeniem MxcProcess.OutputMetadata. Zwalnianie procesu bez oczekiwania nie jest zamiennikiem finalizacji przechwytywania.
Dane wyjściowe odmowy odczytu
Wykonywalny dokument JSON identyfikuje zasoby, próbę uzyskania dostępu i podsumowanie. W przypadku odmowy zapisu w przewodniku Szybki start reprezentatywny wpis wygląda następująco:
{
"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 stanowi podstawę do tworzenia zasad, a nie wyczerpujący dziennik wszystkiego, co zrobiło obciążenie robocze. Wartość resourceType określa, jak odczytać resource. Na przykład wpis file zawiera ścieżkę bezwzględną, a wpis capability zawiera nazwę zdolności, taką jak internetClient. Niektóre obserwacje nie mogą być wyrażone jako uprawnienia zasad, a pojedyncze dane wejściowe nie obejmą wszystkich ścieżek kodu.
W trybie zezwalania dokument nie zawiera obecnie żądań uprawnień. Uruchom obciążenie w trybie deny i record, aby zidentyfikować wymagane uprawnienia.
Jeśli deniedResourcesTruncated wartość to true, nie wygeneruj strategii na podstawie tego uruchomienia. Pusty dokument również nie potwierdza, że obciążenie jest bezpieczne lub że każde zamierzone ograniczenie zostało zastosowane.
MXC zapisuje również plik szczegółowego dziennika obok dokumentu wykonywalnego. Na przykład denials.<run-id>.json tworzy wartość denials.<run-id>.verbose.json. Szczegółowy plik to ograniczony, zredagowany rekord diagnostyczny zawierający obserwacje, na które zasady MXC nie mogą reagować, takie jak zapisy rejestru. Metadane wyjściowe nie zgłaszają swojej ścieżki, więc wyprowadź ją ze ścieżki dokumentu akcji. Użyj pełnego pliku, aby zbadać błąd, którego dokument z zalecanymi działaniami nie wyjaśnia, a nie jako listę uprawnień.
Odróżnić odrzucenie od innych niepowodzeń
| Outcome | Co zrobić |
|---|---|
| MXC odrzuca konfigurację | Sprawdź schemat, kombinacje pól i wybrany backend. Nie przyznawaj szerszego dostępu, aby obejść nieprawidłowe żądanie. |
| Funkcja backendu lub przechwytywania jest niedostępna | Sprawdź informacje o pomocy technicznej i zbierz wymagania wstępne. Nie należy po cichu wyłączać wymaganego ograniczenia. |
| Obciążenie kończy się niepowodzeniem przy wymuszaniu | Przejrzyj stan zakończenia, komunikaty błędów i zakończone przechwytywanie odmowy. Awaria obciążenia roboczego nie musi być odmową dostępu do zasobu. |
| Przechwytywanie kończy się niepowodzeniem lub jest niekompletne | Traktuj dowody jako niedostępne lub niekompletne, nawet jeśli obciążenie robocze zakończyło się pomyślnie. |
Strukturalne przechwytywanie pozyskuje dokument operacyjny. Ustawienie ProcessContainer learningMode niższego poziomu umożliwia rejestrowanie zdarzeń typu deny-and-record, ale samo w sobie nie zbiera tego dokumentu. Użyj funkcji przechwytywania, gdy host musi przetworzyć dane dowodowe.
Przejrzyj monitorowany dostęp
Klasyfikuj każdy wynik przed zmianą polityki. Na przykład:
| Ustalenie | Potencjalna akcja |
|---|---|
| Wymagany plik wejściowy | Dodaj najwęższą ścieżkę tylko do odczytu obejmującą ją |
| Wymagane wyjście lub pamięć podręczna | Dodaj ścieżkę odczytu i zapisu specyficzną dla zadania |
| Dane logowania lub niepowiązany plik użytkownika | Pozostaw jako odrzucone i w razie potrzeby zmień obciążenie |
| Ogólny katalog nadrzędny | Zidentyfikuj wymagane ścieżki podrzędne zamiast udzielania uprawnień elementowi nadrzędnemu |
| Nieoczekiwane żądanie sieci, interfejsu użytkownika lub funkcji systemu | Sprawdź, dlaczego obciążenie robocze tego wymaga przed udzieleniem dostępu |
| Zasób, którego MXC nie może wyrazić w zasadach | Zmień obciążenie lub wybierz backend, który może spełnić ten wymóg |
Zaobserwowany dostęp może pochodzić z uruchamiania, odnajdywania, opcjonalnych funkcji, obsługi błędów lub określonych danych wejściowych używanych w jednym przebiegu. Nie zakładaj, że każde żądanie jest niezbędne. W teście ujemnym przewodnika Szybki start odmowa zapisu jest zamierzonym wynikiem, a nie brakiem uprawnienia.
Przykład: użyj trybu uczenia z wiersza polecenia
Aby ocenić obciążenie bez pisania kodu hosta, uruchom je przy użyciu narzędzia wiersza polecenia wxc-exec.exe oraz konfiguracji JSON. Aby zapoznać się z formatem konfiguracji, zobacz Tworzenie i weryfikowanie zasady MXC.
Zainstalowanie pakietu SDK MXC nie powoduje dodania wxc-exec.exe do PATH. Pobierz mxc-release-binaries.zip z wydania MXC zgodnego z wersją zestawu SDK i uruchom narzędzie przy użyciu pełnej ścieżki. W poniższych przykładach przyjęto założenie, że wyodrębniono archiwum do C:\Tools\Mxc i użyto folderu x64. Na urządzeniach Arm64 użyj folderu arm64.
Przechwytywanie przy użyciu jednego z tych trybów
Wybierz kontener podrzędny ProcessContainer i dodaj captureDenials do processContainer sekcji konfiguracji. Na przykład administrator IT, który ocenia obciążenie, które nie ma jeszcze zasad, może użyć trybu 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"
}
}
}
Utwórz katalog wyjściowy przed uruchomieniem, a następnie przekaż plik konfiguracji do narzędzia:
C:\Tools\Mxc\x64\wxc-exec.exe audit-config.json
Po wykonaniu wxc-exec zapisuje jeden wiersz JSON do standardowego błędu z rzeczywistą ścieżką wyjściową i podsumowaniem:
{"type":"captureDenials","outputPath":"C:\\MxcAudit\\denials.<run-id>.json","exitCode":0,"totalDenials":2,"deniedResourcesTruncated":false}
Użyj zgłoszonej ścieżki, aby odczytać dokument. Aby zweryfikować wersję roboczą polityki w ramach wymuszania, dodaj swoje granty do konfiguracji i zmień tryb na block.
Zaproponuj dostosowaną konfigurację
W przypadku tworzenia zasad sterowanego przez dewelopera przepływ pracy audytu uruchamia przechwytywanie w trybie zezwalania i rejestrowania, a także proponuje poprawioną konfigurację:
C:\Tools\Mxc\x64\wxc-exec.exe --audit --config <path-to-config>
Przepływ pracy audytu zapisuje dokumenty odmowy, plik śledzenia, migawkę konfiguracji źródłowej i Adjusted_*.json plik, który scala obserwowany dostęp z tą konfiguracją. Skorygowana konfiguracja jest propozycją do przeglądu, a nie zatwierdzoną polityką. Funkcja MXC nie generuje go, gdy zrzut jest obcięty, a zrzut zestawu SDK w ogóle nie powoduje jego utworzenia.
Przepływ pracy audytu obsługuje tylko ProcessContainer. Nie łącz --audit z jawnym processContainer.captureDenials ustawieniem. Aby zapoznać się z pełnymi kontraktami interfejsu wiersza polecenia i zestawu SDK, zobacz Learning-mode capabilities on GitHub.
Domknij cykl uczenia się
Użyj tego przepływu pracy, aby przejść od odnajdywania do wymuszanej polityki:
- Wybierz model izolacji przed włączeniem trybu uczenia.
- Jeśli obciążenie nie ma jeszcze polityki i nie można od razu napisać wąskiej polityki, uruchom je w trybie allow i record w kontrolowanym środowisku. Wykonuj typowe zadania.
- Opracuj wąskie zasady na podstawie dowodów i usuń szerokie oraz niepowiązane uprawnienia.
- Uruchom obciążenie w ramach zasad w wersji roboczej z opcjami deny i record, a następnie rozwiąż pozostałe odmowy, w tym wymagane uprawnienia.
- Powtarzaj przy użyciu reprezentatywnych danych wejściowych powodzenia, niepowodzenia i przypadków brzegowych.
- Usuń wszystkie ustawienia uczenia, przechwytywania i audytu oraz uruchom końcowy test wymuszający. Capture może zmienić warstwę izolacji wybieraną przez MXC, więc ten przebieg potwierdza zachowanie zasad w środowisku produkcyjnym.
Zatrzymaj rozszerzanie dostępu, gdy obsługiwane obciążenie zakończy się pomyślnie, a testy negatywne nadal kończą się niepowodzeniem zgodnie z oczekiwaniami.
Agent programistyczny może pomóc wyjaśnić obserwacje, ale upewnij się, że przeglądasz i zatwierdzasz wszelkie zmiany zasad dostępu do zasobów.