Tails amnesic live OS. USB installation, Tor routing, persistent storage, MAC spoofing, metadata removal, and operational usage for privacy-critical tasks.
Tails (The Amnesic Incognito Live System) is a Debian-based live operating system designed to preserve privacy and anonymity.
Core principles:
| Principle | Description |
|---|---|
| Amnesia | Every reboot wipes all session data from RAM - nothing persists unless explicitly configured |
| Tor-only | All network traffic is forced through Tor at the OS level - no application can bypass it |
| Live USB | Boots entirely from USB - leaves no trace on the host machine's disk |
| No disk writes | The host hard drive is never mounted or touched by default |
| Hardened | Ships with pre-configured security tools, no telemetry, minimal attack surface |
Tails achieves amnesia by running entirely in RAM. On shutdown, the RAM is overwritten to prevent cold boot recovery of sensitive data.
┌──────────────────────────────┐
│ Tails Desktop │
│ Tor Browser, Thunderbird, │
│ KeePassXC, OnionShare, MAT2 │
├──────────────────────────────┤
│ All Apps → Tor Network │
│ (iptables enforced rules) │
├──────────────────────────────┤
│ Debian Live (in RAM only) │
├──────────────────────────────┤
│ USB Stick (read-only OS + │
│ optional encrypted persist)│
└──────────────────────────────┘
Key design decisions:
Always verify the download to prevent supply-chain attacks. Tails provides an OpenPGP signature for every release.
# Download the USB image
wget https://tails.net/install/download/tails-amd64-X.Y.img
# Download the OpenPGP signature
wget https://tails.net/install/download/tails-amd64-X.Y.img.sig
# Import the Tails signing key
wget https://tails.net/tails-signing.key
gpg --import tails-signing.key
# Verify the image
gpg --verify tails-amd64-X.Y.img.sig tails-amd64-X.Y.img
# Must show "Good signature from Tails developers"
# Fingerprint: A490 D0F4 D311 A415 3E2B B7CA DBB8 02B2 58AC D84F
Alternative: use the Tails website's JavaScript verification tool in-browser, which computes a SHA-256 hash client-side and compares against the expected value.
# List block devices to find your USB
lsblk
# Write image directly to USB (replace /dev/sdX)
# WARNING: this erases everything on the target device
sudo dd if=tails-amd64-X.Y.img of=/dev/sdX bs=16M status=progress oflag=direct
# Sync and safely remove
sync
Alternatively, use GNOME Disks ("Restore Disk Image" function) for a GUI approach.
Tails replaced balenaEtcher with Rufus in 2025 due to privacy concerns (Etcher was sending the image filename, USB model, and user IP to the Balena company).
| Step | Action |
|---|---|
| 1 | Download and install Rufus |
| 2 | Select the Tails .img file |
| 3 | Select your USB drive (minimum 8 GB) |
| 4 | Click Start, wait for write and verification |
Do not use balenaEtcher. It leaks identifying telemetry.
Tails still documents balenaEtcher for macOS but recommends dd or Raspberry Pi Imager if you want to avoid Etcher telemetry.
# Identify the USB device
diskutil list
# Unmount the USB
diskutil unmountDisk /dev/diskN
# Write the image (use rdiskN for raw device - much faster)
sudo dd if=tails-amd64-X.Y.img of=/dev/rdiskN bs=16m
sync
Minimum USB requirements: 8 GB capacity. Recommended: 16 GB or larger to allow persistent storage.
| Step | Action |
|---|---|
| 1 | Insert the Tails USB and reboot the machine |
| 2 | Access the BIOS/UEFI boot menu (common keys: F12, F2, Esc, Del) |
| 3 | Select the USB drive as boot device |
| 4 | Tails GRUB menu appears - select "Tails" (default) or "Tails (Troubleshooting Mode)" |
If the machine uses Secure Boot, you may need to disable it in BIOS. Tails does not ship with signed bootloaders for all hardware.
The Tails Welcome Screen appears on every boot:
| Setting | Description |
|---|---|
| Language & Region | Sets UI language, keyboard layout, and locale |
| Persistent Storage | Unlock existing persistent volume (if configured) |
| Additional Settings | Access admin password, MAC spoofing, network config |
Additional Settings options:
| Setting | Default | Detail |
|---|---|---|
| Administration Password | Disabled | No sudo/root. Enable to install packages or run commands as root |
| MAC Address Anonymization | Enabled | Spoofs MAC before any network activity |
| Network Configuration | Auto-connect to Tor | Options: auto-connect, configure bridge, or disable networking (offline mode) |
After the Welcome Screen:
| Mode | Description |
|---|---|
| Direct connection | Default. Tails connects to the public Tor network |
| Bridge mode | If Tor is censored in your location, configure bridges |
| Offline mode | No network activity at all |
The Tor Connection assistant guides you through:
| Step | Action |
|---|---|
| 1 | Automatic Tor connection attempt |
| 2 | If blocked, select "Configure a Tor Bridge" |
| 3 | Select bridge type (obfs4, Snowflake, meek-azure, custom) |
| 4 | Test connection |
| 5 | Tor circuit established, desktop is ready |
The notification area clock icon turns green with an onion symbol when Tor is fully connected.
Persistent Storage creates an encrypted (LUKS) partition on the same USB drive. Data stored here survives reboots.
# Create persistent storage from:
# Applications > Tails > Persistent Storage
# The tails-persistence-setup CLI tool was removed
# in newer versions. Use the GUI application.
You set a passphrase during creation. This passphrase encrypts the LUKS partition. Use a strong passphrase - at least 7 random diceware words recommended.
The persistent volume is mounted at:
/home/amnesia/Persistent
/live/persistence/TailsData_unlocked
| Feature | Path / Description |
|---|---|
| Personal Data | ~/Persistent - your files, documents, downloads |
| GnuPG Keys | ~/.gnupg - GPG keypairs and trust database |
| SSH Client | ~/.ssh - SSH keys and known_hosts |
| Wi-Fi Passwords | NetworkManager saved connections |
| Browser Bookmarks | Tor Browser bookmarks only (not history or cookies) |
| Thunderbird | Email config, accounts, PGP keys, local mail |
| KeePassXC | Password database files |
| Electrum Bitcoin | Wallet data |
| Dotfiles | ~/.bashrc, ~/.vimrc, etc. via dotfiles feature |
| Additional Software | APT packages to auto-install on boot |
| Printers | CUPS printer configuration |
| Network Connections | All saved NetworkManager profiles |
# Backup persistent storage to another encrypted drive
# Mount an external encrypted drive first, then:
rsync -av --progress /home/amnesia/Persistent/ /media/amnesia/backup/
# Delete persistent storage completely
# (Recreate from Persistent Storage settings)
# This securely wipes the LUKS header, making data unrecoverable
Bridges are unlisted Tor relays used to circumvent censorship. Pluggable transports disguise Tor traffic as other protocols.
| Transport | Disguise Method | Best For |
|---|---|---|
| obfs4 | Scrambles traffic to look random | Evading DPI that blocks Tor |
| meek-azure | Tunnels through Microsoft CDN | Countries blocking Tor + obfs4 |
| Snowflake | Uses WebRTC peer proxies | Censored networks, easy to use |
Configure bridges in Tails:
| Step | Action |
|---|---|
| 1 | Welcome Screen - Additional Settings - Network Configuration |
| 2 | Select "Configure a Tor Bridge" |
| 3 | Choose built-in bridge type OR enter custom bridges |
# Custom bridge format:
obfs4 IP:PORT FINGERPRINT cert=CERT iat-mode=0
Getting custom bridges:
# Via Tor Project website
https://bridges.torproject.org
# Via email (from Gmail/Riseup only)
# Send email to [email protected]
# Body: get transport obfs4
Tor Browser includes a circuit display showing the path your traffic takes.
You > Guard Node (entry) > Middle Relay > Exit Node > Destination
[Country A] [Country B] [Country C]
Each tab in Tor Browser uses a different circuit. Click the padlock icon in the URL bar to see the current circuit and request a new one.
# If admin password is set, you can interact with Tor:
# View Tor circuit info via control port
sudo -u debian-tor tor-ctrl GETINFO circuit-status
# Signal Tor to build new circuits
sudo -u debian-tor tor-ctrl SIGNAL NEWNYM
# Check Tor connection status
systemctl status tor@default
# View Tor logs
sudo journalctl -u tor@default -f
Pre-configured Firefox ESR hardened for Tor. Key differences from standard Firefox:
Security Levels (shield icon in toolbar):
Standard - JavaScript enabled, all features on
Safer - JS disabled on non-HTTPS, some fonts/media blocked
Safest - JS disabled everywhere, fonts/media blocked
Thunderbird + Torbirdy:
- Email client pre-configured for Tor
- PGP encryption via OpenPGP built-in (Enigmail deprecated)
- All connections route through Tor
- Strips email metadata headers automatically
- IMAP/SMTP over Tor (use .onion mail servers when possible)
OnionShare:
# Share files over Tor without a server
# Applications → OnionShare
# Creates a temporary .onion address for:
# - Sharing files (upload to recipients)
# - Receiving files (others upload to you)
# - Hosting a simple website
# - Anonymous chat room
# The .onion address is only active while OnionShare runs
# Recipients need Tor Browser to access it
KeePassXC:
- Password manager with TOTP support
- Database stored in Persistent Storage
- Use a strong master password + key file for defense in depth
- Path: ~/Persistent/keepassxc.kdbx
MAT2 (Metadata Anonymisation Toolkit):
# Remove metadata from files before sharing
# Supports: images, PDFs, office docs, audio, video, archives
# Check metadata
mat2 --show document.pdf
# Clean a single file (creates cleaned copy)
mat2 document.pdf
# Output: document.cleaned.pdf
# Clean in-place
mat2 --inplace photo.jpg
# Clean all files in a directory
mat2 *.pdf
# Right-click any file in Files → "Remove metadata"
GnuPG:
# Generate a GPG key pair
gpg --full-generate-key
# Encrypt a file for a recipient
gpg --encrypt --recipient [email protected] file.txt
# Sign a file
gpg --detach-sign --armor file.txt
# Verify a signature
gpg --verify file.txt.asc file.txt
# Export public key for sharing
gpg --armor --export [email protected] > pubkey.asc
# GPG keys persist if GnuPG is enabled in Persistent Storage
LUKS Disk Encryption:
# Create an encrypted volume on an external drive
# Applications → Disks → Select drive → Format → LUKS + Ext4
# Command line alternative (admin password required):
sudo cryptsetup luksFormat /dev/sdX1
sudo cryptsetup open /dev/sdX1 encrypted_vol
sudo mkfs.ext4 /dev/mapper/encrypted_vol
sudo mount /dev/mapper/encrypted_vol /mnt
# Close when done
sudo umount /mnt
sudo cryptsetup close encrypted_vol
Electrum Bitcoin Wallet:
- Lightweight Bitcoin wallet routed through Tor
- Wallet data persists if Electrum is enabled in Persistent Storage
- Use for anonymous transactions
- Connects to Electrum servers via Tor
Tails enforces Tor at the firewall level. The iptables rules ensure:
ALLOWED:
- Traffic from Tor process to the internet (direct)
- Traffic from applications to Tor SOCKS (127.0.0.1:9050/9150)
- Tor control port (127.0.0.1:9051)
- Local loopback
BLOCKED:
- ALL other outbound traffic
- Direct internet access from any application
- UDP traffic (except DNS to Tor)
- ICMP (ping) in all directions
This means even if malware runs in your session, it cannot phone home without going through Tor (making C2 attribution harder but not impossible).
Tails automatically randomizes your MAC address before connecting to any network.
| Step | Boot Sequence |
|---|---|
| 1 | Network interfaces detected |
| 2 | MAC addresses randomized (per-interface) |
| 3 | NetworkManager starts |
| 4 | Connection to Wi-Fi/Ethernet established |
| 5 | Tor connection initiated |
The spoofed MAC appears as a random vendor OUI. Different MAC on every boot. Can be disabled in Welcome Screen if it causes connectivity issues.
Why it matters: your real MAC address is a hardware identifier logged by routers, access points, and captive portals. Spoofing prevents linking your device across sessions.
Tails includes an "Unsafe Browser" for one specific purpose: logging into captive portals (hotels, airports, cafes).
- Connects DIRECTLY to the network (NOT through Tor)
- Clearly marked with red warning theme
- Only use to authenticate with captive portals
- Close immediately after portal login
- Tor Browser then routes normally through the open connection
WARNING: Traffic through the Unsafe Browser reveals your real IP
to the captive portal and any observer on the local network.
Enable it: Welcome Screen - Additional Settings - Unsafe Browser.
By default, Tails has no root/admin password - this prevents accidental system modification and limits malware impact.
Enable when needed:
Welcome Screen > Additional Settings > Administration Password
Use cases:
- Installing additional packages (apt)
- Running commands as root
- Configuring advanced networking
- Accessing system logs
- Mounting internal hard drives (forensics)
# Once set, use sudo normally:
sudo apt update
sudo apt install <package>
The admin password only lasts for the current session. It is never persisted.
Install extra packages that auto-reinstall on every boot (requires Persistent Storage).
# Method 1: GUI
# Install a package normally with apt (admin password required)
sudo apt update && sudo apt install <package>
# Tails notification: "Install Every Time" or "Install Only Once"
# Select "Install Every Time" to persist
# Method 2: Manual configuration
# Packages are stored in:
/live/persistence/TailsData_unlocked/apt/cache
/live/persistence/TailsData_unlocked/apt/lists
# Persistent config at:
/live/persistence/TailsData_unlocked/live-additional-software.conf
Useful additions for security work:
sudo apt install git python3-pip vim tmux nmap whois
Running Tails in a VM reduces some security properties:
| Concern | Impact |
|---|---|
| Host OS sees all RAM | Host can dump Tails memory, defeating amnesia |
| No MAC spoofing | VM uses virtual NIC, MAC spoofing applies to virtual adapter only |
| Clipboard sharing | Risk of data leaking between host and guest |
| Host disk artifacts | VM disk images, snapshots, swap files contain Tails data |
| Reduced anonymity | Tor Browser fingerprint may differ in VM environment |
When VMs are acceptable:
# QEMU/KVM example (Linux host):
qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-boot d \
-drive file=tails-amd64-X.Y.img,format=raw,readonly=on \
-net nic -net user
# Clone Tails USB to another USB
# Applications → Tails → Tails Installer → Clone the current Tails
# This copies the full Tails system (NOT persistent storage)
# Manual upgrade (automatic upgrades preferred):
# Tails checks for updates on Tor connection
# Notification appears when an upgrade is available
# Follow the guided upgrade process
# If automatic upgrade fails:
# 1. Download new Tails image
# 2. Boot from current Tails USB
# 3. Use Tails Installer to upgrade from the .img file
# Full manual reinstall:
# Use dd or Rufus to write new image (wipes persistent storage!)
# Backup ~/Persistent first
Tails is used by journalists and sources working with sensitive material (recommended by Freedom of the Press Foundation and used alongside SecureDrop).
| Step | Action |
|---|---|
| 1 | Boot Tails from USB on an air-gapped machine |
| 2 | Connect to Tor |
| 3 | Access SecureDrop .onion address |
| 4 | Download submitted documents |
| 5 | Use MAT2 to strip metadata before any processing |
| 6 | Encrypt files with GPG before transferring |
| 7 | Shut down Tails (RAM wiped automatically) |
Key principles:
For red team operators and researchers conducting anonymous OSINT or infrastructure research:
Account creation:
- Use Tails + Tor Browser to create accounts
- Use temporary email services over Tor (.onion preferred)
- Never reuse identities across Tails sessions
- Use KeePassXC in persistent storage to manage credentials
Infrastructure research:
- All reconnaissance through Tor Browser or proxychains
- Use the session's unique Tor circuit
- Request new identity (Ctrl+Shift+U) between targets
- Do not mix personal and operational browsing
OPSEC checklist:
| Check | Item |
|---|---|
| Verify | Booted from clean Tails USB |
| Verify | Persistent storage unlocked only if needed |
| Verify | Tor connected (green onion in taskbar) |
| Verify | Security level set to Safest |
| Verify | No personal accounts logged in |
| Verify | MAT2 used on all files before exfiltration |
| Verify | Shutdown when task complete |
| Step | Action |
|---|---|
| 1 | Obtain a dedicated Tails USB (purchased with cash) |
| 2 | Boot on a machine not associated with you |
| 3 | Connect via public Wi-Fi (not home/work network) |
| 4 | Access the target platform's .onion submission page |
| 5 | Upload documents (stripped of metadata via MAT2) |
| 6 | Note any confirmation codes in KeePassXC |
| 7 | Shut down - session is gone |
| 8 | For follow-up: boot Tails again, unlock persistent storage to retrieve codes |
Never do any of the following:
Tails routes everything through Tor, but Tor itself has known limitations:
Exit node monitoring:
- Exit nodes can see unencrypted traffic (HTTP, DNS over exit)
- Always use HTTPS/TLS for end-to-end encryption
- .onion services avoid exit nodes entirely
Traffic correlation:
- A global adversary observing both entry and exit
can correlate timing to deanonymize users
- Tails cannot protect against this
Guard node exposure:
- Your ISP sees you connecting to a Tor guard node
- Use bridges to hide Tor usage from local observers
- meek/snowflake make traffic look like CDN/WebRTC
Circuit fingerprinting:
- Unique traffic patterns on a circuit can identify
the type of activity (streaming vs. browsing vs. upload)
Hardware fingerprinting:
- Display resolution, USB devices, CPU info can leak
through browser or OS-level queries
- Tor Browser mitigates some (letterboxing) but not all
Cold boot attacks:
- RAM contents can be recovered for seconds-minutes
after power off using physical access
- Tails overwrites RAM on shutdown to mitigate this
- Does NOT protect against liquid nitrogen attacks
(RAM frozen before shutdown)
Evil maid attacks:
- An attacker with physical access to your USB can
modify the bootloader or OS to install backdoors
- Tails does not have Secure Boot verification on all platforms
- Mitigate: keep USB on your person at all times
BIOS/UEFI/firmware implants:
- Tails cannot detect or protect against compromised
firmware on the host machine
- A rootkit in BIOS/UEFI persists across all OS boots
- Use trusted hardware or hardware you control
- Intel ME / AMD PSP run below the OS - invisible to Tails
DMA attacks:
- Thunderbolt/FireWire/PCIe devices can read/write RAM
directly, bypassing OS protections
- Disable unused ports in BIOS when possible
| Threat | Why Tails Fails | Mitigation |
|---|---|---|
| Keylogger (hardware) | Physical device between keyboard and port | Inspect hardware before use |
| Screen capture (camera) | Optical surveillance of your screen | Use in a private location |
| Compromised host firmware | BIOS/UEFI/ME runs below Tails | Use trusted/verified hardware |
| User error | Logging into personal accounts breaks anonymity | Strict OPSEC discipline |
| Tor correlation attacks | Global passive adversary can deanonymize | Defense in depth, limit session time |
| Rubber hose cryptanalysis | Coercion to reveal passwords | Deniable encryption (not built-in), legal counsel |
| Local network monitoring | Tor usage visible unless bridges used | Always use bridges in hostile networks |
| USB forensics | Persistent volume existence is detectable | Use a second decoy USB or no persistence |
| Feature | Tails | Whonix | Qubes OS |
|---|---|---|---|
| Architecture | Live USB, runs in RAM | Two VMs (Gateway + Workstation) | Xen hypervisor with isolated qubes |
| Amnesia | Full - every reboot wipes everything | No - persistent by design | No - persistent by design |
| Tor enforcement | OS-level iptables, all traffic forced through Tor | Gateway VM routes all Workstation traffic through Tor | Only in Whonix qubes (optional) |
| Isolation | None - single monolithic session | Network isolation (Gateway/Workstation split) | Strong - each qube is a separate VM |
| Portability | USB stick, boot on any machine | Requires a host OS or hypervisor | Installed on internal disk |
| Persistence | Optional encrypted LUKS partition | Full disk persistence | Full disk persistence |
| Identity separation | One identity per session | Multiple Workstations possible | Separate qubes per identity |
| Hardware requirements | Minimal (any x86_64 with USB boot) | Moderate (enough RAM for 2 VMs) | High (VT-x/VT-d, 16 GB+ RAM) |
| Ease of use | Simplest | Moderate | Most complex |
| Best threat model | Temporary anonymous sessions, leave no trace | Persistent anonymous workstation, leak-proof networking | Compartmentalized workflows, multiple security domains |
| Scenario | Recommended OS |
|---|---|
| One-time anonymous activity, leave no forensic trace | Tails |
| Persistent anonymous research over days/weeks | Whonix |
| Multiple identities that must never cross-contaminate | Qubes + Whonix |
| Receiving sensitive documents (journalism, whistleblowing) | Tails on air-gapped machine |
| Long-term anonymous server administration | Whonix |
| High-security daily driver with compartmentalization | Qubes OS |
| Travel, using untrusted hardware at hotels/cafes | Tails |
| Red team infrastructure management | Whonix (persistent configs) or Qubes (isolated per-op) |
The Tails project explicitly recommends against using VPNs with Tails. This is a deliberate architectural decision.
| Concern | Detail |
|---|---|
| Tails position | Tor only. VPNs are not supported and break the threat model |
| Why no VPN before Tor | The VPN provider sees your real IP and knows you use Tor. Adds a permanent, identifiable relay. Tor entry guards already rotate |
| Why no VPN after Tor | The VPN exit replaces Tor exit nodes. VPN provider sees all your traffic. Defeats the purpose of Tor's multi-hop design |
| Mullvad argument | Some users want Mullvad to hide Tor usage from ISP. Bridges (obfs4, Snowflake) achieve the same without trusting a VPN provider |
| When VPN is actually useful | On Whonix or Qubes, where VPN and Tor can be properly compartmentalized in separate VMs. Not on Tails |
If your threat model requires hiding Tor usage from your ISP, use Tor bridges instead of a VPN. If you need a VPN for non-Tor traffic, use a separate OS or VM.
The USB drive itself is a physical artifact that can be found, seized, or forensically analyzed.
| Threat | Mitigation |
|---|---|
| USB found during search | Keep it disguised among other USB drives. Use a generic-looking drive, not one labeled "Tails" |
| Persistent volume detected | Existence of LUKS partition is visible. Cannot be hidden or made deniable on Tails |
| USB left unattended | Evil maid can modify bootloader. Keep USB on your person at all times |
| Cross-border searches | Some countries compel decryption. Consider no persistent storage for border crossings |
| Drive failure | USB drives fail without warning. Maintain encrypted backups of persistent data |
| VeraCrypt hidden volumes | Tails does not support VeraCrypt hidden volumes on the same USB. The Tails partition layout is fixed. Use a separate VeraCrypt drive if you need deniable encryption |
| Disposal | Physically destroy the USB (shred, burn, drill) when no longer needed. Secure erase is insufficient for flash storage due to wear leveling |
For maximum deniability: use Tails without persistent storage, boot from a generic USB that could plausibly contain anything, and physically destroy the drive after use.