Unsichtbare Dateien, die OS X-Schlüsselbund zugeordnet sind

8

Es scheint, dass eine Schlüsselbund Datei (mit der Erweiterung .keychain ) normalerweise eine unsichtbare Datei hat damit verbunden, im selben Verzeichnis befindet.

Diese unsichtbare Datei hat immer diese Eigenschaften:

  • Es ist leer (null Bytes).
  • Seine Berechtigungen sind 0444 (schreibgeschützt für alle Benutzer).
  • Der Name besteht aus .fl gefolgt von 8 Hex-Zeichen. Zum Beispiel:

    %Vor%

Die unsichtbare Datei kann gelöscht werden, aber wenn der Inhalt des Schlüsselbunds als nächstes geändert wird, wird die unsichtbare Datei mit dem gleichen Namen neu erstellt.

Hier sind einige Schritte, die Sie mit dem Keychain Access -Dienstprogramm demonstrieren können:

  1. Erstellen Sie einen neuen Schlüsselbund, indem Sie Datei & gt; Neues Schlüsselbund und Auswählen eines Verzeichnisses, in dem es erstellt werden soll. Eine unsichtbare Datei wird im selben Verzeichnis wie der neue Schlüsselbund erstellt.
  2. Löschen Sie die unsichtbare Datei (mit dem Finder oder Terminal).
  3. Ändern Sie den Inhalt des Schlüsselbunds. Fügen Sie dem Schlüsselbund beispielsweise eine sichere Notiz hinzu, indem Sie Datei & gt; Neues Sicherheitsmerkmal . Die unsichtbare Datei wird mit demselben Namen neu erstellt.
  4. Löschen Sie den Schlüsselbund, indem Sie Datei & gt; Löschen Schlüsselbund & gt; Löschen Referenzen & amp; Dateien . Die unsichtbare Datei wird ebenfalls gelöscht.

Ich habe überprüft, dass dies in OS X 10.8 und 10.9 .

Aktualisieren

Dieselben unsichtbaren Dateien werden erstellt, wenn Schlüsselbunde mit Apples Werkzeug security im Terminal manipuliert werden:

  1. Erstellen Sie einen neuen Schlüsselbund. Eine unsichtbare Datei wird ebenfalls erstellt.

    %Vor%
  2. Löschen Sie die unsichtbare Datei.

    %Vor%
  3. Ändern Sie den Inhalt des Schlüsselbundes (z. B. durch Hinzufügen eines Internet-Passworts). Die unsichtbare Datei wird mit demselben Namen neu erstellt.

    %Vor%
  4. Löschen Sie den Schlüsselbund. Die unsichtbare Datei wird ebenfalls gelöscht.

    %Vor%

Fragen

  1. Warum werden diese unsichtbaren Dateien erstellt? Was ist ihr Zweck?
  2. Was bedeutet fl im Dateinamen?
  3. Was sind die 8 Hex-Zeichen im Dateinamen? Eine Art eindeutige ID oder Hash, die den Schlüsselbund identifiziert?
  4. Gibt es eine Möglichkeit, zu verhindern, dass diese Dateien erstellt werden, wenn Schlüsselbunde erstellt oder geändert werden?
TachyonVortex 18.06.2014, 14:57
quelle

1 Antwort

7

Nach vielen Nachforschungen habe ich die meisten meiner Fragen beantwortet:

  1. Die unsichtbare Datei implementiert eine Schreibsperre für die Schlüsselbunddatenbank.
  2. .fl ist das Dateinamenspräfix für Sperrdateien, die von der Klasse AtomicFile im Sicherheitsframework erstellt wurden.
  3. Die 8 Hex-Zeichen im Dateinamen sind der Anfang des SHA-1-Hashs des Dateinamens des Schlüsselbunds. Wenn die Schlüsselbunddatei beispielsweise Test.keychain heißt, beginnt der SHA-1-Hash seines Dateinamens mit 1BCE4B9A... und die Sperrdatei heißt daher .fl1BCE4B9A .
  4. Ich habe keine Möglichkeit gefunden, zu verhindern, dass die Sperrdatei erstellt wird, wenn ein Schlüsselbund erstellt oder geändert wird. Ich denke, es ist wahrscheinlich unmöglich, aber Ich wäre sehr interessiert, wenn jemand einen Weg finden könnte, es zu tun .

