Wie Sie prüfen, was eine Mac-App wirklich darf
App Store, TestFlight und ein notarisiertes DMG garantieren nicht dasselbe. Was jeder Weg prüft, und der eine Befehl, der zeigt, ob eine Mac-App Ihre Daten irgendwohin senden kann.
Sie können den Quellcode einer App nicht lesen, bevor Sie sie installieren. Niemand kann das: Alles im App Store ist eine geschlossene Binärdatei, unsere eingeschlossen. Was Sie tun können, ist prüfen, was die App tun darf, auf Ihrem eigenen Rechner, nach dem Download und bevor Sie sie zum ersten Mal öffnen. Unter macOS ist diese Prüfung echt, und sie dauert etwa eine Minute.
Auf ihr beruht alles, was Klar zum Datenschutz behauptet. Dieser Text ist deshalb zugleich die Anleitung, uns zu überprüfen. Die Befehle am Ende funktionieren bei jeder Mac-App.
Drei Wege auf Ihren Mac
Klar nutzt alle drei, und sie versprechen nicht dasselbe. Die kostenlose App liegt im Mac App Store. Betas laufen über TestFlight, wo Klar for Messages, der iPhone-Filter, zuerst öffnen wird. Klar Plus, die optionale kostenpflichtige Ergänzung, kommt als notarisiertes DMG von dieser Seite.
| Weg | Was Apple tut | Was Apple nicht tut |
|---|---|---|
| Mac App Store | Prüft jede Version und verlangt, dass die App in der Sandbox läuft | Etwas darüber sagen, was die App mit den Daten macht, die sie ohnehin sehen darf |
| TestFlight | Eine leichtere Beta-Prüfung, mit derselben Sandbox-Pflicht | Dauerhaft gelten: Betas aktualisieren sich an Ort und Stelle, und eine neue Version kann neue Rechte deklarieren |
| Notarisiertes DMG | Ein automatischer Malware-Scan, plus eine Signatur, die auf einen für Apple identifizierbaren Entwickler zeigt | Die Sandbox erzwingen. Außerhalb des Stores entscheidet das der Entwickler |
Die Notarisierung wird am häufigsten überschätzt. Sie bedeutet, dass Apple die Version auf bekannte Schadsoftware gescannt hat und weiß, wer sie signiert hat. Sie ist keine Prüfung dessen, was die App tut, und sie zwingt die App in keine Sandbox.
Geschützt werden Sie von der Sandbox
macOS gewährt einer App Zugriff auf eine Ressource nur, wenn sie die passende Berechtigung („Entitlement“) trägt, und diese Berechtigungen stecken in der Codesignatur und sind von ihr versiegelt. Apples Platform-Security-Leitfaden formuliert es direkt: Weil die Berechtigungen Teil der Codesignatur und von ihr versiegelt sind, „the App Sandbox trusts that these are the resources the developer intended to request“. Verändern Sie das Bundle, bricht das Siegel, und die App startet nicht mehr.
Die deklarierten Fähigkeiten sind also die tatsächlichen Fähigkeiten. Ein Entwickler kann nicht „kein Netzwerk“ deklarieren und trotzdem heimlich eine Verbindung öffnen: Dafür braucht es die Netzwerkberechtigung, und die lässt sich nicht verstecken. Lesenswert ist damit die Liste der Berechtigungen, nicht die Datenschutzerklärung.
Die eine Zeile, auf die es ankommt
Sie heißt com.apple.security.network.client. Deklariert eine App sie, kann sie sich überallhin verbinden, und die Berechtigung sagt nichts darüber, wohin. Deklariert sie sie nicht, verweigert macOS jede ausgehende Verbindung, die die App versucht, und kein Code in der App ändert daran etwas. Bei einem Werkzeug, das Ihre Mail liest, ist das der Unterschied zwischen „vertrauen Sie uns“ und „sie kann es nicht“.
Wo ein Filter Ihre Mail liest, ist die Schwesterfrage dazu, was er darf. Die vier Stufen haben wir in einem früheren Beitrag aufgezeichnet.
Was Klar deklariert
| Version | Signatur | Netzwerkberechtigung |
|---|---|---|
| Klar, kostenlos, Mac App Store | Apple Distribution, Sandbox, Hardened Runtime | Keine, weder App noch Mail-Erweiterung |
| Klar über TestFlight | Dieselben Build-Einstellungen wie die Store-Version | Keine, aber nach jedem Beta-Update erneut prüfen |
| Klar Plus, notarisiertes DMG | Developer ID, notarisiert mit angeheftetem Ticket, Sandbox, Hardened Runtime | Ja: Lizenzprüfung und Modell-Updates |
Die kostenlose App bringt genau eine ladbare Komponente mit, KlarMailExtension.appex, und das ist eine Mail-Erweiterung: untätig, bis Sie sie in den Mail-Einstellungen einschalten. Keine Hintergrunddienste, keine Anmeldeobjekte, keine Launch Agents, nichts, was von allein startet. Über die Sandbox hinaus hält sie eine einzige datenschutzrelevante Berechtigung, die Kontakte. Sie sorgt dafür, dass Mail von Menschen aus Ihrem Adressbuch nie gefiltert wird. macOS fragt danach, und gelesen wird auf Ihrem Mac.
Klar Plus ist die Ausnahme, und wir schreiben sie lieber selbst hin, als dass Sie sie finden. Es wird über diese Seite verkauft statt über den App Store, es deklariert die Netzwerkberechtigung für eine Lizenzprüfung und Modell-Downloads, und es steuert Mail per AppleScript, um Nachrichten zu verschieben. Keiner dieser Netzwerkaufrufe trägt Ihre Mail, und Spam-Proben an uns zu senden ist ein eigener Schalter, der aus ist, bis Sie ihn einschalten. Doch sobald eine App die Netzwerkberechtigung hält, ist die Berechtigung kein Beweis mehr. Es bleiben unser Wort und eine ausgehende Firewall wie Little Snitch oder LuLu, wenn Sie selbst mitschauen wollen. Die vollständige Liste dessen, was das Netz berührt, steht auf der Local-First-Seite.
Prüfen Sie es selbst, in einer Minute
Auszuführen, nachdem Sie Klar aus dem App Store installiert haben, und bevor Sie es öffnen. Schalten Sie das Netzwerk ab, wenn Sie auch die Lücke zwischen Download und Nachsehen schließen wollen.
APP="/Applications/Klar.app"
EXT="$APP/Contents/PlugIns/KlarMailExtension.appex"
# 1. Who signed it. Apple re-signs what a developer uploads, so the Team ID is
# the constant, not the authority name.
codesign -dv --verbose=4 "$APP" 2>&1 | grep -Ei 'TeamIdentifier|Authority='
# expect: TeamIdentifier=437587CCNF
# Authority=Apple Mac OS Application Signing (an App Store download)
# Authority=TestFlight Beta Distribution (a TestFlight build)
# 2. What can run: one Mail extension, nothing that starts by itself
find "$APP/Contents" \( -name "*.appex" -o -path "*XPCServices*" \
-o -path "*LoginItems*" -o -path "*LaunchAgents*" \)
# expect: exactly one line, KlarMailExtension.appex
# 3. Can either one reach the network, or drive another app?
codesign -d --entitlements - "$APP" > /tmp/klar-app.ent 2>/dev/null || echo "FAILED to read the app"
codesign -d --entitlements - "$EXT" > /tmp/klar-ext.ent 2>/dev/null || echo "FAILED to read the extension"
grep -icE 'network|apple-events' /tmp/klar-app.ent /tmp/klar-ext.ent
# expect: no FAILED line, and a count of 0 for both filesDie erste Prüfung nennt uns nicht beim Namen, und das gehört so: Apple signiert neu, was ein Entwickler hochlädt. Ein App-Store-Download zeigt deshalb Apple Mac OS Application Signing, eine TestFlight-Version TestFlight Beta Distribution. Das Zertifikat des Entwicklers steckt im Upload, nicht in Ihrer Kopie. Uns identifiziert die Team-ID, und die bleibt 437587CCNF.
Die dritte Prüfung ist die entscheidende, und sie besteht, wenn für beide Dateien eine 0 erscheint. Dass gezählt und nicht auf Stille vertraut wird, ist Absicht: Kann codesign das Bundle nicht lesen, sähe eine leere Ausgabe genauso aus wie ein sauberes Ergebnis. Also gibt der Befehl eine Zahl aus und sagt deutlich Bescheid, wenn er scheitert. Jede Zahl über 0 heißt, die App deklariert Netzwerk- oder Automatisierungsrechte, und Sie sind wieder dabei zu entscheiden, ob Sie glauben, was sie damit angeblich tut. Passt ein Ergebnis nicht, löschen Sie die App: Es ist noch nichts gelaufen.
Ein Vorbehalt für Betas: TestFlight aktualisiert an Ort und Stelle, und eine neue Version ist ein neues Bundle, das neue Rechte deklarieren kann. Wiederholen Sie die Prüfungen nach einem Update, oder schalten Sie automatische TestFlight-Updates ab.
Die Engine ist Open Source
Die Scoring-Engine, also der Teil, der eine Nachricht liest und einen Spam-Wert zurückgibt, steht unter AGPLv3 auf github.com/klar-im/engine, zusammen mit dem Postfix-Milter, der sie serverseitig einbettet. Sie können nachlesen, wie aus einer Nachricht ein Wert wird, und es selbst bauen. Zur Genauigkeit über die Grenze: Die Oberfläche der Mac-App und die trainierten Modellgewichte liegen nicht in diesem Repository. Offen ist der Teil, der klassifiziert.
Was wir nicht behaupten
- Dass Sie vor der Installation irgendetwas prüfen könnten. Das geht nicht, bei keiner geschlossenen Binärdatei, auf keiner Plattform. Die Prüfung liegt nach dem Download und vor dem ersten Öffnen.
- Dass macOS fragt, bevor eine App ins Internet geht. Tut es nicht, es gibt kein Fenster. Die Garantie kommt daraus, dass die Berechtigung fehlt und dass man das nachsehen kann.
- Dass eine fehlende Netzwerkberechtigung bedeutet, es könnten nie Daten abfließen. Sie bedeutet, dass die App keine eigene stille Verbindung öffnen kann. Eine laufende App kann immer noch eine URL an Ihren Browser übergeben, und genau deshalb lohnt die Prüfung offline oder hinter einer ausgehenden Firewall.
- Dass uns ein unabhängiger Dritter geprüft hätte. Das hat niemand. Alles oben Genannte können Sie selbst nachprüfen, und darum steht es hier.
Klar ist kostenlos im Mac App Store. macOS 14 oder neuer, Apple Silicon.