Veröffentlichung des Backup-Systems Restic 0.18. Angriff auf das CDC

Die Veröffentlichung des Backup-Systems Restic 0.18 wurde vorgestellt, das es ermöglicht, Backups in verschlüsselter Form in einem versionierten Repository mit Deduplizierung zu speichern. Das System ist ursprünglich darauf ausgelegt, dass Backups in nicht vertrauenswürdigen Umgebungen gespeichert werden, und der Zugang zu einem Backup durch Dritte sollte das System nicht gefährden. Beim Erstellen eines Backups können flexible Regeln zum Ein- und Ausschließen von Dateien und Verzeichnissen definiert werden (das Regelwerk ähnelt rsync oder gitignore). Der Betrieb wird in Linux, macOS, Windows und BSD-Systemen unterstützt. Der Projektcode ist in der Programmiersprache Go geschrieben und wird unter der BSD-Lizenz verteilt.

Backups können im lokalen Dateisystem, auf externen Server mit Zugriff über SFTP/SSH oder HTTP REST, in Cloud-Diensten wie Amazon S3, OpenStack Swift, BackBlaze B2, Microsoft Azure Blob Storage und Google Cloud Storage, sowie in allen Speichersystemen, für die rclone-Backends verfügbar sind. Zum Speichern kann auch der vom Projekt entwickelte Rest-Server verwendet werden, der eine höhere Leistung als andere Backends bietet und im Nur-Zusatzmodus betrieben werden kann, was das Löschen oder Ändern von Backups bei Kompromittierung des ursprünglichen Servers und Zugang zu den Verschlüsselungsschlüsseln verhindert.

Das System unterstützt Snapshots, die den Zustand der Verzeichnisstruktur zu verschiedenen Zeitpunkten darstellen (Snapshots werden automatisiert für jedes Backup erstellt). Snapshots können zwischen verschiedenen Repositories kopiert werden. Um den Datenverkehr zu reduzieren, werden beim Erstellen von Backups nur die geänderten Daten kopiert. Ein Snapshot mit einem Backup kann als virtuelles Laufwerk eingebunden werden (das Mounten erfolgt über FUSE). Außerdem stehen Befehle zur Analyse von Änderungen und zur selektiven Wiederherstellung von Dateien zur Verfügung.

Das Backup-Speichersystem in Restic arbeitet nicht mit ganzen Dateien, sondern mit variablen Größenblöcken, die mithilfe des Rabin-Signaturverfahrens ausgewählt werden. Die Informationen werden in Bezug auf den Inhalt und nicht auf die Dateinamen gespeichert (die mit den Daten verbundenen Namen und Objekte werden auf der Ebene der Blockmetadaten definiert). Zur Platzersparnis im Speicher und zur Vermeidung überflüssiger Datenkopien wird Deduplizierung durchgeführt.

Auf externen Servern wird die Information verschlüsselt gespeichert – für Prüfziffern und Deduplizierung werden SHA-256-Hashes verwendet, für die Verschlüsselung der Algorithmus AES-256-CTR, und zur Gewährleistung der Integrität werden Authentifizierungscodes basierend auf Poly1305-AES verwendet. Eine Überprüfung der Sicherungskopie anhand von Prüfziffern und Authentifizierungscodes ist vorgesehen, um zu bestätigen, dass die Integrität der Dateien nicht beeinträchtigt wurde.

In der neuen Version wurde die Möglichkeit eines Angriffs (PDF) zur Feststellung der Existenz bestimmter Dateien im verschlüsselten Speicher von Sicherungskopien beseitigt. Der Angriff ermöglicht es zu erkennen, ob sich eine bestimmte Datei im verschlüsselten Backup befindet, indem auf den Speicher von Sicherungskopien zugegriffen wird oder durch die Analyse des Netzwerkverkehrs mit den Sicherungskopien. Beispielsweise kann ein Serveradministrator, auf dem die Backups gespeichert werden, ein Internetanbieter oder Geheimdienste, die Zugriff erhalten haben, einen Angriff durchführen. zu einem Server Das Ziel des Angriffs kann eine Untersuchung von Datenlecks sein, bei der Geheimdienste die Möglichkeit haben, das Vorhandensein von relevanten Dokumenten im Speicher der Sicherungskopien zu bewerten.

