Windows mit SAFER absichern

Mit Software Restriction Policies (SRP bzw. „SAFER“, auf Deutsch „Richtlinien für Softwareeinschränkung“) läßt sich festlegen, welche Programme unter Windows ausgeführt (Whitelisting) bzw. nicht ausgeführt (Blacklisting) werden dürfen. Insbesondere läßt sich SAFER verwenden, um die Ausführung von Schadprogrammen – einschließlich Ransomwarezuverlässig zu verhindern.

SAFER ist in allen Windows-Versionen ab XP verfügbar und muß lediglich konfiguriert werden.

SAFER-Konfiguration einrichten

SAFER wird stets über die Windows-Registry konfiguriert. Man muß aber nicht mit regedit.exe arbeiten, sondern kann die Registry-Einträge auch folgendermaßen erstellen:

Stefan Kanthaks *_SAFER.INF

Stefan Kanthak stellt unter dem Namen *_SAFER.INF mehrere Installationsskripte bereit, die sinnvolle und erprobte SAFER-Regeln automatisch in die Windows-Registry eintragen:

Windows XP
Windows Server 2003
Windows Vista
Windows Server 2008
Windows 7
Windows 8
Windows 8.1
Windows Server 2012
Windows Server 2016
Windows 10
Nur Benutzer werden eingeschränktXP_SAFER.INFNT6_SAFER.INFNTX_SAFER.INF
Auch Administratoren werden eingeschränktXP_SUPER.INFNT6_SUPER.INF

*_SAFER.INF konfiguriert Windows so, daß Benutzer (also Nicht-Administratoren) Programme nur dort ausführen dürfen, wo sie keine Schreibrechte haben. Ein Benutzer kann somit ein Schadprogramm nicht zur Ausführung bringen, selbst wenn er wollte – wo er es ablegen kann, darf er es nicht ausführen, und wo er es ausführen dürfte, darf er es nicht ablegen.

*_SAFER.INF sollte man sich übrigens auch anschauen, wenn man lieber eigene Regeln mit secpol.msc oder direkt in der Registry erstellen möchte, denn Stefans Kommentare darin sind eine vorzügliche Dokumentation für SAFER.

Meine Basiskonfiguration

SAFER kann man mit wenigen Einträgen in der Registry konfigurieren, die gut als Basis für eigene Erweiterungen dienen können:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers]
"AuthenticodeEnabled"=dword:00000000
"Levels"=dword:00031000
"DefaultLevel"=dword:00000000
"TransparentEnabled"=dword:00000002
"PolicyScope"=dword:00000001
"ExecutableTypes"=hex(7):41,00,43,00,4d,00,00,00,41,00,44,00,45,00,00,00,41,00,\
  44,00,50,00,00,00,41,00,58,00,00,00,42,00,41,00,53,00,00,00,42,00,41,00,54,\
  00,00,00,43,00,48,00,4d,00,00,00,43,00,4d,00,44,00,00,00,43,00,4f,00,4d,00,\
  00,00,43,00,50,00,4c,00,00,00,43,00,52,00,54,00,00,00,44,00,4c,00,4c,00,00,\
  00,44,00,52,00,56,00,00,00,44,00,53,00,00,00,45,00,58,00,45,00,00,00,48,00,\
  4c,00,50,00,00,00,48,00,54,00,41,00,00,00,48,00,54,00,43,00,00,00,49,00,4d,\
  00,45,00,00,00,49,00,4e,00,46,00,00,00,49,00,4e,00,53,00,00,00,49,00,53,00,\
  50,00,00,00,4a,00,4f,00,42,00,00,00,4a,00,53,00,00,00,4a,00,53,00,45,00,00,\
  00,4d,00,44,00,42,00,00,00,4d,00,44,00,45,00,00,00,4d,00,53,00,43,00,00,00,\
  4d,00,53,00,49,00,00,00,4d,00,53,00,50,00,00,00,4d,00,53,00,54,00,00,00,4d,\
  00,55,00,49,00,00,00,4f,00,43,00,58,00,00,00,50,00,43,00,44,00,00,00,50,00,\
  49,00,46,00,00,00,50,00,53,00,31,00,00,00,52,00,45,00,47,00,00,00,53,00,43,\
  00,52,00,00,00,53,00,43,00,54,00,00,00,53,00,48,00,53,00,00,00,54,00,4d,00,\
  50,00,00,00,54,00,53,00,50,00,00,00,56,00,42,00,00,00,56,00,42,00,45,00,00,\
  00,56,00,42,00,53,00,00,00,56,00,43,00,4d,00,00,00,57,00,4c,00,4c,00,00,00,\
  57,00,50,00,43,00,00,00,57,00,53,00,43,00,00,00,57,00,53,00,46,00,00,00,57,\
  00,53,00,48,00,00,00,58,00,4c,00,4c,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{191cd7fa-f240-4a17-8986-94d480a6c8ca}]
"ItemData"="C:\\Windows\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{d2c34ab2-529a-46b2-b293-fc853fce72ea}]
"ItemData"="C:\\Program Files\\"
32 Bit64 Bit
Windows XP
Windows Server 2003
Windows Vista
Windows Server 2008
Windows 7
Windows 8
Windows 10
safer-base.regsafer-base-x64.reg

Exportieren Sie zunächst die SAFER-Konfiguration aus der Registry, um jederzeit exakt den Originalzustand wiederherstellen und alle SAFER-Restriktionen aufheben zu können.

Aus Gründen der Übersichtlichtkeit verwende ich hier keine Registry-Variablen, sondern stattdessen hart-codierte Pfade. Passen Sie diese Pfade ggf. manuell an, bevor Sie die .reg-Datei importieren.

Mit diesen SAFER-Regeln werden nur Programme unterhalb von

zugelassen, alle Programme außerhalb dieser Pfade hingegen verboten. Diese Einschränkung gilt außerdem nur für eingeschränkte Benutzer, d.h. Administratoren werden nicht beeinträchtigt. Die Bedeutung der einzelnen Registry-Einträge hat Microsoft dokumentiert.

Nachteile des Gruppenrichtlinien-Editors

Mit dem Gruppenrichtlinien-Editor (secpol.msc bzw. gpedit.msc) lassen sich SAFER-Regeln recht bequem anlegen. Gegenüber regedit.exe gibt es aber einige Nachteile:

