De Windows toolbox heeft er een waardevol instrument bij die Windows admins de mogelijkheid geeft allerlei taken te automatiseren. Het uitwisselen van logs, uitrollen van patches en het beheren van gebruikers. Of het nou Windows-specifieke beheertaken zijn of beveiligingsgerelateerde taken zoals het managen van certificaten en het detecteren van aanvallen, het is mogelijk te automatiseren in PowerShell.

En nu we het toch over beveiliging hebben, er is een grote kans dat er al iemand een PowerShell-script of -module heeft gemaakt om je een handje te helpen. Microsoft heeft een flinke verzameling scripts gemaakt door de community die een aantal handige beveiligingstaken automatiseren. Van pentests tot certificaatmanagement en netwerk forensics.

Wij lopen enkele van deze scripts met je door.

Timmer het systeem dicht

Als aanvallers eenmaal je netwerk zijn binnengedrongen, nemen ze de tijd om het netwerk te leren kennen en te kijken of zij meer gegevens kunnen vinden waarmee zij je systemen nog verder kunnen besmetten. Het doel is uiteraard om uiteindelijk gevoelige data buit te maken.

De volgende PowerShell-scripts maken het moeilijker om systemen te verkennen.

Meerdere gebruikers uit de local administrator group van meerdere computers verwijderen. Gebruikers kunnen aan de local administrator group worden toegevoegd. Een account kan bijvoorbeeld worden gebruikt door de IT-afdeling om te troubleshooten. Dit kan overigens wel beveiligingsrisico's met zich meebrengen. Aanvallers kunnen met deze gebruikersaccounts meer schade aanrichten dan normaal. Dit script kijkt naar alle computers die zijn gespecificeerd in het tekstbestand en alle gebruikers worden verwijderd.

SAM remote Access in Windows 10 verharden. Aanvallers kunnen de Windows Security Accountmanager (SAM) op afstand query'en via het SAM-remote control protocol voor domein machines om alle domeinen en lokale gebruikersgroepen in kaart te brengen. Kwaadwillenden kunnen op deze manier ook netwerkroutes in kaart brengen. SAM kan standaard op afstand benaderd worden via SAMRi door elke geauthentiseerde gebruiker. Sinds de Anniversary Update is dit aangepast. Nu kunnen alleen administrators verbinding maken.

SAMRi10 is een handig script die administrators de mogelijkheid geeft remote SAM-toegang aan te passen op alle Windows 10 en Windows Server 2016-systemen in het netwerk. Aanvallers kunnen zo lastiger administrator- of andere accounts met veel privileges benaderen.

Dit script werkt alleen op Windows 10 en Windows Server 2016 systemen. Vanaf versie 1607 (Anniversary Update) kunnen deze wijzigingen ook gemaakt worden via de group policy.

Voeg applicaties toe aan Microsoft EMET De Microsoft Enhanced Mitigation Experience Toolkit (EMET) accepteert geen wildcards in bestandsnamen. Als de naam van een applicatie verandert (de bestandsnaam van de Adobe Flash player bijvoorbeeld, deze wijzigt regelmatig omdat het versienummer in de naam verwerkt zit) moet EMET worden bijgewerkt. Adminitrators die met EMET werken om verschillende applicaties beschermen kunnen Configure_EMET gebruiken om applicaties te verwijderen uit de watchlist. Het script werkt alleen voor Windows 7 en 8.

Net Session Enumeration verharden. Aanvallers kunnen Net Session Enumeration gebruiken om informatie over lopende sessies op een server op te halen zoals de naam en/of het IP-adres van de computer, de naam van de gebruiker die de verbinding tot stand brengt en het aantal seconden dat de sessie actief is. Met deze informatie kunnen kwaadwillenden erachter komen op welke computer een gebruiker allemaal heeft ingelogd.

Standaard kunnen alle geeutentiseerde gebruikers NetSessionEnum gebruiken. De Net Cease module past aan welke gebruikers allemaal gebruik mogen maken van deze functie door de execute-permissie te verwijderen voor specifieke sessies.

Windows administration

In principe kan men van alles aanpassen met het register, maar de kans dat er problemen optreden is groot, daarnaast is het ook niet erg elegant. Met Powershell is dat een stuk makkelijker de Access Control Lists (ACL) te wijzigen en gebruikers toe te voegen aan (of te verwijderen van) individuele machines. Daarnaast kan Powershell ook gebruikt worden om group policy-instellingen te wijzigen en dat is nog maar het topje van de ijsberg.

Het is een goede veiligheidsmaatregel om accounts met zo min mogelijk privileges te gebruiken. Als een aanvaller is doorgedrongen in een sessie, heeft deze tenminste weinig privileges om mee te werken. Als er zich situaties voordoen waar extra rechten nodig zijn, kunnen administrators Run Script gebruiken als een proces om andere PowerShell scripts met een andere identiteit te gebruiken. StartScriptAsProcess maakt een nieuw proces aan en verstelt het besturingssysteem expliciet met deze alternatieve identiteit aan de slag te gaan in plaats van de ingelogde gebruiker.

SDH1 Certificate Signature Check. Het managen van certificaten is een behoorlijk complexe taak en de deadline voor het vervangen van SHA-1 certificaten met veilige alternatieven komt met rasse schreden dichterbij. Dit SHA1CertSigCheck script helpt administrators te checken of een certificaat is ondertekend met SHA-1. Dit script geeft precies aan of het certificaat gebruikt wordt om netwerkverbindingen te beveiligen vial TLS of om Windows executables te ondertekenen.