Um die Schwachstelle auszunutzen, muss der Angreifer es schaffen, seine Daten in die Sicherungskopie des Opfers einzufügen oder wissen, dass sich eine ihm bekannte Datei in der Sicherungskopie befindet. Wenn eine Datei in der Sicherungskopie vorhanden ist, die dem Angreifer bekannt ist (zum Beispiel eine Art von systemgeneriertem oder multimedialem Inhalt), kann der Angreifer durch den Zugriff auf den verschlüsselten Speicher feststellen, ob es darin andere für ihn interessante Dateien gibt.

Die Methode basiert darauf, dass man aufgrund der Besonderheiten der Inhaltskompression die Parameter der Blöcke bestimmen kann, die beim Zerlegen des Inhalts verwendet werden. Um solche Parameter zu bestimmen, reicht es aus, 3 verschlüsselte Blöcke zu identifizieren, die Daten enthalten, die dem Angreifer bekannt sind.

Die Schwachstelle ist nicht spezifisch für Restic und betrifft andere Backup-Systeme, die zur Datenaufteilung die Technik CDC (Content-Defined Chunking) verwenden, wie BorgBackup, Tarsnap, Bupstash und Duplicacy. Bei Tarsnap wurde das Problem in der Version 1.0.41 behoben, bei BorgBackup wird an einem Fix gearbeitet, der in den Branch borg 2 aufgenommen werden soll. Bei Bupstash gab es die letzte Änderung vor 2 Jahren, und bei Duplicacy vor 4 Monaten.

Zusätzlich wird angemerkt, dass in Systemen, die Deduplication verwenden, es einfacher ist, Dateien in das Backup hinzuzufügen, wenn dies möglich ist, und das Vorhandensein interessierender Dateien indirekt zu bestimmen. Nach dem Hinzufügen der zu überprüfenden Datei kann die Änderung der Speicherkapazität bewertet werden – wenn die Datei bereits im Speicher vorhanden ist, führt das erneute Hinzufügen aufgrund der Deduplication nicht zu einer signifikanten Vergrößerung des Speicherplatzes.

Neben der Beseitigung von Schwachstellen in Restic 0.18 wurden auch einige Neuerungen vorgeschlagen:

  • Es wurde experimentelle Unterstützung für "kalte" Backup-Speicher (Daten sind innerhalb von Minuten oder Stunden nach Anfrage verfügbar), die das S3-Protokoll unterstützen, wie Amazon S3 Glacier, hinzugefügt.
  • Die Befehle check und tag unterstützen jetzt die Ausgabe im JSON-Format.
  • Bei der Erstellung von Images für das GitHub Container Registry wurden die Empfehlungen von SLSA (Supply-chain Levels for Software Artifacts) berücksichtigt.
  • Der Befehl ls erhielt die Möglichkeit, die Sortiermethode der Ausgabe auszuwählen. Im Befehl find wird standardmäßig nach Datum (von neu nach alt) sortiert.
  • Es wurde die Möglichkeit hinzugefügt, Dateien mit einer bestimmten Größe von der Neuverpackung auszuschließen.
  • Eine Einstellung zum Aktivieren/Deaktivieren der Wiederherstellung erweiterter Dateiattribute wurde hinzugefügt.
  • Unterstützung für das Betriebssystem DragonFlyBSD wurde hinzugefügt.
  • Unterstützung für erweiterte Dateiattribute auf Systemen mit NetBSD 10+ wurde hinzugefügt.
  • Im Branch restic 0.19.0 ist die Entfernung der Unterstützung für veraltete Funktionen, die über die Einstellungen deprecate-legacy-index, deprecate-s3-legacy-layout, explicit-s3-anonymous-auth und safe-forget-keep-tags aktiviert wurden, vorgesehen.
  • Die Unterstützung für ältere Versionen von Windows und macOS wurde eingestellt, nun ist mindestens Windows 10, Windows Server 2016 oder macOS 11 erforderlich. Die Unterstützung für TLS-Versionen unter 1.2 wurde eingestellt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4