Prozessidentitätsprüfung
Um die Identität eines Prozesses zu überprüfen, verwenden wir einen kompakten Datensatz, mit dem sich ein Prozess sicher von jedem anderen unterscheiden lässt. Im einfachsten Fall kann das eine kryptografische Prüfsumme über den Programmcode sein, oder aber auch eine Code-Signatur.
Der Begriff „Prozess“ bezeichnet hier Programme wie Safari, aber auch ausführbare Dateien wie /sbin/ping
.
Was ist der Zweck der Identitätsprüfung?
Nehmen wir an, du hast ein Programm, das viele Internetverbindungen erfordert, z.B. einen Webbrowser, einen Bittorrent-Client oder Ähnliches. Du hast dafür eine Regel erstellt, die „jede Verbindung“ erlaubt. Nehmen wir weiters an, ein anderes (bösartiges) Programm hat Informationen auf deinem Computer gesammelt, z.B. Passwörter, Kontaktinformationen oder was auch immer. Wie kann das bösartige Programm diese Informationen an seinen Entwickler zurücksenden? Es kann überprüfen, ob Little Snitch installiert ist, aber es kann keine Regeln hinzufügen, ändern oder lesen. Anstatt selbst Regeln zu ändern, kann es aber versuchen, die Regeln eines anderen Programms zu übernehmen. Es würde also z.B. nach deinem Web Browser suchen und sich selbst an dessen Stelle im Dateisystem kopieren. Da Little Snitch die Programme an ihrem Dateisystempfad erkennt, würde es die Regeln, die für den Web-Browser gedacht waren, auf die Schadsoftware anwenden.
Um diese Übernahme von Regeln zu verhindern, speichert Little Snitch ein Code Requirement für jedes ihm bekanntes Programm, und überprüft dessen Identität. Das Code Requirement besteht aus einem kompakten Datensatz, der das Programm sicher identifiziert. Wenn ein laufender Prozess die Anforderungen des Code Requirements nicht erfüllt, wird eine Warnung angezeigt und die Regeln werden nicht angewandt.
Wie funktioniert die Identitätsprüfung?
Die Identitätsprüfung soll das ursprüngliche Programm und idealerweise auch alle zukünftigen legitimen Upgrades davon akzeptieren. Letzteres ist nur möglich, wenn die Identitätsprüfung auf der Code-Signatur basiert.
Programme ohne gültige Code-Signatur
Wenn ein Programm keine Code-Signatur hat oder wenn sie kryptografisch ungültig ist (weil z.B. der Code oder die Signatur manipuliert wurde), kann die Identität nicht anhand der Code-Signatur geprüft werden. In diesem Fall speichert Little Snitch eine kryptografische Prüfsumme (SHA256) über den Code des Programms. Jedes Mal, wenn das Programm gestartet wird, berechnet Little Snitch diese Prüfsumme erneut und vergleicht sie mit dem gespeicherten Wert.
Von Apple signierte Programme
Apple versieht alle Komponenten des Betriebssystems mit einer Code-Signatur. Diese Signatur enthält einen Identifikator des Programms. Identitätsprüfungen von Apple-Programmen erfordern,
- dass das Programm von Apple signiert ist und
- dass der Identifikator gleich geblieben ist.
Durch die Prüfung des Identifikators kann erkannt werden, wenn ein von Apple signiertes Programm durch ein anderes von Apple signiertes Programm mit anderen Funktionalitäten ersetzt wird. Manche Komponenten des Systems, etwa Script-Interpreter wie z.B. Python, führen beliebige Befehle durch, die auch von anderen, möglicherweise böswilligen Programmen stammen können. Die Prüfung des Identifikators verhindert, dass solche Programme die Regeln anderer Systemkomponenten übernehmen können.
Von registrierten Entwicklern signierte Programme
Apple stellt Zertifikate für registrierte Entwickler aus. Dabei wird sichergestellt, dass das Zertifikat den Namen des Entwicklers und dessen Team-Identifikator enthält, womit der Entwickler eindeutig identifiziert ist. Zur Identitätsprüfung dieser Art von Programmen fordert Little Snitch,
- dass das Programm von einem registrierten Entwickler oder von Apple signiert ist,
- dass der Team-Identifikator gleich geblieben ist und
- dass der Identifikator des Programms gleich geblieben ist (siehe „von Apple signierte Programme“ weiter oben).
Um verschiedene Versionen eines Programms als identisch anzuerkennen, verlangt Little Snitch also, dass sowohl Team- als auch Programm-Identifikator gleich bleiben. Allerdings kann die Signatur sowohl von Apple, als auch von einem Entwickler stammen. Die Folge davon ist, dass ein Programm von der Entwicklerwebseite durch das selbe Programm aus dem App Store ersetzt werden kann, ohne dass die Identitätsprüfung fehlschlägt.
Von Apple für den App Store signierte Programme
Programme im App Store werden von Apple signiert, nicht vom jeweiligen Entwickler, weil Apple vor dem Download noch Anpassungen vornimmt. Trotz der Apple-Signatur können diese Programme leicht von Systemkomponenten unterschieden werden, weil eine andere Art von Zertifikat verwendet wird, um die Code-Signatur zu erstellen. Von dieser Art von Programmen fordert Little Snitch zur Identitätsprüfung,
- dass das Programm von einem registrierten Entwickler oder von Apple signiert ist,
- dass der Team-Identifikator gleich geblieben ist und
- dass der Identifikator des Programs gleich geblieben ist (siehe „von Apple signierte Programme“ weiter oben).
Das Erlauben einer Entwickler-Signatur ermöglicht es, ein Programm aus dem App Store durch seine Entwickler-Variante auszutauschen, ohne dass die Identitätsprüfung fehl schlägt.
Programme mit Ad-hoc-Signatur
Die sogenannte Ad-hoc-Signatur ist nicht wirklich eine Code-Signatur. Es gibt kein Zertifikat und keine kryptografische Signatur, aber es wird eine kryptografische Prüfsumme über den Code gespeichert. Ad-hoc-Signaturen nutzen im Betriebssystem-Kernel die selbe Infrastruktur wie echte Code-Signaturen. Daher können sie Code-Änderungen im Speicher unmittelbar erkennen. SHA256-Summen, die Little Snitch für unsignierten Code anfertigt, sind ähnlich, aber die Prüfsumme wird nur einmal beim Start des Programms überprüft. Für diese Art der Prüfung speichert Little Snitch den Code Directory Hash des Programms. Das ist eine Art von Prüfsumme über den ausführbaren Code.
Mit einem Drittanbieter-Zertifikat signierte Programme
Wenn Apple ein Zertifikat zur Code-Signatur ausstellt, dann garantiert Apple (bis zu einem gewissen Grad), dass die im Zertifikat gespeicherte Information korrekt ist. Das betrifft insbesondere den Namen und Team-Identifikator des Entwicklers. Wenn das Zertifikat aber nicht von Apple ausgestellt wurde, dann kann Little Snitch der darin enthaltenen Information nicht vertrauen. Daher fordert es zur Identitätsprüfung,
- dass das Programm mit dem selben privaten kryptografischen Schlüssel signiert wurde und
- dass der Identifikator des Programms, so einer verfügbar ist, gleich geblieben ist (siehe „von Apple signierte Programme“).
Der private Schlüssel ist ein Geheimnis, das nur dem Aussteller der Signatur bekannt ist. Durch die Prüfung des Schlüssels kann garantiert werden, dass das Programm vom selben Entwickler stammt und dadurch können auch Upgrades akzeptiert werden. Zumindest so lange, bis der Entwickler einen neuen Schlüssel generiert.
Diese Art der Prüfung wird auch auf selbstsignierte Zertifikate angewandt.
War dieser Eintrag hilfreich? Hinterlass uns Feedback.
© 2016-2024 Objective Development Software GmbH