Security
What conflux adds to anchor's threat model, how it protects the machine's identity and binaries, and what to do when a manifest is stolen.
What the Manifest Holds
Conflux stores the machine's identity in one file, manifest.b64, in the state directory. The file holds the 32-byte identity seed. Whoever holds the seed can act as that anchor.
A manifest from a guardian also carries the renewal secret, a bearer token for the machine's renewals. Whoever holds that manifest can also keep the credential current.
- Backups. A backup, VM snapshot or container image of
/var/lib/confluxholds the identity. If you restore it onto a second machine while the first runs, the anchor exists twice and anchor reports an address conflict. Keep the directory out of shared backups, or treat those backups as secrets, as you would an SSH host key. - Moving a machine. Copying the manifest moves the machine, because there is no account to transfer. If you keep the original as well, the anchor exists twice. If you do not need to keep the address, run
sudo conflux uninstallon the old machine and give the new machine a new identity.
On Linux, list the directories and the manifest:
$ sudo ls -ld /etc/conflux /var/lib/conflux $ sudo ls -l /var/lib/conflux/manifest.b64
You should see
drwx------for both directories and-rw-------for the manifest, all owned by root. For the directories on other platforms, see the CLI Reference.
Stolen Manifests
You cannot withdraw a copy of the manifest once it has left the machine. The thief can act as that anchor until the identity is no longer admitted. What you can do depends on the network:
| The instance VeilNet hosts | A sovereign network | |
|---|---|---|
| Who recorded the machine | Nobody. Enrolment is anonymous and stores nothing. | The operator who commissioned it, in the guardian. |
| Can the copy be cut off | No. Renewal is unauthenticated, so the thief can renew the credential indefinitely, despite its thirty-day validity window. | Yes. The guardian stops renewing the credential, and it lapses at the end of the validity window that the operator chose. A block cuts the copy off sooner. |
| The remedy | Stop using the identity. If the thief must not reach your other machines, move them all to a new taint. | Revoke the machine in the guardian, and commission a new identity for it. |
On the instance VeilNet hosts
On the machine whose manifest leaked, run:
$ sudo conflux uninstall --yes
On a sovereign network
Ask the guardian's operator to stop renewing the machine's credential and to block the machine. The block cuts the machine off before the credential lapses. See Revocation and Blocks.
Protecting the Manifest
Conflux keeps the manifest in one file that only root can read, and passes it on only through standard input.
The manifest is stored in one file that only root can read, in a directory that only root can read. Conflux passes it to anchorctl on standard input, and anchorctl passes it to anchord inline, never as a path. On Windows, a protected access list for SYSTEM and Administrators gives the same protection.
- File modes. The file has mode
0600, and conflux sets the mode before it writes any content, so the file never has the umask's mode, even briefly. - Directory mode. The directory has mode
0700, so no other user can replace the file by renaming another file over it. - Atomic writes. A crash or a full disk leaves the previous manifest, never a truncated one.
- Windows. A protected access list restricts
%ProgramData%\confluxto SYSTEM and Administrators. Conflux refuses a directory that another account created first. See Windows Problems. - No argument lists. The manifest passes on standard input to
anchorctl start -manifest -, so it never shows inpsor/proc/*/cmdline. - No logs. Any value that holds the manifest prints as
<anchor manifest, redacted>, in every format. The renewal secret is redacted in the same way. - Telemetry headers. The
headersin an export block are credentials too, soconflux.jsonand the generatedanchord.jsonalso have mode0600.
To install a credential without first saving it with the shell's default file mode, pipe it to sudo conflux enrol --manifest -, which reads standard input.
Extracted Binaries
Conflux writes anchord and anchorctl to disk and runs them. Malware droppers do the same, so conflux limits where and how it does this:
- Location. The binaries go to
bin/<setID>/, a directory named after their content, inside the root-owned state directory with mode0700. They never go to/tmp. - Source. The binaries come from inside the conflux binary, and nothing is downloaded. Verifying conflux therefore also verifies them.
- Ownership on Windows. Anyone can work out a set's directory name, so conflux runs a set only if Administrators, SYSTEM or the account running conflux owns it. Otherwise, it extracts the set again.
- Boot service. The service runs as root (SYSTEM on Windows) and starts a copy of conflux in the state directory, which only root can change. It never starts the file you ran, which another account might be able to replace.
- Downloads. The only file conflux downloads is
wintun.dll, on Windows in TUN mode. Conflux checks it against a pinned SHA-256 digest before using it. See Windows Problems.
| Platform | Path |
|---|---|
| Linux | /var/lib/conflux/conflux |
| macOS | /Library/Application Support/conflux/conflux |
| Windows | %ProgramData%\conflux\conflux.exe |
| FreeBSD, OpenBSD | /var/db/conflux/conflux |
Before you install the download, check it against the release's checksums:
$ sha256sum -c SHA256SUMS --ignore-missing conflux-linux-amd64: OK
Each release also carries a build-provenance attestation.
Threats Out of Scope
Conflux does not defend against these threats:
- A local attacker with root. Root can read the manifest and take the identity.
- A compromised release channel. The checksums, the digests in
conflux versionand the release attestation are the only checks against one. - Traffic analysis. This is anchor's concern, and anchor's documentation covers it.
- A taint as a tenant boundary. A taint limits the damage inside a realm that has already admitted all its members.
- Guessed taint names. Taint names are not secret, and on the instance VeilNet hosts anyone may ask for a credential with any taint name. A generated taint of about 128 bits cannot be guessed, but a name such as
prodcan. - A member with the taint power. A member whose credential grants the
taintpower can move a machine to other taints while it runs. Credentials from the instance VeilNet hosts grant that power to nobody, but a guardian may grant it.
A badly wrong clock is not an attack, but it can stop a machine from starting or connecting in ways that look like one. See Clock Skew.
Reporting an Issue
Report security issues through Report a problem on the pre-release page. Say whether the issue concerns conflux itself (its files, binaries or service) or anchor's protocol, handshake or credential format.