SAFER-Konfiguration auf Originalzustand zurücksetzen

Alle .reg-Dateien auf dieser Seite wirken ausschließlich auf Unterschlüssel von [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer]. Exportieren Sie also diesen Schlüssel etwa mit regedit.exe, bevor Sie meine .reg-Dateien verwenden, um jederzeit exakt den Originalzustand wiederherstellen zu können. SAFER nimmt ansonsten keine Änderungen am System vor.

SAFER-Konfiguration anpassen

Log erstellen und durchsuchen

Windows kann das Ergebnis der Auswertung der SAFER-Regeln protokollieren. Das ist vor allem dann sinnvoll, wenn ein Programm von SAFER unerwünschterweise blockiert wird. Mit diesem Registry-Eintrag etwa wird das Logging aktiviert und der Pfad der Log-Datei auf C:\Users\Public\Documents\safer.log festgelegt:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers]
"LogFileName"="C:\\Users\\Public\\Documents\\safer.log"

safer-log.reg herunterladen

Das Logging findet im aufrufenden Prozeß statt, deshalb muß auch die Gruppe Benutzer in die Datei schreiben dürfen, andernfalls findet kein Logging statt. (Es wäre attraktiv, den Pfad zum Logfile etwa mittels %USERPROFILE%\SAFER.log benutzerabhängig festzulegen, aber SAFER wertet an dieser Stelle leider keine Variablen aus.)

Ich persönlich lasse das SAFER-Logging permanent eingeschaltet und leere die Datei einfach, wenn sie zu groß wird. Es ist möglicherweise auch sinnvoll, für die Log-Datei NTFS-Kompression zu aktivieren; dadurch wird die physikalische Größe der Datei typischerweise auf ein Viertel verringert.

Die Log-Datei ist UTF-16-codiert, so daß man sie etwa mit findstr.exe nicht sinnvoll durchsuchen kann. Mit PowerShell geht es besser, von SAFER blockierte Dateien findet man etwa so:

Get-Content -Path 'C:\Users\Public\Documents\safer.log' | Where-Object { $_ -notmatch ' as Unrestricted ' };

Oder in kompakter Form:

gc 'C:\Users\Public\Documents\safer.log' | where { $_ -notmatch ' as Unrestricted ' };

GUID erstellen

Wenn man neue Regeln direkt in die Registry schreiben will, benötigt man im Schlüsselnamen eine beliebige, aber eindeutige GUID. Der folgende PowerShell-Befehl befördert eine neue GUID direkt in die Zwischenablage:

"{{{0}}}" -f [System.GUID]::NewGuid() | Set-Clipboard

Regeln aktualisieren

Der aufrufende Prozeß übernimmt bei SAFER die Regelauswertung (und auch das Logging). Typischerweise lädt der aufrufende Prozeß die SAFER-Regeln nur einmalig aus der Registry; Änderungen an den SAFER-Regeln, die nach dem Start des aufrufenden Prozesses vorgenommen wurden, werden deshalb nicht wirksam. Das ist problematisch beim Prozeß explorer.exe, der für Desktop und Startmenü zuständig ist.

Um geänderte Regeln schnell zu testen, starte ich eine neue Shell (cmd.exe) und rufe darin das gewünschte Programm auf.

Korrekte Trennzeichen

In registry path rules können Registry-Variablen mit literalen Pfadsegmenten kombiniert werden. Im Widerspruch zur Dokumentation müssen die Pfadsegmente dabei mit / getrennt werden, nicht mit \:

Richtig:%HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\SystemRoot%System32/RunAs.Exe
Falsch:%HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\SystemRoot%System32\RunAs.Exe

Beschränkungen der Länge von Pfad-Regeln

Pfad-Regeln dürfen nur höchstens 133 Zeichen lang sein. Längere Regeln werden nicht ausgewertet. Ggf. kann man Teile des Pfades durch * ersetzen, um ihn zu kürzen.

