Persoonlijke certificaten importeren in een mandatory profile omgeving met Microsoft App-V

jeroenj1

jeroenj2

Nu zijn daar natuurlijk bestaande oplossingen/hacks voor beschikbaar, maar deze kunnen toch wel enige impact hebben op het design en de omgeving. Een veel voorkomende oplossing is Profile State spoofing/emulation. Deze hack zorgt ervoor dat Windows tijdens de sessie een andere profile state ingeschoten krijgt, waardoor het gedrag van het profile on-the-fly wordt aangepast. Bijvoorbeeld van mandatory state naar roaming of local state, waardoor diverse problemen m.b.t. de mandatory state overwonnen kunnen worden. Er zijn wel enkele zaken waar op gelet moet worden, zoals:

1. Vóór het uitloggen moet de state weer teruggezet worden naar de oorspronkelijke waarde;

2. Profile redirection moet goed ingeregeld worden;

3. Change permissions moeten gezet worden op de HKLM ProfileList key.

Bovenstaande punten zijn wel de belangrijkste punten waar rekening mee gehouden moet worden en kunnen bovendien voor enige impact zorgen, zeker in een live omgeving.

Hier kan software virtualisatie een uitkomst in bieden: zo kun je de profile state aanpassen in een virtuele omgeving om vervolgens het certificaat in deze omgeving te importeren. In dat geval zijn bovenstaande punten niet van toepassing, omdat deze instellingen enkel in de virtuele omgeving gelden en niet in de gebruikelijke sessie. Bijkomend voordeel is dat de certificate store niet opgeslagen wordt in de virtuele omgeving en dat deze certificaten dus ook beschikbaar zullen zijn buiten deze virtuele omgeving.

Benodigdheden:
1. Virtuele applicatie omgeving (App-V 5 in dit voorbeeld)

2. Script om profile state voor huidige gebruiker aan te passen

3. Script om persoonlijk certificaat te importeren

Het App-V package in dit geval is redelijk simpel in opbouw: we maken een App-V package met enkel een script dat alle noodzakelijk handelingen uitvoert, met één shortcut die de gebruiker de mogelijkheid biedt om een certificaat te importeren.

Met een quick-and-dirty Powershell script wordt de profile state van de actuele user binnen de virtuele omgeving aangepast. Selecteer een certificaat en vul het wachtwoord in; het certificaat wordt geimporteerd in de user certificate store.

Het script:

[code]

[System.Reflection.Assembly]::LoadWithPartialName(“System.windows.forms”)

function Get-CU-SID

{

Param ( $CUIdentity )

$MyID = new-object System.Security.Principal.NTAccount($CUIdentity)

return $MyID.Translate([System.Security.Principal.SecurityIdentifier]).toString()

}

function Import-PfxCertificate {

param([String]$certPath,[String]$certRootStore = “CurrentUser”,[String]$certStore = “My”,$pfxPass = $null)

$pfx = new-object System.Security.Cryptography.X509Certificates.X509Certificate2

if ($pfxPass -eq $null) {$pfxPass = read-host “Enter the pfx password” -assecurestring}

$pfx.import($certPath,$pfxPass, “Exportable,PersistKeySet”)

$store = new-object System.Security.Cryptography.X509Certificates.X509Store($certStore,$certRootStore)

$store.open(“MaxAllowed”)

$store.add($pfx)

$store.close()

}

$UserSID= Get-CU-SID ([Environment]::UserName)

set-itemproperty -Path “hklm:software\microsoft\windows nt\currentversion\ProfileList\$UserSID” -Name “State” -value 4

$pfxFile = New-Object system.windows.forms.openfiledialog

$pfxFile.showdialog()

Import-PfxCertificate($pfxFile.FileName)

[/code]

Bij het starten van dit script in een virtuele omgeving wordt, na het opgeven van het certificaat en het wachtwoord, het certificaat geïmporteerd in de User Certificate Store. Bij het starten van CertMgr.exe buiten de virtuele omgeving, waar de profile state nog steeds mandatory is, zal te zien zijn dat dit certificaat beschikbaar is binnen de gehele gebruikerssessie.

User Profile State in virtuele omgeving:

jeroenj3

User Profile State in huidige sessie:

jeroenj4

CertMgr in huidige sessie:

jeroenj5

De volgende folders/registry keys moeten opgeslagen worden:

%AppData%\Microsoft\SystemCertificates

%AppData%\Microsoft\CLR Security Config

%AppData%\Microsoft\Protect

%AppData%\Microsoft\Crypto

%AppData%\Microsoft\Credentials

%AppData%\Microsoft\CryptnetUrlCache

HKEY_CURRENT_USER\Software\Microsoft\Identities

HKEY_CURRENT_USER\Software\Microsoft\Cryptography

HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\EFS

(bron: http://resguru.com/bb-powerfuse/#12)