Alans Blog

Internet, Technik, Software, Elbmarsch.

Schreibgeschütztes Backup unter Windows

Einleitung

Aktuelle Trojaner wie Locky verschlüsseln im schlimmsten Fall alle Daten, auf die der Nutzer Schreibzugriff hat. Das betrifft auch externe Festplatten, USB-Sticks und Netzwerkfreigaben, beispielsweise auf einem NAS oder in der Cloud. Hinzu kommt, daß man oft aus Bequemlichkeit oder Gleichgültigkeit dazu neigt, kein regelmäßiges Backup anzufertigen. Und selbst wenn man eins anlegt, besteht bei einer Infektion mit einem Verschlüsselungstrojaner die Gefahr, daß auch das Backup verschlüsselt wird.

Die Idee

Man müßte ein Backup anlegen können, auf das man selbst grundsätzlich - auch während es erstellt wird - nur Lesezugriff hat. Außerdem sollte das Backup vollautomatisch erstellt werden, denn wenn man irgendwo klicken muß oder ein Programm aufrufen muß oder gar den Rechner mit einer gesonderten Backup-CD starten muß, neigt man aus Vergeßlichkeit oder Bequemlichkeit irgendwann doch dazu, kein regelmäßiges Backup mehr anzufertigen.

Die hier vorgestellte Lösung hat den Vorteil, daß sie mit Windows-Bordmitteln funktioniert, vollautomatisch erledigt wird und nur einmal konfiguriert werden muß. Außerdem hat der normale Nutzer durchgängig ausschließlich Lesezugriff auf das Backup.

Es gibt allerdings auch einige konzeptionelle Nachteile bzw. Schwierigkeiten:

  • Erstens erfolgt keine komplette Verifikation, ob die Daten korrekt kopiert wurden (schreiben - lesen - prüfen)
  • zweitens können nur Daten gesichert werden, nicht aber das Betriebssystem oder installierte Programme
  • drittens kann es aufgrund der Verwendung von xcopy Probleme geben, wenn die zu sichernden Dateien während des Backups geöffnet und/oder gesperrt sind (MS Outlook ist so ein Kandidat, aber auch Datenbanken wie MySQL oder PostgreSQL).

Für normale Dateien wie Fotos, Videos, Texte, Tabellen und Präsentationen sollte die Methode aber ausreichend sicher und zuverlässig sein.

Das Prinzip

Die größte Herausforderung ist es, das Backup anzustoßen, ohne daß der User sich als Administrator anmelden muß oder zusätzliche Software erforderlich ist. Die Lösung ist die Verwendung der Windows-Aufgabenplanung, die bei den Home-Editionen von Windows ohnehin mit dem User "SYSTEM" durchgeführt werden.

Variante 1 legt in regelmäßigen Abständen (je nach Umfang der zu sichernden Daten sollte man ein Intervall zwischen 10 Minuten und einigen Stunden einstellen) ein schreibgeschütztes Backup auf einer internen Festplatte ab. Der Vorteil dieser Variante ist die hohe Geschwindigkeit, der kurze Abstand zwischen zwei Backups und daß man keine zusätzliche Hardware benötigt. Nachteil ist, daß diese Variante nur sinnvoll ist, wenn man relativ viel freien Platz und / oder eine geringe zu sichernde Datenmenge hat, und daß dieses Backup nur gegen Verschlüsselungstrojaner und versehentlich gelöschte Dateien hilft, nicht aber gegen einen Hardwaredefekt, Diebstahl oder andere Schäden am Computer. Diesen Risiken muß man mit einem zusätzlichen Backup, beispielsweise auf ein externes Laufwerk oder NAS, begegnen.

Variante 2 wird beim Einstecken einer externen Festplatte oder eines USB-Sticks automatisch gestartet. Der Vorteil ist hier, daß man prinzipiell mehrere Laufwerke oder Sticks konfigurieren kann, die wiederum unterschiedliche Daten sichern können. Man kann beispielsweise einen kleinen Stick für die wichtigsten Dokumente und Postfächer nutzen und zusätzlich eine große Platte für Fotos und Videos.

Beide Varianten verwenden derzeit das Windows-Bordmittel xcopy und sichern mit der Option /D nur die Dateien, die seit der vorigen Sicherung verändert worden sind. Je Wochentag wird ein Ordner angelegt, so daß auf dem Ziellaufwerk mindestens die achtfache Speichermenge zur Verfügung stehen muß wie die zu sichernde Datenmenge. Da aus dem Backup prinzipbedingt nie etwas gelöscht wird, sollte man gleich ein etwas üppigeres Medium verwenden. Es ist vermutlich eine gute Idee, gleich Faktor 20 anzusetzen. Bei einer Größenordnung von 25 GB zu sichernden Daten dürfte also eine Festplatte mit 500 GB ausreichen. Solche Laufwerke kosten deutlich unter 60 Euro, teilweise bekommt man sogar 1 TB für 70-80 Euro. Manchmal findet man sogar 2 TB für unter 100 Euro.

