Wie verschlüsseln Sie Ihr Gerät mit CyanogenMod 12.1?

Die Einstellung „Telefon verschlüsseln“ von CyanogenMod 12 und 12.1 ist defekt , und das schon seit geraumer Zeit. Gibt es eine Möglichkeit, das Telefon auf andere Weise zu verschlüsseln? Kann CM mit einem verschlüsselten /data-Verzeichnis von der Seite auf ein Telefon geladen werden? Gibt es noch andere Möglichkeiten, Ihre Daten sicher zu verwahren? Das Gerät, an dem ich arbeite, ist ein Verizon LG G3.

Antworten (7)

Es gibt Low(er)-Level-Befehle, die in einer Shell verwendet werden können, um Ihre Benutzerdatenpartition zu verschlüsseln. Haftungsausschluss/Warnung: Die folgenden Anweisungen löschen Ihre Daten , stellen Sie sicher, dass Sie bei Bedarf eine Sicherungskopie erstellen.

Wenn Sie diesen Schritten folgen, sollten Sie in der Lage sein, Ihre Datenpartition zu löschen und anschließend zu verschlüsseln (ähnlich wie bei einem Zurücksetzen auf die Werkseinstellungen):

  1. Starten Sie Ihr Telefon normal (entweder funktioniert die Wiederherstellung nicht mehr oder ich bin auf ein anderes Problem gestoßen).
  2. Stellen Sie sicher, dass der USB-Debugging-Modus (adb) und der Root-Zugriff für ADB aktiviert sind.
  3. Geben Sie eine Root-Shell mit adb rootgefolgt von ein adb shell.
  4. Optional: Überwachen Sie Protokolle, indem Sie sie adb logcatin einer anderen Shell aufrufen.
  5. Geben Sie diesen Befehl ein, geben Sie Ihr Passwort ein und drücken Sie die Eingabetaste. Dadurch wird Ihr Passwort tatsächlich festgelegt. Dieser Befehl liest eine Eingabezeile ( head -1), entfernt den abschließenden Zeilenumbruch von der Eingabetaste ( tr -d '\n') und konvertiert sie in eine hexadezimale Darstellung ( hexdump ...). Wenn es beängstigend aussieht oder wenn Sie sich nicht sicher sind, was dieser Befehl bewirkt, siehe unten.

    vdc cryptfs enablecrypto wipe password $(head -1 | tr -d '\n' | hexdump -ve '1/1 "%.2x"')
    
  6. Wenn alles in Ordnung ist, legt Ihr Gerät Schlüssel fest und startet neu, um die Verschlüsselung abzuschließen.

Der obige vdcBefehl ("Volume Daemon Client"), der mit (Volume Daemon) kommuniziert wird, voldhat einige Unterbefehle wie zum Beispiel cryptfsfür die Verschlüsselung. Der enablecryptoUnterbefehl hat zwei Modi: wipe(vollständig löschen /data) und inplace(angeblich Verschlüsselung anwenden, während Ihr Original /datain den Container kopiert wird).

