
Un sistema de autorización de aplicaciones en modo de usuario para MacOS escrito en Swift.
Sinter es un agente de seguridad de endpoints 100% en modo usuario para macOS 10.15 y superior, escrito en Swift.
Sinter utiliza la API EndpointSecurity en modo usuario para suscribirse y recibir devoluciones de llamada de autorización del kernel de macOS para un conjunto de tipos de eventos relevantes para la seguridad. La versión actual de Sinter permite permitir/denegar ejecuciones de procesos; en versiones futuras tenemos la intención de admitir otros tipos de eventos, como eventos de archivos, sockets y kernel.
Sinter es un trabajo en progreso. Se agradecen los comentarios. Si estás interesado en contribuir o patrocinarnos para ayudar a alcanzar su potencial, pongámonos en contacto.
Funciones planificadas próximamente:
La primera solución macOS de código abierto para permitir/denegar procesos fue Google Santa. Somos fanáticos de Santa y hemos contribuido a su base de código en el pasado. Sin embargo, durante mucho tiempo, muchos en la comunidad macOS han solicitado una solución de código abierto para rastrear y gestionar más que solo eventos de procesos.
Vimos la plataforma ideal para construir dicha capacidad con la API EndpointSecurity en macOS 10.15. Empezar desde cero alrededor de una API estrictamente en modo usuario significaba que podíamos intentar un diseño más simple y usar un lenguaje de programación moderno con manejo de memoria más seguro y mejor rendimiento. Así, nos propusimos desarrollar Sinter, abreviatura de "Sinter Klausen", otro nombre para Santa Claus.
Descarga e instala la última versión de Sinter usando el enlace del instalador pkg desde la página de Lanzamientos.
Después de instalar Sinter, debes habilitar el permiso "Acceso completo al disco" para Sinter.app. Hazlo abriendo Preferencias del Sistema, pestaña Seguridad y Privacidad, luego Acceso completo al disco. Marca el elemento para Sinter.app. Si usas MDM, puedes habilitar automáticamente este permiso en tus endpoints y no se requerirá interacción del usuario.
Sinter requiere un archivo de configuración presente en /etc/sinter/config.json. Se proporciona un ejemplo en el árbol fuente en ./config/config.json:
{
"Sinter": {
"decision_manager": "local",
"logger": "filesystem",
"allow_unsigned_programs": "true",
"allow_invalid_programs": "true",
"allow_unknown_programs": "true",
"allow_expired_auth_requests": "true",
"allow_misplaced_applications": "true",
"config_update_interval": 600,
"allowed_application_directories": [
"/bin",
"/usr/bin",
"/usr/local/bin",
"/Applications",
"/System",
"/usr/sbin",
"/usr/libexec",
],
},
"FilesystemLogger": {
"log_file_path": "/var/log/sinter.log",
},
"RemoteDecisionManager": {
"server_url": "https://server_address:port",
"machine_identifier": "identifier",
},
"LocalDecisionManager": {
"rule_database_path": "/etc/sinter/rules.json",
}
}
El complemento del administrador de decisiones se puede seleccionar cambiando el valor decision_manager. El complemento local habilitará la sección de configuración LocalDecisionManager, indicando a Sinter que use la base de datos de reglas local presente en la ruta dada. Es posible usar un servidor de sincronización compatible con Santa, usando en su lugar el complemento sync-server. Esto habilita la sección de configuración RemoteDecisionManager, donde se pueden configurar la URL del servidor y el identificador de la máquina.
Actualmente hay dos complementos de registro implementados:
Es posible configurar Sinter para registrar y opcionalmente denegar aplicaciones que no se hayan iniciado desde una carpeta permitida.
sudo /Applications/Sinter.app/Contents/MacOS/Sinter --install-notification-server/Applications/Sinter.app/Contents/MacOS/Sinter --start-notification-serverLos modos no están implementados en Sinter, ya que todo se basa en reglas. Es posible implementar la funcionalidad de monitoreo ajustando las siguientes configuraciones:
Las bases de datos de reglas están escritas en formato JSON. Aquí hay un ejemplo de base de datos que permite el paquete de aplicación CMake de cmake.org:
{
"rules": [
{
"rule_type": "BINARY",
"policy": "ALLOWLIST",
"sha256": "BDD0AF132D89EA4810566B3E1E0D1E48BAC6CF18D0C787054BB62A4938683039",
"custom_msg": "CMake"
}
]
}
Sinter solo admite reglas BINARY por ahora, usando políticas ALLOWLIST o DENYLIST. El valor del hash del directorio de código se puede tomar de la salida de la herramienta codesign (ejemplo: codesign -dvvv /Applications/CMake.app). Ten en cuenta que aunque las herramientas CLI pueden obtener el hash SHA256 completo, el Kernel/API EndpointSecurity está limitado a los primeros 20 bytes.
Compilar Sinter requiere ciertos certificados de firma de código y derechos que Apple debe otorgar a tu organización. Sin embargo, Sinter aún se puede compilar desde el código fuente y ejecutar localmente en un sistema de prueba con SIP desactivado. Para obtener instrucciones, consulta la wiki de Sinter.
Sinter está licenciado y distribuido bajo la licencia AGPLv3. Contáctanos si estás buscando una excepción a los términos.