Erkennung von Signaturkompromittierung
Erkennung von Signaturkompromittierung
SignaturesCompromiseDetector ist der Einstiegspunkt für diesen Leitfaden: Er prüft den Revisionsverlauf eines signierten Dokuments auf Anzeichen dafür, dass Inhalte nach dem letzten Anbringen der Signatur hinzugefügt wurden, und meldet das Gefundene als CompromiseCheckResult. Dies ist die Sicherheitsfläche, die von diesem Cluster der Wissensdatenbank abgedeckt wird— es deckt nicht das Erstellen oder Anwenden von Signaturen bzw. die Dokumentenverschlüsselung ab; es untersucht nur Signaturen, die bereits auf einem Dokument vorhanden sind.
Durchführen einer Kompromittierungsprüfung
Erstelle SignaturesCompromiseDetector mit dem Dokument, das du prüfen möchtest, und rufe dann SignaturesCompromiseDetector.check() auf. Die Prüfung durchläuft jede bereits im Dokument vorhandene Signatur und sucht nach unsignierten Bytes, die nach der letzten signierten Revision angehängt wurden— ein Hinweis darauf, dass Inhalte nachträglich hinzugefügt worden sein könnten— und toleriert dabei legitimes Langzeitvalidierungsmaterial (wie z.B. einen Dokumentensicherheits-Store oder einen Archivzeitstempel), das von einer späteren, überdeckenden Signatur hinzugefügt wurde.
Interpretation des Ergebnisses
SignaturesCompromiseDetector.check() gibt ein CompromiseCheckResult mit vier Eigenschaften zurück:
CompromiseCheckResult.has_compromised_signatures—True, wenn irgendeine Signatur einen Manipulationsindikator zeigte.CompromiseCheckResult.compromised— spiegeltCompromiseCheckResult.has_compromised_signatures, bereitgestellt als schreibgeschützter Komfort-Alias.CompromiseCheckResult.signatures_coverage— die Anzahl der Signaturen, die der Detektor im Dokument geprüft hat.CompromiseCheckResult.reasons— eine Liste kurzer Zeichenketten, die beschreiben, warum das Dokument markiert wurde und wann.
Ein Dokument ohne Signaturen oder überhaupt kein Dokument wird als nicht kompromittiert gemeldet, wobei CompromiseCheckResult.signatures_coverage gleich 0 ist.
Tipps und bewährte Verfahren
- Behandle
CompromiseCheckResult.compromisedundCompromiseCheckResult.has_compromised_signaturesals austauschbar — sie geben stets denselben Wert zurück. - Überprüfe
CompromiseCheckResult.signatures_coverage, bevor du einemFalse-Ergebnis vertraust: Eine Abdeckung von0bedeutet, dass der Detektor keine zu prüfenden Signaturen gefunden hat, nicht dass vorhandene Signaturen als intakt verifiziert wurden. - Lese
CompromiseCheckResult.reasons, wennCompromiseCheckResult.has_compromised_signaturesTrueist — die Liste erklärt, welche Heuristik ausgelöst wurde, was beim Protokollieren oder beim Anzeigen des Ergebnisses für einen Prüfer nützlich ist. SignaturesCompromiseDetectorprüft die Versionsgeschichte auf Manipulationsindikatoren; es validiert die Integrität kryptografischer Signaturen nicht selbst, daher sollten Sie es mit den eigenen Signaturvalidierungsergebnissen des Dokuments kombinieren, wo das für Ihren Arbeitsablauf wichtig ist.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
CompromiseCheckResult.signatures_coverage ist 0 für ein Dokument, von dem Sie wissen, dass es signiert ist | SignaturesCompromiseDetector wurde ohne Dokument erstellt, oder das Dokumentobjekt hat keine zugänglichen Signaturen | Stellen Sie sicher, dass das an SignaturesCompromiseDetector übergebene Dokument seine Signaturen offenlegt, bevor Sie SignaturesCompromiseDetector.check() aufrufen |
CompromiseCheckResult.reasons ist leer, obwohl Sie eine Erklärung erwartet haben | CompromiseCheckResult.has_compromised_signatures ist False für dieses Dokument | Gründe werden nur ausgefüllt, wenn tatsächlich ein Kompromissindikator gefunden wurde; eine leere Liste bei einem sauberen Ergebnis ist zu erwarten |
| Ein legitim aktualisiertes PDF (z.B. eines mit einem hinzugefügten Langzeitvalidierungs-Zeitstempel) wird als kompromittiert markiert | Die spätere Ergänzung ist nicht vollständig durch eine nachfolgende Signatur abgedeckt oder wird nicht als reines Validierungsmaterial erkannt | Führen Sie die Prüfung erneut durch, nachdem Sie bestätigt haben, dass das Update durch eine geeignete abdeckende Signatur oder einen Zeitstempel erfolgt ist, und prüfen Sie CompromiseCheckResult.reasons auf den konkreten Auslöser |
FAQ
Was prüft CompromiseCheckResult.compromised eigentlich?
Es meldet denselben Wert wie CompromiseCheckResult.has_compromised_signatures: ob SignaturesCompromiseDetector.check() irgendeinen Manipulationsindikator in den Signaturen des Dokuments gefunden hat.
Bedeutet ein signatures_coverage von 0, dass das Dokument sicher ist?
Nein — das bedeutet, dass keine Signaturen zum Untersuchen gefunden wurden. SignaturesCompromiseDetector kann nicht über Signaturen berichten, die es nicht sehen kann, daher ist eine 0-Abdeckung ein Ergebnis von “nothing to check”, nicht eine Bestätigung der Integrität.
Kann SignaturesCompromiseDetector eine kryptografische Signatur erstellen oder verifizieren?
Nein. Es prüft nur die vorhandene Versionsgeschichte eines Dokuments auf Hinweise, dass Inhalte nach der letzten Signatur hinzugefügt wurden. Das Erstellen, Anwenden oder kryptografische Validieren von Signaturen fällt nicht in den Aufgabenbereich dieser Klasse.
Wird das Hinzufügen eines legitimen Zeitstempels nach der Signatur immer ein compromise finding auslösen?
Nicht unbedingt. Der Detektor ist so konzipiert, dass er eine spätere Ergänzung toleriert, die selbst durch eine nachfolgende Signatur abgedeckt ist, oder die lediglich Validierungsmaterial hinzufügt, anstatt neuen Inhalt. Prüfen Sie CompromiseCheckResult.reasons, wenn Sie einen unerwarteten Fund sehen.
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
SignaturesCompromiseDetector | Untersucht ein signiertes Dokument nach Manipulationsindikatoren nach der letzten Signatur |
SignaturesCompromiseDetector.check() | Führt die Prüfung durch und gibt ein CompromiseCheckResult zurück |
CompromiseCheckResult | Das Ergebnis einer Kompromittierungsprüfung |
CompromiseCheckResult.compromised | Schreibgeschützter Alias für CompromiseCheckResult.has_compromised_signatures |
CompromiseCheckResult.has_compromised_signatures | Ob ein Manipulationsindikator gefunden wurde |
CompromiseCheckResult.signatures_coverage | Die Anzahl der untersuchten Signaturen |
CompromiseCheckResult.reasons | Kurze Zeichenketten, die einen Befund erklären |