Dann stehen ab Android 5.0 vier Optionen zur Verfügung, eine davon passwordakzeptiert eine einzelne Hexadezimalsequenz als Schlüssel. Wenn Ihr Passwort also lautet foo, dann ist die hexadezimale Darstellung 666f6f( fis 66in hex, ois 6f, siehe http://www.asciitable.com/ ). Der Befehl dazu lautet:

vdc cryptfs enablecrypto wipe password 666f6f

Dies wurde auf einem Nexus 5 (Codename Hammerhead, ausgeführt mit cm-12.1-20150814) getestet, das über eine separate Partition zum Speichern von Metadaten verfügt. Es ist wichtig , dass für die Benutzerdatenpartition das encryptableFlag gesetzt ist, gefolgt von entweder dem Pfad zu einer Partition oder der speziellen Zeichenfolge footer. Eine (abgekürzte) Zeile aus meiner /fstab.hammerheadDatei:

/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 ...,check, encryptable = /dev/block/platform/msm_sdcc.1/by-name/metadata

Wenn die spezielle Zeichenfolge footer( encryptable=footer) vorhanden ist, werden 16 KiB am Ende der Datenpartition zum Speichern von Verschlüsselungsmetadaten verwendet.

Zum Weiterlesen siehe:


Anhang: Logcat-Auszug von dem Moment an, in dem ich den Verschlüsselungsbefehl ausgeführt habe, bis er beendet und neu gestartet wurde (ohne zusammenhängende Grafikmeldungen am Ende). Beachten Sie, dass dieses Nexus 5 über hardwarebeschleunigte Kryptographie (QSEECom) verfügt.

--------- beginning of main
08-16 12:57:15.459 W/DrmManagerClientImpl(Native)( 2108): DrmManager server died!
08-16 12:57:15.459 I/ServiceManager(  184): service 'drm.drmManager' died
08-16 12:57:15.467 D/Cryptfs (  186): Just asked init to shut down class main
08-16 12:57:15.470 D/Cryptfs (  186): unmounting /mnt/shell/emulated succeeded
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.audio_flinger' died
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.player' died
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.camera' died
...
08-16 12:57:16.695 D/Cryptfs (  186): unmounting /data succeeded
08-16 12:57:16.695 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:16.696 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:16.697 I/Cryptfs (  186): keymaster version is 3
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:16.697 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:18.058 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:18.058 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:18.058 I/Cryptfs (  186): Using scrypt with keymaster for cryptfs KDF
08-16 12:57:18.208 D/BootAnimation( 2683): Use save memory method, maybe small fps in actual.
08-16 12:57:18.208 E/QCOM PowerHAL( 2683): Failed to acquire lock.
08-16 12:57:18.691 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:18.691 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:18.692 I/Cryptfs (  186): Signing safely-padded object
08-16 12:57:18.797 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:18.797 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:20.056 I/Cryptfs (  186): Using scrypt with keymaster for cryptfs KDF
08-16 12:57:20.690 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:20.691 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:20.691 I/Cryptfs (  186): Signing safely-padded object
08-16 12:57:20.796 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:20.796 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:21.429 I/Cryptfs (  186): Enabling support for allow_discards in dmcrypt.
08-16 12:57:21.429 I/Cryptfs (  186): load_crypto_mapping_table: target_type = crypt
08-16 12:57:21.429 I/Cryptfs (  186): load_crypto_mapping_table: real_blk_name = /dev/block/platform/msm_sdcc.1/by-name/userdata, extra_params = 1 allow_discards
08-16 12:57:21.431 I/Cryptfs (  186): Making empty filesystem with command /system/bin/make_ext4fs -a /data -l 13725837312 /dev/block/dm-0
08-16 12:57:21.447 I/make_ext4fs(  186): SELinux: Loaded file_contexts from /file_contexts
08-16 12:57:21.447 I/make_ext4fs(  186): Creating filesystem with parameters:
08-16 12:57:21.447 I/make_ext4fs(  186):     Size: 13725835264
08-16 12:57:21.448 I/make_ext4fs(  186):     Block size: 4096
08-16 12:57:21.448 I/make_ext4fs(  186):     Blocks per group: 32768
08-16 12:57:21.448 I/make_ext4fs(  186):     Inodes per group: 8144
08-16 12:57:21.448 I/make_ext4fs(  186):     Inode size: 256
08-16 12:57:21.448 I/make_ext4fs(  186):     Journal blocks: 32768
08-16 12:57:21.449 I/make_ext4fs(  186):     Label: 
08-16 12:57:21.449 I/make_ext4fs(  186):     Transparent compression: none
08-16 12:57:21.449 I/make_ext4fs(  186):     Blocks: 3351034
08-16 12:57:21.449 I/make_ext4fs(  186):     Block groups: 103
08-16 12:57:21.459 I/make_ext4fs(  186):     Reserved block group size: 823
08-16 12:57:21.465 I/make_ext4fs(  186): Created filesystem with 11/838832 inodes and 93654/3351034 blocks
08-16 12:57:21.465 I/make_ext4fs(  186):     Total files: 0
08-16 12:57:21.465 I/make_ext4fs(  186):     Total bytes: 0
08-16 12:57:42.926 D/Cryptfs (  186): Successfully created filesystem on /dev/block/dm-0
Wow @Lekensteyn, danke, dass du dir die Zeit genommen hast, dies zu schreiben. Ich werde dieses Wochenende einige Zeit damit verbringen müssen, dies einzurichten. Falls es mir schlecht geht, kann ich einfach alles aus TWRP löschen und es erneut versuchen, oder?
Ja, es ist nur die Datenpartition. Ich habe meine absichtlich mehrmals abgewischt, als ich experimentierte.
LPT: Ab 6.0 (Marshmallow) verwendet vdc kein ASCII-codiertes Passwort als Parameter (=Klartext). Es war ziemlich nett, mit der ASCII-Tabelle zu üben, nachdem ich diese Sache herausgefunden hatte – nur wenige Minuten nachdem ich aufgefordert wurde, mein Passwort beim Booten einzugeben. Ich musste mein Passwort wegen meiner Schuld in ASCII eingeben lol

Für mich hat die ursprüngliche Antwort nicht wie erwartet funktioniert. Es sah so aus, als ob die Verschlüsselung erfolgreich war, aber die Benutzeroberfläche kam sehr schnell zurück und die Einstellung „Verschlüsselung“ zeigte nicht, dass die Geräte verschlüsselt waren. Ich habe dann die im Update angegebenen Befehle angewendet , aber es hat immer noch nicht funktioniert. Ich habe dann die Größe der Datenpartition reduziert und sie erfolgreich verschlüsselt. Dh

mount | grep dataum das tatsächliche Blockgerät der Datenpartition zu finden. Nehmen wir an, es ist /dev/block/mmcblk0p26.

umount /datadamit die Ext-Tools funktionieren.

e2fsck -f -p /dev/block/mmcblk0p26um bei der anstehenden Größenänderung nicht in Schwierigkeiten zu geraten.

tune2fs -l /dev/block/mmcblk0p26um den Blockzähler zu erhalten. Nehmen wir an, es ist 3057395.

resize2fs /dev/block/mmcblk0p26 3057375, dh subtrahieren Sie einen ausreichenden Betrag wie 20 von der ursprünglichen Blockanzahl.

e2fsck -f -p /dev/block/mmcblk0p26fand eine falsch platzierte Inode für mich.

Ich musste auch die Partition mounten /system, um an resize2fs. Auf meinem System war diese Binärdatei mit einer 64-Bit-Version von libc verknüpft, aber das von mir verwendete TWRP schien dies nicht zu bieten. Also musste ich den Befehlen das Präfix voranstellen env LD_LIBRARY_PATH=/system/lib64.

Ab CM12.1 2015-10-15 funktioniert die Antwort von Lekensteyn nicht mehr.

Anscheinend wurde die mkfs.f2fs , die zum Erstellen des Dateisystems benötigt wird, von /system/bin/nach verschoben/sbin/

Auch wir haben mit SELINUX zu kämpfen. Dies bedeutet, dass wir mehrere zusätzliche Schritte ausführen müssen:

  1. Adb-Stamm
  2. ADB Shell
  3. erzwingen 0
  4. mount -oremount,rw /system
  5. ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs
  6. vdc cryptfs enablecrypto Wipe-Passwort 666f6f

Ein weiteres Update – CM13 vom 9. Januar 2016 erstellt , mit Nubia Z7 Max, NX505J-Telefon

Dieser Befehl ( ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs) wird nicht mehr benötigt, da die Datei wieder hier lebt. Es ist nicht erforderlich, einen symbolischen Link zu erstellen.

Dieser Befehl muss nicht mehr in HEX sein und wenn Sie hex eingeben, ist Ihr PW hex.
cryptfs enablecrypto wipe password 666f6f- Dies erstellte buchstäblich ein Passwort für mich 666f6fnichtfoo

Ich recherchiere immer noch zu diesem Problem, weil ich die zusätzlichen Blöcke, die für die Metadaten benötigt werden, überwunden habe. Ich muss jetzt über die Tatsache hinwegkommen, dass die GUI und die manuellen Befehle zum Verschlüsseln beide zu einer Verschlüsselung führen, die nur durch einen Boot-Zyklus durchführbar ist. Ich werde berichten, wenn ich eine erfolgreiche Verschlüsselung habe.

Im Moment verschlüssele ich und es funktioniert gut und ich boote das erste Mal und es sagt, dass das Telefon verschlüsselt ist. Mit TWRP kann ich bestätigen, dass /data verschlüsselt ist, aber die HEX- und ASCI-Passwörter, die ich in TWRP versuche, funktionieren beide nicht. Beim nächsten Neustart kann das Android-Betriebssystem CM13 nicht vollständig booten. Es bestätigt, dass ich das richtige Verschlüsselungspasswort habe und dann bekomme ich nur 1 verschlüsselten Start. Nach dem ersten erfolgreichen verschlüsselten Start sperrt es danach die Animationsphase des Boot-Zyklus. Best Practices für Sicherheit empfehlen jetzt AES256-Telefonverschlüsselung.

Wie zuverlässig war das System mit der AES256-Telefonverschlüsselung in CM13? Ich habe hier einen Thread zu dem Ding eröffnet : android.stackexchange.com/q/134981/9897

Mit einem Moto X 2013 mit Cyanogenmod 12.1 konnte ich es auch nicht verschlüsseln. Schließlich gelang es mir mit diesen Schritten:

  1. Root in den Entwicklereinstellungen auf dem Telefon aktivieren und eine Shell öffnen (Terminal-App, kann auch in den Entwicklereinstellungen aktiviert werden)
  2. Geben Sie suein und bestätigen Sie den Root-Zugriff
  3. Eintretensetenforce 0
  4. Öffnen Sie nun Einstellungen , gehen Sie zu Sicherheit und wählen Sie Telefon verschlüsseln . Android startet dann neu und beginnt mit der Verschlüsselung des Telefons.

Ich bin zu dieser Lösung gekommen, indem ich die Antwort von Art und diesen Forumsthread kombiniert habe .

Hat bei mir nicht funktioniert. Übrigens, können Sie den SELinux-Status danach wieder auf 1 setzen?

Nach 6 Stunden mentalem Schmerz und Schweiß bin ich vielleicht auf eine Lösung gestoßen, die für mich funktioniert hat. Und es war auch ein Unfall. Ich habe dies für das Samsung S4 Mini mit CyanogenMod 13.0 und Android 6.0.1 gemacht. Wichtiger Schlüsselfaktor hierbei ist, dass ich es von einem sauberen Telefon aus gestartet habe (frische Firmware und nicht gerootet), denn wenn das Telefon zuvor gerootet war, wollte das Telefon überhaupt nicht funktionieren.

Ich habe die Lösung des Problems von Firelord und Lekensteyn verwendet, aber ich habe es geschafft, eine Zeile aus den Befehlen zu vergessen.

So habe ich es gemacht:

  1. Ich habe das Android-Debugging und den Root-Zugriff auf ADB nur in den Entwickleroptionen aktiviert .

  2. In der ADB-Eingabeaufforderung habe ich den Befehl adb rootand verwendet adb shell. Danach habe ich eine weitere ADB-Eingabeaufforderung geöffnet und den adb logcatBefehl verwendet.

  3. In der ersten ADB-Shell bin ich mit setenforce 0und danach weitergegangen vdc cryptfs enablecrypto wipe password YOUR-PASSWORD.

WICHTIGER HINWEIS: Der Passwortbefehl kann von der von Ihnen verwendeten Android-Version abweichen. Wenn Sie Android 5.X verwenden , müssen Sie das Hexadezimalsystem verwenden (In der Chr-Zeile steht das Symbol in Ihrem Passwort, der Hexadezimalwert steht in der Hx-Zeile). Wenn Sie Android 6.X verwenden , ist IHR PASSWORT das Passwort, das Sie dort eingegeben haben.

Wie Sie bemerken, habe ich vergessen, den mount -oremount,rw /systemBefehl zu verwenden. Danach wird der Bildschirm schwarz. Als ich gesehen habe, dass die ADB-Shell mit dem Log gestoppt und beendet wurde, habe ich das Telefon neu gestartet. Aber wie bei allen ist das Problem, dass CyanogenMod nicht geladen wird. Und ich habe es ganz einfach geschafft, es zu beheben:

  1. Halten Sie Vol Up & Home & Power gedrückt, bis das TWRP hochfährt. Sie werden nach Ihrem Verschlüsselungspasswort gefragt.
  2. Führen Sie den CyanogenMod-Installationsteil mit den zusätzlichen Google Apps durch (der zweite Teil der Anleitung).
  3. Nachdem dies erledigt ist, starten Sie das Gerät neu. Wenn es hochfährt, dauert es eine Weile. Zuerst wird das Telefon gestartet, dann wird es nach dem Verschlüsselungspasswort gefragt und dann dauert es eine Weile, bis es hochfährt.

Los geht's, es sollte funktionieren. Wenn das Telefon eingerichtet wird, lassen Sie es zunächst eine Minute lang in Ruhe. Es kann einen kleinen Absturz für den Setup-Assistenten geben, wenn Sie ihn zu schnell überstürzen, aber er wird automatisch neu gestartet, wenn er abstürzt.

In meinem sehr geringen Wissen darüber, wie CyanogenMod und die Android-Verschlüsselung funktionieren, denke ich, dass es während des Formatierens einige wichtige Cyanogen- oder Android-Dateien löscht, was es am Booten hindert.

Auf meinem Handy (SGS5; CM13, TWRP 3.0.2-2) funktionierte die Verschlüsselung nicht - ich bekam immer einen schwarzen Bildschirm.

Ich wollte keine Shell-Befehle verwenden, also habe ich einen anderen Weg gefunden:

Ich hatte SuperSU installiert, habe es in der App deinstalliert und dann den SU-Remover geflasht .

Danach konnte ich die Verschlüsselung aus dem Menü verwenden.

Warnung:

  • Die Verschlüsselung hat alle meine Daten und Apps (einschließlich Dateien auf der internen SD) gelöscht. Erstellen Sie also zuerst eine Sicherungskopie !
  • Nach der Verschlüsselung hatte ich nur noch 2 GB internen Speicherplatz übrig (normalerweise 11 GB) - ich musste eine vollständige Löschung durchführen (auch Cyanogenmod selbst entfernen), Cyanogenmod neu installieren und einen weiteren Verschlüsselungsversuch durchführen, um meinen Speicherplatz zurückzubekommen.
  • Auch Root muss wieder aktiviert werden, ich habe dafür BETA-SuperSU-v2.68-20160228150503 verwendet (mit twrp flashen).