skip to Main Content

AppLocker Bypass via InstallUtil.exe

AppLocker ist eine geläufige Black- bzw. Whitelisting Technologie zur Zugriffsverwaltung auf Applikationen und Dateien durch Benutzer. Mittels AppLocker ist es beispielsweise möglich, den Zugriff auf ausführbare Dateien, Skripte, Windows Installer-Dateien, DLLs (Dynamic Link Libraries), o.ä. einzuschränken. In vielen Fällen wird AppLocker auf gehärteten Windows Systemen eingesetzt, um beispielsweise das Ausführen von Standardprogrammen wie cmd.exe oder powershell.exe zu unterbinden.

 

 

Mit einem einfachen Hack lassen sich AppLocker Einschränkungen jedoch unter gewissen Voraussetzungen umgehen. Dafür ist lediglich ein installiertes .NET Framework auf dem betroffenen System erforderlich. InstallUtil ist ein Tool, das Teil des .NET Frameworks ist und Benutzern die Installation und Deinstallation von Anwendungen über die Eingabeaufforderung ermöglicht. Da InstallUtil von Microsoft signiert ist und im Windows-Ordner vorgefunden wird, ist die Ausführung unter AppLocker standardmäßig erlaubt. Genau diese Tatsache ermöglicht schließlich die Umgehung von bestimmten AppLocker-Restriktionen, wie die Installation von ausführbaren Dateien.

 

 

Beispielsweise kann mit diesem Trick eine PowerShell-Umgebung auf einem System bereitgestellt werden, auf welchem PowerShell grundsätzlich von AppLocker blockiert wird. Der Security Spezialist Casey Smith veröffentlichte hierzu C#-Code (siehe: GitHub-Projekt InstallUtil-Powershell.cs), welcher auf dem betroffenen System mit dem im .NET-Framework enthaltenen Compiler in eine ausführbare Datei kompiliert werden muss. Um eine PowerShell-Umgebung zu schaffen, wird im C#-Code die DLL System.Management.Automation eingebunden. Diese DLL enthält eine Klasse Runspaces, welche die Interpretation und Ausführung von PowerShell-Instruktionen ermöglicht. Durch Überschreiben der Installationsroutine, welche bei Ausführung von InstallUtil aufgerufen wird, erfolgt die Instantiierung eines Objekts der Klasse Runspaces. Nebenbei wird in einer Endlosschleife Benutzereingaben von der von InstallUtil geöffneten Eingabeaufforderung gelesen. Diese Eingaben werden dabei als PowerShell-Befehle vom Runspaces-Objekt interpretiert und auf dem betroffenen System ausgeführt. Sollten auf dem System .exe-Dateien generell von AppLocker blockiert werden, kann der angegebene C#-Code auch als DLL kompiliert werden (siehe: GitHub-Projekt pshell.cs).

 

 

Mit der hier vorgestellten Methode ist es einem Angreifer möglich, beliebige DLLs als auch ausführbare Dateien zu laden und auszuführen. AppLocker-Restriktionen können damit effektiv ausgehebelt werden, was unter Umständen zu einer vollständigen Kompromittierung des betroffenen Systems führen kann. Um einen derartigen Angriff abzuwenden, können beispielsweise AppLocker-Pfadregeln definiert werden. Diese Regeln definieren Pfade, von welchen ausschließlich das Laden von DLLs sowie die Ausführung von ausführbaren Dateien erlaubt ist. Es sollten dabei nur Pfade erlaubt werden, die privilegierte Zugriffsberechtigungen für einen Schreibzugriff voraussetzen. Damit soll verhindert werden, dass Standardbenutzer DLLs oder ausführbare Dateien an definierten Pfaden ablegen und in weitere Folge für Angriffe verwendet werden können.

 

 

Dipl.-Ing. Christoph Leo Mahrl

 

IT Security Consultant

Back To Top