Richtig (131 Zeichen):%HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Local AppData%Google/*/*/*/*/pepflashplayer.dll
Falsch (164 Zeichen):%HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Local AppData%Google/Chrome/User Data/PepperFlash/11.5.31.139/pepflashplayer.dll

secpol.msc kann ebenfalls nicht korrekt mit Pfaden umgehen, die länger als 133 Zeichen sind. Solche Regeln lassen sich zwar mit secpol.msc erstellen, und sie werden auch in die Registry übernommen (aber dort ohnehin nicht ausgewertet). Die Regeln werden jedoch gar nicht mehr angezeigt, wenn man secpol.msc erneut öffnet.

SAFER-Restriktionen aufheben

In speziellen Situationen kann es notwendig sein, die SAFER-Restriktionen vorübergehend aufzuheben. Dies kann man erreichen, indem man den Registry-Schlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer bspw. in _Safer umbenennt. Prozesse, die anschließend gestartet werden, sind nicht mehr durch SAFER eingeschränkt.

Einzelne Regeln kann man deaktivieren, indem man den entsprechenden ItemData-Wert bspw. in _ItemData umbenennt.

SAFER und AppLocker

AppLocker funktioniert nur in folgenden Windows-Versionen:

SAFER hingegen funktioniert in allen Windows-Versionen und -Editionen ab XP!

SAFER-Regeln werden auf den o.g. Systemen vollständig ignoriert, sobald die erste AppLocker-Regel erstellt wird.

Hash-Regeln für DLLs

Unter Windows XP funktionieren Hash-Regeln nicht für DLLs.

Pfad-Regeln mit Dateierweiterung

Pfad-Regeln (etwa für C:\Windows) wirken rekursiv auch auf alle Unterverzeichnisse.

Das gilt jedoch nicht, wenn die Regel eine Dateierweiterung enthält. Eine Pfad-Regel für C:\Windows\system32\*.dll würde deshalb zwar auf C:\Windows\system32\MSCTF.dll wirken, aber nicht auf C:\Windows\system32\wbem\cimwin32.dll. Wenn man eine Dateierweiterung angibt, braucht man also für jedes Unterverzeichnis eine eigene Regel.

Für Benutzer schreibbare Verzeichnisse finden

Leider gibt es unter C:\Windows und C:\Program Files Unterverzeichnisse, in die Benutzer schreiben dürfen; unter Windows 7 ist bspw. das Verzeichnis C:\Windows\debug\WIA für Benutzer beschreibar. Außerdem kann im Prinzip jedes Programm bei der Installation Unterverzeichnisse anlegen und diese für Benutzer beschreibbar machen – etwa der Steam-Client oder GOG Galaxy tun dies. Solche Verzeichnisse sollte man mit einer entsprechenden Pfadregel explizit ausschließen, denn andernfalls könnte ein Angreifer mit Benutzerrechten dort Dateien ablegen und ausführen.

Dieses PowerShell-Skript (kompatibel mit PowerShell 3.0 oder neuer) spürt solche Verzeichnisse auf:

function Export-WriteableFolders {

    param (
        [Parameter(Mandatory=$true)]
        [String]
        $OutputFilepath
    )

    function Find-WriteableFolders {

        $writeableFolders = [Collections.ArrayList] @();

        function IsDescendantOfWriteableFolder($candidate) {
            foreach ($writeableFolder in $writeableFolders) {
                if ( $candidate.StartsWith($writeableFolder) ) { return $true; }
            }
            return $false;
        }

        $rootFolders = @();
        @(
            "Env:\windir",
            "Env:\ProgramFiles",
            "Env:\ProgramFiles(x86)"
        ) | foreach {
            if (Test-Path $_) {
                $rootFolders += (Get-Content $_);
            }
        }

        # Möglichst zufällige Namen wählen.
        $randomFoldername = 'psancxtqkbgfomb';
        $randomFilename =  "$randomFoldername.vbs";

        # Harmlosen Inhalt definieren.
        $sampleContent = 'WScript.Echo WScript.ScriptFullName';

        # Bei Fehlern einfach fortsetzen.
        $ErrorActionPreference = 'SilentlyContinue';

        Get-ChildItem -Path $rootFolders -Recurse -Force -Directory | ForEach-Object {
    
            if ( $_.Name -eq $randomFoldername ) { return; }
            $folder = $_.Fullname;
            if ( IsDescendantOfWriteableFolder $folder ) { return; }

            & {
                # Datei anlegen.
                Set-Content -Path (Join-Path $folder $randomFilename) -Value $sampleContent;

                if ($?) {
                    $writeableFolders.Add($folder + '\') | Out-Null;
                    [pscustomobject] @{ItemData=$folder + '\'; Description='Blocked because users can create files here.'; };
                } else {
                    # Unterverzeichnis anlegen.
                    New-Item -Path $folder -Name $randomFoldername -ItemType directory;

                    if ($?) {
                        $writeableFolders.Add($folder + '\') | Out-Null;
                        [pscustomobject] @{ItemData=$folder + '\'; Description='Blocked because users can create subdirectories here.'; };
                    }
                }
            }

            & {
                # ADS anlegen.
                Set-Content -Path $folder -Stream $randomFilename -Value $sampleContent;

                if ($?) {
                    [pscustomobject] @{ItemData=$folder + ':*'; Description='Blocked because users can create Alternate Data Streams here.'; };
                }
            }
        }
    }

    & {
        'Windows Registry Editor Version 5.00';
        '';

        Find-WriteableFolders | Sort-Object -Property ItemData | foreach {
            '[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers\0\Paths\{{{0}}}]' -f [System.Guid]::NewGuid();
            '"ItemData"="{0}"' -f ($_.ItemData -replace '\\', '\\');
            '"Description"="{0}"' -f $_.Description;
            '';
        }
    } | Out-File -FilePath $OutputFilepath -Encoding unicode;
}

Export-WriteableFolders.ps1 herunterladen

(Frühere Version dieses Skripts hatten gleich zwei Unzulänglichkeiten: Sie ermittelten nur solche Verzeichnisse, in denen Dateien mit der NTFS-Berechtigung Ausführen erstellt werden konnten, und berücksichtigten Alternate Data Streams gar nicht.)

Führen Sie das Skript mit Benutzerrechten folgendermaßen aus:

Export-WriteableFolders -OutputFilepath writeable-folders.reg

Das Skript läuft einige Zeit und schreibt dann eine .reg-Datei ins aktuelle Verzeichnis, die ein Administrator in die Registry importieren muß. Die von Export-WriteableFolders erstellten Dateien, Unterverzeichnisse und ADS können mit Benutzerrechten nicht zuverlässig wieder gelöscht werden, deshalb muß ein Administrator anschließend aufräumen:

function Clear-WriteableFolders {

    $rootFolders = @();
    @(
        "Env:\windir",
        "Env:\ProgramFiles",
        "Env:\ProgramFiles(x86)"
    ) | foreach {
        if (Test-Path $_) {
            $rootFolders += (Get-Content $_);
        }
    }

    $randomFoldername = 'psancxtqkbgfomb';
    $randomFilename =  "$randomFoldername.vbs";
    $ErrorActionPreference = 'SilentlyContinue';

    Get-ChildItem -Path $rootFolders -Recurse -Force -Directory | ForEach-Object {

        if ( $_.Name -eq $randomFoldername ) { return; }
        $folder = $_.Fullname;

        @( @{WhatIf=$true}, @{WhatIf=$false} ) | foreach {

            # Datei wieder löschen.
            Remove-Item -Path (Join-Path $folder $randomFilename) -Force @_;

            # Unterverzeichnis wieder löschen.
            Remove-Item -Path (Join-Path $folder $randomFoldername) -Recurse -Force @_;

            # ADS wieder löschen.
            Remove-Item -Path ($folder + ':' + $randomFilename) -Force @_;
        }
    }
}

Clear-WriteableFolders.ps1 herunterladen

Alle Programme in einem Verzeichnis durch Hash-Regeln freigeben

Ausnahmen, die per Hash-Regel definiert werden, sind typischerweise sicherer als solche, die per Pfad-Regel definiert werden. Sie sind aber auch umständlicher zu erstellen. Ein kleines PowerShell-Skript kann den Vorgang deutlich vereinfachen:

function New-SaferHashRule {
    param (
        [String] $GuidPrefix = "",
        [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
        [System.IO.FileInfo] $File
    )

    begin {
        Add-Type -AssemblyName System.Security;
        $cryptoSha256 = [System.Security.Cryptography.HashAlgorithm]::Create('SHA256');
        $cryptoMd5 = [System.Security.Cryptography.HashAlgorithm]::Create('MD5');
        $path = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Hashes';
        if (!(Test-Path $path)) {
          New-Item -Path $path > $null;
        }
    }

    process {
        $guid = '{' + $GuidPrefix + [System.Guid]::NewGuid().ToString().Substring($GuidPrefix.Length) + '}';
        $fileContent = [System.IO.File]::ReadAllBytes($File.FullName);

        $pathMd5 = Join-Path $path $guid;
        New-Item -Path $pathMd5 > $null;
        New-ItemProperty -Path $pathMd5 -Name 'FriendlyName' -Value $File.Name > $null;
        New-ItemProperty -Path $pathMd5 -Name 'Description' -Value $File.FullName > $null;
        New-ItemProperty -Path $pathMd5 -Name 'ItemSize' -Value $File.Length -PropertyType QWord > $null;
        New-ItemProperty -Path $pathMd5 -Name 'HashAlg' -Value 0x8003 -PropertyType DWord > $null;
        New-ItemProperty -Path $pathMd5 -Name 'ItemData' -Value $cryptoMd5.ComputeHash($fileContent) -PropertyType Binary > $null;

        $pathSha256 = Join-Path $pathMd5 'SHA256';
        New-Item -Path $pathSha256 > $null;
        New-ItemProperty -Path $pathSha256 -Name 'HashAlg' -Value 0x800C -PropertyType DWord > $null;
        New-ItemProperty -Path $pathSha256 -Name 'ItemData' -Value $cryptoSha256.ComputeHash($fileContent) -PropertyType Binary > $null;

        [pscustomobject] @{
          File = $File.Fullname;
          Key = $pathMd5;
        }
    }
}

New-SaferHashRule.ps1 herunterladen

Der Aufruf erfolgt etwa so:

dir -Include *.cmd,*.exe -Recurse | where { !$_.PSIsContainer } | New-SaferHashRule;

Damit wird für jede .cmd- und .exe-Datei im aktuellen Verzeichnis eine passende Hash-Regel erstellt. Über die Variable $GuidPrefix kann ein gemeinsames Präfix für alle GUIDs festgelegt werden, die das Skript erzeugt. Das erleichtert es, die Hash-Regeln wieder zu entfernen, wenn man sie nicht mehr benötigt.

PowerShell im Constrained Mode

Mit PowerShell 3.x wurde der sog. Constrained Mode eingeführt. Im Constrained Mode funktionieren Cmdlets zwar noch, aber der Aufruf von .NET- und COM-Objekten wird verhindert. Schadsoftware, die .NET-Funktionen aus PowerShell-Skripten heraus aufruft, wird damit effektiv blockiert. Mit dieser Funktion kann der aktive Modus abgefragt werden:

function Get-LanguageMode {
    $ExecutionContext.SessionState.LanguageMode
}

Get-LanguageMode.ps1 herunterladen

Im Constrained Mode gibt diese Funktion ConstrainedLanguage zurück, sonst FullLanguage.

Zunächst wurde der Constrained Mode nur über die System-Umgebungsvariable __PSLockDownPolicy konfiguriert. Seit PowerShell 5.x wird der Constrained Mode jedoch auch dann aktiviert, wenn PowerShell beim Starten feststellt, daß das System in einer Whitelisting-Konfiguration betrieben wird. Dazu geht PowerShell folgendermaßen vor:

  1. Es werden zwei Dateien mit Namen wie etwa __PSScriptPolicyTest_d5p3ajid.sg5.ps1 und __PSScriptPolicyTest_uvlfqxgh.mfb.psm1 in %TEMP% angelegt und ausgeführt.
  2. Scheitert dies bei beiden Dateien, so schaltet PowerShell in den Constrained Mode.

Da Administratoren den SAFER-Regeln typischerweise nicht unterliegen, wird für sie auch der Constrained Mode nicht aktiviert. Um auch für einen nicht-angehobenen Benutzer den Constrained Mode zu vermeiden, müssen die SAFER-Restriktionen temporär durch einen Administrator aufgehoben werden:

function Disable-SaferRulesTemporarily
{
    # SAFER-Restriktionen aufheben
    Rename-Item -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\safer' -NewName '_safer';

    # Kurz warten
    Start-Sleep -Seconds 5;

    # SAFER-Restriktionen wiederherstellen
    Rename-Item -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\_safer' -NewName 'safer';
}

Disable-SaferRulesTemporarily.ps1 herunterladen

Das Skript deaktiviert die SAFER-Regeln für 5 Sekunden. Wird in dieser Zeit eine neue PowerShell-Sitzung gestartet, so läuft sie im Modus FullLanguage.

Schlupflöcher schließen

Bestimmte API-Funktionen von Windows können die SAFER-Beschränkungen umgehen. Eine von Stefan Kanthak entwickelte AppCertDll schließt dieses Schlupfloch.

Unter Windows 7 sollte außerdem der in KB2532445 beschriebene Hotfix installiert werden.

Mythen

SAFER muß installiert werden.

SAFER ist in Windows bereits eingebaut. Es muß lediglich konfiguriert werden.

Mit SAFER kann man sich selber aussperren.

Typischerweise wird SAFER so eingerichtet, daß nur eingeschränkte Benutzer den Regeln unterliegen, nicht aber Administratoren. Im abgesicherten Modus werden die SAFER-Regeln ebenfalls nicht ausgewertet, so daß man stets einen Rettungsanker hat.

SAFER funktioniert nicht in den Home-Varianten von Windows.

SAFER funktioniert in allen Versionen ab Windows XP bis einschließlich Windows 10. In den Home-Varianten fehlt der Gruppenrichtlinien-Editor, den man aber ohnehin nicht verwenden sollte. Und SAFER-Regeln lassen sich in jedem Fall direkt in die Registry schreiben. Maßgeblich sind in allen Windows-Varianten ausschließlich die Registry-Einträge.

Wer mit eingeschränkten Rechten arbeitet (etwa mit UAC), braucht SAFER nicht.

Das Sicherheits-Placebo UAC soll verhindern, daß Programme mit Administratorrechten ausgeführt werden. UAC soll nicht verhindern, daß Programme mit Benutzerrechten ausgeführt werden. Schadsoftware benötigt aber keine Administratorrechte, um Benutzerdaten zu kompromittieren – bspw. kann Ransomware mit Benutzerrechten alle Benutzerdateien unzugänglich machen. Außerdem kann eine Schadsoftware, die mit Benutzerrechten läuft, versuchen, sich auch noch Administratorrechte zu verschaffen, bspw. durch Binary Planting.

UAC hindert Schadsoftware also nicht an der Ausführung, SAFER schon. Deshalb ist auch mit UAC der Einsatz von SAFER ratsam. UAC und SAFER können problemlos zusammen benutzt werden.

Verwirrend kann jedoch das Verhalten der sog. Installationserkennung sein, die dafür sorgen soll, daß Installationsprogramme wie setup.exe automatisch einen UAC-Dialog anzeigen, damit das Installationsprogramm mit Administratorrechten ausgeführt wird. Wenn SAFER einem Benutzer die Ausführung des Installationsprogramms verbietet, kann die Installationserkennung aber gar nicht mehr zum Zuge kommen. Es erscheint also kein UAC-Dialog, sondern bloß eine SAFER-Fehlermeldung. Starten Sie Installationsprogramme deshalb per Rechtsklick und Als Administrator ausführen. Nach Bestätigung wird das Programm unter dem Administratorkonto ausgeführt, und dieses ist ja typischerweise nicht durch SAFER-Regeln eingeschränkt.

SAFER eignet sich nicht für normale Anwender.

SAFER eignet sich gerade für Anwender, die nur mit den installierten Programmen arbeiten wollen. Software-Entwickler benötigen höchstwahrscheinlich zusätzliche Regeln, aber diese lassen sich leicht erstellen.

SAFER bremst das System aus.

Wenn das Logging eingeschaltet ist und die SAFER-Restriktionen auch für DLLs angewendet werden, starten u.U. manche Programme spürbar langsamer, weil dann hunderte von Zeilen ins Logfile geschrieben werden. Wenn dies als störend empfunden wird, kann man das Logging abschalten.

Ansonsten hat SAFER keinen nennenswerten Einfluß auf die Performance.

SAFER-Restriktionen brauchen nicht unbedingt für DLLs aktiv zu sein

Mit der Einstellung "TransparentEnabled"=dword:00000001 werden DLLs von den SAFER-Restriktionen ausgenommen. Dies ermöglicht es Angreifern aber, trivial Code auszuführen. Stattdessen sollte unbedingt "TransparentEnabled"=dword:00000002 gesetzt sein.

Nützliche SAFER-Ausnahmen

Manche Programme legen ausführbare Dateien im Profilverzeichnis (%USERPROFILE%) ab, wo diese eigentlich nichts zu suchen haben. Wenn man solche Programme mit SAFER verwenden will, muß man sie mit eigenen Regeln freigeben.

Viele Regeln enthalten Registry-Variablen, um das Profilverzeichnis des jeweiligen Benutzers zu referenzieren. Registry-Variablen werden von SAFER nur dann aufgelöst, wenn sie im ItemData-Wert mit dem Datentyp REG_EXPAND_SZ notiert werden. REG_EXPAND_SZ-Werte wiederum lassen sich in .reg-Dateien nur binär darstellen. Um die Regel hier dennoch lesbar anzuzeigen, schreibe ich sie zusätzlich mit dem Datentyp REG_SZ in den Description-Wert. Maßgeblich für die Auswertung ist aber allein ItemData.

Manche Regeln verweisen mit Registry-Variablen auf die Schlüssel HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders oder HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders. Das ist eigentlich eine ganz schlechte Idee, aber eine saubere Lösung, die unter allen Windows-Versionen funktioniert, gibt es leider nicht.

Google Chrome

Wird der Chrome-Installer mit Administratorrechten gestartet, so installiert sich Chrome neuerdings ordentlich nach %ProgramFiles% und steht dann allen Benutzern zur Verfügung. Das ist die bevorzugte Methode, und es werden dann keine SAFER-Ausnahmen benötigt.

Wenn Chrome allerdings ins Benutzerprofil installiert wird, werden mehrere Ausnahmen benötigt:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{28c898f7-b49a-4734-938a-487a4c3c70ab}]
"Description"="%HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Local AppData%Google/Chrome/Application"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,53,00,6f,00,66,00,74,\
  00,77,00,61,00,72,00,65,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,\
  66,00,74,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,5c,00,43,00,75,\
  00,72,00,72,00,65,00,6e,00,74,00,56,00,65,00,72,00,73,00,69,00,6f,00,6e,00,\
  5c,00,45,00,78,00,70,00,6c,00,6f,00,72,00,65,00,72,00,5c,00,53,00,68,00,65,\
  00,6c,00,6c,00,20,00,46,00,6f,00,6c,00,64,00,65,00,72,00,73,00,5c,00,4c,00,\
  6f,00,63,00,61,00,6c,00,20,00,41,00,70,00,70,00,44,00,61,00,74,00,61,00,25,\
  00,47,00,6f,00,6f,00,67,00,6c,00,65,00,2f,00,43,00,68,00,72,00,6f,00,6d,00,\
  65,00,2f,00,41,00,70,00,70,00,6c,00,69,00,63,00,61,00,74,00,69,00,6f,00,6e,\
  00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{28c898f7-b49a-4734-938a-487a4c3c70ac}]
"Description"="%HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Local AppData%Google/Update"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,53,00,6f,00,66,00,74,\
  00,77,00,61,00,72,00,65,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,\
  66,00,74,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,5c,00,43,00,75,\
  00,72,00,72,00,65,00,6e,00,74,00,56,00,65,00,72,00,73,00,69,00,6f,00,6e,00,\
  5c,00,45,00,78,00,70,00,6c,00,6f,00,72,00,65,00,72,00,5c,00,53,00,68,00,65,\
  00,6c,00,6c,00,20,00,46,00,6f,00,6c,00,64,00,65,00,72,00,73,00,5c,00,4c,00,\
  6f,00,63,00,61,00,6c,00,20,00,41,00,70,00,70,00,44,00,61,00,74,00,61,00,25,\
  00,47,00,6f,00,6f,00,67,00,6c,00,65,00,2f,00,55,00,70,00,64,00,61,00,74,00,\
  65,00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{28c898f7-b49a-4734-938a-487a4c3c70ad}]
"Description"="%HKEY_CURRENT_USER\\Environment\\TEMP%CR_*.tmp/setup.exe"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,45,00,6e,00,76,00,69,\
  00,72,00,6f,00,6e,00,6d,00,65,00,6e,00,74,00,5c,00,54,00,45,00,4d,00,50,00,\
  25,00,43,00,52,00,5f,00,2a,00,2e,00,74,00,6d,00,70,00,2f,00,73,00,65,00,74,\
  00,75,00,70,00,2e,00,65,00,78,00,65,00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{28c898f7-b49a-4734-938a-487a4c3c70ae}]
"Description"="%HKEY_CURRENT_USER\\Environment\\TEMP%GUM*.tmp/*"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,45,00,6e,00,76,00,69,\
  00,72,00,6f,00,6e,00,6d,00,65,00,6e,00,74,00,5c,00,54,00,45,00,4d,00,50,00,\
  25,00,47,00,55,00,4d,00,2a,00,2e,00,74,00,6d,00,70,00,2f,00,2a,00,00,00

google-chrome.reg herunterladen

Silverlight mit PlayReady DRM Black Box-Plugin

Silverlight-Anwendungen laufen im Browser mit SAFER ohne Probleme. Für die Wiedergabe von DRM-geschützten Videos installiert Silverlight jedoch eine DLL ins Benutzerprofil! Von dort kann die DLL wegen SAFER nicht geladen werden. Diese Regel läßt die DLL anhand ihres Speicherortes unterhalb von %ALLUSERSPROFILE% und ihres Dateinamens MSPRindiv01.key zu:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{0144f22c-74c0-4391-806a-3498730f0670}]
"Description"="%HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Common AppData%Microsoft/PlayReady/Cache/*/MSPRindiv01.key"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,4c,00,4f,00,43,00,41,00,\
  4c,00,5f,00,4d,00,41,00,43,00,48,00,49,00,4e,00,45,00,5c,00,53,00,4f,00,46,\
  00,54,00,57,00,41,00,52,00,45,00,5c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,\
  6f,00,66,00,74,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,5c,00,43,\
  00,75,00,72,00,72,00,65,00,6e,00,74,00,56,00,65,00,72,00,73,00,69,00,6f,00,\
  6e,00,5c,00,45,00,78,00,70,00,6c,00,6f,00,72,00,65,00,72,00,5c,00,53,00,68,\
  00,65,00,6c,00,6c,00,20,00,46,00,6f,00,6c,00,64,00,65,00,72,00,73,00,5c,00,\
  43,00,6f,00,6d,00,6d,00,6f,00,6e,00,20,00,41,00,70,00,70,00,44,00,61,00,74,\
  00,61,00,25,00,2a,00,2f,00,50,00,6c,00,61,00,79,00,52,00,65,00,61,00,64,00,\
  79,00,2f,00,2a,00,2f,00,2a,00,2f,00,4d,00,53,00,50,00,52,00,69,00,6e,00,64,\
  00,69,00,76,00,30,00,31,00,2e,00,6b,00,65,00,79,00,00,00