Voraussetzung: ein beliebiges Windows ab XP (auch die Home-Editionen), und die Ziellaufwerke (auch USB-Sticks) müssen mit NTFS formatiert sein.

Da das normale Nutzerkonto niemals Schreibzugriff auf die Ordner mit den Backups erhalten darf - und auch, weil es unter aktuellen Windows-Versionen ohnehin empfehlenswert ist -, darf der normale User keine Administratorrechte haben.

Umsetzung

Schritt 1: Benutzerkonten anpassen bzw. einrichten

Der normale Windows-User darf keine Administratorrechte haben, also muß man ggf. ein weiteres Konto mit entsprechender Berechtigung einrichten (denn Windows benötigt immer mindestens ein Administratorkonto) und dem Alltagskonto die Rechte entziehen. Das Admin-Konto sollte ein etwas komplizierteres Kennwort haben, das man bei Vergeßlichkeit an einem sicheren Ort (natürlich weder in der Cloud noch auf demselben Computer) notiert. Außerdem sollte man die UAC-Kontrolle für normale Nutzer auf die höchste Stufe stellen. Das mag zwar lästig erscheinen, wenn man öfter neue Software installiert, hebt aber auch die Sicherheit gegenüber Verschlüsselungstrojanern ein klein wenig an (wenn es das auch nicht ganz verhindern kann: einmal falsch geklickt, schon kann der Trojaner loslegen).

Schritt 2: Ordner anlegen

Man loggt sich jetzt mit dem (neuen) Admin-Konto ein und legt auf dem Ziellaufwerk (je nach gewählter Variante intern oder extern) einen neuen Ordner für das Backup an. Der Name sollte so kurz wie möglich sein, da es Windows-Programme gibt, die mit insgesamt zu langen Ordner- und Dateinamen Probleme haben. Bei mir heißt der Ordner "back_wp" (für "Backup, write protected"). Die Benutzerrechte dieses neuen Ordners stellt man so ein, daß zunächst die Vererbung von oberhalb ausgeschaltet wird. Als Besitzer stellt man das neue Administratorkonto ein. Dann gibt man dem Konto SYSTEM sowie der Gruppe Administratoren alle Rechte (Lesen und Schreiben). Der normale Nutzer bekommt nur Leserechte. Gleichzeitig stellt man die Berechtigung des normalen Benutzerverzeichnisses (normalerweise C:\Users\) so ein, daß der neu eingerichtete Administrator dort nur Leserechte hat. So verhindert man, daß ein versehentlicher Virenbefall des Admin-Kontos wiederum die normalen Datenverzeichnisse verschlüsseln kann.

Um die Integrität des Backup-Skripts zu gewährleisten, muß dieses ebenfalls im schreibgeschützen Backup-Ordner abgelegt werden. So ist sichergestellt, daß dieses Skript nicht von einem Virus oder Trojaner durch ein anderes ersetzt wird - und dann möglicherweise die Dateien im Backup-Ordner löscht, denn dazu wäre das Skript berechtigt, weil es unter dem User "SYSTEM" läuft.

Schritt 3: backup.cmd erstellen

Das folgende Backup-Skript einfach als Admin-User in einen Texteditor wie notepad kopieren und als backup.cmd in den oben angelegten Backup-Ordner speichern.

Hinweis: im Backup-Skript dürfen keine Umgebungsvariablen genutzt werden, die auf den aktuellen User verweisen (%userprofile% o.ä.), da der User während der Ausführung SYSTEM ist. Und dessen Dateien wollen wir nicht sichern...


echo off

REM Hier ggf. Reihenfolge und delims anpassen (in Deutschland ist das Datum dd.mm.yyyy)
FOR /F "tokens=1,2,3 delims=." %%a in ('echo %date%') do set yy=%%c & set mm=%%b & set dd=%%a

