Blockieren Sie den Lese-/Schreibzugriff einer Anwendung auf eine bestimmte Datei in OS X?

Die Prämisse ist folgende:

Ich habe eine App, die in ihrem Code so eingestellt wurde, dass sie nur auf den OS X-Versionen 10.4 bis 10.9.2 ausgeführt wird. (Wenn ich versuche, es zu installieren, erhalte ich die Meldung „Diese Version von ____ ist für Mac OS X 10.4 bis 10.9.2.“). Ich habe auf 10.9.3 aktualisiert, und der Entwickler muss nur die App aktualisieren, um diese Einschränkung in seinem Tool zu beheben.

Ich stehe tatsächlich in Kontakt mit dem Entwickler, der sagt, er sei „zu beschäftigt“, um gerade an der App zu arbeiten oder ein Update herauszugeben.

Ich habe herausgefunden, dass die App nur liest, /System/Library/CoreServices/SystemVersion.plistum die Betriebssystemversion zu bestimmen, und es ist mir gelungen, die Installationsbeschränkung zu umgehen, indem ich die Datei mithilfe dieser Anleitung vorübergehend bearbeitet habe. Aber nachdem ich die plist-Werte auf 10.9.3 zurückgesetzt und das System neu gestartet hatte, um (hoffentlich) mit der App zu starten, sah ich, dass es sogar prüft, SystemVersion.plistob es auch läuft – nicht nur während der Installation.

Ich mache mir Sorgen, dass, wenn ich SystemVersion.plistauf unbestimmte Zeit bei 10.9.2 bleibe, es andere Teile des Systems wie App Store-Updates und dergleichen ruinieren würde.

Meine Idee ist jetzt, zu versuchen, eine Methode oder ein Tool zu finden, um die App daran zu hindern, überhaupt vollständig lesen zu können SystemVersion.plist- stellen Sie sich das als "Dateisystem" -Version von Little Snitch vor , wenn Sie so wollen - nur eine Möglichkeit, benutzerdefinierte zu erstellen Regeln für bestimmte Prozesse, die den Lese- und/oder Schreibzugriff auf bestimmte Dateien/Ordner im System verbieten.

Vielleicht würde es nur dazu führen, dass die App einen Fehler auslöst und überhaupt nicht läuft (ich könnte dies wahrscheinlich testen, indem ich die plist-Datei vorübergehend für nur 30 Sekunden in den Papierkorb verschiebe, während ich versuche, sie zu installieren/auszuführen) - aber in beiden Fällen denke ich Es ist eine wirklich nützliche Sache, die Sie für leistungsstarke Sicherheitszwecke haben können – genau wie die benutzerdefinierte Blockierung des Netzwerkzugriffs für Apps in Little Snitch .

Gibt es also ein großartiges Drittanbieter-Tool oder sogar ein natives OS X / Xcode-Tool, das dies kann? Irgendwelche Erkenntnisse darüber, was überhaupt passieren müsste, system-/programmierungstechnisch? Durch das Optimieren mit „Sharing & Persimmons“ für eine Datei im Finder kann ich den Benutzerzugriff steuern , aber nicht verarbeiten.

Was ist der Wert in /Applications/APPNAME/Contents/info.plist von <key>LSMinimumSystemVersion</key>? Existiert einer?
Gah - eigentlich ist es eine Prefpane-'App' (wusste sowieso nicht, dass es in der OS X-Menüleiste sitzt) - wird jetzt versuchen, den Speicherort seiner Dateien herauszufinden und/oder ob es überhaupt eine solche Plist hat Datei darin.
Update - In der .prefpane-Datei, sowohl in der Hauptdatei Info.plistals auch Info.plistin der verschachtelten .app-Datei, gibt es keine solche Zeichenfolge. Ursprünglich ohnehin in der Installationsdatei danach gesucht, schien sich der Code zum Überprüfen der Betriebssystemversion im Installationsprogramm in der kompilierten ausführbaren Mac-Datei selbst zu befinden.
Versuchen Sie, Folgendes zur info.plist hinzuzufügen: <key>LSMinimumSystemVersion</key><string>10.6</string> #sehen Sie, ob das hilft. Ich gebe keine Antwort, weil ich nicht sicher bin, ob es funktionieren würde.
Das Problem ist, dass die App auch eine maximale Betriebssystemversion erzwingt . Beschäftigt sich die LSMinimumSystemVersion damit oder nur mit dem Minimum? Tatsächlich gibt die App tatsächlich einen bestimmten Bereich an (und ich vermute, es erzwingt beide Enden, da es sicherlich das obere macht) - ah, und ich erinnere mich tatsächlich, dass ich versucht habe, diese Zeichenfolge mit dem Wert 10.9.3 zur Installer-.app hinzuzufügen Datei (vor einigen Tagen) und es hat nicht funktioniert, also schließe ich vorerst, dass das auch auf der .prefPane nicht funktionieren würde! :/

Antworten (2)

Sie könnten einfach die integrierten Sandboxing-Funktionen von Mac OS X verwenden.

Erstellen Sie ein benutzerdefiniertes Profil, das den Zugriff auf die Datei „SystemVersion.plist“ einschränkt, indem Sie eine Syntax wie die folgende verwenden:

(version 1)
(deny file* (literal "/System/Library/CoreServices/SystemVersion.plist"))
(allow default)

Speichern Sie das zum Beispiel als ~/myprofile.sb und führen Sie dann Ihr Programm wie folgt aus:

