Applocker oder Software Restriction Policies - Löcher im Sicherheitszaun

28.09.2020 | Autor: Mark Heitbrink

Applocker oder Software Restriction Policies

Aktualisierter Artikel: 09.2020 (war 09.2017), Pfade aktualisiert und Powershell statt Batch

Es sollte sich herumgesprochen haben, daß man mit "Anwendungs Ausführungsverhinderungsrichtlinien" sein System sicherer gestalten kann. Wenn es um das Thema Sicherheit geht, dann kann das nur anhand einer definierten Whitelist erfolgen. Nur die Whitelist in der alle bekannten Anwendungen sind bietet euch Sicherheit. Ihr könnt nur Blacklisten, was ihr kennt, aber das böse Internet kennt viel mehr als ihr.

Egal ob SRP (Software Restriction Polcies) oder Applocker, beide verfügen über ein Standard Regelwerk, das es erlaubt das System relativ schnell und ohne große Schmerzen zu integrieren.

Sie erlauben pauschal %programfiles%, %programfiles (x86)% und %systemroot%.

Bei der Diskussion, ob ich eine Whitelist habe oder nicht, kommt immer das Thema "Zeit" und "Arbeit" mit "Fleiss" und "Regelmässig jeden Monat" auf den Tisch. Ja, eine Whitelist verursacht Arbeit und die kann euch keiner abnehmen.

Aus Angst, die Arbeit nicht zu schaffen greifen viele auf diese Standardregeln zurück, im dem Glauben, daß die genannten Pfade als sicher gelten, da ein Benutzer dort nicht schreiben darf.

Die Logik sagt: Ihr erlaubt die Pfade, denn alle Programme die da sind, sind von einem Administrator oder Deployment System dorthin gekommen. Alle anderen Programme/Pfade sind verboten und somit hat die Portable App im Download Ordner keine Chance ... Soweit der Plan.

... und jetzt mache ich euch Angst: Im Windows Ordner sind diverse Ordner mit Berechtigungen für "ERSTELLER-BESITZER" Vollzugriff "Unterordner und Dateien" definiert und somit kann jeder User dort Dateien ablegen und sie können ausgeführt werden, weil ihr %systemroot% pauschal erlaub habt. Die Herausforderung ist jetzt nur diese Ordner zu finden.

Machen wir das mal als Benutzer:

Wir nehmen eine Powershell und führen folgendes Script aus, um z.B Löcher unter C:\Windows zu finden. Natürlich würde das auch direkt mit C:\ funktionieren oder mit %programfiles% usw. Das geht auch mit der Batch oder per VB, aber ich dachte ich nutze moderne Technik :-)

Die Idee ist: Wir erzeugen eine Liste aller Ordner und Unterordner im jeweiligen Pfad. Dann versuchen wir in jedem Pfad eine Datei zuerstellen. Diese suchen wir an Ende und haben das Ergebns der schreibfähigen Pfade.

 

# Liste der Ordner erzeugen
$AllFolders=(Get-ChildItem -Path $env:SystemRoot -Directory -Recurse -Force | where {$_.FullName -notlike '*winsxs*'}).FullName
# Versuch eine Datei in jedem Pfad zu erzeugen
foreach ($Folder in $AllFolders) {
    cmd /c echo  > $Folder\tandaradei.txt
    }
#Suche die Datei und erzeuge eine Liste der Ordner
(Get-ChildItem -Path $env:SystemRoot -Recurse -Filter tandaradei.txt).Fullname | Out-File $env:TEMP\FileFound.txt

 

Done. We hacked 127.0.0.1 :-)
Execution-policy verhindert das Script? -> Powershell ISE -> paste Code -> STRG+A -> F8
Done. We hacked 127.0.0.1 again :-D

Wenn ihr also pauschal Pfade erlaubt, müsst ihr dafür sorgen, daß die Schreibbaren Ordner einen Exclude in der Liste bekommen und die darin gewünschten Anwendungen explizit erlaubt werden. Ja, es bleibt dabei: Es benötigt Arbeit/Pflege und ständiges Anpassen.

Achtung! Das Regelwerk auf dem Bild funktioniert nicht. Die Pfade müssen als AUSNAHME inkl. "\*" in der ZUGELASSEN-Regel eingetragen werden, der Screenshot ist nur zur optisch besseren Darstellung des Problem. Leider werden Ausnahmen im HTML Report der Gruppenrichtlinie nicht ausgewertet.

Ausnahme Liste (erstellt auf Windows 10, 2004)

%WINDIR%\Registration\CRMLog\*
%WINDIR%\System32\FxsTmp\*
%WINDIR%\System32\Microsoft\Crypto\RSA\MachineKeys\*
%WINDIR%\System32\spool\drivers\color\*
%WINDIR%\SysWOW64\FxsTmp\*
%WINDIR%\Tasks\*
%WINDIR%\tracing\*

Ältere Versionen, u.U. auch noch:
%WINDIR%\servicing\Packages\*
%WINDIR%\servicing\Sessions\*
%WINDIR%\System32\tasks\*
%WINDIR%\System32\tasks\microsoft\Windows\PLA\System\*
%WINDIR%\Temp\*