Adminstrators kunnen nonroot gebruiken om CA certificaten te bekijken. Het script zegt niet of een certificaat is uitgegeven door een publieke CA of niet. Het checkt een certificaat of executable per keer en zoekt ze niet, maar administrators moeten wel zelf alle certificaten opzoeken.

File System Security Powershell Module 4.2.3. Het managen van bestand- en mappermissies in Windows PowerShell is niet makkelijk, maar de NTFSSecurity module bevat custom cmdlets voor het managen van permissies op NTFS drives. Het opvragen van een lijst met permissies, het toevoegen en verwijderen van access control entries (ACEs), en het instellen van inhertiances. Windows staat deze permissies als ACE's op in de descretionary access controll list (DACL). Het Script Center Repository heeft een link naar versie 1.3. Deze is al enkele jaren oud. De nieuwste versie (4.3.2) is te vinden op Github.

Backup and recover Access Control Lists. Het tracken van alle wijzigingen in de Access Control List kan langdradig zijn. Er zijn aardig wat scripts beschikbaar die claimen weer te geven als de ACL is gemodificeerd, maar TrackNTFSChanges doet het in elk geval op een hele simpele manier. Het maakt een back-up van de hele ACL in een XML-bestand. De eerstvolgende keer dat het script draait, vergelijkt het de huidige lijst met de vorige back-up om te kijken of er iets is gewijzigd. Als dat hert geval is, gebruikt de module een functie die administrators oude permissies kan laten herstellen.

Het script geeft helaas niet weer wie de veranderingen heeft gemaakt aan ACL. De administrator zal daar nog steeds zelf achter moeten komen.

Op jacht naar aanvallers

PowerShell is niet alleen handig voor administration, het kan ook gebruikt worden om malafide elementen te vinden, netwerken te monitoren en security events te analyseren in de logs. Administrators kunnen tegenwoordig SHA256 hash generern van een verdacht bestand en de GetVirusTotalReport module om de VirusTotal servive te query'en (Je hebt daar overigens wel een API-key voor nodig) om te zien of een bestand een bekend stuk malware is. Een soortgelijk script, Verify-AutoRun kijkt naar bestanden die aan autorun zijn toegevoegd op het systeem en kijkt via VirusTotal of het malware is. Dit script gebruikt Autorunsc.exe en SigCheck.exe.

Wijzigingen aan de Local Administrator Group. Aanvallers kunnen een lokaal administrator account aanmaken op het systeem dat zij aanvallen om verschillende activiteiten uit te voeren. Het Detect-LocalAdmin script checkt op regelmatige basis via meerdere computers om de gebruikerslijst te vergelijken in de lokale administrator group om te kijken of er veranderingen zijn opgetreden. Als er een nieuwe gebruiker is gevonden, logt het script het event en stuurt een e-mail naar de administrator.

Kerberos Golden Ticket check. De gouden ticket aanval komt voor als een aanvaller met administrator of lokale administrator rechten toegang heeft tot een Active Directory Domein en zo Kerberos tickets manipuleert om ongeautoriseerde toegang te verkrijgen. De aanvaller kan een hoop authenticatietaken uitvoeren of een Kerberos ticket granting ticket (TGT) om andere Kerberos-tickets voor gebruikers en service accounts aan te maken die niet bestaan. De GoldenTicketCheck module controleert de Kerberos-ticket caches van een specifieke computer om te kijken of daar onregelmatigheden in voorkomen. Het kan bijvoorbeeld gaan om tickets met een levensduur langer dan de standaard 10 uur. Als er een vreemde TGT of service ticket is gevonden geeft de PowerShell console de details en schrijft deze weg naar een tekstbestand.

Get-LogonLocations Aanvallers jagen naar accounts met veel privileges en proberen in te loggen op andere systemen op het netwerk. De Get-LogonLocations module voor PowerShell zoekt in de Security Log op alle domeincontrollers voor inlog-events die zijn geassocieerd met specifieke gebruikers. De output kan alle computers waarop gebruikers met het gekaapte account inloggen weergeven.

Het script kan makkelijk aangepast worden om naar verschillende eventlogs te kijken van specifieke computers en gebruikers in plaats van alle domeincontrollers. Deze module werkt met alle nieuwere Windows versies (van Windows 7 tot Windows 10) het ziet er niet naar uit dat het script werkt op Windows Server 2003, 2008 of 2012 R2. Het script is ook beschikbaar via Github.

Veilig scripten

Powershell kan een hoop processen automatiseren en het administrators makkelijk maken. Het is fijn dat er zoveel verschillende scripts zijn die het je allemaal wat makkelijker maken, maar voer deze niet zomaar blindelings uit. Neem de code eerst even door en wees er zeker van dat je begrijpt wat er allemaal gebeurt voordat je het script uitvoert. Als je iets tegen komt dat niet logisch lijkt, zoek uit waarom het script dat doet, comment het weg of zoek naar een alternatief. Veel van deze scripts moeten sowieso gedeblokkeerd worden omdat ze elevated privileges vereisen.

Wees er ook zeker van dat je PowerShell gebruikt. Deze is standaard aanwezig in Windows 10, Windows 8 en 8.1 hebben standaard versie 4 aan boord. Windows 7-gebruikers zullen Powershell nog moeten installeren.

Succes!