sandbox-exec -f ~/myprofile.sb "/Application/My Program.app/Contents/MacOS/My Program"
das klingt brillant, aber mir ist gerade aufgefallen, dass es sich tatsächlich um eine Prefpane-App handelt. Ich frage mich, ob sie immer noch in einer Sandbox ausgeführt werden kann?
Ich denke, Sie könnten einfach "open -a system\ settings" mit sandbox-exec starten, um dieses Ziel zu erreichen.
Danke dafür, ich beginne damit, es auf der Installer-.app als einfachen ersten Test zu versuchen - ich erhalte eine Fehlermeldung, "unbound variable: deny", obwohl :/.
Überprüfen Sie die Dokumentation auf die korrekte Syntax für die gesamte Richtliniendatei - oder beginnen Sie mit einem der Beispiele. Ich habe nur die Besonderheiten für die Beschränkung des Zugriffs auf diese Datei beschrieben.
Ja, ich werde herumgooglen und ich bin mir sicher, dass ich es lösen werde, danke für deine Anleitung und sobald/wenn ich es zum Laufen bekomme, gebe ich +1 und markiere deine Antwort als akzeptiert, danke!!
Also habe ich den Code am Ende zum Laufen gebracht, aber der Installer für meine App gibt die Meldung „Abort trap: 6“ aus. Ich denke, es ist eine Maßnahme, nicht zu laufen, es sei denn, es kann nachweislich überprüfen SystemVersion.plist, wie ich vermutet habe. Aber zumindest skizzieren wir jetzt das grundlegende Verfahren für dieses wirklich coole allgemeine Sicherheitsfeature; Mit anderen Apps hat das wunderbar funktioniert! Trotzdem wäre es gut, Ihre Idee der Sandboxing-Systemeinstellungen selbst auszuprobieren. Aber als ich es versuchte ( sandbox-exec -f ~/myprofile.sb "/Applications/System Preferences.app/Contents/MacOS/System Preferences"), warf es auch die Abbruchfalle 6 - irgendwelche Ideen?
Haben Sie versucht, die Systemeinstellungen nur mit einem zugelassenen Standardprofil auszuführen? (dh ohne den Zugriff auf die Datei SystemVersion.plist zu verweigern) - Wenn das nicht abstürzt, wissen wir, dass es speziell mit SystemVersion.plist zu tun hat. Eine Idee zum Ausprobieren wäre, SystemVersion.plist eine benannte Pipe anstelle einer Datei sein zu lassen. Das andere Ende dieser Pipe würde beim ersten Lesen den ursprünglichen Inhalt von SystemVersion.plist und beim zweiten Mal die geänderte Versionsnummer senden. Ich habe es nicht getestet, daher weiß ich nicht, ob es funktionieren würde, aber es klingt plausibel.
Guter Gedanke - ja, das Ausführen (allow default)funktioniert einfach gut !! Was gut ist (denke ich) - Junge, du bist bis jetzt auf dem ganzen Weg genau richtig! Du bist ein Guru!!! Ich lerne auch so viel, danke. Also weiter zur Named-Pipes-Idee (und wieder sollte ich dies zuerst auf dem Installer .app der App testen) - welche wenigen Befehle würde ich tun, um das einzurichten? Habe ein bisschen gegoogelt und brauche eine Anleitung, wie es geht :). Danke. Ich werde jetzt weiter googeln, fühle mich aber ein bisschen in der Tiefe (das ist wirklich fortgeschrittenes, obskures Zeug) und möchte auf keinen Fall die Dinge vermasseln ... es wird sowieso gut sein, das alles zu dokumentieren.
Sie führen den Befehl "mkfifo /Library/Preferences/SystemVersion.plist" aus, um das Fifo im Dateisystem zu erstellen. Dann führen Sie einen Befehl wie „cat originalversion > /Library/Preferences/SystemVersion.plist“ aus, um die Originalversion der Datei zu senden, und ähnlich wieder mit der geänderten Datei.
Leider ist sandbox-exec in der aktuellen Mojave-Version als veraltet gekennzeichnet. Es scheint, dass Apple nicht in der Lage war, die Sandbox nützlich zu machen, ohne die Sandbox-Programme unbrauchbar zu machen.

Die Hands Off -App hat diese Funktion:

Festplattenzugriff überwachen

Auf Ihrem Computer vorhandene Anwendungen können ohne Ihr Wissen Informationen auf Ihrem Computer lesen, speichern oder löschen. Mit Hands Off! können Sie den Festplattenzugriff von allen Anwendungen überwachen und steuern, um zu verhindern, dass sie vertrauliche Informationen erhalten, Ihre Daten löschen oder Cookies speichern.

Und es enthält zufällig die Netzwerk-Firewall-Funktion von Little Snitch.

https://www.macworld.com/article/3190149/little-flocker-reincarnates-at-f-secure-in-free-beta.html :

Little Flocker, ein Tool, das den Zugriff von Apps und Systemprozessen auf Dateien ohne Erlaubnis einschränkt. Er konnte keine Details nennen, aber kürzlich gab F-Secure, ein führendes Sicherheitsentwicklungs- und Analyseunternehmen, den Kauf von Little Flocker bekannt, das in Xfence umbenannt wurde.

MacOS Catalina hat jetzt diese ähnliche Funktion:

Datenschutz

macOS Catalina prüft mit Ihnen, bevor einer App der Zugriff auf Ihre Daten in Ihren Ordnern „Dokumente“, „Desktop“ und „Downloads“ gestattet wird. iCloud-Laufwerk; die Ordner von Cloud-Speicher-Drittanbietern; Wechselmedien; und externe Volumes. Darüber hinaus werden Sie gefragt, bevor eine App eine Tastenprotokollierung durchführen oder eine Standbild- oder Videoaufzeichnung Ihres Bildschirms aufnehmen kann.