Files
sanctum/SECURITY_AUDIT.md
T

11 KiB

Sanctum Security Audit & Remediation Log (v0.8.0)

Dieses Dokument fasst alle 33 Findings aus zwei umfassenden externen Sicherheitsaudits zusammen, dokumentiert die angewandten Härtungsmaßnahmen, referenziert die jeweiligen Git-Commits und benennt die zugehörigen automatisierten Regressionstests.


Audit-Zusammenfassung

  • Zielversion: Sanctum v0.8.0
  • Behobene Findings: 33 / 33 (100%)
  • Test-Ergebnis: 117 / 117 Tests erfolgreich (100% Pass Rate)
  • Quality Gates: cargo fmt --check (100% sauber), cargo clippy --all-targets -- -D warnings (0 Warnungen)
  • Container-Format: Upgrade auf Container-Format V3 mit kanonischer Metadaten-Authentifizierung (HMAC-SHA256) und Chunk-Replay-Schutz (Generation-gebundenes AAD).

Übersicht aller Findings

Finding Priorität Modul Kurzbeschreibung Commit Status & Regressionstest
S-01 HOCH sync --delete löscht keine ausgeschlossenen Pfade mehr; Schutz ganzer Verzeichnisbäume; --delete-excluded eingeführt 374150e Bestanden (test_s01_delete_preserves_excluded_files_and_directories, test_s01_pull_delete_preserves_local_excluded_and_leak_files)
V-02 HOCH vfs Fehlender Chunk innerhalb erwarteter Dateigröße löst E/A-Fehler aus statt stiller Dateikürzung 5337644 Bestanden (test_v02_missing_chunk_returns_error_instead_of_silent_truncation)
V-01 HOCH vfs, carrier copy() delegiert im Carrier-Modus korrekt an CarrierFs 151fdba Bestanden (test_v01_carrier_fs_copy_delegation_and_functionality)
K-01 HOCH crypto, storage, verify Format V3: Kanonische Metadaten-Authentifizierung via HMAC-SHA256 über alle Inodes ad531d8 Bestanden (test_k01_metadata_tampering_detected_by_verify, test_k01_upgrade_format_v2_to_v3)
K-02 HOCH crypto, storage Format V3: Chunk-Replay-Schutz mittels 24-Byte AAD (inkl. monotoner Generation) 36a4094 Bestanden (test_k02_chunk_replay_protection_with_generation_aad, test_k02_chunk_replay_detected_by_vfs_and_crypto)
K-03 HOCH crypto, recovery, cli Notfallblatt bleibt bei passwd dauerhaft gültig; sanctum rekey zur Schlüsselrotation bdddd81 Bestanden (test_k03_passwd_sheet_remains_valid_and_rekey_revokes_old_sheet)
S-02 MITTEL sync Plattformunabhängiger Pfad-Zusammenbau und Traversal-Schutz 7b0f061 Bestanden (test_s02_platform_independent_path_construction_and_traversal_rejection)
S-03 MITTEL sync Symlink-Erkennung, Zählung und Zyklenschutz 888c86c Bestanden (test_s03_symlink_skipping_and_cycle_protection)
S-04 MITTEL sync Beseitigung von TOCTOU bei Dateigrößen durch Verwendung von bytes_written f557a9d Bestanden (test_s04_toctou_file_size_uses_bytes_written)
S-05 MITTEL sync Vollständiges Löschen und Schreddern aller Chunks beim Kürzen auf 0 Bytes 9634beb Bestanden (test_s05_zero_byte_file_truncate_removes_all_chunks)
S-06 MITTEL storage, mount, sync Advisory Lock in Metadaten verhindert parallelen Mount & gleichzeitige Schreibzugriffe f9733df Bestanden (test_s06_advisory_lock_blocks_sync_and_force_overrides)
V-03 MITTEL vfs, windows RAII Memory Lock Guard verhindert vorzeitiges Freigeben gesperrter Speicherseiten beim Klonen 5285962 Bestanden (test_vfs_memory_lock_retention_on_clone_v03)
M-01 MITTEL crypto Erhöhung der Argon2id Standardparameter auf 256 MiB RAM und 4 Iterationen a502845 Bestanden (test_m01_default_kdf_params_256mib_4_iterations)
M-02 MITTEL build Aktivierung von overflow-checks = true im Release-Profil ad9148d Bestanden (test_m02_release_profile_enables_overflow_checks)
M-03 MITTEL mount, doc Ausgabe von WebDAV-Zugangsdaten und Dokumentation manueller Mount-Befehle unter Linux 2af14ee Bestanden (test_m03_format_linux_mount_instructions)
M-04 MITTEL doc, threat_model Dokumentation des Bedrohungsmodells für Session-Tokens im Nutzerkontext e496c41 Bestanden (Dokumentiert in README.md, THREAT_MODEL.md)
M-05 MITTEL crypto, storage Verifikation der Schemagleichheit zwischen Standard- und Alibi-/Carrier-Containern a2c16ed Bestanden (test_m05_deniability_schema_equality_standard_vs_hidden)
V-05 NIEDRIG vfs Protokollierung von Flush-Fehlern als error! in SanctumFile::drop und zwingender Flush bei close 17ac4f9 Bestanden (test_v05_sanctum_file_drop_flushes_dirty_chunk_automatically)
V-06 NIEDRIG vfs Sparse Writes: Null-Auffüllung von Lücken zwischen Dateiende und Seek-Offset e300a76 Bestanden (test_v06_sparse_write_zero_fills_gap)
V-07 NIEDRIG vfs RFC-4918 konforme Overwrite-Semantik und Verzeichnis-Konfliktprüfungen in copy 7303934 Bestanden (test_v07_copy_overwrite_existing_file_semantics)
V-08 NIEDRIG vfs, pathutil Disallow Tabulator-Steuerzeichen (0x09) in validate_path_safety 708da24 Bestanden (test_path_safety_rejects_null_bytes_and_control_chars)
V-09 NIEDRIG storage Kryptografisches Schreddern von Datenblöcken vor physischer Chunk-Löschung in truncate_chunks_after 1ba67cc Bestanden (test_v09_truncate_chunks_after_shreds_before_deletion)
S-07 NIEDRIG sync Überspringen ungültiger Windows-Dateinamen (files_skipped_invalid) ohne Sync-Abbruch 15adf79 Bestanden (test_s07_skip_invalid_windows_filenames_push_and_pull)
S-08 NIEDRIG sync Präzisierung und Dokumentation des Glob- und Pfad-Matchings 92db21d Bestanden (test_s08_refined_glob_and_directory_exclusions)
S-09 NIEDRIG sync Schutz vor unbeabsichtigtem Überschreiben bei sync pull c7c0ed8 Bestanden (test_s09_pull_backup_and_update_conflict_safety)
U-01 NIEDRIG upgrade Erzwingen von Pre-Hashing (allow_legacy = false) bei Minisign-Verifikation 78a9c23 Bestanden (test_u01_reject_legacy_unhashed_signature)
U-02 NIEDRIG upgrade Validierung der Release-Version im Minisign trusted comment gegen den Release-Tag 8dd5449 Bestanden (test_u02_validate_trusted_comment_version_matching, test_u02_reject_mismatched_release_tag_replay)
U-03 NIEDRIG upgrade Konfiguration eines sekundären Backup-Release-Public-Keys bb86447 Bestanden (test_u03_verify_signature_with_backup_key_fallback, test_u03_verify_signature_rejects_untrusted_third_party_key)
Z-01 NIEDRIG mount Schutz des Alibi-/Decoy-Passworts im Speicher via Zeroizing<String> 07afe34 Bestanden (test_z01_decoy_password_zeroize_memory)
Z-02 NIEDRIG storage Robuste Wiederherstellung bei vergiftetem SQLite-Mutex (PoisonError) 5a1fd7c Bestanden (test_z02_poisoned_sqlite_mutex_recovery)
Z-03 NIEDRIG mount, doc Dokumentation der Forensik-Eigenschaften von temporären WAL- und SHM-Dateien 487f999 Bestanden (test_wal_and_shm_cleanup_on_close)
Z-04 NIEDRIG vfs Implementierung des WebDAV Quota-Reports (DAV:quota-available-bytes, DAV:quota-used-bytes) 17908a6 Bestanden (test_z04_webdav_quota_report)
V-04 NIEDRIG vfs, carrier, mount Strukturierter Anti-Leak Shield (Exakt, Präfixe, Suffixe, ADS, .trash*) & benutzerdefinierte Filterliste 45572b7 Bestanden (test_is_leak_file, test_v04_custom_anti_leak_rules_and_loader)

