Expertblogs

Wil je eens zien wat een kwaadwillende ziet?

Heb jij ook programma’s geschreven in de opdrachtprompt? Ik wel! Van jongs af aan was ik al groot fan van de opdrachtprompt. De opdrachten die je daarin typt kennen idealiter één doel en geven gerichte antwoorden terug. Hoewel de grafische gebruikersomgeving door de jaren heen steeds populairder is geworden, is ook de opdrachtprompt stevig doorontwikkeld. Bijvoorbeeld via de release van PowerShell in november 2006.

Powershell is een krachtige, flexibele scripttaal om je systeem mee te beheren.

PowerShell is de ‘next generation’ opdrachtprompt. Microsoft heeft PowerShell helemaal opnieuw ontworpen met als doel flexibel en krachtig te zijn, zonder gebruiksvriendelijkheid uit het oog te verliezen.

Systeembeheerders gebruiken powershell voor A tot Z. Eenvoudig systeemgegevens achterhalen doe je bijvoorbeeld zo:

PS C:\> Get-CimInstance Win32_OperatingSystem | Select-Object Caption, InstallDate, ServicePackMajorVersion | FL

Het resultaat ziet er dan zo uit:

Figuur 1 - Voorbeeld PowerShell-opdracht

Het eerste gedeelte roept het object Win32_OperatingSystem op. In het tweede gedeelte van het commando wordt er gefilterd op objecteigenschappen en met het programma ‘Format-List’ (FL) wordt het resultaat onder elkaar gerangschikt.

PowerShell is gebaseerd op objecten en wordt veel gebruikt.

PowerShell-objecten en bijhorende eigenschappen zijn - in tegenstelling tot platte tekst - handig te verwerken in gecombineerde opdrachten of scripts. Eigenschappen van objecten kunnen namelijk worden geselecteerd of worden bewerkt zonder extra filterhandelingen te moeten uitvoeren. Een waardevolle functionaliteit in PowerShell om het systeem te beheren en/of te controleren. Inmiddels is PowerShell open source en zelfs op andere besturingssystemen te installeren.

Het succes van PowerShell leidt niet alleen tot vreugde bij goedwillende IT-specialisten, ook kwaadwillende(n) zijn gebaat bij PowerShell. De uitgebreide mogelijkheden en het feit dat het in recente versies van Windows standaard aanwezig is, maken dit programma voor hen onmisbaar. Misbruik van kwetsbaarheden kan leiden tot toegang tot PowerShell, waarmee een goede basis wordt gelegd voor het construeren van een verdere aanval.

Denk jij nu ook aan welke mogelijkheden dat zijn? Bijvoorbeeld deze: malware-aanvallen zonder bestanden, horizontale verspreidingsaanvallen. Tijd voor het ‘blue team’ om maatregelen te nemen en misbruik (vroegtijdig) op te sporen!

Blokkeren en AntiMalware Scan Interface om misbruik met PowerShell tegen te gaan

Een bekende maatregel is om de toegang tot powershell.exe te blokkeren. Hoewel het voor een kwaadwillende lastiger wordt, is het nog altijd niet onmogelijk om de blokkades te omzeilen. De interface van PowerShell.exe is in wezen een vertolker (interpreter) voor de .NET  System.Management.Automation assembler. Manieren om PowerShell-functionaliteit te gebruiken zonder powershell.exe bestaan ook. En PowerShell-scripts kunnen worden geconverteerd naar separate EXE-bestanden.

Microsoft introduceert met Windows10 de AntiMalware Scan Interface (AMSI). Deze beveiligingstechniek biedt versluierde (obfuscated) code in leesbare vorm ter evaluatie aan de anti-virusscanner. Verborgen indicatoren kunnen op deze manier worden herkend voordat de code wordt uitgevoerd. Maar ook deze beveiligingstechniek kan worden omzeild. In figuur 2 staat een schematisch overzicht hoe AMSI werkt:

Figuur 2 - AMSI, bron: Cloudblogs Microsoft

PowerShell Transscript Logging vergroot de detectiekans

Het toepassen van meerdere beveiligingstechnieken (defense-in-depth) is wenselijk voor het minimaliseren van ongewenste activiteiten. PowerShell Transcript Logging helpt bij het detecteren van ongewenst PowerShell-gebruik en is daarom aan te bevelen. Het bewaart PowerShell-sessies door deze op te slaan in een logbestand. Transscript-logging wordt aangezet met de Start-Transscript command-let.

Om een sessie op de C-schijf op te slaan, voer je het volgende commando in:

PS C:\> Start-Transscript C:\log.txt

In figuur 3 en 4 vind je het resultaat van deze acties.

Figuur 3 - Start-Transscript

Figuur 4 - Voorbeeld transscript-log

Het bestand heeft twee secties. Het eerste deel, ook wel de Invocation Headers genoemd, geeft een overzicht van de omgeving waar het commando is gestart. Nuttige informatie (zie figuur 4) is bijvoorbeeld Start time, Username, RunAs, Host Application en het Process ID. Deze informatie levert inzicht op ongewenste handelingen door kwaadwillende(n) met PowerShell. Op basis van een Process ID kan een Process Tree worden gecreëerd voor verder onderzoek.

Er zijn meer voordelen. Transscript Logging bewaart ook het resultaat. Wanneer kwaadwillende(n) inbreuk hebben gepleegd met PowerShell geeft dat winst bij de reconstructie van wat er daadwerkelijk heeft plaatsgevonden. Het implementeren van gepaste maatregelen wordt hierdoor eenvoudiger.

Waarschijnlijk stel je jezelf de vraag: Maar hé, ik heb deze optie toch wel eerst zelf aan moeten zetten? Bovendien is dat dan toch alleen voor deze sessie? Dat klopt. Je bent een oplettende lezer. Gelukkig kan deze optie centraal worden ingesteld via Group Policies in Active Directory. Door de diversiteit van Windows-serversystemen kan het verschillen per versie. Echter, dit is de rode lijn:

  • Open via de Administrative tools de Group Policy Management Console. Dit ziet er ongeveer zo uit:

Figuur 5 - Group Policy Management console

  • Voor deze blog is in de container Workstations het object PowerShell Transscript Logging aangemaakt. Bij het openen van dit object kan Policy worden geconfigureerd. Om Transscript Logging aan te zetten moet de optie 'Turn on PowerShell Transscription' worden geselecteerd.
  • Het is aan te raden deze logbestanden weg te schrijven naar een centrale logserver. Lokaal kan de log worden gemanipuleerd. Op de centrale logserver is manipulatie lastiger, dus de kans dat logdata gemanipuleerd wordt, is veel kleiner. Daarnaast kan een Security Information and Event Management (SIEM)-systeem helpen om deze log geautomatiseerd te gebruiken voor herkenning van ongewenst gedrag.  

Figuur 7 - Enable PowerShell Transaction

Wil je meer weten over PowerShell en hoe kwaadwillende(n) er misbruik van maken? Lees het rapport ‘The increased use of PowerShell in attacks’ van Symantec.

Happy logging :-)

Jeroen

Reactie toevoegen

U kunt hier een reactie plaatsen. Ongepaste reacties worden niet geplaatst. Uw reactie mag maximaal 2000 karakters tellen.

Uw reactie mag maximaal 2000 karakters lang zijn.

Reacties

Er zijn nu geen reacties gepubliceerd.