Zojuist was ik bezig met het schrijven van een blogpost om de Microsoft Loopback Adapter te gebruiken in combinatie met Internet Connection Sharing om zo een 'NAT-achtige' structuur te maken voor mijn Virtual PC 2007 VM's. Dit omdat de NAT functionaliteit van VPC, de VM's niet toestaat onderling te communiceren.

Ik had dit al eerder gedaan op XP machines, maar er zit een valkuil in de procedure voor Vista, welke ik documenteren op mijn blog. Echter...toen ik eenmaal zover was om ICS te gaan gebruiken kwam ik het volgende venster tegen:

 ...CRAP...$%#%$ 

 duidelijk gevalletje Microsoft IT GPO... :)

Nu ben ik administrator op mijn laptop, dus ging dit policietje mij natuurlijk niet tegenhouden. Maar... Wat is precies de locatie van deze policy?? Er zijn honderden policysettings. Waar te beginnen??
Policysettings worden weggeschreven in het register. Voor user settings zijn ze te vinden in HiveKey Current User (HKCU) en voor computer settings in HiveKey Local Machine (HKLM). Bij het opstarten en periodiek worden de policy settings opgehaald vanaf het domain en weggeschreven in het register. Vervolgens worden ze uitgelezen door de applicaties waarvoor ze bedoeld zijn. Dit kan tijdens het opstarten zijn (een groot deel van de policies worden uitgelezen door EXPLORER.EXE (window manager) tijdens het opstarten), maar ook wanneer de functionaliteit die het betreft, gebruikt wordt.

Ik zou domweg door het register kunnen gaan spitten, maar zoals ik al aangaf, zijn er teveel plekken waar de setting zou kunnen staan. Ook zou ik de GPO settings lijst van Vista kunnen downloaden van http://www.microsoft.com/downloads/details.aspx?FamilyID=41dc179b-3328-4350-ade1-c0d9289f09ef&DisplayLang=en en de desbetreffende policy kunnen zoeken tussen de 2495 settings, maar dat is ten eerste niet leuk en ten tweede dacht ik sneller te werken op mijn eigen manier. En die manier is via Process Monitor van SysInternals.

Ik gokte dat de policy setting uitgelezen werd op het moment dat ik het property window opende van mijn netwerk connectie die ik wilde sharen. Filters
Wat ik dus deed was Process Monitor starten in registry mode en het probleem reproduceren.
Vervolgens stopte ik de trace en gebruikte ik de 'Include Process from Window' optie om een filter te zetten op mijn trace.
Met het vizier kan je een window aanklikken, waarop Process Monitor bepaald welk process er bijhoort en het filter op de trace aanpast. Het venster behoorde tot een DDLHOST.EXE process wat het OS gebruikt om out-of-process applicaties zoals COM servers te hosten.
In dit geval was de command line syntax: C:\Windows\system32\DllHost.exe /Processid:{7007ACD1-3202-11D1-AAD2-00805FC1270E}.

Een snelle query in Component Services en het register laat weten dat het om de Network Common Connections Ui DCOM applicatie gaat, welke voornamelijk functies uit de NETSHELL.DLL gebruikt. Gezien de naam zou ik nu al zeggen dat we in de buurt zitten.

De volgende stap was om wat extra filters te zetten op de trace. Policies staan in het register altijd in een path wat de naam policies bevat. Ook moeten de read actie op het register de status SUCCESS hebben gehad om het mogelijk gemaakt te hebben de key uit te lezen. Zoals je in het venster rechts kan zien zijn er nu dus een aantal filters van toepassing.
De PID 5844 filter is gezet door de 'Include Process from Windows' functionaliteit en de Result is SUCCESS en Path contains Policies heb ik zelf gezet, wat mij de volgende resultaten geeft:

Processmon resultaten

Zoals je ziet zijn er een aantal policies die uitgelezen worden. De 3 onderaan de trace hebben mijn aandacht. De NC_ShowSharedAccessUI en NC_AllowNetBridge_NLA zijn na onderzoek degene die ik moet hebben. De volgende stap is om in het register de permissies van de key die de settings bevat af te halen. Ik geef EVERYONE deny READ. In sommige gevallen wordt het je wat lastig gemaakt, maar door de Take OwnerShip priviledges van de Administators Group kunnen we deze permissies eigenlijk altijd zetten. De Deny Read zorgt ervoor dat de policy gezien wordt als NOT CONFIGURED. Het resultaat is dat ik dus de Internet Connection Sharing gewoon aan kan zetten.

Easy does it...

 Zoals eerder gezegd kan het ook zijn dat de policies uitgelezen worden gedurende de boot. Gebruik dan de bootlogging optie van Process Monitor om erachter te komen om welke setting het gaat.

Boot Logging processmon

Natuurlijk is het niet de bedoeling GPO's te omzeilen, maar dit laat duidelijk zien dat GPO's geen enkele zin hebben als je toestaat dat je gebruikers LOCAL ADMIN zijn op hun laptops en werkstations.

Daarnaast is deze post voornamelijk bedoelt om te laten zien wat Process Monitor en ander tools van SysInternals voor geweldige hulpmiddelen zijn, die niet mogen ontbreken in de toolset van een SysAdmin...

:)