Detaillierte Beschreibungen der Kernarchitektur-Härtungen

1. Container-Format V3 (K-01 & K-02)

  • Format-Version: Neue Container werden mit Format V3 (format_version = 3) erzeugt.
  • Kanonische Metadaten-Authentifizierung (K-01):
    • Alle Inodes des Containers werden kanonisch serialisiert (id, parent_id, name, is_dir, size, created_at, modified_at, is_carrier, chunk_count).
    • Eine HMAC-SHA-256 MAC wird über diese Struktur berechnet. Der MAC-Schlüssel wird deterministisch per HKDF-SHA256 aus dem DEK abgeleitet (SANCTUM_META_MAC_V3).
    • Der MAC-Wert und ein monotoner Zähler (metadata_gen) werden in der Tabelle meta abgelegt.
    • Jede Modifikation aktualisiert die MAC. sanctum verify detektiert jegliche unbefugte Manipulation an Metadaten sofort.
    • Bestehende V1/V2 Container können mit sanctum upgrade-format --path <container> unterbrechungsfrei auf V3 migriert werden.
  • Chunk-Replay-Schutz (K-02):
    • Jeder Chunk besitzt nun ein Attribut generation in der Tabelle chunks.
    • Bei jeder Überschreibung eines Datenblocks wird die Generation inkrementiert.
    • Das Additional Authenticated Data (AAD) für AES-256-GCM wurde für V3 von 16 Bytes auf 24 Bytes erweitert (node_id || chunk_index || generation).
    • Ein Wiedereinspielen eines älteren gültigen Ciphertexts führt unweigerlich zu einem Authentifizierungsfehler (AEAD decrypt error).