Hier sind die Details meiner Untersuchung:

Schlüsselbund ist gesperrt / entsperrt

Ich habe festgestellt, dass die unsichtbare Datei nicht von gesperrt / unlocked Status. Wenn die unsichtbare Datei gelöscht wurde, macht das Sperren / Entsperren des Schlüsselbunds die nicht sichtbare Datei nicht neu.

Systemaufrufe

Ich habe einige Nachforschungen angestellt, indem ich die File Activity-Vorlage in Apples Instruments Werkzeug.

Diese Systemaufrufe sind verantwortlich für die Manipulation der unsichtbaren Datei:

  • Erstellen der unsichtbaren Datei, wenn ein neuer Schlüsselbund erstellt wird:
  • Erneutes Erstellen der unsichtbaren Datei, wenn der Inhalt eines Schlüsselbunds geändert wird:
  • Löschen der unsichtbaren Datei, wenn ein Schlüsselbund gelöscht wird:

C ++ Dateien

Dies sind die relevanten Dateien und Klassen (Quellcode aus Apple Open Source für OS X 10.9.2 ):

  • AtomicFile.cpp
    • Security::AtomicFile
    • Security::AtomicLockedFile
    • Security::AtomicTempFile
    • Security::LocalFileLocker
  • AppleDatabase.cpp
    • Security::AppleDatabase
    • Security::DbModifier

Kommentare im Quelltext

Die Kommentare in diesen Dateien haben einige Hinweise geliefert:

  • %Code%
    • "Berechne den Namen der Sperrdatei für diese Datei"
  • %Code%
    • "Sperren Sie die Datei zum Schreiben und geben Sie eine neu erstellte AtomicTempFile zurück."
    • "Nachdem wir die Sperre und die neue db-Datei erstellt haben, erstellen Sie ein tempfile-Objekt."
  • %Code%
    • "Wenn die Sperrdatei nicht existiert, erstellen Sie sie"
    • "versuchen Sie, exklusiven Zugriff auf die Datei"
    • zu erhalten
    • "Überprüfen Sie, ob die Datei, auf die wir Zugriff haben, noch existiert. Wenn nicht, hat eine andere Datei unsere Dateisperre wegen einer Hash-Kollision geteilt und unsere Sperre weggeworfen - oder ein Benutzer hat die Sperrdatei selbst weggeblasen . "
  • %Code%
    • "Jetzt halten wir die Schreibsperre"
  • %Code%
    • "Sperren Sie die Datenbankdatei zum Schreiben und geben Sie eine neu erstellte AtomicTempFile zurück."
  • %Code%
    • "Erwerben Sie die Schreibsperre und entfernen Sie die Datei."
    • "Verknüpfung unserer Sperrdatei aufheben"

Generierung des Namens der Sperrdatei

Ich habe diesen Code im AtomicFile::AtomicFile() -Konstruktor gefunden:

%Vor%

Dabei steht AtomicFile::create() für die ersten 4 Byte des SHA-1 Hash des Dateinamens des Schlüsselbuchs.

Hinweis: Wenn nur 4 Bytes (32 Bits) des Hashs verwendet werden, gibt es ein vernünftige Chance einer Hash-Kollision , die im Kommentar in LocalFileLocker::lock() erwähnt wird.

Operation der Sperre

Der DbModifier::modifyDatabase() Systemaufruf ist verwendet, um die Sperre für die Sperrdatei zu manipulieren.

Hier ist der Aufrufbaum, wenn die Datenbank des Schlüsselbunds zum Schreiben gesperrt ist:

%Vor%

und wenn es nach dem Schreiben entsperrt wird:

%Vor%     
TachyonVortex 28.06.2014 20:25
quelle