X-ray, eine Python-Bibliothek zum Erkennen fehlerhafter Schwärzungen in PDF-Dokumenten
(github.com/freelawproject)- Eine Python-Bibliothek, die unsachgemäße Schwärzungen in PDF-Dokumenten automatisch erkennt und Fälle identifiziert, in denen Text lediglich mit schwarzen Rechtecken überdeckt wurde
- Entwickelt vom Free Law Project, um ein wiederkehrendes Problem zu lösen, das beim Sammeln von Millionen von PDFs entdeckt wurde
- Kann über die Kommandozeile oder aus Python-Code heraus ausgeführt werden und gibt die Ergebnisse als JSON oder Python-Objekte zurück
- Verwendet intern PyMuPDF, um Rechtecke, Text und Farbinformationen in PDFs zu analysieren und zu bestimmen, ob eine Schwärzung tatsächlich Text verbirgt
- Besonders nützlich als automatisches Prüfwerkzeug zum Schutz vor der Offenlegung personenbezogener Daten in Rechtsdokumenten oder öffentlich zugänglichen Materialien
Überblick
x-rayist eine Python-Bibliothek zur Erkennung fehlerhafter Schwärzungen (redactions) in PDF-Dateien- Wenn der Benutzer einen PDF-Pfad angibt, findet das Tool Bereiche, in denen die Schwärzung nicht korrekt durchgeführt wurde
- Das Ergebnis wird im JSON-Format pro Seite ausgegeben und enthält Koordinaten (
bbox) sowie den Text (text) des betreffenden Bereichs
Hintergrund der Entwicklung
- Das Free Law Project stieß beim Sammeln von Millionen von PDFs auf zahlreiche Dokumente mit nicht korrekt durchgeführten Schwärzungen
- Einige Nutzer verwendeten schwarze Rechtecke oder Hervorhebungen, um Text zu überdecken, anstatt ihn tatsächlich zu löschen
- In solchen Fällen wird der Originaltext unverändert offengelegt, sobald man den Text unter dem Rechteck auswählt
- Um die Häufigkeit dieses Problems zu erfassen, wurde das Tool
x-rayentwickelt
Verwendung
- Installation
- Installation mit
pip install x-rayoderuv add x-ray
- Installation mit
- Ausführung über die Kommandozeile
- Mit
xray path/to/file.pdfwird das Tool ausgeführt und gibt ein JSON-Ergebnis aus - Bei Eingabe einer URL wird die entfernte PDF heruntergeladen und anschließend geprüft
- Um mehrere URLs auf einmal zu prüfen, kann
xargs -n 1 xray < urls.txtverwendet werden
- Mit
- Verwendung in Python-Code
xray.inspect("file.pdf")gibt das Ergebnis als Python-Objekt zurück- Ist der Eingabewert ein String, wird er als lokale Datei behandelt; beginnt er mit
https://, als URL; beibytesals PDF im Speicher - Wird ein Dateipfad als Typ
bytesübergeben, funktioniert dies nicht
Funktionsweise
- Intern wird PyMuPDF zur Analyse der PDF verwendet
- Suche nach Rechtecken (rectangle) in der PDF
- Suche nach Zeichen (letter) an derselben Position
- Rendern des Rechtecks als Bild
- Ist das Rechteck mit einer einzigen Farbe gefüllt, wird es als fehlerhafte Schwärzung eingestuft
- Da die PDF-Struktur komplex ist, ist eine perfekte Erkennung schwierig, das Tool wird jedoch laufend verbessert
- Das Projekt wird durch Spenden und Sponsoring getragen
Beiträge und Veröffentlichung
- Über die Issues-Liste auf GitHub lassen sich nicht unterstützte Fälle oder Verbesserungswünsche prüfen
- Vor dem ersten Beitrag ist die Unterzeichnung eines Contributor License Agreement (CLA) erforderlich
- Die Veröffentlichung ist über GitHub Actions automatisiert; für eine manuelle Veröffentlichung wird der Befehl
poetry publish --buildverwendet
Lizenz
- Veröffentlicht unter der BSD-Lizenz und damit frei in andere Projekte integrierbar
- Pull Requests und Funktionsvorschläge sind willkommen; Änderungen können direkt über die GitHub-Weboberfläche vorgenommen werden
1 Kommentare
Hacker-News-Kommentare
Während meiner Arbeit beim Free Law Project habe ich viele komplexe Projekte über mehrere Jahre hinweg gemacht, aber dieses X-ray-Projekt war der Fall, der am meisten Aufmerksamkeit bekommen hat
Wir haben X-ray gebaut, um Millionen von Dokumenten in CourtListener zu analysieren und die Menschen auf dieses Problem aufmerksam zu machen
Mit einem S3-Batch-Job konnten wir Millionen von Dokumenten in wenigen Minuten analysieren, aber der wirklich schwierige Teil – die Ergebnisse aufzubereiten und zu berichten – steht noch aus
Ich frage mich, ob X-ray auch solche Lecks in Font-Metriken ausnutzt
Zum Beispiel haben oioioi und oooiii je nach Schriftart unterschiedliche Breiten
Ich habe mir heute nur etwa 10 % der veröffentlichten Dateien angesehen, aber zum Beispiel enthält
EFTA00037069.pdfeinen/Prev-Pointer, sodass eine frühere Version im PDF selbst eingebettet istDas ist nur eine kleine Änderung, aber vermutlich gibt es das auch in anderen Dateien
Mit dem Befehl
qpdf --show-object=trailerkann man das selbst prüfenIch glaube, dass diese chaotische Bearbeitung eher Absicht als ein Versehen sein könnte
Das Original war bereits ein vollständig geflattetes Dokument
Je mehr ich darüber nachdenke, desto mehr scheint die Kerning-Information von Fonts eine große Schwachstelle bei Redaktionen zu sein
Schon aus der Position des Textes um den schwarzen Balken herum lassen sich Länge und Form des verdeckten Wortes abschätzen
Wenn man den Rendering-Algorithmus kennt, könnte man den tatsächlichen Text vielleicht sogar per Brute Force herleiten
Ich frage mich, ob jemand dieses Problem schon erforscht hat
Dann würden selbst identische Wörter in jedem Dokument unterschiedlich gesetzt
Eine Art Side-Channel-Angriff, also ähnlich wie hier
Wenn sie kurz ist und kontextuell praktisch nur „yes“ oder „no“ infrage kommt, ist sie leicht zu erraten, aber Namen oder lange Sätze sind deutlich schwieriger
Es ist bedauerlich, dass PDF trotz so vieler grundlegender Mängel als digitales Dokumentformat immer noch so weit verbreitet ist
Eine einfache Frage: Was genau ist eigentlich der Zweck von Schwärzungen bei solchen Dokumentenveröffentlichungen?
Ich habe auch nicht verstanden, warum Anonymität gewahrt werden muss
(Nach der Bearbeitung) Wenn man bedenkt, dass auch Unschuldige betroffen sein können, ist es nachvollziehbar
Schwärzungen aus Gründen des Reputationsschutzes oder aus politischen Motiven sind verboten
Es gibt jedoch große Sorgen, dass tatsächliche Schwärzungen diese Maßstäbe nicht einhalten
Zum Beispiel wenn veröffentlichte GPS-Koordinaten ein Bombardierungsrisiko auslösen könnten
Rechenschaft sei wichtiger
Aber dieser Fall ist so bedeutend, dass eine Veröffentlichung unvermeidlich ist
Wenn man ein geschwärztes PDF veröffentlicht, sollte das Standardverfahren doch sein, schwarze Rechtecke zu zeichnen und dann als Bild zu rastern 🤷
Nur einen schwarzen Balken darüberzulegen bedeutet nicht, dass die Daten verschwunden sind
Dieses Missverständnis sieht man im Compliance-Umfeld ständig
Mit Adobe Pro kann man PDF-Inhalte bei korrekter Nutzung dauerhaft löschen (redact)
Dieser Fall war einfach ein amateurhafter Fehler, weil jemand einen PDF-Editor nicht richtig bedienen konnte
Das Ergebnis ist, dass ein Verfahren ignoriert wurde, das Tausende Anwälte und Kanzleimitarbeiter seit Jahrzehnten nutzen
Früher zog man schwarze Linien auf Papier und verwendete den Ausdruck als Endfassung; vermutlich wurde hier noch mit genau dieser Denkweise gearbeitet
Weil sich der Text dann nicht mehr auswählen ließ, dachte man vielleicht, er sei wirklich verborgen
Oder es war absichtlich so gemacht, um es anschließend wie einen Versehentlichen Fehler aussehen zu lassen
Deshalb sehen viele darin keinen simplen Fehler, sondern absichtliche böswillige Befolgung (malicious compliance)
Überraschenderweise sind die geschwärzten Informationen sogar im PDF-Viewer des Browsers sichtbar
Wenn man in Brave (Linux) dieses Dokument öffnet und in Absatz 90 die erste Zeile kopiert, wird der geschwärzte Text unverändert eingefügt
Es ist interessant zu sehen, wie sich das Konzept von ediscovery (elektronische Beweisoffenlegung) bis in die breite Öffentlichkeit verbreitet
Menschen aus der Tech-Branche wären überrascht, wie technisch unkundig viele Leute außerhalb technischer Bereiche sind
Das erinnert an die Zeiten, in denen die IT-Abteilung im Unternehmen noch als allwissender und allmächtiger Gott galt