Tento článok popisuje kroky potrebné na spustenie AppContaineru alebo menej privilegovaného AppContaineru (LPAC), vrátane relevantných príkladov kódu. AppContainer sú funkcia zabezpečenia zavedená v systéme Windows 8, ktorá vylepšuje izoláciu a riadenie procesov aplikácií. Poskytujú prostredie v izolovanom priestore (sandbox) pre aplikácie, obmedzuje ich schopnosť pristupovať k prostriedkom systému alebo k sebe navzájom, rovnako ako k používateľským údajom, pokiaľ to explicitne nepovolí.

Pochopenie identity balíčka a identifikátorov SID
Identita balíčka je logická konštrukcia, ktorá jednoznačne identifikuje balíček. Identifikátor SID (Security Identifier) slúži na jednoznačnú identifikáciu objektu zabezpečenia alebo skupiny zabezpečenia. Objekty zabezpečenia môžu predstavovať ľubovoľnú entitu, ktorú môže operačný systém overiť. Medzi príklady patria používateľský účet, účet počítača alebo vlákno alebo proces, ktorý beží v kontexte zabezpečenia používateľského alebo počítačového účtu.
Identifikátory SID schopností (Capability SIDs) slúžia ako jedinečné a nemenné identifikátory schopností. Schopnosť predstavuje neodvolateľný token autority, ktorý aplikácii udeľuje prístup k prostriedkom (napríklad k dokumentom, kamerám a umiestneniam).

