Visual Signature Spoofing in PDFs
researchDas "Portable Document Format", besser bekannt als PDF, ist das meistgenutzte Dateiformat für den Austausch von digitalen Dokumenten. Seit 1999 werden in PDFs ab Version 1.3 digitale Signaturen unterstützt. Dadurch ist es zum Beispiel möglich Arbeitsverträge digital abzuschließen, oder Rechnungen digital auszustellen.
Seitdem es Signaturen gibt, wird jedoch auch versucht Signaturen zu fälschen. Es überrascht also nicht, dass es seit der Einführung mehrere erfolgreiche Angriffe auf die Implementierung von digitalen Signaturen in PDFs gab (z.B. auf https://www.pdf-insecurity.org/). Diese vorherigen Angriffe nutzen Schwachstellen in verwundbaren PDF-Applikationen aus, sodass diese ungültige Signaturen als gültig signiert anzeigen. Wir wählten ein anderes Ziel für unseren Angriff: die Benutzer, die entscheiden müssen, ob ein PDF korrekt signiert und damit vertrauenswürdig ist.
Seit der Einführung von digitalen Signaturen ist der Feature-Katalog von PDF stetig weitergewachsen. Heutzutage können PDFs Videos abspielen, interaktive Formulare einbetten, oder JavaScript ausführen.
Wir fragten daher: Können wir mithilfe den spezifizierten PDF-Features Benutzer austricksen, und ein unsigniertes PDF aussehen lassen, als wäre es signiert?
Bei "Visual Signature Spoofing" versucht ein Angreifer das Aussehen und Verhalten von PDF-Applikationen für signierte PDFs zu imitieren. Wenn ein signiertes PDF geöffnet wird, zeigen PDF-Applikationen mehrere Signatur-Indikatoren an, die Benutzer informieren, dass das PDF eine vertrauenswürdige Signatur enthält. Anhand den Signaturindikatoren können Benutzer eine informierte Entscheidung treffen, ob sie dem Dokument vertrauen. Visual Signature Spoofing untergräbt dieses Vertrauen durch das Imitieren der realen Signaturindikatoren.
Welche Signaturindikatoren gibt es?
Wir identifizierten vier Arten von UI-Elementen, die als Signaturindikatoren genutzt werden. Um diese korrekt zu imitieren, mussten wir zuerst das typische Verhalten dieser UI-Elemente beobachten.
Signaturgrafik
Die Signaturgrafik stellt die Signatur visuell im PDF dar. Oft kann die Signaturgrafik angeklickt werden, um grundlegende Informationen über die Signatur anzuzeigen. Da die Signaturgrafik ein Teil des PDFs ist, bewegt sich diese mit, wenn Benutzer in der PDF-Applikation zoomen oder scrollen.
Signaturleiste
Eine Signaturleiste wird von vielen PDF-Applikationen als Banner direkt über dem Viewport, worin das PDF angezeigt wird, dargestellt. Die Signaturleiste zeigt grundlegende Informationen wie die Gültigkeit der Signatur an, und warnt Benutzer bei Problemen mit der Signaturverifikation. Neben der Signaturgrafik ist die Signaturleiste der am meisten genutzte Signaturindikator, da diese direkt beim Öffnen des PDFs angezeigt wird. Die Signaturleiste ist ein Teil der PDF-Applikation, und bleibt deswegen unverändert, wenn Benutzer zoomen und scrollen.
Signaturpanel
Das Signaturpanel wird häufig in der Seitenleiste des Viewports angezeigt, und zeigt weitere Informationen über die Signatur wie den Besitzer der Signatur. Das Signaturpanel kann durch Benutzerinteraktion geöffnet und geschlossen werden, und bleibt wie die Signaturleiste beim Zoomen und Scrollen unverändert.
Fenster
Spezifische Informationen, wie zum Beispiel Informationen über das genutzte Zertifikat, werden in Pop-Up Fenstern angezeigt. Diese Fenster werden an mehreren Stellen in der PDF-Applikation geöffnet, zum Beispiel durch das Klicken der Signaturgrafik. Das Aussehen und Verhalten hängt zum Teil von Einstellungen des genutzten Betriebssystems ab, wie zum Beispiel das Farbschema. Außerdem können Pop-Up Fenster von Benutzern durch Ziehen bewegt werden.
Techniken zum Visual Signature Spoofing
Im nächsten Schritt identifizierten wir Features in der PDF-Spezifikation, die zum Imitieren des Verhaltens der PDF-Spezifikation nützlich sind. Für einen überzeugenden Spoof mussten die folgenden Voraussetzungen erfüllt werden:
Die PDF-Objekte mussten frei positionierbar sein, und korrekt umpositioniert werden können.
Die PDF-Objekte mussten interaktiv sein. Die meisten Interaktionen basieren auf Mausklicks, zusätzliche Interaktionen passieren, wenn der Benutzer den Mauszeiger über manche UI-Elemente bewegt.
Wir müssen das Aussehen der PDF-Objekte frei wählen können.
Die PDF-Objekte müssen ausblendbar sein.
Mithilfe von JavaScript und Widget Annotations konnten diese Anforderungen erfüllt werden. Widget Annotations repräsentieren digitale Formulare, z.B. einen Knopf, und können ein beliebiges Aussehen annehmen. Außerdem lassen sich mit Widget Annotations "Actions" ausführen, wenn ihre Seite sichtbar wird, Benutzer die Annotations anklicken, oder mit dem Mauszeiger über die Annotation fahren.
Eine mögliche "Action", die ausgeführt wird, ist JavaScript. Mithilfe von JavaScript können Widget Annotations richtig positioniert und versteckt werden. Durch das Kombinieren von Widget Annotations mit JavaScript können wir überzeugende Spoofs mit der folgenden Strategie erstellen:
Für jedes interaktive UI-Element, z.B. einen Knopf oder Bild, wird eine neue Widget Annotation hinzugefügt. Das Aussehen der Widget Annotation wird auf das Aussehen des gespooften UI-Element gesetzt. Auch das Verhalten der UI-Elemente kann imitiert werden. So können wir beispielsweise Widget Annotations verstecken, wenn Benutzer auf den "Schließen"-Knopf drücken. Um die Signaturleiste, das Signaturpanel und Fenster richtig zu positionieren, fügen wir außerdem eine versteckte Widget Annotation hinzu, die mithilfe von JavaScript alle Widget Annotations kontinuierlich korrekt positioniert.
Das Angriffsszenario
Wir gehen von dem folgenden Angriffsszenario aus:
Alice und Bob nutzen digital signierte PDFs, und vertrauen der Signatur des Gegenübers. Die Angreiferin Eve versucht ein PDF zu erstellen, das die Signatur von Alice imitiert. Ein PDF ist ein erfolgreicher "Visual Signature Spoof", wenn das PDF keine Signatur enthält, aber Bob überzeugt ist, dass das PDF signiert ist.
In unserem Angriffsszenario öffnet Bob das PDF, liest es, verifiziert die Signatur durch Interaktion mit den Signaturindikatoren, und schließt das PDF. Während des Lesens darf Bob außerdem zoomen und scrollen. Durch diese Limitierungen für Bob hängt die Stärke des Visual Signature Spoofs nur davon ab, wie gut die Signaturindikatoren gefälscht wurden.
Wir gehen von dem folgenden Angreifermodell für Eve aus:
Eve kann PDFs nicht mit einer von Bob vertrauten Signatur signieren.
Eve weiß, wie die digitale Signatur von Alice aussieht.
Eve kennt grundlegende Infos über Bob, z.B. das genutzte Betriebssystem und die anzeigende PDF-Applikation.
Forschungsergebnisse
Wir testeten die Machbarkeit von Visual Signature Spoofing, indem wir Spoofs für drei häufig genutzte PDF-Applikationen erstellten:
Adobe Acrobat Reader DC
Foxit Reader
Okular
Alle Spoofs wurden auf Windows 10 evaluiert.
Im aktuellen Research konnte ein überzeugender Spoof nur für Adobe Acrobat Reader DC erstellt werden. Foxit Reader und Okular unterstützten nicht alle benötigten JavaScript-Funktionen, sodass es nicht möglich war Signaturleiste, Signaturpanel und die Fenster korrekt zu positionieren. Nur in Okular mussten Formulare und JavaScript explizit für das PDF aktiviert werden, in Adobe Acrobat Reader DC und Foxit Reader war JavaScript standardmäßig aktiviert.
In Adobe Acrobat Reader DC konnten wir die Position der Widget Annotations frei setzen und an Benutzerinteraktionen anpassen. Außerdem konnten wir Widget Annotations beliebig ein- und ausblenden, um das Öffnen und Schließen von UI-Elementen zu imitieren. Insgesamt war es dadurch möglich die Signaturgrafik, die Signaturleiste, das Signaturpanel, und Fenster überzeugend zu imitieren.
Doch auch in Adobe Acrobat Reader DC gab es Verhalten, das wir nicht mit Visual Signature Spoofing imitieren konnten:
Es können keine Informationen über das vom Betriebssystem genutzte Farbschema gewonnen werden. Da das Aussehen von Fenstern vom Farbschema abhängt, können gespoofte Fenster leichter auffallen. Aus diesem Grund wählten wir für die gespooften Fenster weiß als neutrale Akzentfarbe.
Wir konnten keine verschiebbaren UI-Elemente imitieren. Dadurch sind Scrolleisten nicht funktional, und Fenster können nicht verschoben werden. Als Gegenmaßnahme kann ein Angreifer durch das Abspielen von einem Alarmsound mit der JavaScript-Funktion "app.beep()" einen Fehler vortäuschen, um das Opfer zu verwirren.
Alle gespooften Signaturindikatoren reagieren nur mit bemerkbaren Verzögerungen auf das Zoomen und Scrollen von Benutzern..
Diese Limitierungen zeigen, dass Visual Signature Spoofing bei einer genauen Untersuchung des PDFs wahrscheinlich nicht erfolgreich ist. Da Visual Signature Spoofs immer versuchen eine bestimmte Signatur zu imitieren ist diese Technik wohl außerdem nur für gezielte Social-Engineering Angriffe nützlich.
Visual Signature Spoofing ist jedoch deutlich stärker, wenn der Angreifer die anzeigende Applikation kontrolliert. Ein mögliches Szenario ist ein Angreifer, der an der Rezeption auf seinem Gerät einen Vertrag mit einer gespooften Signatur vorzeigt, um Zutritt zum Gebäude zu erlangen.
Fazit
Visual Signature Spoofing war nur teilweise erfolgreich beim Fälschen von signierten Dokumenten. Durch den limitierten Support von JavaScript war es nur in einer von drei PDF-Applikationen möglich eine Signatur mit Visual Signature Spoofing zu fälschen. Es ist jedoch anzumerken, dass andere PDF-Applikationen in Zukunft auch verwundbar sein könnnen, wenn diese die benötigten JavaScript-Funktionen implementieren.
Hersteller von PDF-Applikationen sollten stets darauf achten, dass mehr Funktionalität auch Angreifern immer neue Werkzeuge gibt, um Benutzer zu attackieren. Um das Fälschen von UI-Elementen schwerer zu gestalten, sollten PDF-Applikationen außerdem klar den Unterschied zwischen PDF-Inhalt und Applikation hervorheben. Insbesondere sicherheitsrelevante UI-Elemente wie Signaturleisten sollten räumlich vom PDF-Inhalt getrennt werden, um das Spoofen dieser zu erschweren.
Auch Benutzer von PDF-Applikationen können einige Schritte unternehmen, um sich gegen Visual Signature Spoofing zu schützen. Der einfachste Weg ist dabei, JavaScript in den Programmeinstellungen auszuschalten. Dies kann jedoch auch gewünschte Funktionalität in anderen PDFs zerstören. Benutzer sollten deshalb auch auf verdächtiges oder fehlendes Verhalten und ungewohntem Aussehen Ausschau halten. Bei Unsicherheit können Benutzer vertrauenswürdige PDFs mit dem verdächtigen PDF vergleichen, oder das verdächtige PDF in verschiedenen PDF-Viewern, wie z.B. im Browser, öffnen.
Wir versuchten das PSIRT des Herstellers Adobe über dieses Verhalten von Acrobat Reader DC vor dieser Publikation zu informieren, erhielten jedoch keine Rückmeldung.
Try it Yourself
Am besten erhält man ein Gefühl für die Möglichkeiten und Limitierungen von Visual Signature Spoofing, indem man selbst damit interagiert. Der folgende Proof-Of-Concept fälscht eine Signatur in Adobe Acrobat Reader DC. Der PoC wurde in Adobe Acrobat Reader DC, Version 2022.003.20314, getestet. Für das korrekte Aussehen muss das Betriebssystem außerdem im Light-Mode sein. Abschließend sollte sichergestellt werden, dass JavaScript nicht in den Programmeinstellungen deaktiviert wurde.
Hier finden Sie den Proof-Of-Concept zum Download.
Diese Forschung wurde von Tobias Friese im Rahmen seiner Bachelorarbeit durchgeführt.
Im Jahr 2021 fing er als Praktikant bei SEC Consult an, und arbeitet seit September 2021 als Associate Security Consultant.
Dieser Blogpost wurde in Zusammenarbeit mit dem SEC Consult Vulnerability Lab erstellt und veröffentlicht.