Alpha Release candidate v0.3.0-rc.3 What changed in 0.3 NixOS, Debian 13, Ubuntu 24.04 and 26.04

NAILS runs a hidden session on a decoy Linux system.

NAILS is an alpha-stage, open source command-line tool for Linux anti-forensics: it narrows what an offline examination of a decoy system can find. It soft-reboots the decoy, an ordinary-looking Linux system, into an overlay of its own root. Changes made in the hidden session are written to an encrypted volume you provide.

  1. On the disk Decoy The installed system. Plain, plausible and in regular use.
  2. nails activate enters the hidden session. nails deactivate returns to the decoy. Both transitions are soft-reboots.
  3. On an overlay Hidden session The same system started again. Its changes land on your hidden volume.
  4. --poweroff powers off instead of returning to the decoy.
  5. No power Powered off Leave it off for a few minutes so RAM contents decay.
The session lifecycle. nails emergency takes the same way back at once, killing every hidden program.

How it works

Two soft-reboots and one overlay

The hidden session runs the decoy's own system again, or on NixOS a hidden generation of it, on an overlay whose writable layer is your hidden volume. Every process starts inside the overlay, so no program in the session has a path to the decoy's own filesystem, unless you mount a decoy disk yourself.

  1. Unlock your hidden volume

    Unlock and mount it yourself, for example a VeraCrypt hidden volume or a LUKS2 volume. NAILS encrypts nothing. The volume and any plausible deniability it offers come from the backend you choose. NAILS adds nothing to the backend's claim.

  2. Activate

    nails activate asks for confirmation, runs its pre-flight checks, builds the overlay and soft-reboots. Every program closes and you are logged out. The hidden session starts at its own login screen. A display manager set to log an account in automatically logs it in again, as at boot.

  3. Return

    nails deactivate soft-reboots back to the plain decoy and closes the hidden volume on the way. Links, addresses, routes and VPN tunnels the session set up stay up in the decoy until power-off. As soon as the decoy starts, its NetworkManager records a link the session created, with the time, on the decoy disk. Take down what you brought up and delete the links you created before you deactivate, or end the session with --poweroff. It powers off instead of returning to the decoy, and powering off is what clears RAM.

How it works in detail

  1. Hidden session mounted as / What you see and work in: both layers below, merged.
  2. Upper layer on your hidden volume Changes land here, from files and logs to shell history and package builds.
  3. Lower layer the decoy root, read-only Read through, never written. The decoy's own files stay as they were.
One OverlayFS overlay over the whole decoy root. Other decoy filesystems get an overlay of their own, or are bound read-only or masked.

Threat model

Built for one adversary

Someone who gets offline access to your disks after the fact, typically by seizing a powered-off machine, and who may make you unlock the decoy once. The threat model sets out what NAILS covers in that case and where it stops.

What NAILS helps with

  • Keeping the hidden session's files, logs, shell history and package builds off the decoy disk.
  • Leaving no enabler on the decoy. There is no boot entry, initrd change, unit or binary to find.
  • Checking your own setup before you rely on it, with the check, verify and rehearse commands.

What it does not protect against

  • Anyone with access to the running machine, memory forensics or cold-boot attacks.
  • Network and remote records. The hidden session shares the decoy's network identity, and providers and online services see what it does.
  • Being made to disclose the hidden volume's credentials, physical or repeated coercion, or a disk imaged more than once and compared.
  • Firmware or hardware compromise, keyloggers, side channels or a compromised root account on the decoy.
  • A decoy that keeps a persistent journal, syslog or audit log. Activation refuses one by default.

Read the threat model, with its assumptions and residual channels

Check your setup

Test it on your own machine

The leak claims are tested in virtual machines. Your hardware, decoy and backend are different, so NAILS ships tools to check them. verify and rehearse also list what they could not check.

nails check
Runs every pre-flight check before entry and changes nothing.
nails verify
Looks for known artifacts. A clean result is evidence, not proof.
nails rehearse
Plants a canary in a hidden session, then searches the raw decoy disk for it.

