Lion Cipher Lab

Allowlist what can run: deny-by-default execution control with fapolicyd

Why it matters

Antivirus is allow-by-default: a program runs unless a signature says otherwise, which means a binary the vendor has never seen -- a fresh malware dropper, a living-off-the-land tool an attacker dropped in /tmp, a ransomware stage two -- runs first and gets caught later, if ever. Application allowlisting inverts that: nothing executes unless it is on a list of known-good software, so the novel binary is denied precisely BECAUSE it is unknown. NIST wrote a whole guide about this control (SP 800-167) because on a machine whose software set is stable -- a server, a kiosk, an OT box --…

What you'll learn

Steps in this lab

  1. The threat: allow-by-default AV vs deny-by-default allowlisting
  2. Spin up a RHEL-family box and install fapolicyd (honest platform note)
  3. Understand the TRUST DATABASE: rpm-backed trust + the file trust list
  4. Read the RULES model: decision, perm, subject : object, and trust
  5. PERMISSIVE first: run the daemon in the foreground and watch decisions
  6. Build the benign stand-in: compile a 'hello' binary in /tmp
  7. PROVE it bites: flip to ENFORCING and get denied, read the deny line
  8. Add it to trust and watch it run: fapolicyd-cli --file add + --update
  9. The INTERPRETER BYPASS: why execute-only control has a hole
  10. Tune FALSE POSITIVES: updates change hashes, integrity modes, trust-source order
  11. The judgment: allowlisting vs SELinux/AppArmor and IMA, and when it's worth it

Open the full interactive lab →