
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"
}
]
}