AppContainery a ich bezpečnostné mechanizmy
Keď aplikácia beží ako AppContainer, jej prístupový token zahŕňa jedinečnú identitu balíčka aplikácie (SID balíčka) a jednu alebo viac identifikátorov SID schopností. V prípade AppContainerov sa schopnosti používajú na zabezpečenie toho, aby sa AppContainery mohli spúšťať s najnižšími možnými oprávneniami, a v prípade potreby sa im udelí prístup iba k potenciálne citlivým prostriedkom. Napríklad bez sieťovej schopnosti nemôže AppContainer získať prístup k sieti, bez možnosti webovej kamery sa k nej nemá prístup ku kamere.
Identifikátory SID AppContainer (Package SID a Capability SID) sú oddelené od tradičných identifikátorov SID používateľov a skupín, pričom obe časti tokenu sú potrebné na udelenie prístupu k chránenému prostriedku prostredníctvom voliteľného zoznamu riadenia prístupu (DACL) objektu. Tento model duálneho objektu zabezpečenia zabezpečuje, že prístup k citlivým prostriedkom je úzko riadený a dá sa spravovať nezávisle na rôznych aplikáciách. Zabezpečuje tiež, že AppContainerom musí byť explicitne udelený prístup k danému prostriedku. Okrem toho je povolený prístup prienikom identifikátorov SID používateľa/skupiny a identifikátorov SID AppContainer, takže ak má používateľ úplný prístup, ale AppContainer má prístup iba na čítanie, AppContainer môže mať pridelený prístup iba na čítanie.
AppContainery bežia s nízkou úrovňou integrity (IL), ktorá ďalej obmedzuje ich schopnosť pracovať s objektmi vyššej integrity v systéme. Ak má však prostriedok povinný popísať strednú IL alebo nižšiu a DACL udeľuje prístup cez AppContainer (prostredníctvom SID balíčka alebo SID schopností), môže AppContainer čítať, zapisovať alebo spúšťať v závislosti od prístupu udeleného obom objektom v zozname DACL.
AppContainery sú izolované od prístupu k procesom a oknám patriacim do iných aplikácií, ako aj od zariadení, súborov/adresárov, kľúčov registra, siete a prihlasovacích údajov.
How Do I Check Integrity of Windows Installation?
Rozdiel medzi AppContainerom a LPAC
Pravidelným AppContainerom sa udeľuje prístup k určitým systémovým súborom alebo adresárom, bežným kľúčom registra a objektom COM. LPAC (Less Privileged AppContainer) však potrebuje špecifické schopnosti na prístup k prostriedkom, ku ktorým majú normálne AppContainery prístup. Menej privilegované AppContainery (LPAC) sú ešte izolovannejšie ako bežné AppContainery a vyžadujú dodatočné možnosti na získanie prístupu k prostriedkom, ku ktorým už bežné AppContainery majú prístup, ako je register, súbory a ďalšie.
Ako už bolo spomenuté, AppContainery majú jedinečný identifikátor SID balíčka, ktorý zabezpečuje, že ich vlastné prostriedky sú chránené pred inými aplikáciami. Identifikátor SID balíčka je odvodený od názvu reťazca (moniker) pre daný AppContainer.
Kroky na spustenie AppContaineru alebo LPAC
Spustenie AppContaineru zahŕňa niekoľko krokov. AppContainer (alebo LPAC) môže potrebovať schopnosti na prístup k rôznym prostriedkom, ako je sieť, umiestnenie alebo v prípade LPAC, dokonca aj register alebo objekt COM.
Vytvorenie profilu AppContaineru: Vytvorte AppContainer volaním funkcie
CreateAppContainerProfiles profilom, ktorý je prístupný pre AppContainer prostredníctvom premennej prostrediaLOCALAPPDATAalebo volanímGetAppContainerFolderPath. Pre nový AppContainer vráti aj identifikátor SID balíčka pre AppContainer. Pre existujúci AppContainer je však potrebné odvodiť identifikátor SID balíčka z monikeru pomocou APIDeriveAppContainerSidFromAppContainerName.// Príklad na vytvorenie profilu AppContaineruHRESULT hr = CreateAppContainerProfile( L"MyUniqueAppContainerName", // Jedinečný názov nullptr, // Žiadne dodatočné oprávnenia 0, // Žiadne dodatočné oprávnenia nullptr, // Žiadne dodatočné oprávnenia nullptr, // Žiadne dodatočné oprávnenia &appContainerSid // Výstupný SID balíčka);Príprava štruktúry informácií o spustení: Ak chcete spustiť proces AppContainer alebo LPAC, je potrebné zahrnúť určité polia do štruktúry informácií o spustení
STARTUPINFOEX. Konkrétne je vyžadované polelpAttributeList, pretože to umožňuje dodatočné informácie, ktoré dávajú funkciiCreateProcesspokyn na vytvorenie prostredia pre AppContainer, ktoré zahŕňa oblasť názvov objektov a token.// Príklad na prípravu STARTUPINFOEX pre AppContainerSTARTUPINFOEX si = { sizeof(STARTUPINFOEX) };si.lpAttributeList = nullptr; // Bude inicializované neskôr// Vytvorenie a naplnenie atribútového zoznamu// ... (detailný kód na vytvorenie a naplnenie atribútového zoznamu)Spustenie procesu: Posledným krokom je spustenie procesu pomocou informácií o spustení, ktoré zahŕňajú atribúty procesu alebo vlákna vytvorené v predchádzajúcich krokoch.
// Príklad na spustenie procesu s použitím STARTUPINFOEXPROCESS_INFORMATION pi;if (CreateProcess( NULL, // Názov modulu (môže byť NULL, ak je v argumente príkazového riadka) commandLine, // Príkazový riadok NULL, // Atribúty procesu NULL, // Atribúty vlákna FALSE, // Dedičnosť handle EXTENDED_STARTUPINFO_PRESENT, // Rozšírené informácie o spustení sú prítomné NULL, // Prostredie NULL, // Aktuálny adresár &si, // Štruktúra STARTUPINFOEX &pi // Štruktúra PROCESS_INFORMATION)) { // Proces bol úspešne spustení CloseHandle(pi.hProcess); CloseHandle(pi.hThread);} else { // Chyba pri spustení procesu}

Použitím týchto krokov môžu vývojári efektívne implementovať a spúšťať AppContainery a LPAC, čím zvyšujú bezpečnosť a robustnosť svojich aplikácií pomocou pokročilých izolačných techník systému Windows.