silverlight-drm.reg herunterladen

Dropbox

Wird der Dropbox-Installer mit Administratorrechten gestartet, so installiert er Dropbox ordentlich nach %ProgramFiles% bzw. %ProgramFiles(x86)%. In diesem Fall werden keine SAFER-Ausnahmen benötigt.

Wenn der Installer allerdings mit Benutzerrechten gestartet wird, so installiert er Dropbox ins Benutzerprofil, was eine SAFER-Ausnahme erfordert:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{b45b6e4a-9d73-4d68-90c5-e40b61065881}]
"Description"="%HKEY_CURRENT_USER\\Volatile Environment\\APPDATA%Dropbox/bin/"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,56,00,6f,00,6c,00,61,\
  00,74,00,69,00,6c,00,65,00,20,00,45,00,6e,00,76,00,69,00,72,00,6f,00,6e,00,\
  6d,00,65,00,6e,00,74,00,5c,00,41,00,50,00,50,00,44,00,41,00,54,00,41,00,25,\
  00,44,00,72,00,6f,00,70,00,62,00,6f,00,78,00,2f,00,62,00,69,00,6e,00,2f,00,\
  00,00

dropbox.reg herunterladen

OneDrive

Microsoft hat offenbar seine eigenen Designed for Windows-Richtlinien vergessen und installiert OneDrive ins Profilverzeichnis. Das erfordert also eine Ausnahme:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers\262144\Paths\{68de9146-dd65-4f33-b6e2-f33985e736bf}]
"Description"="%HKEY_CURRENT_USER\\Volatile Environment\\LOCALAPPDATA%Microsoft/OneDrive/"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,56,00,6f,00,6c,00,61,\
  00,74,00,69,00,6c,00,65,00,20,00,45,00,6e,00,76,00,69,00,72,00,6f,00,6e,00,\
  6d,00,65,00,6e,00,74,00,5c,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,\
  00,44,00,41,00,54,00,41,00,25,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,\
  66,00,74,00,2f,00,4f,00,6e,00,65,00,44,00,72,00,69,00,76,00,65,00,2f,00,00,\
  00

