// clearancekit
┌───────────────────────────────────────┐
│  CLEARANCEKIT                         │
│  process → kernel → file_system       │
└───────────────────────────────────────┘

Kernel-level file access control for macOS, bound to code-signing identity.

docs source

// download

version: latest · download: latest.dmg · source: github.com/craigjbass/clearancekit · license: MIT

// how it works
┌──────────┐    AUTH_OPEN     ┌─────────┐
│  process │ ───────────────▶ │ opfilter│
└──────────┘                  └────┬────┘
                                   │ check signature
                                   ▼
                              ┌─────────┐
                              │  policy │ → ALLOW / DENY
                              └─────────┘
  1. A process attempts open(), rename(), unlink(), or another file-system syscall.
  2. The kernel forwards the request to opfilter as an Endpoint Security AUTH event.
  3. opfilter looks up the calling process's signing identity and matches it against policies.
  4. opfilter responds ALLOW or DENY.
// features
// what an unconstrained process can reach

A single postinstall script in a compromised package runs with full user-level access. Without per-process policy, it can read:

~/.ssh/id_*
SSH private keys, usable for lateral movement to servers and cloud environments.
~/.aws/credentials, ~/.config/gcloud/, ~/.azure/
Plaintext cloud credentials and tokens.
~/.git-credentials, ~/.netrc
Silent access to every private repository your account can reach.
~/.gnupg/private-keys-v1.d/
GPG private keys, copyable for offline passphrase cracking.
~/Library/Cookies/Cookies.binarycookies
Safari session cookies.
~/Library/Messages/
iMessage history and attachments.
~/Library/Group Containers/group.com.apple.notes/
Unlocked Apple Notes (CoreData SQLite, readable on disk).
~/Library/Application Support/Signal/attachments.noindex/
Signal Desktop attachments.
// why code signing, not paths or hashes

path / hash MAC

  • Trusts whatever binary sits at the expected path.
  • A trojanised binary at that path inherits the policy.
  • A vulnerability in an allowed process inherits the policy.
  • Every software update invalidates the hash.
  • Active development machines need constant policy maintenance.

clearancekit

  • Trusts the kernel-verified signing identity of the binary.
  • A trojanised binary carries a different signature and is denied.
  • A dylib injection changes the loaded code's signature mix and fails the check.
  • Policies stay valid across all future updates from the same signer.
  • Policy revisions happen only when you change which software you trust.
// install

Open the .dmg, drag clearancekit to Applications, launch it. Grant Full Disk Access when prompted, then activate the system extension.

No auto-update. Check the releases page for new versions.

// license: MIT · source: github.com/craigjbass/clearancekit · version: latest