Überprüfen des Starts

Für den verifizierten Start muss der gesamte ausführbare Code und die Daten, die Teil der zu bootenden Android-Version sind, kryptografisch überprüft werden, bevor sie verwendet werden. Dies schließt den Kernel (von der geladenen boot - Partition), die Gerätestruktur (von der geladenen dtbo Partition), system - Partition, vendor - Partition, und so weiter.

Kleine Partitionen wie boot und dtbo , die nur einmal gelesen werden, werden normalerweise überprüft, indem der gesamte Inhalt in den Speicher geladen und anschließend der Hash berechnet wird. Dieser berechnete Hashwert wird dann mit dem erwarteten Hashwert verglichen. Wenn der Wert nicht übereinstimmt, wird Android nicht geladen. Weitere Informationen finden Sie unter Startablauf .

Größere Partitionen, die nicht in den Speicher passen (z. B. Dateisysteme), verwenden möglicherweise einen Hash-Baum, bei dem die Überprüfung ein kontinuierlicher Prozess ist, der beim Laden von Daten in den Speicher stattfindet. In diesem Fall wird der Root-Hash des Hash-Baums zur Laufzeit berechnet und mit dem erwarteten Root-Hash-Wert verglichen . Android enthält den dm-verity-Treiber zum Überprüfen größerer Partitionen. Wenn der berechnete Root-Hash irgendwann nicht mehr mit dem erwarteten Root-Hash-Wert übereinstimmt , werden die Daten nicht verwendet und Android tritt in einen Fehlerzustand ein. Weitere Informationen finden Sie unter Beschädigung von dm-verity .

Die erwarteten Hashes werden normalerweise entweder am Ende oder am Anfang jeder verifizierten Partition, in einer dedizierten Partition oder in beiden gespeichert. Entscheidend ist, dass diese Hashes (entweder direkt oder indirekt) von der Wurzel des Vertrauens signiert werden. Als Beispiel unterstützt die AVB-Implementierung beide Ansätze. Weitere Informationen finden Sie unter Android Verified Boot .

Rollback-Schutz

Selbst bei einem vollständig sicheren Aktualisierungsprozess kann ein nicht persistenter Android-Kernel-Exploit eine ältere, anfälligere Version von Android manuell installieren, die anfällige Version neu starten und dann mit dieser Android-Version einen dauerhaften Exploit installieren. Von dort aus besitzt der Angreifer das Gerät dauerhaft und kann alles tun, einschließlich des Deaktivierens von Updates.

Der Schutz gegen diese Angriffsklasse wird als Rollback-Schutz bezeichnet . Der Rollback-Schutz wird normalerweise implementiert, indem manipulationssicherer Speicher zum Aufzeichnen der neuesten Version von Android verwendet wird und das Starten von Android verweigert wird, wenn dieser niedriger als die aufgezeichnete Version ist. Versionen werden normalerweise pro Partition nachverfolgt.

Weitere Informationen dazu, wie AVB mit Rollback-Schutzmaßnahmen umgeht, finden Sie in der AVB- README-Datei .

Behandlung von Überprüfungsfehlern

Die Überprüfung kann entweder zum Startzeitpunkt fehlschlagen (z. B. wenn der berechnete Hash auf der boot nicht mit dem erwarteten Hash übereinstimmt) oder zur Laufzeit (z. B. wenn bei dm-verity ein Überprüfungsfehler auf der system auftritt). Wenn die Überprüfung beim Booten fehlschlägt, kann das Gerät nicht booten und der Endbenutzer muss Schritte ausführen, um das Gerät wiederherzustellen.

Wenn die Überprüfung zur Laufzeit fehlschlägt, ist der Ablauf etwas komplizierter. Wenn das Gerät dm-verity verwendet, sollte es im restart konfiguriert werden. Wenn im restart ein Überprüfungsfehler auftritt, wird das Gerät sofort mit einem bestimmten Flag neu gestartet, um den Grund anzugeben. Der Bootloader sollte dieses Flag bemerken und dm- eio umschalten, um den E / A- eio ( eio ) zu verwenden, und in diesem Modus bleiben, bis ein neues Update installiert wurde.

Beim Booten im eio Modus zeigt das Gerät einen eio , der den Benutzer darüber informiert, dass eine Beschädigung festgestellt wurde und das Gerät möglicherweise nicht richtig funktioniert. Der Bildschirm wird angezeigt, bis der Benutzer ihn schließt. Im eio Modus eio der dm- eio -Treiber das Gerät nicht neu, wenn ein Überprüfungsfehler eio Stattdessen wird ein EIO-Fehler zurückgegeben und die Anwendung muss den Fehler behandeln.

Die Absicht ist, dass entweder der System-Updater ausgeführt wird (so dass ein neues Betriebssystem ohne Beschädigungsfehler installiert werden kann) oder der Benutzer so viele Daten wie möglich vom Gerät abrufen kann. Sobald das neue Betriebssystem installiert wurde, bemerkt der Bootloader das neu installierte Betriebssystem und wechselt zurück in den restart .