PowerShell scripts signen (deel 2)

Inleiding

In deel 1 van deze blog heb ik al uitgelegd waarom het eigenlijk noodzakelijk is om PowerShell scripts te signen binnen een bedrijf. Dat deel ging erover hoe we een persoonlijk certificaat konden aanmaken en deze gebruiken voor test doeleinden. In dit deel zullen we een Active Directory Certificate Authority gebruiken om deze certificaten aan te laten maken voor productiedoeleinden.

Wat gaan we in dit deel doen

In dit deel gaan we instellen dat personen die lid zijn van een security group een certificaat mogen aanvragen. Dit doen we door een nieuwe groep aan te maken en hier de rechten voor in te stellen.

Waarom zou je dit willen?

Door een Active Directory Certificate Authority te gebruiken voor alle certificaten, hebben we 1 centrale plek waar we de certificaten uit kunnen uitgeven en deze kunnen beheren. Ook kunnen we de juiste groepen in de organisatie de rechten geven om een certificaat aan te vragen.

Wat zijn de risico’s?

De uitgegeven certificaten zijn geldig in het hele bedrijf, zonder dat er een melding in beeld zal komen voordat de code uitgevoerd wordt. Mocht het certificaat in de verkeerde handen komen, dan kan diegene kwaadwillige code uitvoeren in de achtergrond, ook zonder dat er interactie nodig hoeft te zijn. Het voordeel van het centraal uitgeven van certificaten is dat je deze ook hiervandaan kan intrekken.

Manieren van Code Signing certificaten distributie

Ook voor deze manier zijn er de twee zelfde manieren waarop we de certificaten aan kunnen maken, namelijk per groep en per persoon. In dit deel gaan we certificaten aanvragen per persoon.

De Code Signing Template beschikbaar maken

Voordat we een code signing certificaat kunnen aanvragen, moet deze eerst beschikbaar gemaakt worden. In dit deel gaan we ervanuit dat de Active Directory Certificate Authority al geïnstalleerd is.

  1. Open de Active Directory en maak een nieuwe security group aan.
  2. Deze groep gaan we gebruiken om de code signing rechten aan te verlenen. In dit voorbeeld hebben we een groep CodeSigners waar ik mijzelf heb toegevoegd als lid.
  3. Open de Active Directory Certificate Authority
  4. Rechtermuisklik op [Certificate Templates] -> [Manage].
  5. De Certificate Templates Console opent nu.
  6. Rechtermuisklik op [Code Signing] en klik op [Properties].
  7. Ook kunnen we een duplicaat aanmaken van dit template en hierdoor kunnen er meer opties ingesteld worden. In dit voorbeeld houden we de standaard template.
  8. Ga naar het tabblad Security en voeg de groep toe die we in stap 1 hebben toevoegt. Geef deze groep de rechten Read, Write en Enroll en klik hierna op [OK]. Sluit de Certificate Templates Console en de Active Directory Certificate Authority vensters.

We hebben nu gezorgd dat mensen die lid zijn van de groep CodeSigners een persoonlijk code signing certificaat mogen aanvragen op onze Certificate Authority. In de volgende stappen gaan we het certificaat aanvragen.

Certificaat aanvragen

  1. Open een MMC venster en voeg de [Certificates – Current User] snap-in toe en druk op [OK].
  2. Rechtermuisklik op [Personal]-> [All Tasks] -> [Request New Certificate].
  3. In het Before you begin venster, klik op [Next].
  4. In het Select Certificate Enrollment Policy, klik op [Next].
  5. Selecteer [Code Signing], klik op [Details] en klik op [Properties].
  6. Geef het certificaat een Friendly Name, zodat we hier later aan terug kunnen refereren. Klik hierna op [OK]. Klik in het Request Certificate venster op [Enroll].
  7. Het certificaat is nu gereed voor code signing en staat in de Personal Certificates folder.

Het certificaat is nu gereed om PowerShell code mee te code signen (wat verder uitgelegd staat in deel 1 van deze blog).

Hoe nu verder

Er is nu een persoonlijk code signing certificaat aangemaakt. Dit certificaat is nu alleen geldig op de machine van de gebruiker. Hierdoor zullen andere machines een melding geven dat het certificaat niet vertrouwd is. Dit certificaat is dan ook het beste geschikt om PowerShell scripts op de machine zelf te testen.

Een volgende stap zou kunnen zijn, om een certificaat aan te vragen op basis van een groep of afdeling. Hierdoor is er één code signing certificate welke – bijvoorbeeld door middel van een GPO – bij alle machines in het bedrijf gedistribueerd kan worden.

Wat ook een mogelijkheid is, is om een code signing certificate aan te vragen en deze centraal te gebruiken om alle code signing taken af te handelen. Dit kan bijvoorbeeld in Azure DevOps. Door een Azure DevOps pipeline aan te maken en het code signing certificaat hieraan te koppelen, kan je de PowerShell scripts automatisch laten signen wanneer deze goedgekeurd worden. Het grote voordeel hiervan is dat het code signen centraal geregeld kan worden door middel van de DevOps methodiek.

27 juli 2022
Mitch Kalf