Hdparm/Sicherheit
Sicherheit
Das "security feature set" ist Teil des ATA Standards und ermöglicht das Sperren der Festplatte durch ein Passwort, sowie deren automatische Löschung.
Passwort-Schutz
Die Passwörter werden direkt auf den Plattern der Festplatte gespeichert, lassen sich so durch Tausch der Laufwerkselektronik (wovon generell abzuraten ist) nicht umgehen. Die Passwörter sollten also mit Vorsicht gesetzt werden, denn theoretisch kann selbst der Hersteller diese nicht umgehen. Es ist jedoch möglich. Für hohe Sichereitsansprüche ist eine Vollverschlüsselung der Daten deshalb effektiver.
- --user-master PASSWORT-TYP
- Grundsätzlich lassen sich zwei unterschiedliche, 32 Byte lange Passwörter setzen. Mit "u" wird das User-Passwort gewählt; mit "m" das Master-Passwort, welches als Not-Schlüssel dient. Dieser Schalter lässt sich mit dem "security mode" und den anderen kombinieren, als Standard ist immer das User-Passwort gewählt.
- --security-set-pass PASSWORT
- Dieser Schalter setzt das gegebene Passwort und aktiviert damit die Sicherheitsfunktion, "NULL" für ein leeres. Ist dies das User-Passwort, wird die Sperrung aktiviert.
- --security-mode SICHERHEITSSTUFE
- Mit "h" wird die Stufe "high security", mit "m" "maximal security" gewählt. Bei ersterem ist die Entsperrung mit beiden Passwörtern, bei "maximal" nur mit dem User-Passwort möglich. Mit dem Master-Passwort lässt sich die Festplatte nur durch ein "security erase" entsperren, wobei alle Daten gelöscht werden. Ohne Angabe wird auf "high" gesetzt. Mit "user-master" und den anderen Schaltern kombinierbar.
- --security-unlock PASSWORT
- Hiermit wird die Festplatte temporär, also bis zum nächsten Start (Reset), entsperrt.
- --security-disable PASSWORT
- Im entsperrten Zustand lässt sich die Sicherheitsfunktion so dauerhaft ausschalten.
- --security-freeze PASSWORT
- Damit werden alle Sicherheitseinstellungen eingefroren, bis zum nächsten Start sind keine Änderungen mehr möglich. Diese Funktion wird von einigen BIOS beim Start gesetzt, um ein Sperren mit böswilliger Absicht zu verhindern.
- Beispiele
Die Unterstützung prüfen:
Security: Master password revision code = 65534 supported not enabled not locked not frozen not expired: security count not supported: enhanced erase
Das "not" zeigt jeweils, was inaktiv ist. Je nach Gerät sind hier Informationen über die Dauer eines "security-erase" angegeben.
Die Aktivierung geschieht mit dem Setzen eines Passwortes. Vorlage:RootShellDa Passwortmode und Sicherheitsstufe nicht angegeben sind, wird der Standard verwendet.
security_password="Test" /dev/sdg: Issuing SECURITY_SET_PASS command, password="Test", user=user, mode=high
Unter "Security" ist nun das not vor enabled verschwunden:
enabled
Würde der Rechner oder die Festplatte jetzt neu gestartet werden, würde diese nicht mehr zugreifbar sein, ohne diese zu entsperren oder den Schutz ganz aufzuheben:
security_password="Test" /dev/sdg: Issuing SECURITY_UNLOCK command, password="Test", user=user
Schutz abschalten:
security_password="Test" /dev/sdg: Issuing SECURITY_DISABLE command, password="Test", user=user
Die Festplatte ist dauerhaft entsperrt:
not enabled
Das Master-Passwort ließe sich so setzen: sudo hdparm --user-master m --security-set-pass Passwort2 /dev/sdg security_password="Passwort2"
/dev/sdg:
Issuing SECURITY_DISABLE command, password="Passwort2", user=master
Den aktuellen Schutzzustand einfrieren
hdparm --security-freeze /dev/sdg
/dev/sdg:
issuing security freeze commandDas fehlende not zeigt wieder den Zustand:
frozen
Ein Versuch, den Schutz danach ein zu schalten Vorlage:RootShell schlägt dann fehl:
security_password="TEST" /dev/sda: Issuing SECURITY_SET_PASS command, password="TEST", user=user, mode=high SECURITY_SET_PASS: Input/output error
Security Erase
- --security-erase PASSWORT
- Es wird eine gesperrte Festplatte so entsperrt und automatisch komplett mit Nullen beschrieben.
- --security-erase-enhanced PASSWORT
- Führt ein "enhanced security erase" aus und bewirkt ansonsten das selbe wie "security erase". Insbesondere bei SSDs kann es hier Unterschiede geben.
Beispiel:
Nachdem man zuvor den Schutz, durch setzen eines User-Passwortes, aktiviert hat, ist ein Security-Erase möglich mit:
Vorlage:RootShell
security_password="TEST" /dev/sdc: Issuing SECURITY_ERASE command, password="TEST", user=user
Ob die Festplatte ein enhanced erase unterstützt, wird mit "-I" angezeigt:
not supported: enhanced erase
Anmerkung: Wenn die Dauer des Löschens nicht angegeben ist, kann man abhängig von der Kapazität und der mittleren Schreibgeschwindigkeit auf die Zeit schließen. Unterstützt die Festplatte SMART, entspricht die benötigte Zeit ungefähr der, welche für einen erweiterten Selbsttest angegeben wird:
Extended self-test routine recommended polling time: ( 54) minutes.
So ist besonders bei Festplatten an einem langsamen IDE/SATA Chipsatz das Löschen mit der maximalen Geschwindigkeit erreichbar, da die Operation von der Festplattenfirmware selbst durchgeführt wird und so unabhängig von der Bus-Anbindung ist. Bei SSDs müssen nur die Blöcke der NAND Flash gelöscht werden, dadurch muss nicht jedes Byte geschrieben werden und die Gesamtdauer kann so wenige Minuten betragen. Das ist jedoch sehr Herstellerspezifisch.
HPA - Host Protect Area
- -N
- Zeigt und setzt die LBA Sektoren.
- Mit ATA/ATAPI 4 wurde das Host Protect Area eingeführt. Damit lässt sich ein definierter Bereich der Festplatte selbst vor Partitionierprogrammen verstecken und die Gesamtkapazität so scheinbar schrumpfen. HPA verhält sich so wie eine unsichtbare Grenze, die nichts anderes bewirkt. Gerne für Wiederherstellungspartitionen in OEM Systemen verwendet und so manches BIOS kopiert sich ungefragt in einen selbst erstellten HPA-Bereich (Vorlage:DebianforumBeitrag). Vom Kernel standardmäßig zurückgesetzt, lässt sich dieser von hdparm erkennen und sogar setzen.
Beispiel:
hdparm -N /dev/sdc /dev/sdc: max sectors = 156250000/156250000, HPA is disabled
Die maximale LBA Zahl kann flüchtig wie folgt gesetzt werden:
hdparm --yes-i-know-what-i-am-doing -N156200000 /dev/sdc /dev/sdc: setting max visible sectors to 156200000 (temporary) max sectors = 156200000/156250000, HPA is enabled
Nach einem Reset oder Neustart wäre diese Einstellung zurückgesetzt. Das permanente, also nichtflüchtige, Setzen wird durch ein kleines p vor der Sektorzahl bewirkt:
hdparm --yes-i-know-what-i-am-doing -Np156200000 /dev/sdc /dev/sdc: setting max visible sectors to 156200000 (permanent) max sectors = 156200000/156250000, HPA is enabled
Hier hat die Ausführung funktioniert. Damit wissen aber fdisk, dd & Co noch nichts davon:
fdisk -luc /dev/sdc Disk /dev/sdc: 80.0 GB, 80000000000 bytes 255 heads, 63 sectors/track, 9726 cylinders, total 156250000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000be68d [...]
Erst nach einem Neustart wäre dies der Fall.
Als weiteres Beispiel folgend das Erkennen und rückgängig machen, eines vom BIOS gesetzten HPA. Die Meldung vom Kernel lässt Verdacht schöpfen:
Vorlage:UserShell
hdparm -N /dev/sdd /dev/sdd: max sectors = 156247887/156250000, HPA is enabled
(156250000-156247887)*512 Byte = 1.081.856 Byte wurden geschluckt! Nun den HPA löschen:
hdparm -Np156250000 /dev/sdd /dev/sdd: setting max visible sectors to 156250000 (permanent) max sectors = 156250000/156250000, HPA is disabled
Danach neu starten um mit dd zu schauen ob, und was da nun versteckt war:
dd if=/dev/sdd of=hpa.bin bs=512 skip=156247887 2113+0 Datensätze ein 2113+0 Datensätze aus 1081856 Bytes (1,1 MB) kopiert, 0,00426143 s, 254 MB/s
Mit hexdump gucken:
hexdump -Cn40 hpa.bin 00000000 25 e4 2d 6c 68 35 2d 7f 42 01 00 00 00 02 00 00 |%.-lh5-.B.......| 00000010 00 00 50 20 01 0c 4b 38 4e 53 43 39 33 39 2e 42 |..P ..K8NSC939.B| 00000020 49 4e fe 0f 20 00 00 2c |IN.. ..,| 00000028c
Etwas lha-komprimiertes.
lha -x hpa.bin k8nsc939.bin - Melted : oooooooooooooooo LHa: Error: CRC error k8nsc939.bin
ls -l k8nsc939.bin -rw-r--r-- 1 ich ich 131072 30. Nov 2019 k8nsc939.bin
So wurde in den versteckten Bereich ein BIOS Image gepackt. Bei manchen lässt sich das abstellen.
HPA ignorieren:
Es ist möglich den Kernel anzuweisen, eine eventuell gesetzte HPA Limitierung zu ignorieren. Es ist lediglich nötig, als Kernel Bootparameter folgendes mitzugeben:
libata.ignore_hpa=1
Eine 0 ist Standard und würde die limits beibehalten. Äquivalent libata als Modulparameter ignore_hpa=1. Oder durch IDE Treiber unterstützte Controller ide-core.nohpa zum Boot mitgeben.