Technical Limitations & Boundaries
Engineering Philosophy
Honest tools build trusted outcomes. A forensic instrument that overpromises is not merely useless — it is actively dangerous. If a court or an investigator relies on a guarantee that the underlying hardware silently violates, the entire chain of custody collapses. s0 is built to be precise about what it can and cannot accomplish. Every limitation documented here is a constraint of the physical world, the filesystem layer, or the current development state — not a gap to be papered over with marketing language.
Module Status at a Glance
| Module | Status | Notes |
|---|---|---|
| Module 1 — Drive Eraser (CLI) | Fully validated | Full overwrite on images & block devices; ATA/NVMe coded & fixture-tested |
| Module 1 — Live ISO (Bootable USB) | Scaffolded (bare metal pending) | Build scripts complete; not boot-tested on physical hardware |
| Module 2 — File/Folder Eraser | Fully validated | Linux, Windows, macOS all implemented and exercised |
| Module 3 — File Carver | Fully validated | Multi-format header/footer + multi-filesystem structure carving |
| Module 4 — Audit Ledger | Fully validated | Single-authority hash chain (not distributed consensus — see §9) |
Reading the Status Column
"Fully real & validated" means the code path has been exercised against real or simulated block devices and the outputs have been verified. "Scaffolded, unverified on bare metal" means the code is complete and syntactically correct but has not been run in its intended hardware environment.
1. Flash Translation Layer (FTL) — The Fundamental SSD Constraint
What It Is
When you issue a write to logical sector 0 of an SSD, you are communicating with the drive's Flash Translation Layer — a firmware-level indirection table that maps logical block addresses (LBAs) to physical NAND flash pages. The FTL is free to satisfy your write by allocating a fresh physical block, marking your data as committed to the new block, and leaving the old physical block in a "stale" state until the drive's internal garbage collector reclaims it.
From the operating system's perspective, the write succeeded. From a forensic perspective, the original data still exists at a physical location the host operating system has no visibility into.
Why It Exists
NAND flash cells degrade with each program/erase cycle. The FTL exists to distribute write load across all physical cells (wear leveling), absorb bursty writes (write buffering), and extend the operational life of the device. These are correct engineering tradeoffs — but they make host-level overwrite semantically unreliable for secure erasure.
Impact on s0
OVERWRITE_ZERO_1PASS, OVERWRITE_RANDOM_1PASS, and all multi-pass DOD/Gutmann patterns executed at the host level operate against logical addresses only. The SSD firmware decides where the actual bits land physically.
Host-Level Overwrite Cannot Guarantee SSD Erasure
Writing zeros or random data to every logical sector of an SSD does not guarantee that all physical NAND pages have been zeroed. Overprovisioned zones, wear-leveled blocks, and recently-written stale pages are entirely outside host-level visibility.
What to Do Instead
s0 explicitly detects NVMe and SATA SSD targets and prefers firmware-level commands:
NVME_SANITIZE(NVMe Sanitize Block Erase / Crypto Erase) — issued viaioctl(fd, NVME_IOCTL_ADMIN_CMD, ...), instructs the controller to erase all physical blocks including overprovisioned areas.ATA_SECURE_ERASE(ATA Security Erase Unit) — issued viahdparm --security-erase, resets all user data including HPA/DCO-hidden zones.
These commands operate at the controller firmware level, resetting the FTL map and all physical blocks. They are the only host-accessible mechanisms that provide high-assurance erasure for SSDs.
2. Copy-on-Write Filesystems
Affected Filesystems
| Filesystem | Platforms | CoW Behavior |
|---|---|---|
| Btrfs | Linux | Always CoW on file writes |
| ZFS | Linux (OpenZFS) | Always CoW |
| APFS | macOS | Always CoW |
| ReFS | Windows Server | Always CoW |
What Happens During File Overwrite
When s0's Module 2 (File Eraser) opens a file on a CoW filesystem and writes overwrite passes, the filesystem does not modify the original data blocks in place. Instead it:
- Allocates new blocks for the new (overwritten) content.
- Updates the B-tree or extent tree to point the file's inode to the new blocks.
- Marks the old blocks as free — but does not immediately zero them.
- Schedules the old blocks for reclamation during the next garbage collection pass.
The original file content remains physically intact until the garbage collector runs — which may not happen for seconds, minutes, or never if the volume is unmounted first.
How s0 Handles This
s0 detects CoW filesystems at runtime:
- Btrfs / ZFS: Parsed from
/proc/mounts(Linux). - APFS: Detected via platform check (
sys.platform == 'darwin'). - ReFS: Detected via
GetVolumeInformationW(Windows).
When a CoW filesystem is detected, s0 emits an explicit signed warning in the operation certificate's notes field. The certificate is cryptographically signed, so this warning cannot be silently removed downstream.
File-Level Overwrite Is Ineffective on CoW Filesystems
On Btrfs, ZFS, APFS, and ReFS, overwriting a file's content does not overwrite the original data blocks. The certificate will carry a cow_filesystem_warning note. Treat this as informational, not as a guarantee of erasure.
What to Do Instead
For maximum assurance on CoW volumes:
- Use
NVME_SANITIZEorATA_SECURE_ERASEto wipe the entire physical device. - For software RAID / ZFS pools: issue a
zpool destroyfollowed by a block-level device wipe. - Accept that file-level erasure on CoW is a best-effort operation and document this in your chain of custody.
3. Journaling Filesystems
Affected Filesystems
| Filesystem | Journal Type | Scope |
|---|---|---|
ext4 (with has_journal) |
Circular journal (journal_data_writeback default) |
Metadata journal by default |
| NTFS | $LogFile + $UsnJrnl |
Metadata + change journal |
| HFS+ | Journal | Metadata |
The Journal Retention Window
Journaling filesystems maintain a circular log of metadata changes. When s0 deletes a file and overwrites its directory entry, the journal may still contain records that prove the file existed: its name, size, allocation timestamp, and inode number.
The journal overwrites itself as new operations fill the circular buffer — but there is a window between the s0 operation and the journal recycling that window. On a lightly-used forensic workstation in airplane mode, this window could persist indefinitely.
Journal May Retain File Existence Records
After secure deletion with s0 on ext4 or NTFS, the filesystem journal may temporarily (or permanently, on a static volume) retain metadata entries that prove the file existed. s0 discloses this in the operation_notes field of the audit certificate.
What to Do Instead
- For ext4: mount with
data=journalto journal data in addition to metadata, then wipe the journal (tune2fs -O ^has_journal+ surface wipe) — or wipe the entire volume. - For NTFS: a full volume wipe is the only reliable option for clearing
$LogFileand$UsnJrnl. - Accept journal residue as a known, documented limitation when file-level erasure is the only option.
4. NTFS Carving Limitations
Module 3's NTFS structure-based carver operates on raw images and block devices. The following constraints apply:
No Transaction Log Replay
s0 does not replay $LogFile journal entries. This means:
- File metadata states visible only in uncommitted or rolled-back journal transactions are not recovered.
- Fragmented MFT entries that were in-flight during a crash may not be reassembled.
This is a deliberate choice: journal replay requires understanding the exact transaction state at crash time, which is unverifiable without the original NTFS driver state machine.
USN Journal ($UsnJrnl) Not Parsed
The NTFS Update Sequence Number Journal records every file operation but is not currently parsed by the carver. File names and operation timestamps embedded in $UsnJrnl are not surfaced in s0 recovery output.
Alternate Data Streams (ADS)
Only the primary unnamed $DATA stream is extracted per MFT entry. Secondary named streams (e.g., file.txt:Zone.Identifier) are bypassed. If your investigation targets ADS content specifically, use a dedicated NTFS ADS enumeration tool.
ADS Enumeration on Live Systems
s0 Module 2's Windows implementation does enumerate ADS on live files during secure deletion (to ensure named streams are overwritten). The carver limitation applies only to post-mortem image analysis.
5. FAT32 / exFAT Carving Limitations
No FAT Chain Following
The FAT (File Allocation Table) chain defines how clusters are linked for fragmented files. s0's FAT32/exFAT carver does not follow FAT chain entries. Recovery is limited to:
- Contiguous cluster runs: Files whose data occupies sequentially allocated clusters.
- Header/footer signature matching: Files identifiable by magic bytes at their start (and optionally their end).
Fragmented Files May Be Incomplete
If a file's clusters are scattered non-contiguously and the FAT chain has been zeroed or overwritten, s0 cannot reassemble the complete file. The carver will return what it can find at the first contiguous run, which may be a partial (and therefore corrupt) file.
Fragmentation Means Partial Recovery
On heavily fragmented FAT32/exFAT volumes, recovered files may be truncated or corrupt. Confidence scores in the recovery index reflect structural validity of what was found, not completeness of the original file.
6. Live ISO — Bare Metal Status
The Live ISO build infrastructure (linux/iso/) is fully specified against live-build syntax, including:
- Preseed configuration for unattended boot.
- systemd unit files for privilege-separated web dashboard launch.
- Package lists for forensic dependencies.
ISO Has Not Been Boot-Tested on Physical Hardware
The development environment lacks sudo and debootstrap, which are required to run lb build. The ISO build scripts are complete and syntactically correct, but the resulting image has not been verified to boot on real hardware or in a Type-1 hypervisor.
Treat the Live ISO as: scaffolded, specified, and unverified on bare metal.
This does not affect Modules 1–4 on installed systems. Only the ISO deployment path carries this caveat.
7. What the File Carver Cannot Recover
Regardless of filesystem or image type, the following categories of data are unrecoverable by design or by physics:
| Scenario | Why It Cannot Be Recovered |
|---|---|
| Encrypted volumes (VeraCrypt, BitLocker, LUKS) | Encrypted blocks are computationally indistinguishable from random noise; no header signatures are present |
| Physically overwritten data | If sectors have been written with zeros or random data after original content, the original is gone |
| Heavily fragmented files (no FAT chain) | Without the allocation chain, clusters cannot be logically reassembled |
| Bad sectors covering the target data | Unreadable sectors produce I/O errors; data in those sectors is inaccessible |
| FTL-managed overprovisioned blocks | These zones are below the host-visible LBA address space |
| Data inside compressed NTFS streams | Compression context is partially available but full reassembly is not currently implemented |
8. When to Use Firmware Erase vs. File-Level Erase
Use this decision guide before selecting an erasure method:
Is the target a solid-state device (SSD, NVMe, eMMC, SD card)?
├── YES → Does the drive support NVMe Sanitize or ATA Secure Erase?
│ ├── YES → Use NVME_SANITIZE or ATA_SECURE_ERASE
│ │ (firmware-level, covers all physical blocks)
│ └── NO → Use OVERWRITE_ZERO_1PASS + document the limitation
│ (best effort; FTL residue is possible)
└── NO (HDD / spinning disk)
├── Is the data on a CoW filesystem (Btrfs, ZFS, APFS, ReFS)?
│ ├── YES → Wipe the entire volume at block device level.
│ │ File-level overwrite is ineffective on CoW.
│ └── NO (ext4, NTFS, FAT32, XFS, etc.)
│ ├── Single file? → Use Module 2 (File Eraser)
│ │ Note: journal residue window applies on ext4/NTFS
│ └── Entire drive? → Use Module 1 (Drive Eraser)
│ Select OVERWRITE_ZERO_1PASS (NIST 800-88 Clear) or
│ OVERWRITE_RANDOM_3PASS (NIST 800-88 Purge for HDDs)
9. Hash Chain vs. Distributed Blockchain
s0's Audit Ledger (Module 4) is sometimes described as a "blockchain." This requires precise clarification.
What s0 Has
A local, single-authority hash chain stored in SQLite:
- Each audit record includes the SHA-256 hash of the previous record.
- Any modification to any SQLite row breaks the hash chain continuity from that point forward.
- Chain integrity is verifiable with a single deterministic pass:
s0 verify-chain.
What s0 Does Not Have
- No proof-of-work (no mining, no computational puzzle).
- No peer-to-peer network (no nodes, no gossip protocol).
- No distributed consensus (no Nakamoto consensus, no PoS validators).
- No integration with Ethereum, Solana, or any public blockchain.
Why This Is the Right Design
Air-Gap Context Changes the Threat Model
Forensic workstations operate on air-gapped networks by design. Distributed consensus requires network connectivity and introduces latency, third-party dependencies, and transaction fees — none of which add security value when the threat is local record tampering by a single actor.
The tamper-evidence guarantee of a hash chain is mathematically equivalent to a blockchain for single-authority forensic use: if anyone modifies a historical record, the chain breaks and s0 verify-chain reports BROKEN at the exact record where tampering occurred.
Distributed consensus solves the Byzantine generals problem — coordinating agreement among mutually distrusting parties across a network. That problem does not exist on an air-gapped forensic workstation. The simpler, faster, auditable local hash chain is the correct tool.
10. Platform-Specific Validation Reports
Detailed breakdown of tested vs. simulated hardware capabilities across operating environments: