¿Bloquear el acceso de lectura/escritura de una aplicación a un archivo específico en OS X?

La premisa es esta:

Tengo una aplicación que se configuró en su código para que solo se ejecute en las versiones 10.4 a 10.9.2 de OS X. (Cuando intento instalarlo, aparece el mensaje "Esta versión de ____ es para Mac OS X 10.4 a 10.9.2"). Actualicé a 10.9.3, y el desarrollador solo necesita actualizar la aplicación para corregir esta restricción en su herramienta.

De hecho, estoy en contacto con el desarrollador, quien dice que está "demasiado ocupado" para trabajar en la aplicación o publicar una actualización en este momento.

Descubrí que la aplicación solo está leyendo /System/Library/CoreServices/SystemVersion.plistpara determinar la versión del sistema operativo, y logré eludir la restricción del instalador editando temporalmente el archivo usando esta guía. Pero después de revertir los valores de plist a 10.9.3 y reiniciar el sistema para comenzar (con suerte) usando la aplicación, vi que incluso verifica SystemVersion.plistque se ejecute también, no solo durante la instalación.

Me preocupa que si me mantengo SystemVersion.plisten 10.9.2 indefinidamente arruinaría otras partes del sistema, como las actualizaciones de la App Store y similares.

Así que mi idea ahora es tratar de encontrar algún método o herramienta, para bloquear la aplicación para que no pueda leer SystemVersion.plist por completo. Piense en ello como una versión de 'sistema de archivos' de Little Snitch , si lo desea, solo una forma de crear personalizado. reglas, para procesos específicos, que impiden el acceso de lectura y/o escritura, a archivos/carpetas específicos en el sistema.

Tal vez solo haría que la aplicación arrojara un error y no se ejecutara en absoluto (probablemente podría probar esto moviendo temporalmente el archivo plist a la Papelera durante solo 30 segundos mientras intento instalarlo/ejecutarlo), pero en cualquier caso, creo es algo realmente útil para poder tener, para fines de seguridad potentes, al igual que el acceso a la red de bloqueo personalizado para aplicaciones en Little Snitch .

Entonces, ¿hay alguna herramienta de terceros increíble, o incluso una herramienta OS X / Xcode nativa, que pueda hacer esto? ¿Alguna idea de lo que debería suceder de todos modos, en cuanto al sistema/programación? Ajustar con 'Compartir y Persimmons' para un archivo en Finder me permite controlar el acceso del usuario , pero no el proceso.

¿Cuál es el valor en /Applications/APPNAME/Contents/info.plist de <key>LSMinimumSystemVersion</key>? ¿Existe uno?
Gah, en realidad, es una 'aplicación' de prefpane (de todos modos, no me di cuenta de que era como se encuentra en la barra de menú de os x), intentará averiguar ahora la ubicación de sus archivos y/o si tiene tal plist archivo en su interior.
Actualización: dentro del archivo .prefpane, tanto su archivo principal Info.plistcomo el Info.plistdentro del archivo .app anidado, no tienen esa cadena. De todos modos, originalmente lo verificó en el archivo del instalador, en el instalador, el código para verificar la versión del sistema operativo parecía estar dentro del archivo ejecutable compilado de Mac.
intente agregar lo siguiente a info.plist: <key>LSMinimumSystemVersion</key><string>10.6</string> #vea si eso ayuda. No estoy proporcionando una respuesta porque no estoy seguro de si funcionaría.
El problema es que la aplicación también impone una versión máxima del sistema operativo. ¿El LSMinimumSystemVersion trata con eso, o solo con el mínimo? De hecho, la aplicación en realidad establece un rango específico (y supongo que hace cumplir ambos extremos, ya que ciertamente hace el superior) - ah y en realidad creo recordar haber intentado agregar esta cadena con el valor 10.9.3 al instalador .app file (hace algunos días) y no funcionó, por lo que concluiré por ahora, ¡eso tampoco funcionaría en el .prefPane! :/

Respuestas (2)

Simplemente puede usar las funciones integradas de sandboxing de Mac OS X.

Cree un perfil personalizado que limite el acceso al archivo SystemVersion.plist, usando una sintaxis como esta:

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

Guárdelo como, por ejemplo, ~/myprofile.sb y luego ejecute su programa de esta manera:

