Vermeiden von File integrity verification failures
Posted: 06.12.2015, 14:38
Zusammenfassung
Eine Ursache für den Fehler File Integrity Verification Failure wird diskutiert. Eine Lösung wird vorgeschlagen und ein kleiner Trick vorgestellt, wie man diesen Fehler selber vermeiden kann.
Einführung
Vor jedem Download wird die Integrität der bereits vorhandenen Dateien überprüft. Dazu werden die einzelnen Unterverzeichnisse des client-Ordners mit hashdeep auf Änderungen überprüft. Manchmal findet hashdeep eine Änderung. Da der Audit-Modus von hashdeep sehr strikt ist, führt das zu der Meldung File Integrity Verification Failure.
Als Ursache gelten Download-Fehler beim vorherigen Aufruf des Skripts. Dies tritt besonders häufig bei den Virusdefinitionen auf, da diese Dateien sich ständig ändern. Doch das ist nicht die eigentliche Ursache für einen File Integrity Verification Failure: Wenn in einen Ordner zum Beispiel 100 Dateien heruntergeladen werden sollen, und ein einzelner Download schlägt fehl, dann erstellt hashdeep einfach eine Prüfsummendatei für die restlichen 99 Dateien. Beim nächsten Aufruf findet hashdeep eine Prüfsummendatei mit 99 Einträgen und einen Ordner mit 99 Dateien — das verursacht keinen Fehler.
Die eigentliche Ursache
Die eigentliche Ursache liegt darin, dass hashdeep manchmal leere Dateien produziert, wenn es im angegebenen Ordner überhaupt keine Dateien findet.
Oder genauer ausgedrückt: hashdeep produziert keine Ausgabe, wenn es keine Eingabedateien findet. Die Ausgabeumlenkung:
DownloadUpdates.cmd, Version 10.2.1, Zeile 1002
produziert dann aber trotzdem eine leere Prüfsummendatei.
hashdeep gibt dabei keinen Fehlercode aus, wie man zum Beispiel in einer Linux-Shell nachvollziehen kann:
Beim nächsten Lauf verursacht die Überprüfung des Ordners mit einer leeren Prüfsummendatei aber einen Fehler:
Dieser Fehler wird vom Skript DownloadUpdates.cmd als File Integrity Verification Failure ausgegeben, und das Skript stoppt anschliessend.
Diese Situation tritt besonders häuft beim Download der Windows Defender Definition files auf, da es für diesen Download nur jeweils eine Datei für jede Architektur gibt, und der Download dieser einzelnen Datei schlägt häufig fehl. Tatsächlich scheint der Fehler File Integrity Verification Failure typischerweise an der Stelle aufzutreten, an der die vorhandenen Dateien im Ordner client/wddefs überprüft werden sollen.
Dies wurde zum Beispiel hier beobachtet:
viewtopic.php?f=3&t=5217#p17052
Die Lösung
Das Skript DownloadUpdates.cmd sollte die Erstellung von leeren hashdeep-Dateien überprüfen. Tatsächlich gibt es solche Tests bereits an zwei Stellen:
DownloadUpdates.cmd, Version 10.2.1, Zeile 1064
DownloadUpdates.cmd, Version 10.2.1, Zeilen 1522 - 1529
Damit werden aber nur die Prüfsummendateien für Windows- und Office-Updates überprüft. Bei den verschiedenen optionalen Downloads fehlen diese Tests.
Diese beiden Tests sollten auch in die optionalen Downloads eingebaut werden. Wenn man das nur für den Ordner client/wddefs macht, sollte das die Häufigkeit der File Integrity Verification Failures deutlich reduzieren.
Ein Workaround
Ein kleiner Workaround für diesen Fehler könnte sein, eine beliebige Datei in den Ordner client/wddefs zu legen. Dieser Ordner wird bei der Verifizierung der Dateisignaturen mit Sysinternals Sigcheck nicht überprüft; nur die beiden Unterordner x64-glb und x86-glb werden überprüft. Eine Datei an dieser Stelle wird deshalb nicht gelöscht.
Die Prüfsummendateien werden aber direkt für den Ordner client/wddefs erstellt. Wenn man hier eine beliebige Datei platziert, sollte das die Bildung von leeren Prüfsummendateien verhindern. Ein paar Absätze aus dem bekannten Lorem Ipsum genügen:
https://de.wikipedia.org/wiki/Lorem_ipsum
Eine vorhandene Prüfsummendatei wsusoffline/client/md/hashes-wddefs.txt muss aber einmal gelöscht werden, damit der Ordnerinhalt und die Prüfsummendatei beim nächsten Lauf wieder synchronisiert werden.
TL;DR
Eine beliebige Datei im Verzeichnis wsusoffline/client/wddefs verhindert die Erstellung von leeren Prüfsummendateien und beseitigt damit eine der Hauptursachen für den Fehler File Integrity Verification Failure.
Eine vorhandene Datei wsusoffline/client/md/hashes-wddefs.txt muss einmal gelöscht werden.
Eine Ursache für den Fehler File Integrity Verification Failure wird diskutiert. Eine Lösung wird vorgeschlagen und ein kleiner Trick vorgestellt, wie man diesen Fehler selber vermeiden kann.
Einführung
Vor jedem Download wird die Integrität der bereits vorhandenen Dateien überprüft. Dazu werden die einzelnen Unterverzeichnisse des client-Ordners mit hashdeep auf Änderungen überprüft. Manchmal findet hashdeep eine Änderung. Da der Audit-Modus von hashdeep sehr strikt ist, führt das zu der Meldung File Integrity Verification Failure.
Als Ursache gelten Download-Fehler beim vorherigen Aufruf des Skripts. Dies tritt besonders häufig bei den Virusdefinitionen auf, da diese Dateien sich ständig ändern. Doch das ist nicht die eigentliche Ursache für einen File Integrity Verification Failure: Wenn in einen Ordner zum Beispiel 100 Dateien heruntergeladen werden sollen, und ein einzelner Download schlägt fehl, dann erstellt hashdeep einfach eine Prüfsummendatei für die restlichen 99 Dateien. Beim nächsten Aufruf findet hashdeep eine Prüfsummendatei mit 99 Einträgen und einen Ordner mit 99 Dateien — das verursacht keinen Fehler.
Die eigentliche Ursache
Die eigentliche Ursache liegt darin, dass hashdeep manchmal leere Dateien produziert, wenn es im angegebenen Ordner überhaupt keine Dateien findet.
Oder genauer ausgedrückt: hashdeep produziert keine Ausgabe, wenn es keine Eingabedateien findet. Die Ausgabeumlenkung:
DownloadUpdates.cmd, Version 10.2.1, Zeile 1002
- Code: Select all
..\bin\%HASHDEEP_EXE% -c md5,sha1,sha256 -l -r ..\wddefs >hashes-wddefs.txt
produziert dann aber trotzdem eine leere Prüfsummendatei.
hashdeep gibt dabei keinen Fehlercode aus, wie man zum Beispiel in einer Linux-Shell nachvollziehen kann:
- Code: Select all
~/tmp$ mkdir empty_folder
~/tmp$ hashdeep -r -l empty_folder/ > hashes-empty_folder.txt
~/tmp$ echo $?
0
~/tmp$ cat hashes-empty_folder.txt
~/tmp$
Beim nächsten Lauf verursacht die Überprüfung des Ordners mit einer leeren Prüfsummendatei aber einen Fehler:
- Code: Select all
~/tmp$ hashdeep -a -v -v -r -l -k hashes-empty_folder.txt empty_folder/
hashdeep: hashes-empty_folder.txt: Unable to identify file format
hashdeep: Unable to load any matching files.
Try `hashdeep -h` for more information.
~/tmp$ echo $?
64
~/tmp$
Dieser Fehler wird vom Skript DownloadUpdates.cmd als File Integrity Verification Failure ausgegeben, und das Skript stoppt anschliessend.
Diese Situation tritt besonders häuft beim Download der Windows Defender Definition files auf, da es für diesen Download nur jeweils eine Datei für jede Architektur gibt, und der Download dieser einzelnen Datei schlägt häufig fehl. Tatsächlich scheint der Fehler File Integrity Verification Failure typischerweise an der Stelle aufzutreten, an der die vorhandenen Dateien im Ordner client/wddefs überprüft werden sollen.
Dies wurde zum Beispiel hier beobachtet:
viewtopic.php?f=3&t=5217#p17052
Die Lösung
Das Skript DownloadUpdates.cmd sollte die Erstellung von leeren hashdeep-Dateien überprüfen. Tatsächlich gibt es solche Tests bereits an zwei Stellen:
DownloadUpdates.cmd, Version 10.2.1, Zeile 1064
- Code: Select all
for %%i in (..\client\md\hashes-%1-%2.txt) do if %%~zi==0 del %%i
DownloadUpdates.cmd, Version 10.2.1, Zeilen 1522 - 1529
- Code: Select all
for %%i in (..\client\md\hashes-%1-%2.txt) do (
if %%~zi==0 (
del %%i
echo %DATE% %TIME% - Info: Deleted zero size integrity database for %1 %2>>%DOWNLOAD_LOGFILE%
) else (
echo %DATE% %TIME% - Info: Created integrity database for %1 %2>>%DOWNLOAD_LOGFILE%
)
)
Damit werden aber nur die Prüfsummendateien für Windows- und Office-Updates überprüft. Bei den verschiedenen optionalen Downloads fehlen diese Tests.
Diese beiden Tests sollten auch in die optionalen Downloads eingebaut werden. Wenn man das nur für den Ordner client/wddefs macht, sollte das die Häufigkeit der File Integrity Verification Failures deutlich reduzieren.
Ein Workaround
Ein kleiner Workaround für diesen Fehler könnte sein, eine beliebige Datei in den Ordner client/wddefs zu legen. Dieser Ordner wird bei der Verifizierung der Dateisignaturen mit Sysinternals Sigcheck nicht überprüft; nur die beiden Unterordner x64-glb und x86-glb werden überprüft. Eine Datei an dieser Stelle wird deshalb nicht gelöscht.
Die Prüfsummendateien werden aber direkt für den Ordner client/wddefs erstellt. Wenn man hier eine beliebige Datei platziert, sollte das die Bildung von leeren Prüfsummendateien verhindern. Ein paar Absätze aus dem bekannten Lorem Ipsum genügen:
https://de.wikipedia.org/wiki/Lorem_ipsum
Eine vorhandene Prüfsummendatei wsusoffline/client/md/hashes-wddefs.txt muss aber einmal gelöscht werden, damit der Ordnerinhalt und die Prüfsummendatei beim nächsten Lauf wieder synchronisiert werden.
TL;DR
Eine beliebige Datei im Verzeichnis wsusoffline/client/wddefs verhindert die Erstellung von leeren Prüfsummendateien und beseitigt damit eine der Hauptursachen für den Fehler File Integrity Verification Failure.
Eine vorhandene Datei wsusoffline/client/md/hashes-wddefs.txt muss einmal gelöscht werden.