onedrive.reg herunterladen

Google Drive

Google Drive installiert sich zwar ins Programmverzeichnis, legt aber beim Start noch ausführbare Dateien im Profilverzeichnis an. Das ist ganz großer Mist und erfordert eine ziemlich großzügige und somit gefährliche Ausnahme:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{d4fb8a20-2fcb-4c10-b543-0ccc6ebfee74}]
"Description"="%HKEY_CURRENT_USER\\Environment\\TEMP%_MEI*/"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,45,00,6e,00,76,00,69,\
  00,72,00,6f,00,6e,00,6d,00,65,00,6e,00,74,00,5c,00,54,00,45,00,4d,00,50,00,\
  25,00,5f,00,4d,00,45,00,49,00,2a,00,2f,00,00,00

google-drive.reg herunterladen

Widevine CDM

Google Chrome benutzt das Widevine Content Decryption Module, um Videos bei Netflix oder Amazon abzuspielen. In früheren Chrome-Versionen wurde dieses Modul ins Benutzerprofil installiert und erforderte entsprechend eine Ausnahme:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers\262144\Paths\{9de63898-5715-45a2-8d8b-05ce70378e87}]
"Description"="%HKEY_CURRENT_USER\\Volatile Environment\\LOCALAPPDATA%Google/Chrome/User Data/WidevineCDM/*/_platform_specific/win_x86/"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,56,00,6f,00,6c,00,61,\
  00,74,00,69,00,6c,00,65,00,20,00,45,00,6e,00,76,00,69,00,72,00,6f,00,6e,00,\
  6d,00,65,00,6e,00,74,00,5c,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,\
  00,44,00,41,00,54,00,41,00,25,00,47,00,6f,00,6f,00,67,00,6c,00,65,00,2f,00,\
  43,00,68,00,72,00,6f,00,6d,00,65,00,2f,00,55,00,73,00,65,00,72,00,20,00,44,\
  00,61,00,74,00,61,00,2f,00,57,00,69,00,64,00,65,00,76,00,69,00,6e,00,65,00,\
  43,00,44,00,4d,00,2f,00,2a,00,2f,00,5f,00,70,00,6c,00,61,00,74,00,66,00,6f,\
  00,72,00,6d,00,5f,00,73,00,70,00,65,00,63,00,69,00,66,00,69,00,63,00,2f,00,\
  77,00,69,00,6e,00,5f,00,78,00,38,00,36,00,2f,00,00,00

widevinecdm.reg herunterladen

In aktuelle Chome-Versionen wird das Widevine-Plugin aber sauber ins Programm-Verzeichnis installiert und erfordert somit keine Ausnahme mehr.

Lightning

Das Thunderbird-Add-On Lightning lädt eine DLL aus dem Profilverzeichnis. Diese muß freigegeben werden:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers\262144\Paths\{b5f86612-16c6-402a-b951-c7feaeae2d75}]
"Description"="%HKEY_CURRENT_USER\\Volatile Environment\\APPDATA%Thunderbird/Profiles/*/extensions/*/components/calbasecomps.dll"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,56,00,6f,00,6c,00,61,\
  00,74,00,69,00,6c,00,65,00,20,00,45,00,6e,00,76,00,69,00,72,00,6f,00,6e,00,\
  6d,00,65,00,6e,00,74,00,5c,00,41,00,50,00,50,00,44,00,41,00,54,00,41,00,25,\
  00,54,00,68,00,75,00,6e,00,64,00,65,00,72,00,62,00,69,00,72,00,64,00,2f,00,\
  50,00,72,00,6f,00,66,00,69,00,6c,00,65,00,73,00,2f,00,2a,00,2f,00,65,00,78,\
  00,74,00,65,00,6e,00,73,00,69,00,6f,00,6e,00,73,00,2f,00,2a,00,2f,00,63,00,\
  6f,00,6d,00,70,00,6f,00,6e,00,65,00,6e,00,74,00,73,00,2f,00,63,00,61,00,6c,\
  00,62,00,61,00,73,00,65,00,63,00,6f,00,6d,00,70,00,73,00,2e,00,64,00,6c,00,\
  6c,00,00,00

