
Un système d'autorisation d'applications en mode utilisateur pour macOS écrit en Swift
Sinter est un agent de sécurité des terminaux 100 % en mode utilisateur pour macOS 10.15 et versions ultérieures, écrit en Swift.
Sinter utilise l'API EndpointSecurity en mode utilisateur pour s'abonner et recevoir des rappels d'autorisation du noyau macOS, pour un ensemble de types d'événements liés à la sécurité. La version actuelle de Sinter prend en charge l'autorisation/le refus d'exécutions de processus ; dans les versions futures, nous prévoyons de prendre en charge d'autres types d'événements tels que les événements de fichier, de socket et de noyau.
Sinter est en cours de développement. Les retours sont les bienvenus. Si vous souhaitez contribuer ou nous sponsoriser pour nous aider à réaliser son potentiel, contactez-nous.
Fonctionnalités prévues :
La première solution open-source macOS pour autoriser/refuser les processus était Google Santa. Nous sommes fans de Santa, et avons contribué à sa base de code par le passé. Cependant, pendant longtemps, de nombreux membres de la communauté macOS ont demandé une solution open-source pour suivre et gérer plus que simplement les événements de processus.
Nous avons vu la plateforme idéale pour construire une telle capacité avec l'API EndpointSecurity dans macOS 10.15. Partir de zéro autour d'une API strictement en mode utilisateur signifiait que nous pouvions tenter une conception plus simple, et utiliser un langage de programmation moderne avec une gestion de mémoire plus sûre et de meilleures performances. Ainsi, nous avons entrepris de développer Sinter, abréviation de « Sinter Klausen », un autre nom pour le Père Noël.
Téléchargez et installez la dernière version de Sinter en utilisant le lien d'installation pkg depuis la page Releases.
Après avoir installé Sinter, vous devez activer l'autorisation « Accès complet au disque » pour Sinter.app. Pour ce faire, ouvrez Préférences Système, onglet Sécurité et Confidentialité, puis Accès complet au disque. Cochez l'élément pour Sinter.app. Si vous utilisez MDM, vous pouvez activer automatiquement cette autorisation sur vos terminaux, et aucune interaction utilisateur ne sera nécessaire.
Sinter nécessite qu'un fichier de configuration soit présent à l'emplacement /etc/sinter/config.json. Un exemple est fourni dans l'arborescence source à ./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",
}
}
Le plugin de gestionnaire de décision peut être sélectionné en modifiant la valeur decision_manager. Le plugin local activera la section de configuration LocalDecisionManager, pointant Sinter vers la base de règles locale présente au chemin donné. Il est possible d'utiliser un serveur de synchronisation compatible Santa, en utilisant plutôt le plugin sync-server. Cela active la section de configuration RemoteDecisionManager, où l'URL du serveur et l'identifiant de la machine peuvent être définis.
Deux plugins de journalisation sont actuellement implémentés :
Il est possible de configurer Sinter pour journaliser et éventuellement refuser les applications qui n'ont pas été démarrées depuis un dossier autorisé.
sudo /Applications/Sinter.app/Contents/MacOS/Sinter --install-notification-server/Applications/Sinter.app/Contents/MacOS/Sinter --start-notification-serverLes modes ne sont pas implémentés dans Sinter, car tout est basé sur des règles. Il est possible d'implémenter la fonctionnalité de surveillance en ajustant les paramètres suivants :
Les bases de règles sont écrites au format JSON. Voici un exemple de base de données qui autorise le bundle d'application CMake de cmake.org :
{
"rules": [
{
"rule_type": "BINARY",
"policy": "ALLOWLIST",
"sha256": "BDD0AF132D89EA4810566B3E1E0D1E48BAC6CF18D0C787054BB62A4938683039",
"custom_msg": "CMake"
}
]
}
Sinter ne prend en charge que les règles BINARY pour l'instant, en utilisant les politiques ALLOWLIST ou DENYLIST. La valeur du hachage du répertoire de code peut être extraite de la sortie de l'outil codesign (exemple : codesign -dvvv /Applications/CMake.app). Notez que même si les outils CLI peuvent obtenir le hachage SHA256 complet, l'API Kernel/EndpointSecurity est limitée aux 20 premiers octets.
La compilation de Sinter nécessite certains certificats de signature de code et droits qu'Apple doit accorder à votre organisation. Cependant, Sinter peut toujours être compilé à partir des sources et exécuté localement sur un système de test avec SIP désactivé. Pour les instructions, consultez le wiki de Sinter.
Sinter est sous licence et distribué sous la licence AGPLv3. Contactez-nous si vous cherchez une exception aux conditions.