Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door Yoeri Lauwers

Eindredacteur

Een introductie tot Windows PowerShell

Veiligheid

Microsoft kondigde het al aan met betrekking tot Windows Vista, maar ook tijdens de ontwikkeling van de Windows Powershell werd uitvoerig over de veiligheidsaspecten nagedacht.

Net zoals bij bijvoorbeeld de Bash-shell onder Linux is het ook mogelijk om met Windows Powershell kwaadaardige scripts te schrijven. Hoeveel schade een script kan aanrichten is volledig afhankelijk van de rechten van het gebruikersaccount waaronder het opgestart wordt. Hoewel er met Vista verbetering beloofd wordt, is het tot op heden zo dat deze rechten onder Windows - onder andere door standaard als administrator te werken - vaak uitgebreider zijn dan onder Linux en dat scripts dus ook potentieel gevaarlijker kunnen zijn. Dit is voor de Powershell echter niet anders dan voor andere applicaties. Bovendien zal Powershell in zijn standaardconfiguratie weigeren om scripts die niet digitaal ondertekend zijn uit te voeren.

Een eerste maatregel die Microsoft invoerde om misbruik te voorkomen, is dat ps-scripts niet uitgevoerd kunnen worden door er dubbel op te klikken. Doordat gebruiker de naam van een script moet intypen, in plaats van erop te dubbelklikken, is deze zich beter bewust van het feit dat een script opgestart wordt en van de bijhorende veiligheidsrisico's. Systeembeheerders kunnen de Windows Powershell bovendien zo configureren dat deze weigert ongesigneerde scripts uit te voeren. Als een geldig certificaat ontbreekt, zullen de zogenaamde 'untrusted' scripts niet uitgevoerd worden. Daarnaast wordt met een certificaat ook een hashwaarde bewaard, zodat men kan controleren of een script aangepast werd nadat het digitaal ondertekend werd.

Naarmate de acceptatie van de Powershell stijgt, valt het te verwachten dat er ook sites uit de grond zullen schieten waar interessante en minder interessante scripts ter download aangeboden zullen worden. Geïnteresseerde gebruikers zullen natuurlijk de mogelijkheid hebben om de broncode lijn per lijn te onderzoeken om na te gaan of er geen ongewenste bijeffecten zullen optreden. Een andere mogelijkheid is echter gebruik te maken van de -whatif-parameter. Wanneer deze parameter aan een commando toegevoegd wordt, krijgt men immers informatie over welke wijzigingen doorgevoerd zullen worden, zonder dat deze aanpassingen ook effectief gebeuren.

PS > remove-item * -whatif

What if: Performing operation "Remove Directory" on Target "C:\Documents and Settings\Yoeri\Desktop".
What if: Performing operation "Remove Directory" on Target "C:\Documents and Settings\Yoeri\Gist".
What if: Performing operation "Remove File" on Target "C:\Documents and Settings\Yoeri\.jalbum-recent-projects.properties".
What if: Performing operation "Remove File" on Target "C:\Documents and Settings\Yoeri\winscp.RND".

Vanzelfsprekend is het ook mogelijk om te eisen dat elke actie bevestigd wordt. Hiervoor is de parameter -confirm bedoeld:

PS> remove-item *[1-3] -confirm
Confirm
Are you sure you want to perform this action?
Performing operation "Remove File" on Target "C:\Documents and Settings\Yoeri\testdir\file1".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):
* Certificaten

Standaard kunnen in de Powershell geen scripts uitgevoerd worden, maar functioneert de software alleen als interactieve shell. Om verschillende veiligheidsniveau's aan te duiden,wordt er gewerkt met ExecutionPolicy's. Deze kunnen ingesteld worden met het commando Set-ExecutionPolicy, gevolgd door Restricted, Allsigned, RemoteSigned of Unrestricted. Restricted is de standaardmode en laat het niet toe scriptbestanden uit te voeren. AllSigned biedt die mogelijkheid wel, maar stelt de voorwaarde dat alle scripts ondertekend worden door een vertrouwde partij. RemoteSigned stelt deze eis dan weer alleen voor scripts die gedownload werden via applicaties als Outlook, Internet Explorer of Live Messenger, maar speelt andere scripts zonder morren af. Unrestricted ten slotte is de onveiligste mode en stelt geen enkele beperking aan de te draaien scripts.

Wie zijn scripts dus wil gaan gebruiken zonder meteen vatbaar te zijn voor allerhande kwaadaardige code, zal zijn bestanden dus digitaal moeten ondertekenen. Dit kan met behulp van een externe partij als Verisign, een zogenaamde 'Certificate Authority', maar voor gebruikers die hun scripts alleen intern willen gebruiken, wordt dit al gauw een dure aangelegenheid. Daarom is er ook de mogelijkheid om 'self-signed scripts' te gaan gebruiken. Om hier gebruik van te maken moet de .NET Framework 2.0 SDK geïnstalleerd worden.

Na installatie krijgt men beschikking over het programma makecert.exe. Met de programmaregel makecert -n "CN=PowerShell Local Certificate Root" -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer -ss Root -sr localMachine - dat zal verzoeken een private sleutel in te voeren - wordt de computer waarop het commando uitgevoerd wordt bevorderd tot 'local certificate authority'. Vervolgens moet men met behulp van deze pas geconfigureerde certificate authority een eigen certificaat aanmaken. Dat kan met de opdrachtregel makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer. In PowerShell kan met de opdracht Get-ChildItem cert:\CurrentUser\My -codesign geverifieerd worden dat het certificaat correct aangemaakt werd.

Het certificaat is nu beschikbaar, evenals de autoriteit die het certificaat kan goedkeuren, maar de laatste stap is het digitaal ondertekenen van een script. Hiervoor is de Cmdlet Set-AuthenticodeSignature beschikbaar. Het uitvoeren van dit commando heeft als resultaat dat een signature-block toegevoegd wordt aan het scriptbestand. Als men het script wil aanpassen, zal men bijgevolg een nieuwe signature moeten genereren.

PS C:\> Set-AuthenticodeSignature c:\script.ps1 @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

Directory: C:\

SignerCertificate Status Path
----------------- ------ ----
A180F4B81AA81143AD2969114D26A2CC2D2AD65B Valid foo.ps1

Wat vind je van dit artikel?

Geef je mening in het Geachte Redactie-forum.

Apple iPhone 12 Microsoft Xbox Series X LG CX Google Pixel 5 Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True