Klar-Blog

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.

WegWas Apple tutWas Apple nicht tut
Mac App StorePrüft jede Version und verlangt, dass die App in der Sandbox läuftEtwas darüber sagen, was die App mit den Daten macht, die sie ohnehin sehen darf
TestFlightEine leichtere Beta-Prüfung, mit derselben Sandbox-PflichtDauerhaft gelten: Betas aktualisieren sich an Ort und Stelle, und eine neue Version kann neue Rechte deklarieren
Notarisiertes DMGEin automatischer Malware-Scan, plus eine Signatur, die auf einen für Apple identifizierbaren Entwickler zeigtDie 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

VersionSignaturNetzwerkberechtigung
Klar, kostenlos, Mac App StoreApple Distribution, Sandbox, Hardened RuntimeKeine, weder App noch Mail-Erweiterung
Klar über TestFlightDieselben Build-Einstellungen wie die Store-VersionKeine, aber nach jedem Beta-Update erneut prüfen
Klar Plus, notarisiertes DMGDeveloper ID, notarisiert mit angeheftetem Ticket, Sandbox, Hardened RuntimeJa: 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 files

Die 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.

Alle Artikel

Die lokale Option

Gratis, privat, in Apple Mail.

Laden im App Store