Skip to content

Glossary

Entitlement

Une paire clé/valeur signée embarquée dans un binaire Mach-O macOS qui accorde à son processus l'accès à des API noyau ou framework verrouillées.

Un entitlement est une paire clé-valeur embarquée dans la signature de code d'un binaire Mach-O macOS qui déclare une capacité que le binaire doit avoir. Le noyau et la couche framework vérifient les entitlements pour décider d'accorder une opération privilégiée.

Un plist d'entitlements typique embarqué dans un binaire débogueur :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.debugger</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
</dict>
</plist>

Les entitlements se classent en trois familles selon qui peut les signer :

  • Publics — n'importe qui avec un Developer ID peut les revendiquer (com.apple.security.cs.debugger, com.apple.security.cs.allow-jit, etc.). Documentés dans le guide Hardened Runtime d'Apple.
  • Restreints — accordés au cas par cas après demande à Apple (com.apple.developer.endpoint-security.client, com.apple.developer.system-extension.install).
  • Privés Apple — seuls les binaires Apple-signés peuvent les porter (com.apple.system-task-ports, com.apple.private.tcc.allow, des centaines d'autres).

AMFI est responsable de vérifier qu'un entitlement a bien été signé par une autorité de confiance. Un binaire ne peut pas s'auto-attribuer un entitlement en éditant son plist — la signature ne validerait plus.

Pour le travail syscall, l'entitlement le plus pertinent est com.apple.security.cs.debugger, le chemin par lequel Xcode prend un task port sur une cible debug-allowed.