Check your setup

…
Pre-flight checks:
  [PASS] hidden-volume: Hidden volume mounted at /mnt/data
  [PASS] backend-entries: No fstab or crypttab entry opens or mounts the volume at /mnt/data
  [PASS] session-state: on the plain decoy root
  [PASS] systemd-version: systemd 261 supports soft-reboot
  [PASS] soft-reboot-units: soft-reboot.target and systemd-soft-reboot.service are installed
  [PASS] decoy-root: the decoy root (ext4 on /dev/vda) can be mounted again for the way back
…
  [PASS] upper-fs-capability: Hidden root at /mnt/data can host an overlayfs upper layer
  [PASS] backend-detect: Hidden root backend: ext4 on LUKS mapping dm-0 on block device vdb; no backend-specific hazards detected
…
  [PASS] sleep-policy: host will not suspend an active session (HandleLidSwitch=lock, IdleAction=ignore)
  [PASS] decoy-persistence: decoy keeps no durable trace of the hidden session
…
[PASS] Ready to activate  (24 passed, 0 warnings, 0 failed)
Excerpt of real output, captured on 2026-10-16 in the session-readme-captures NixOS VM test, which runs sudo /mnt/data/nails check --overlay-only. Lines shown as … are left out. The test VM is an amnesic decoy as the docs describe it, but its kernel command line does not set init_on_free=1, which the docs also recommend. The capture predates the platform check, and --overlay-only skips the checks for a hidden NixOS build.

Requirements

What you need

A supported host
NixOS, Debian 13, or Ubuntu 24.04 or 26.04, with systemd 254 or newer, on x86-64. NixOS gets a declarative hidden configuration. A later Debian or Ubuntu release runs with a warning that NAILS has not been tested on it. On Ubuntu 26.04, time sync and printing fail in the hidden session. After the way back, the decoy lists its time sync service as failed until a full reboot, which hints that a soft-reboot happened.
An encrypted decoy
Full-disk encryption whose credentials open the decoy and nothing else. The threat model assumes it.
An amnesic decoy
A volatile journal, no syslog or audit daemon and no disk swap. Its root stays on a disk with ext4, xfs, btrfs or f2fs.
A hidden volume
Storage of its own: a device, partition or encrypted volume that the decoy does not use, created on another computer or from a live system, never on the decoy. You unlock and mount it yourself. It must be managed by the kernel, with ext4, xfs, btrfs or f2fs inside.
Experience and time
Root on the machine, comfort with the command line and time to test your exact hardware, backend and procedure before you rely on them.
Not supported
Fedora, Arch, image-based systems such as ostree and hosts without systemd. Debian 12 and Ubuntu 22.04 are refused because their systemd is too old for a soft-reboot. A decoy root on tmpfs, ZFS or an overlay is refused too.

Full requirements and the platform matrix

Project status

Alpha software, developed in the open

NAILS is security software at an early stage. Read what that means before you depend on it.

Alpha
Interfaces and workflows can still change between releases.
Releases
The docs describe v0.3.0-rc.3, a release candidate published as a prerelease. The latest stable release, v0.2.0, is the earlier design for NixOS only, with per-directory overlays and a YAML configuration. The docs do not apply to it. See what changed since 0.2.
Tested in VMs
Automated tests run the session in NixOS, Debian 13 and Ubuntu 24.04 virtual machines. On NixOS they also check the decoy's disk image after sessions over a LUKS2 and a VeraCrypt hidden volume. Behavior on real hardware, such as graphics, Wi-Fi and external displays after each switch, is not validated yet.
Verifiable releases
Each release is built twice on separate runners and compared byte for byte. The release the docs describe comes with its signed build provenance and software bill of materials as Sigstore bundles, which cosign checks without a GitHub account.
One maintainer
Support and security response are best effort.
Free software
Written in Rust and licensed under GPL-3.0-or-later, with the code, issues and roadmap on GitHub.

Learn more

Questions and comparisons

Short answers to common questions, and how NAILS compares with other tools.

Next

Read first, then rehearse on your own machine.