Από την εισαγωγή του PowerShell v5, η χρήση της εφαρμογής έχει μειωθεί ειδικά μεταξύ των φορέων απειλών, των δοκιμαστών διείσδυσης και των red teamers.
Αυτό οφείλεται στο γεγονός ότι η PowerShell v5 εισήγαγε την καταγραφή ασφαλείας της PowerShell, η οποία επιτρέπει στις μπλε ομάδες με πρόσθετες επιλογές να αποτρέψουν τις απειλές που βασίζονται στην powershell.
Αργότερα εισήχθησαν διάφορες τεχνικές για την παράκαμψη αυτής της καταγραφής ασφαλείας PowerShell, όπως οι παρακάμψεις AMSI (Antimalware Scan Interface) και οι παρακάμψεις καταγραφής ScriptBlock.
Ωστόσο, όλες αυτές οι τεχνικές περιλάμβαναν την πλήρη απενεργοποίηση της καταγραφής αντί της παραποίησης των αρχείων καταγραφής.
Οι ερευνητές ανακάλυψαν μια νέα τεχνική, η οποία δεν απαιτεί καμία αντανάκλαση ή επιδιόρθωση μνήμης για να εκτελεστεί και μπορεί να παραποιήσει οποιοδήποτε αυθαίρετο μήνυμα στα αρχεία καταγραφής ScriptBlock, παρακάμπτοντας παράλληλα το AMSI.
Ως πρόσθετο γεγονός, το PowerShell χρησιμοποιεί AST (Abstract Syntax Trees). Τα AST είναι δενδροειδείς δομές που δημιουργούνται από τον πηγαίο κώδικα σε κώδικα μηχανής μέσω ενός μεταγλωττιστή.
Μια από τις ιδιότητες που χρησιμοποιούνται στο ScriptBlock AST είναι το Extent, το οποίο είναι μια συμβολοσειρά αναπαράστασης του ScriptBlock μας.
Σύμφωνα με τις αναφορές που μοιράστηκαν με το Cyber Security News, όλα τα χαρακτηριστικά ασφαλείας στο πλαίσιο του PowerShell περνούν μόνο το Extent του ScriptBlock.
Επιπλέον, κάθε φορά που δημιουργείται ένα ScriptBlock με το τύλιγμα ενός {} ή με τη χρήση [ScriptBlock]::create() δημιουργείται αυτόματα το AST και στη συνέχεια το Extent. Αυτό μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός προσαρμοσμένου AST.
Τα ScriptBlocks δεν καταγράφονται μέχρι την πρώτη φορά που εκτελείται το ScriptBlock. Για να αποδειχθεί αυτή η θεωρία, οι ερευνητές δημιούργησαν ένα αρχείο καταγραφής τύπου Write-Output ‘Hello’ το οποίο αρχικά εκτέλεσε το Write-Output ‘World’.
Επιπλέον, ο εκτελούμενος κώδικας δεν παρατηρήθηκε από τα αρχεία καταγραφής ή το AMSI.
Μια άλλη δοκιμή διεξήχθη με τη δημιουργία ενός ScriptBlock με C# το οποίο εκτελούσε το Write-Output ‘amsicontext’ αποδεικνύοντας τη δυνατότητα παράκαμψης του AMSI χωρίς να χρειάζεται καμία επιδιόρθωση ή αντανάκλαση.
Αυτή η συγκεκριμένη συμπεριφορά μπορεί να αξιοποιηθεί ως βασική παράκαμψη του AMSI, αλλά αυτή η τεχνική μπορεί να κλιμακωθεί σε κρίσιμα πράγματα όπως το hooking εντολών.