sandbox-exec -f ~/myprofile.sb "/Application/My Program.app/Contents/MacOS/My Program"
Eso suena brillante, pero me acabo de dar cuenta de que en realidad es una 'aplicación' de prefpane. Me pregunto si todavía se puede aislar.
Supongo que podría simplemente comenzar a "abrir -un sistema \ preferencias" usando sandbox-exec para lograr ese objetivo.
Gracias por eso, comenzaré probándolo en el instalador .app como una primera prueba simple: recibo un error, 'variable no vinculada: denegar', aunque :/.
Consulte la documentación para obtener la sintaxis correcta para todo el archivo de política, o comience con uno de los ejemplos. Solo estaba describiendo los detalles para limitar el acceso a ese archivo.
Sí, buscaré en Google y estoy seguro de que lo resolveré, gracias por su orientación y una vez que funcione, haré +1 y marcaré su respuesta como aceptada, ¡gracias!
Así que al final conseguí que el código funcionara, pero el instalador de mi aplicación da un mensaje de 'Cancelar trampa: 6'. Considero que es una medida para no ejecutar a menos que pueda verificarse de manera verificable SystemVersion.plist, como sospeché que podría ser. Pero al menos ahora describimos el procedimiento básico para esta característica de seguridad general realmente genial; ¡Esto funcionó bien con otras aplicaciones! Aún así, sería bueno probar su idea de las Preferencias del sistema de espacio aislado en sí. Pero, cuando lo probé ( sandbox-exec -f ~/myprofile.sb "/Applications/System Preferences.app/Contents/MacOS/System Preferences"), también arrojó Abort trap 6, ¿alguna idea?
¿Ha intentado ejecutar Preferencias del sistema con solo un perfil predeterminado permitido? (es decir, sin denegar el acceso al archivo SystemVersion.plist). Si eso no falla, sabemos que tiene que ver específicamente con SystemVersion.plist. Una idea para probar sería dejar que SystemVersion.plist sea una canalización con nombre en lugar de un archivo. El otro extremo de esa tubería enviaría el contenido original de SystemVersion.plist la primera vez que se lee y el número de versión modificado la segunda vez. No lo he probado, así que no sé si funcionaría, pero suena plausible.
Bien pensado, sí, ¡ejecutarlo con (allow default)funciona bien! Lo cual es bueno (supongo) - ¡chico, has dado en el clavo hasta ahora! eres un gurú!!! Yo también estoy aprendiendo mucho, gracias. Entonces, en cuanto a la idea de las canalizaciones con nombre (y nuevamente, primero debería probar esto en el instalador de la aplicación .app): ¿qué pocos comandos haría para configurar eso? He buscado en Google un poco y necesito orientación sobre cómo hacerlo :). Gracias. Seguiré buscando en Google por ahora, pero me siento un poco inmerso (esto es algo realmente avanzado y oscuro) y ciertamente no quiero estropear las cosas... será bueno documentar todo esto de todos modos.
Ejecuta el comando "mkfifo /Library/Preferences/SystemVersion.plist" para crear el fifo en el sistema de archivos. Luego ejecuta un comando como "cat originalversion > /Library/Preferences/SystemVersion.plist" para enviar la versión original del archivo, y de manera similar nuevamente con el archivo modificado.
Lamentablemente, sandbox-exec está marcado como obsoleto en la versión actual de Mojave. Parece que Apple no pudo hacer que Sandbox fuera útil sin hacer que los programas de Sandbox fueran inútiles.

La aplicación Hands Off tiene esta función:

Supervisión del acceso al disco

Las aplicaciones presentes en su computadora pueden leer, almacenar o borrar libremente información en su computadora sin su conocimiento. Con Hands Off!, puede monitorear y controlar el acceso al disco desde todas las aplicaciones para evitar que obtengan información confidencial, borren sus datos o almacenen cookies.

Y resulta que incluye la función de firewall de red de Little Snitch.

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

Little Flocker, una herramienta que restringe el acceso de aplicaciones y procesos del sistema a archivos sin permiso. No pudo dar detalles, pero recientemente F-Secure, una empresa líder en desarrollo y análisis de seguridad, anunció la compra de Little Flocker, que ahora se llama Xfence.

MacOS Catalina ahora tiene esta característica similar:

Protecciones de datos

macOS Catalina verifica con usted antes de permitir que una aplicación acceda a sus datos en sus carpetas Documentos, Escritorio y Descargas; unidad iCloud; las carpetas de proveedores de almacenamiento en la nube de terceros; media removible; y volúmenes externos. Además, se le preguntará antes de que una aplicación pueda realizar el registro de claves o capturar una imagen fija o una grabación de video de su pantalla.