2. Notfallblatt-Management & Rekeying (K-03)

  • Die BIP-39 Notfallkarte kodiert direkt den Master-Verschlüsselungsschlüssel (DEK). Bei einer Passwortänderung (sanctum passwd) bleibt der DEK intakt, sodass das ausgedruckte Notfallblatt unverändert gültig bleibt.
  • Um ein kompromittiertes Notfallblatt zu invalidieren, wurde das Kommando sanctum rekey eingeführt:
    • Generiert einen frischen DEK.
    • Entschlüsselt alle Chunks und verschlüsselt sie mit dem neuen DEK (und frischer Generation).
    • Schreddert die alten Chunks unwiderruflich im Freispeicher.
    • Generiert eine neue 24-Wort Notfallphrase für den Nutzer.

3. Anti-Leak Shield Upgrade (V-04)

  • Vollständige Trennung der Filterregeln in strukturierte Kategorien:
    • Exakte Namen: thumbs.db, desktop.ini, folder.jpg, .ds_store, .directory, .fseventsd, .spotlight-v100.
    • Präfixe: ~$* (Office-Temporärdateien), ._* (AppleDouble Resource Forks).
    • Suffixe: .tmp, .temp, .crdownload, .part, .partial, ~* (Editor-Backups).
    • NTFS Alternate Data Streams (ADS): Alle Zugriffe mit : (z. B. Zone.Identifier).
    • Wildcards: .trash*.
  • Option --anti-leak-list <FILE> für benutzerdefinierte Ausschlussmuster.
  • Statistische Zählung aller blockierten Schreib-/Lesezugriffe und transparente Zusammenfassung beim Unmount.

Verifikationsnachweis

Alle 117 Unit- und Integrationstests wurden auf einem Windows x86_64 Host mit 100% Erfolgsquote ausgeführt. Die Release-Paketierung für Windows und Linux musl ist voll automatisiert und wird mit Minisign kryptografisch abgesichert.