lightning.reg herunterladen

Lightning wurde in Thunderbird integriert und benötigt deshalb keine SAFER-Ausnahme mehr.

Pepper Flash Player in Google Chrome

Auch wenn Chrome selbst in %ProgramFiles% bzw. %ProgramFiles(x86)% installiert ist, wird die pepflashplayer.dll im Profilverzeichnis abgelegt. Dort muß sie freigegeben werden:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers\262144\Paths\{8cdf7d20-2d55-44c2-a20f-ca1f036143bc}]
"Description"="%HKEY_CURRENT_USER\\Volatile Environment\\LOCALAPPDATA%Google/Chrome/User Data/PepperFlash/*/pepflashplayer.dll"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,56,00,6f,00,6c,00,61,\
  00,74,00,69,00,6c,00,65,00,20,00,45,00,6e,00,76,00,69,00,72,00,6f,00,6e,00,\
  6d,00,65,00,6e,00,74,00,5c,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,\
  00,44,00,41,00,54,00,41,00,25,00,47,00,6f,00,6f,00,67,00,6c,00,65,00,2f,00,\
  43,00,68,00,72,00,6f,00,6d,00,65,00,2f,00,55,00,73,00,65,00,72,00,20,00,44,\
  00,61,00,74,00,61,00,2f,00,50,00,65,00,70,00,70,00,65,00,72,00,46,00,6c,00,\
  61,00,73,00,68,00,2f,00,2a,00,2f,00,70,00,65,00,70,00,66,00,6c,00,61,00,73,\
  00,68,00,70,00,6c,00,61,00,79,00,65,00,72,00,2e,00,64,00,6c,00,6c,00,00,00

pepflashplayer.reg herunterladen

Microsoft Edge in Windows 10 Version 1703 und 1709

Mit dem „Creators Update“ (Version 1703) und dem „Fall Creators Update“ (Version 1709) von Windows 10 läuft Microsoft Edge im Zusammenspiel mit SAFER nicht mehr richtig – die Oberfläche wird nur unvollständig angezeigt, man kann keine Webseiten aufrufen, und nach ca. 30 Sekunden beendet sich der Prozeß wieder. Als Workaround kann man folgende Option setzen, die DLLs von den SAFER-Restriktionen ausnimmt (und somit die Schutzwirkung von SAFER verringert):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers]
"TransparentEnabled"=dword:00000001

edge-1703.reg herunterladen

Wenn man in Edge mit nur einem Tab auskommt – etwa, weil man Edge ohnehin nur als PDF- oder E-Book-Reader verwenden will – gibt es noch folgende Möglichkeit: die SAFER-Restriktionen temporär aufheben, dann Edge starten, eine Seite im Tab laden und SAFER-Restriktionen wieder einschalten. Das folgende PowerShell-Skript automatisiert den Vorgang; es muß in einer PowerShell mit Administratorrechten ausgeführt werden, startet Edge aber dennoch mit Benutzerrechten:

function Start-Edge
{
    # SAFER-Regeln für DLLs deaktivieren.
    Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers' -Name TransparentEnabled -Value 1;

    # Edge starten und Seite in Tab laden
    Start-Process 'microsoft-edge:http://www.example.com';

    # Kurz warten
    Start-Sleep -Seconds 5;

    # SAFER-Regeln für DLLs wieder aktivieren
    Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers' -Name TransparentEnabled -Value 2;
}

