PowerShell – Checksummen von Dateien errechnen

Alexander Knopp

9

min Lesezeit

Doch wie kann man sich sicher sein, dass nach dem Download die richtige Datei unbeschadet und ohne Datenmanipulation einer eventuellen...

Inhaltsverzeichnis

Wer kennt es nicht: Man lädt sich ein Programm aus dem Internet und möchte es installieren. Doch wie kann man sich sicher sein, dass nach dem Download die richtige Datei unbeschadet und ohne Datenmanipulation einer eventuellen „Man-in-the-middle-Attacke“ auf der eigenen Festplatte liegt?

Hat man sich schließlich dennoch durchgerungen die Datei auszuführen kann es passieren, dass der in Windows 8 standardmäßig eingebaute SmartScreen Filter anschlägt und einem förmlich ins Gesicht zu brüllen scheint „NICHT AUSFÜHREN! GEFAHR! HIER WILL DICH EINER ÜBER’S OHR HAUEN!“. Dieses Verhalten verunsichert verständlicherweise nur noch mehr und mahnt zur Vorsicht, was natürlich auch genau so gewollt und prinzipiell eine gute Sache ist.

Doch oft kennt man die Quelle bzw. den Softwarehersteller, von dessen Seite man das Executable heruntergeladen hat und weiß, dass man diesem eigentlich vertrauen kann. Dann kann es entweder sein, dass dieser die Datei gerade mit einem neuen Zertifikat bestückt hat, welches vom Microsoft SmartScreen Filter noch nicht als ausreichend vertrauenswürdig eingestuft wurde, oder aber die Datei nicht korrekt heruntergeladen wurde, bzw. vielleicht wirklich ein Angreifer die Datei manipuliert hat.

Um überprüfen zu können, ob man lokal nun das richtige File vor sich hat, geben viele Hersteller einen oder mehrere Hash-Werte (meist MD5 oder SHA1) auf ihrer Homepage für den Download mit an. Dieser Wert ist eindeutig, also quasi der Fingerabdruck der Datei und kann dann mit dem heruntergeladenen File verglichen werden. Unterscheiden sich die Werte kann man sich sicher sein, dass etwas nicht stimmt. (Oder aber der Hersteller hat aus versehen einen falschen Wert angegeben. Darauf würde ich es jedoch dann nicht ankommen lassen.)

Doch wie kann ich mir den Hashwert meines Downloads anzeigen lassen?
Zum errechnen eines Hash-Werts kann unter Windows z.B. die PowerShell herangezogen werden.

Ab PowerShell Version 4, die ab Windows 8 und Server 2012 standardmäßig installiert ist, gibt es hierfür auch gleich ein extra Commandlet namens „Get-FileHash“. Mit dem Parameter „-Algorithm“ kann dann noch der gewünschte Algorithmus gewählt werden. Zur Auswahl stehen hier unter Anderem auch MD5 und SHA1.

Möchte man also z.B. den MD5 Hash der inote.exe errechnet haben verwendet man folgenden Befehl:

1Get-FileHash -Path C:PfadzurDatei.exe -Algorithm MD5


Hinter dem Parameter „-Path“ muss der Pfad zur gewünschten Datei angegeben werden, sowie der gewünschte Algorithmus hinter dem Parameter „-Algorithm“. In diesem Beispiel wurde die inote.exe in Version 2.6.716 verwendet.

Mit folgender Zeile kann die errechnete Checksumme der Datei gleich mit dem Hash der Homepage verglichen werden. Erfolgt in der PowerShell kein Output sind die Hashes identisch. „Compare-Object“ arbeitet dabei standardmäßig caseinsensitive.

1Get-FileHash -Path C:executablesinote.exe -Algorithm MD5 | Compare-Object -ReferenceObject "2F9296722Cd04054566D98F97649B09E" -DifferenceObject {$_.Hash}

Ist hingegen ein Output wie auf dem nächsten Bild zu sehen stimmen die Werte nicht überein.

In PowerShell Version 3 und geringer ist das Commandlet „Get-FileHash“ noch nicht vorhanden. Somit muss man sich eines kleinen Umwegs bedienen, wenn man die Checksumme einer Datei mit der PowerShell errechnen möchte.

Hierfür habe ich in einem anderen Blog ein kleines Skript gefunden.

Ich habe es etwas angepasst und erweitert, sodass sich nun auch verschiedene Algorithmen damit verwenden lassen und ein mit angegebener Referenz-Hashwert sofort (caseinsensitive) verglichen wird.

Dank Parametern kann das Skript quasi wie ein Commandlet verwendet werden.

1param
2
3(
4
5[Parameter(Mandatory=$true)]
6
7[String]
8
9$Path,
10
11
12
13[ValidateSet("MD5", "SHA1", "SHA256", "SHA512")]
14
15$Algorithm = "MD5",
16
17
18
19[Parameter(Mandatory=$true)]
20
21[String]
22
23$Hash
24
25)
26
27
28
29# Calculate hash of given file with given algorithm
30
31$algo = [System.Security.Cryptography.HashAlgorithm]::Create("$Algorithm")
32
33$stream = New-Object System.IO.FileStream($path, [System.IO.FileMode]::Open)
34
35$StringBuilder = New-Object System.Text.StringBuilder
36
37$algo.ComputeHash($stream) | % { [void] $StringBuilder.Append($_.ToString("x2")) }
38
39$fileHash = $StringBuilder.ToString()
40
41$stream.Dispose()
42
43
44
45# Case insensitive comparison. If variable $compared is 0 the hashes are equal.
46
47$compared = [string]::Compare($fileHash, $Hash, $True)
48
49
50
51Write-Host ""
52
53Write-Host Algorithm : $Algorithm
54
55Write-Host File Hash : $fileHash
56
57Write-Host Given Hash: $Hash
58
59# Check if hashes are equal
60
61if ($compared -eq "0"){
62
63    Write-Host "The hashes are equal." -ForegroundColor Green}
64
65else{
66
67    Write-Warning "The hashes are NOT equal."}
68
69Write-Host ""

Und so funktioniert das Skript:
Rufen Sie das Skript mit dem Parameter „-Path“ auf und geben Sie dort den Pfad zur gewünschten Datei an.
Verwenden Sie den Parameter „-Algorithm“ um zwischen MD5, SHA1, SHA256 und SHA512 zu wählen. Wird der Parameter nicht definiert wird automatisch die MD5 Checksumme errechnet.
Hinter dem Parameter „-Hash“ muss anschließend noch die Referenz-Checksumme angegeben werden, mit der der errechnete Hash verglichen werden soll.

Das Ergebnis sieht dann folgendermaßen aus:
Bei gleichen Checksummen…

oder bei unterschiedlichen Checksummen…

Hier finden Sie unsere Antworten

Ähnliche Beiträge

Softwareverwaltung optimieren nach der DSM Migration mit IDERI pace

Erfahren Sie, wie IDERI pace die Softwareverwaltung nach der DSM Migration in Sachen Sicherheit, Kontrolle und Effizienz optimiert.

Vielfältige Potenziale: Umzug von Ivanti DSM zu VMware Workspace One

Erhalten Sie alle Informationen zum Umzug von Ivanti DSM zu VMware Workspace One und die Potenziale dieser Softwaremigration.

DSM 7 – Dynamische Gruppen Automatisch befühlen + Option für die Manuelle zuordnung

Das Befüllen von dynamischen Gruppen, z.B. anhand des PC Namens ist in der Regel nicht sehr schwer und sollte leicht umzusetzen sein.

Server 2008 R2 Features und Rollen hinzufügen Script

Ein MS Server Betriebssystem mit DSM 7 auszurollen stellt kaum ein Problem dar.

DSM 7.2.1 released

Das Update beseitigt einige Fehler und bringt noch ein paar Neuerungen. Hier seinen mal nur ein paar genannt.

DSM 7.0.2 – Probleme beim Erstellen von Boot Environments

Als wir neulich bei einem Kunden waren, bei dem wir eine komplett neue Umgebung unter DSM 7.0.2 erstellen sollten, stießen wir auf erhebliche Probleme beim Vers

DSM 7.0 – Mehrere Policy-Ziele bereits beim „Paket zuweisen“

Seit DSM Version 7.1 kann man beim Zuweisen eines Pakets mehrere Policy-Ziele auswählen.

DSM 7 – Undokumentierte Scriptbefehle freischalten

In DSM7 gibt es einige Befehle mehr, als man in der Packaging Workbench sehen kann.

Durch Klicken auf „Alle Cookies akzeptieren“ stimmen Sie der Speicherung von Cookies auf Ihrem Gerät zu, um die Navigation auf der Website zu verbessern, die Nutzung der Website zu analysieren und unsere Marketingbemühungen zu unterstützen. Weitere Informationen finden Sie in unserer Datenschutzerklärung.