
Un sistema di autorizzazione per applicazioni in modalità utente per MacOS scritto in Swift.
Sinter è un agente di sicurezza endpoint 100% in modalità utente per macOS 10.15 e successivi, scritto in Swift.
Sinter utilizza l'API EndpointSecurity in modalità utente per sottoscrivere e ricevere callback di autorizzazione dal kernel macOS per un insieme di tipi di eventi rilevanti per la sicurezza. La versione corrente di Sinter supporta l'autorizzazione/il rifiuto delle esecuzioni di processi; nelle versioni future intendiamo supportare altri tipi di eventi come file, socket ed eventi del kernel.
Sinter è un work-in-progress. I feedback sono benvenuti. Se sei interessato a contribuire o a sponsorizzarci per aiutarci a realizzare il suo potenziale, mettiamoci in contatto.
Funzionalità future pianificate:
La prima soluzione open-source per macOS per consentire/negare processi è stata Google Santa. Siamo fan di Santa e abbiamo contribuito al suo codice in passato. Tuttavia, per molto tempo molti nella comunità macOS hanno chiesto una soluzione open-source per tracciare e gestire più dei soli eventi di processo.
Abbiamo visto la piattaforma ideale per costruire tale capacità con l'API EndpointSecurity in macOS 10.15. Partire da zero attorno a un'API strettamente in modalità utente significava poter tentare un design più semplice e utilizzare un linguaggio di programmazione moderno con una gestione della memoria più sicura e prestazioni migliori. Così, abbiamo iniziato a sviluppare Sinter, abbreviazione di "Sinter Klausen", un altro nome per Babbo Natale.
Scarica e installa l'ultima versione di Sinter utilizzando il link del pacchetto pkg dalla pagina Releases.
Dopo aver installato Sinter, devi abilitare l'autorizzazione "Accesso completo al disco" per Sinter.app. Apri Preferenze di Sistema, scheda Sicurezza e Privacy, seleziona Privacy, quindi Accesso completo al disco. Spunta l'elemento per Sinter.app. Se utilizzi MDM, puoi abilitare automaticamente questa autorizzazione sui tuoi endpoint e non sarà richiesta alcuna interazione da parte dell'utente.
Sinter richiede un file di configurazione in /etc/sinter/config.json. Un esempio è fornito nell'albero sorgente in ./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",
}
}
Il plugin decision manager può essere selezionato cambiando il valore decision_manager. Il plugin local abilita la sezione di configurazione LocalDecisionManager, puntando Sinter a utilizzare il database di regole locale presente nel percorso indicato. È possibile utilizzare un server di sincronizzazione compatibile con Santa, utilizzando invece il plugin sync-server. Questo abilita la sezione di configurazione RemoteDecisionManager, dove possono essere impostati l'URL del server e l'identificativo della macchina.
Attualmente sono implementati due plugin logger:
È possibile configurare Sinter per registrare e, opzionalmente, negare le applicazioni che non sono state avviate da una cartella consentita.
sudo /Applications/Sinter.app/Contents/MacOS/Sinter --install-notification-server/Applications/Sinter.app/Contents/MacOS/Sinter --start-notification-serverLe modalità non sono implementate in Sinter, poiché tutto è basato su regole. È possibile implementare la funzionalità di monitoraggio modificando le seguenti impostazioni:
I database di regole sono scritti in formato JSON. Ecco un database di esempio che consente il bundle dell'applicazione CMake da cmake.org:
{
"rules": [
{
"rule_type": "BINARY",
"policy": "ALLOWLIST",
"sha256": "BDD0AF132D89EA4810566B3E1E0D1E48BAC6CF18D0C787054BB62A4938683039",
"custom_msg": "CMake"
}
]
}
Sinter supporta per ora solo regole BINARY, utilizzando politiche ALLOWLIST o DENYLIST. Il valore hash della directory del codice può essere preso dall'output del tool codesign (esempio: codesign -dvvv /Applications/CMake.app). Nota che anche se gli strumenti CLI possono acquisire l'intero hash SHA256, l'API Kernel/EndpointSecurity è limitata ai primi 20 byte.
Compilare Sinter richiede determinati certificati di code signing e entitlement che Apple deve concedere alla tua organizzazione. Tuttavia, Sinter può comunque essere compilato dai sorgenti ed eseguito localmente su un sistema di test con SIP disabilitato. Per istruzioni, consulta il wiki di Sinter.
Sinter è concesso in licenza e distribuito sotto licenza AGPLv3. Contattaci se cerchi un'eccezione ai termini.