Start-Edge.ps1 herunterladen

PDF-Dateien oder E-Books öffnet man, indem man den Pfad zur Datei (ohne Anführungszeichen) in die Adreßleiste des Tabs einträgt. Achtung, sobald man einen weiteren Tab öffnet, friert sofort Edge ein und beendet sich schließlich.

Will man Netflix in Edge schauen, darf "TransparentEnabled"=dword:00000002 ebenfalls nicht gesetzt sein, sonst erhält man den Fehler H7361-1254-C0000022.

Mit dem Update KB4093105 für Windows 10 1709 funktioniert Edge wieder mit SAFER.

Windows Defender ab Version 4.12.17007.17123

Microsoft hatte angekündigt, daß mit dem Update auf Client-Version 4.12.17007.17123 ausführbare Dateien (u.a. MsMpEng.exe, NisSrv.exe und MpOAV.dll) von C:\Program Files\Windows Defender idiotischerweise nach C:\ProgramData\Microsoft\Windows Defender verschoben werden, wo SAFER natürlich die Ausführung verhindert. Dies führt dazu, daß Chrome und Internet Explorer keine Downloads mehr ausführen können, denn der Attachment Manager löscht alle heruntergeladenen Dateien wieder, weil er Windows Defender nicht aufrufen kann. Es ist dann folgende Ausnahme notwendig:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers\262144\Paths\{ecfc3846-2cb0-42e1-b781-3e9d90ed7f57}]
"ItemData"="C:\\ProgramData\\Microsoft\\Windows Defender\\"

windows-defender-programdata.reg herunterladen

Auf vielen Windows-Installationen liegen die ausführbaren Dateien von Windows Defender aber – immer noch oder schon wieder? – unter C:\Program Files\Windows Defender. Die obige Ausnahme ist in diesem Fall nicht erforderlich.

Windows Defender Application Guard

Die Funktion Windows Defender Application Guard, die Edge in einer virtuellen Maschine ausführt und seit Windows 10 1803 auch in der Pro-Edition zur Verfügung steht, funktioniert nicht, wenn mindestens eine SAFER-Hashregel angelegt ist und die SAFER-Restriktionen auch auf DLLs angewendet werden. Etwa die folgenden Registry-Einstellungen verhindern somit den Start einer virtualisierten Edge-Instanz:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers]
"TransparentEnabled"=dword:00000002

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers\262144\Hashes\{ba366c9d-0187-4dfe-aa15-314d443ef889}]
"ItemSize"=hex(b):00,3e,1a,00,00,00,00,00
"HashAlg"=dword:00008003
"ItemData"=hex:c2,ff,31,12,25,67,a9,ad,ae,0b,90,ad,3f,cc,05,c1

windows-defender-application-guard-demo.reg herunterladen

Sky Ticket Player

Der neue Sky Ticket Player installiert nicht nur sich selbst und noch dazu Ciscos „VideoGuard“ ins Profilverzeichnis, sondern legt auch noch bei jedem Start eine ausführbare Datei mit einem Namen wie 958D.tmp.node in %TEMP% ab. Um den Player überhaupt korrekt zu installieren, müssen die SAFER-Restriktionen vorübergehend aufgehoben werden, und für den regulären Betrieb braucht man anschließend mehrere Ausnahmen:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers\262144\Hashes\{ba366c9d-0187-4dfe-aa15-314d443ef889}]
"Description"="%TEMP%\\????.tmp.node"
"ItemSize"=hex(b):00,3e,1a,00,00,00,00,00
"HashAlg"=dword:00008003
"ItemData"=hex:c2,ff,31,12,25,67,a9,ad,ae,0b,90,ad,3f,cc,05,c1
"FriendlyName"="NOW TV Player executable"

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers\262144\Hashes\{ba366c9d-0187-4dfe-aa15-314d443ef889}\SHA256]
"HashAlg"=dword:0000800c
"ItemData"=hex:8f,36,f2,43,e2,b6,84,52,80,74,a7,ae,f0,af,e0,53,3a,0f,b1,a9,ae,\
  8c,f5,57,d6,1a,23,03,aa,19,c9,7b

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers\262144\Paths\{ba366c9d-0187-4dfe-aa15-314d443ef887}]
"Description"="%HKEY_CURRENT_USER\\Volatile Environment\\APPDATA%Sky Ticket/"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,56,00,6f,00,6c,00,61,\
  00,74,00,69,00,6c,00,65,00,20,00,45,00,6e,00,76,00,69,00,72,00,6f,00,6e,00,\
  6d,00,65,00,6e,00,74,00,5c,00,41,00,50,00,50,00,44,00,41,00,54,00,41,00,25,\
  00,53,00,6b,00,79,00,20,00,54,00,69,00,63,00,6b,00,65,00,74,00,2f,00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\safer\codeidentifiers\262144\Paths\{ba366c9d-0187-4dfe-aa15-314d443ef888}]
"Description"="%HKEY_CURRENT_USER\\Volatile Environment\\LOCALAPPDATA%Cisco/VideoGuardPlayer/"
"ItemData"=hex(2):25,00,48,00,4b,00,45,00,59,00,5f,00,43,00,55,00,52,00,52,00,\
  45,00,4e,00,54,00,5f,00,55,00,53,00,45,00,52,00,5c,00,56,00,6f,00,6c,00,61,\
  00,74,00,69,00,6c,00,65,00,20,00,45,00,6e,00,76,00,69,00,72,00,6f,00,6e,00,\
  6d,00,65,00,6e,00,74,00,5c,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,\
  00,44,00,41,00,54,00,41,00,25,00,43,00,69,00,73,00,63,00,6f,00,2f,00,56,00,\
  69,00,64,00,65,00,6f,00,47,00,75,00,61,00,72,00,64,00,50,00,6c,00,61,00,79,\
  00,65,00,72,00,2f,00,00,00

sky-ticket.reg herunterladen

(Die Hash-Regel muß jeweils aktualisiert werden, wenn eine neue Version der ausführbaren Datei erscheint; ich werde hier zeitnah neue Regeln veröffentlichen.)