set /a "TwoDigitYearMax=2038%%1000"
if 1%yy% LSS 200 if 1%yy% LSS 1%TwoDigitYearMax% (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1

If %dow% equ 1 set "WoTa=1-Mo"
If %dow% equ 2 set "WoTa=2-Di"
If %dow% equ 3 set "WoTa=3-Mi"
If %dow% equ 4 set "WoTa=4-Do"
If %dow% equ 5 set "WoTa=5-Fr"
If %dow% equ 6 set "WoTa=6-Sa"
If %dow% equ 7 set "WoTa=7-So"

echo %date% %time% Start >> backup_log.txt

REM Hier die Quell- und Zielpfade anpassen.
REM Der Anfang des Zielpfads (".\") bedeutet, daß die Zielordner unterhalb des Pfades angelegt werden, wo das backup.cmd gespeichert ist.
xcopy C:\Users\Alan\Documents\*.* ".\%WoTa%\Documents\" /D /E /V /C /I /R /K /Y /Z
xcopy C:\Users\Alan\Pictures\*.*  ".\%WoTa%\Pictures\" /D /E /V /C /I /R /K /Y /Z
xcopy C:\Users\Alan\Desktop\*.*   ".\%WoTa%\Desktop\" /D /E /V /C /I /R /K /Y /Z
xcopy C:\Users\Alan\Downloads\*.* ".\%WoTa%\Downloads\" /D /E /V /C /I /R /K /Y /Z
xcopy C:\Users\Alan\Music\*.*     ".\%WoTa%\Music\" /D /E /V /C /I /R /K /Y /Z
xcopy C:\Users\Alan\Videos\*.*    ".\%WoTa%\Videos\" /D /E /V /C /I /R /K /Y /Z
xcopy C:\Users\Alan\AppData\Roaming\Thunderbird\*.* ".\%WoTa%\Thunderbird\" /D /E /V /C /I /R /K /Y /Z
xcopy C:\Users\Alan\AppData\Roaming\Mozilla\Firefox\*.* ".\%WoTa%\Firefox\" /D /E /V /C /I /R /K /Y /Z


echo %date% %time% End >> backup_log.txt

Schritt 4: Aufgabenplanung

Variante 1: lokales Laufwerk, regelmäßige Sicherung
  • Systemsteuerung -> Verwaltung -> Aufgabenplanung mit Admin-Rechten (Rechtsklick) starten
  • mit "Aufgabe erstellen..." eine neue Aufgabe anlegen. Hier trägt man folgende Informationen ein:
    • Name: "regelmäßiges internes Backup" (oder eine andere sprechende Bezeichnung)
    • Beschreibung: Hier sollte man in kurzen Worten zusammenfassen, was genau dieses Backup wohin sichert
    • Sicherheitsoptionen: Benutzer oder Gruppe ändern -> Im Dialog "SYSTEM" eintippen, dann "Namen überprüfen"; den User "SYSTEM" auswählen und bestätigen
    • bei "Ausgeblendet" das Häkchen setzen
    • Auf dem Reiter "Trigger" einen neuen Trigger erstellen. "Nach einem Zeitplan" - "Einmal" - "Wiederholen jede 10 Minuten" (hier bei Bedarf das Intervall einstellen) - für die Dauer von "Sofort". Den Haken bei "Aktiviert" setzen, nicht aber bei "Aufgabe beenden nach..." oder "Ablaufen..."
    • "Aktionen" - mit der Aktion "Programm starten" das Backup-Skript aus dem Backup-Ordner starten lassen (Parameter sind nicht erforderlich)
    • "Bedingungen" - hier kann man ggf. einstellen, daß das Backup nur bei Netzbetrieb oder nur im WLAN (bei Backup auf ein NAS) gestartet wird
    • "Einstellungen" - "Aufgabe beenden, falls Ausführung länger als..." - hier sollte man eine vernünftige Zeit einstellen, ein größeres Backup wird vermutlich nicht länger als ein paar Stunden laufen, diese Zeit sollte man großzügig verlängern und dort eintragen. Empfehlung: 2 oder 4 Stunden. Nach der hier eingestellten Zeit wird das Skript "abgewürgt", egal ob das Backup bis zum Ende durchgelaufen ist oder nicht.
    • "Folgende Regel anwenden, falls die Aufgabe bereits ausgeführt wird" - hier auf jeden Fall "Keine neue Instanz starten", sonst laufen womöglich zwei Backups parallel, das wäre kontraproduktiv, da das die Platte(n) erheblich verlangsamt. Außerdem könnte xcopy damit ins Schleudern geraten.
Variante 2: automatisches Backup auf externes Laufwerk

Die Vorbereitungen sind wie oben. Voraussetzung ist ein NTFS-formatierter USB-Stick bzw. eine NTFS-formatierte externe Platte, auf der man ebenfalls einen für den normalen Benutzer schreibgeschützten Backup-Ordner "back_wp" anlegt, in den man das Backup-CMD-Skript von oben kopiert.

Zur erfolgreichen Auslösung des Ereignisses beim Einstecken der Platte bzw. des Sticks muß in Windows zunächst die entsprechende Ereigniskategorie aktiviert werden, damit Windows das Anschließen von USB-Laufwerken erkennt. Für die folgenden Schritte darf die externe Platte (bzw. der USB-Stick) anfangs nicht angeschlossen sein, also das entsprechende Laufwerk abmelden und abziehen. Dann kann es losgehen:

  • Systemsteuerung -> Verwaltung -> Ereignisanzeige mit Admin-Rechten (Rechtsklick) starten
  • links Ereignisanzeige (lokal) -> Anwendungs- und Dienstprotokolle -> Microsoft -> Windows -> Windows -> DriverFrameworks-UserMode -> Betriebsbereit klicken
  • rechts außen "Protokoll aktivieren" klicken
  • jetzt kann die USB-Platte bzw. der USB-Stick angeschlossen werden
  • nun sollte sich das Ereignisprotokoll füllen; bei USB-Festplatten funktioniert das gelegentlich nicht, dann bleibt das Protokoll leer und die Platte ist für unsere Zwecke nicht geeignet (bzw. die Windows-Installation kann es nur mit USB-Sticks); bei mir geht es unter Windows 8.1 mit einer externen Festplatte von Seagate einwandfrei
  • jetzt suchen wir das letzte Ereignis mit der ID 2006 und klicken es an, dann unten auf "Details" und "XML-Ansicht"
  • der XML-Text enthält einen Abschnitt, der mit instance=" beginnt, bei meiner Festplatte steht dort instance="SWD\WPDBUSENUM\{FC2AEA83-6F3E-11E5-BF60-C485083C7CCD}#0000000000100000"; den Text zwischen den "" markieren, dann Rechtsklick und "kopieren"
  • falls der soeben kopierte Text die Zeichen '&', '<', '>' oder '"' enthält, müssen diese ersetzt werden: '&' durch '&amp;', '<' durch '&lt;', '>' durch '&gt;' und '"' durch '&quot;'
  • jetzt benötigt man einen Texteditor, beispielsweise Notepad, und fügt dort folgenden Text ein:
  • <QueryList>
    <Query Id="0" Path="Microsoft-Windows-DriverFrameworks-UserMode/Operational">
    	<Select Path="Microsoft-Windows-DriverFrameworks-UserMode/Operational">*[UserData[UMDFHostAddDeviceEnd[@instance="SWD\WPDBUSENUM\{FC2AEA83-6F3E-11E5-BF60-C485083C7CCD}#0000000000100000"]]]</Select>
    </Query>
    </QueryList>
    Den fett gedruckten Teil bei instance=" ersetzt man hier durch den Textschnipsel aus dem XML-Ereignis (mit den bereinigten Sonderzeichen)
  • den komplett angepaßten Text aus dem Editor kopieren
  • jetzt im Windows-Aufgabenplaner wie oben beschrieben eine neue Aufgabe anlegen, mit folgenden Abweichungen:
    • Name: "automatisches Backup auf externe Festplatte" (oder eine andere sprechende Bezeichnung)
    • Beschreibung wie oben
    • Auf dem Reiter "Trigger" einen neuen Trigger erstellen. "Bei einem Ereignis" - "Benutzerdefiniert" - dann auf "Ereignisfilter bearbeiten" klicken
    • beim Ereignisfilter auf den Reiter "XML" gehen, unten bei "Manuell bearbeiten" das Häkchen setzen, in die Textbox den soeben erstellten Text aus dem Editor einfügen und mit "OK" bestätigen
    • zurück im Fenster "Trigger bearbeiten" zusätzlich die Option "Verzögern für: 30 Sekunden" auswählen (dies stellt sicher, daß das Laufwerk nach dem Einstecken tatsächlich zur Verfügung steht) und das Häkchen bei "Aktiviert" setzen, alle anderen bleiben deaktiviert, und ebenfalls mit "OK" bestätigen
    • "Aktionen" wie oben - hier wählen wir das backup.cmd auf der externen Festplatte
    • "Bedingungen" kann eigentlich leer bleiben, außer, man möchte das Backup beispielsweise nur bei Netzbetrieb starten
    • "Einstellungen" wie oben
    • "Folgende Regel anwenden..." wie oben

Steckt man nun exakt die externe Platte bzw. exakt den USB-Stick ein, dessen instance man in den Trigger eingesetzt hat, wird das Backup gestartet

Hinweis: Man muß das externe Laufwerk natürlich weiterhin wie üblich abmelden, und das geht nur, wenn das Backup beendet ist - das kann man am automatisch angelegten Logfile im Backup-Ordner erkennen, dort steht in der letzten Zeile ein "End: ...", sobald das Backup fertig ist

Quelle für den Trick mit der Ereigniserkennung: http://www.typo.media/windows/usb-backup/