Headless Mac mini FileVault Remote entsperren

mausfang

Aktives Mitglied
Thread Starter
Dabei seit
04.08.2016
Beiträge
2.948
Reaktionspunkte
1.282
Hallo zusammen,

folgende Fragestellung zum Thema Fernverwaltung eines Macs (High Sierra) mit verschlüsselter Festplatte:
  • Ein Mac mini steht in einem Rechenzentrum.
  • Das Gerät ist nicht mit Monitor, Tastatur und Maus verbunden.
  • Die Festplatte ist mit FileVault verschlüsselt.
Der Rechner muss von Zeit zu Zeit aus der Ferne neu gestartet werden.
  • Mir ist in der Zwischenzeit bekannt, dass man über das Terminal einen Neustart machen kann ohne, dass man beim Reboot das FileVault-Kennwort eingeben muss.
    Code:
    sudo fdesetup authrestart
Das weiterhin bestehende Problem:
  • Wenn der Rechner durch Stromausfall oder Neustart ohne den o.g. Befehl in der FileFault-Passwort-Abfrage hängt ...
  • Kann man einen Mac so konfigurieren, dass man Remote-Zugriff auf den Mac hat, auch wenn das FileVault-Kennwort noch nicht abgefragt wurde?
  • Gibt es eine Möglichkeit auf quasi Preboot-Ebene auf den Mac zuzugreifen. Eine Art KVM im EFI.
Vielen Dank für eure Hilfe.
 
Mit Bordmitteln ist mir nichts bekannt, was das Problem lösen könnte und KVM-Lösungen für IP kosten halt selbst als Single-Host-Variante gleich richtig Geld. Vermutlich ist da eine ordentliche USV mit genug Überbrückungsdauer günstiger, um das Thema mit dem Stromausfall einfach zu vermeiden...
 
Hallo @mausfang,

ich hatte mal vor Jahren das gleiche Problem…

Es gibt eine „unschöne“ Hintertür:

Schaue Dir den optionalen Parameter „inputplist“ an.
Darin kannst Du das Passwort und den Benutzer speichern, der den FileVault-Schutz beim Starten entsperrt.

Unschön deshalb, weil das Passwort im Klartext in einer Datei liegt.
Aber das war damals Apples offizieller Weg.
Das Gute ist, dass Du die Plist sofort nach Absetzen des Befehls entfernen kannst.
Somit existiert sie nur eine Sekunde.

Vielleicht gibt es jetzt ein Hash-Wurstsalat, der nur für den nächsten Start gültig ist.

Im Prinzip kannst Du den Befehl direkt nach dem Start ausführen und somit ist der nächste Neustart immer gewährleistet.

- Rechner startet
- Dialog dem Administrator präsentieren
- Passwort für den nächsten Neustart setzen
- Validierung zum Beispiel über eigenen Hash, so dass das Passwort nicht in Klartext im Skript steht
- temporäre Plist erzeugen
- Befehl absetzen
- Plist löschen

Alles aus dem Kopf, alle Hinweise unverbindlich… :p

Viele Grüße
 
Im Prinzip kannst Du den Befehl direkt nach dem Start ausführen und somit ist der nächste Neustart immer gewährleistet.
Prima!

Nur heble ich so FileVault ja im Prinzip komplett aus. Gut, den Login muss man noch überwinden. Bei physischem Zugriff aber kein großes Problem.

Auf jeden Fall mal danke für den Tipp.
 
Prima!

Nur heble ich so FileVault ja im Prinzip komplett aus. Gut, den Login muss man noch überwinden. Bei physischem Zugriff aber kein großes Problem.

Auf jeden Fall mal danke für den Tipp.

Die Gefahr sehe ich im Rechenzentrum nicht als hoch…

Zudem hätte der Angreifer nur eine einzige Chance.
D.h. wenn der Login präsentiert wird, dann muss er sich einloggen.
Jeder weitere Neustart etc. ist dann sofort FileVault vorgeschaltet.

Auch Target-Modus etc. gehen nicht…

Es ist eine Schwachstelle, keine Frage, aber in der Praxis wird die niemand umgehen können.
Schließlich hat man nur einen einzigen Versuch.

Viele Grüße
 
Habe Dir mal was rausgesucht, siehe unten.

Viele Grüße

#

Code:
--

set dialogMessage to "Passwort:"

set dialogTitle to "FileVault-Schutz für Neustart aufheben"

set dialogButtonCancel to "Abbrechen"

set dialogButtonRestart to "Neustart"

--

tell application "System Events"
	
	--
	
	set dialogButtons to {dialogButtonCancel, dialogButtonRestart}
	
	--
	
	set dialogResult to display dialog dialogMessage default answer "" with title dialogTitle buttons dialogButtons default button 2 with text and hidden answer
	
	--
	
	set passphrase to text returned of dialogResult
	
	if (length of passphrase < 1) then
		
		return false
		
	end if
	
	--
	
end tell

--

-- display alert "Passwort" message passphrase

--

set plistFilePath to my getPlistFilePath()

if (length of plistFilePath < 1) then
	
	return false
	
end if

--

-- display alert "plist path" message plistFilePath

--

tell application "System Events"
	
	--
	
	set plistDictionary to make new property list item with properties {kind:record}
	
	--
	
	set plistFile to make new property list file with properties {contents:plistDictionary, name:plistFilePath}
	
	--
	
	tell property list items of plistFile
		
		--
		
		make new property list item at end with properties {kind:string, name:"Password", value:passphrase}
		
		--
		
	end tell
	
	--
	
end tell

--

set needRestart to false

--

try
	
	--
	
	do shell script "fdesetup authrestart -delayminutes -1 -inputplist < " & quoted form of plistFilePath with administrator privileges
	
	--
	
	my removePlistFile()
	
	--
	
	set needRestart to true
	
	--
	
on error errorText number errorNumber
	
	--
	
	my removePlistFile()
	
	--
	
	display alert errorNumber as warning message errorText
	
	--
	
end try

--

if (needRestart is true) then
	
	tell application "Finder" to restart
	
end if

--

tell me to quit

--

on getPlistFilePath()
	
	--
	
	set folderPath to (POSIX path of (path to trash folder))
	
	if (length of folderPath < 1) then
		
		return ""
		
	end if
	
	--
	
	set filePath to folderPath & ".FileVault.plist"
	
	if (length of filePath < 1) then
		
		return ""
		
	end if
	
	--
	
	return filePath
	
	--
	
end getPlistFilePath

--

on removePlistFile()
	
	--
	
	set filePath to my getPlistFilePath()
	
	if (length of filePath < 1) then
		
		return false
		
	end if
	
	--
	
	do shell script "rm " & quoted form of filePath
	
	--
	
	return true
	
	--
	
end removePlistFile

--
 
Zurück
Oben Unten