macos-Passwort wiederherstellen (Hashcat Cracking)

Abgelegt unter Apple, macOS

Die Gründe, um ein macOS-Passwort legal cracken zu müssen, können vielfältig sein: Passwort vergessen (kommt vor!), Aufklärung von Straftaten (kommt ebenfalls vor), Todesfall (kommt früher oder später immer vor).
Ganz unten stehen die Maßnahmen, um das Cracken der nachfolgenden Prozedur definitv zu unterbinden, aber zuerst orientieren wir uns an der macOS-Standard-Installation und diese bietet die notwendigen Angriffsflächen, um das Passwort wiederherzustellen (ohne es zu ändern). Diese Prozedur erfordert physischen Zugang zu dem Rechner.


Der erste Schritt ist, die DS-Datei des entsprechenden User-Accounts zu extraieren. DS (Directory Service) ist ein DB-basierter Dienst, der die lokalen Nutzer innerhalb macOS verwaltet. Diese Datei befindet sich in /private/var/db/dslocal/nodes/default/username.plist (siehe Bild 1).

Der enthaltende Ordner (Default) ist über SIP geschützt, dieses lässt sich über die Recovery Partition ein- und ausschalten. Danach muss der Rechner in den Single-Modus versetzt und die dslocal-User-Datei auf einen externen Datenträger kopiert werden. Aus dieser wird dann der Hash für das Cracking ausgelesen.

/sbin/mount -uw /

cp /private/var/db/dslocal/nodes/default/username.plist /volumes/usbdisk

Hashcat-Installation unter macOS

Hashcat unter macOS funktioniert nur mit bestimmten OpenCL-Libraries, die Mindestvorraussetzungen sind Rechner mit Nvidia- oder Intel-GPUs, Maschinen mit ATI-GPUs fallen hier schonmal raus, das betrifft aber nur die Mac Pros bis Baujahr 2012. Je neuer der Rechner, desto besser.

git clone https://github.com/hashcat/hashcat.git

mkdir -p hashcat/deps

git clone https://github.com/KhronosGroup/OpenCL-Headers.git hashcat/deps/OpenCL

cd hashcat/ && make

./hashcat --version

Hash-File generieren

Hashcat benötigt eine Hash-Datei, um eine Attacke ausführen zu können, diese wird aus der DS-Datei generiert mithilfe von diesem Script. Dieses Script enthält fest-codierte Pfade um den Hash zu extraieren, die DS-Datei muss in /tmp/ liegen.

Danach das Python-Script mit Root-Rechten ausführen:

sudo python hashdump.py

Die Ausgabe sieht ungefähr so aus:

[('bob_sinclair', '$ml$27548$ba6261885e349ecb847854136cf32e9561cd 1af65616f7ce11abb3f04786729c$88ad7849c5b30cce20b9d6ecde9e5be3b673 6646965e0414d45d40510a574f864bafd9c5dc06fdb3cb189b877c3aa1312c2e4 497ea854d3653f5861365d41a4250042a78c93dace17d212ccbb6584e3350efe9 5bd138f27b1705ad97166d2f11fb749b6138139a9e1ebeecb1a96750db53dbf75 434c4b320b500589fa64bf5f8')]

Jetzt muss etwas gebastelt werden, denn nur ein Teil dieses Shadow-Kennworts ist für Hashcat verwertbar, und zwar nur die ersten 128 Zeichen nach dem vierten $-Zeichen (mit TextWrangler lassen sich Zeichenkettenlängen in Echtzeit messen).

Der Nutzername (bob_sinclair) muss ebenfalls raus, die fertige Hash-Datei anhand von dem Beispiel oben sieht dann so aus:

Diese als txt-Datei abspeichern (hash.txt).

Start Hashcat

./hashcat -a 0 -m 7100 /Users/rob/Desktop/hash.txt /Users/rob/Desktop/example.dict -w 4 --potfile-path /tmp/cracked_hash.pot

hashcat (v5.1.0-1512-g784eeb25) starting...

Hashcat braucht den Hash (hash.txt) und eine Wörterbuch-Datei, mit der die Attacke ausgeführt wird. Im Beispiel wird die Ziel-Datei (cracked_hash.pot) in /tmp/ abgelegt. In meinem Fall hat die erfolgreiche Attacke genau 12 Stunden gedauert, anhand einer Wordlist-Datei mit 14 Millionen Einträgen (iMac, Intel Core i5, Intel HD Graphics 6000 1500 MB, macOS 10.13.6).

Prävention

Um diese Variante des Password-Crackings komplett zu unterbinden, genügt es FileVault einzuschalten. Oder ein Open-Firmware-Passwort einzurichten. Denn dann wird eine Passwort-Abfrage vor der Recovery-Partition notwendig und ohne den Zugriff auf die DS-Datei erübrigt sich der Rest.

Linktipp: Hacker interessieren sich nicht für Stopp-Schilder, Netzpolitik.org