Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

PDF Exploitation G Data Software AG Karsten Tellmann,

Ähnliche Präsentationen


Präsentation zum Thema: "PDF Exploitation G Data Software AG Karsten Tellmann,"—  Präsentation transkript:

1 PDF Exploitation G Data Software AG Karsten Tellmann,
Herzlich Willkommen. Überblick G Data Software AG SecurityLabs Karsten Tellmann, Security Researcher PDF Exploitation

2 Gliederung PDF Überblick PDF im WWW PDF Struktur PDF Exploitation
Beispiele

3 1. PDF Überblick

4 Portable Document Format - Fakten
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 :2008) Über PDF Dokumente im WWW Über Anbieter von PDF bezogenen Produkten/Dienstleistungen Quelle:

5 Digitales eierlegendes Wollmilchdokumentenformat
Ausgewählte Features Video Audio XML U3D Interaktive Formulare Dateianhänge Datenbanken (ADBC) Kodierung Verschlüsselung Digitale Singaturen JavaScript Flash Dateien ausführen (cmd.exe) Digitales eierlegendes Wollmilchdokumentenformat

6 Warum ist PDF so interessant für Malwareautore?
Warum PDF? Warum ist PDF so interessant für Malwareautore? Weite Verbreitung (-> großes Zielpublikum) Enormer Funktionsumfang (-> Komplexität vs. Sicherheit) Veraltete Versionen (-> Alte Exploits) Browser Plug-ins (-> Drive-by-Downloads)

7 Common Vulnerabilities and Exposures (CVE)
Suchbegriffe Adobe Reader PDF Adobe Reader + PDF Quelle:

8 2. PDF im WWW

9 Einbetten in einer Webseite
Generell (FF , 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:CA8A D-11CF-A24D " width="0" height="0"><param name="src" value="evil.pdf" /> </object>

10 Plugin Versionserkennung
PluginDetect (Eric Gerds): Konfigurierbares JavaScript zur Bestimmung von Browser Plugin Versionen Java, QuickTime, DevalVR, Shockwave, Flash, Windows Media Player, Silverlight, VLC Player, Adobe Reader, Generic PDF Reader

11 PluginDetect Beispiel
<html><head><title>PDF Reader Plugin Detection</title> <script src="PluginDetector.js"></script> <script language="javascript" type="text/javascript"> function check_version(){ adobe = PluginDetect.getVersion("AdobeReader"); version = adobe.split(",").join("."); alert("Adobe Reader Version: "+version); } </script></head> <body onload="check_version()"> </body></html>

12 PluginDetect: Bleeding Life
Bleeding Life Exploit Kit Version 2: ~400 $ Unterstützte PDF Exploits: CVE (util.printf) CVE (libtiff) CVE (authplay.dll (AVM2)) CVE (authplay.dll (AVM2)) Beispiel: bleedinglife.txt

13 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: Quelle: Malicious origami in PDF

14 3. PDF Struktur

15 Basis Datentypen Typ Wert Boolean true, false Numeric
42, +23, -13, , -2,718 String (literal, oktal, hex) (foo), (/146/157/157), <666f6f> Name /varname Array [42, (/146/157/157), /Name, <666f6f>] Dictionary << /key1 (value) key2 <666f6f> >> Stream <<>>stream … endstream Null null

16 PDF Streams Einbetten von kodiertem Inhalt (zB.: .jpg, .png)
Kodieren von beliebigem Inhalt (zB.: JavaScript) Filter können beliebig verkettet werden Liste von unterstützten Filtern: ASCII85Decode ASCIIHexDecode FlateDecode LZWDecode RunLengthDecode DCTDecode CCITTFaxDecode JBIG2Decode JPXDecode (U3D)

17 Objects Basis Datentypen werden in Objekten organisiert
Objekte haben eine ID und können referenziert werden 1 0 obj << /Var (Text) >> endobj 1 0 obj << /Var 2 0 R >> Endobj 2 0 obj (Text) endobj Äquivalent

18 Physikalische Struktur
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.

19 Physikalische Struktur
Beispiel: Hello-World.pdf

20 Logische Struktur 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 Überblick Herzlich Willkommen.

21 Aktionen PDFs können Aktionen ausführen: Ausführen von JavaScript
Senden von Formularen, Lokale OS Kommandos ausführen Externe Ressourcen ansprechen Abspielen von Musik und Videos

22 Trigger 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

23 Beispiel: Triggers.pdf
Aktionen und Trigger Beispiel: Triggers.pdf

24 Hybrides Format: PDF/ZIP, PDF/GIF, PDF/HTML,…
Reader Toleranz I Reader Software reagiert unterschiedlich auf Formatfehler. PDF Header Spezifikation: %PDF-<Versions Nr.> steht am Anfang der Datei Überblick Acrobat Reader X: %PDF- reicht aus Innerhalb der ersten 1024 Bytes Vor dem Catalog Objekt Hybrides Format: PDF/ZIP, PDF/GIF, PDF/HTML,…

25 Reader Toleranz II Reader Software reagiert unterschiedlich auf Formatfehler. PDF Spezifikation: %%EOF steht am Ende der Datei /Size /Length Überblick Acrobat Reader X: komplett egal

26 Reader Toleranz III Überblick Quelle:

27 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

28 PDF Obfuscation I Name Obfuscation /JavaScript
Überblick Literal String Obfuscation /JS (app.alert(„Got Ya!“);) /JS (\141\160\160.\\ alert(„Go\164 Y\141!“);) Hexadecimal String Obfuscation /JS < e616c f b> /JS < e 616c f b>

29 PDF Obfuscation II Stream Objekte
Alles kann Inhalt eines Stream Objekts sein Verketten von beliebig vielen Filtern: /Filter [/ASCIIHexDecode /FlateDecode /JBIG2Decode] Ü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). <28BF4E5E4E758A E56FFFa0108 2E2E00B6D0683E802F0CA9FE A> => Keine Benutzerinteraktion nötig!

30 PDF Obfuscation Beispiel
Beispiel: CVE Buffer overflow Schwachstelle in der Verarbeitung von JBIG2 streams. Anfällig waren Adobe Reader bis Version 9.0 Überblick Metasploit Beispiel: msf_jbig2decode.pdf

31 JavaScript: Anti Emulation
Variablen aus PDF Objekten auslesen: getPageNthWord getLinks getIcon getPageNumWords getPageNthWordQuads documentFileName getAnnots this.info.<var> Überblick

32 4. PDF Exploitation

33 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

34 Angriffsschritte Angriff auslösen (/OpenAction, /AA, /A, /Names)
Speicher vorbereiten (HeapSpray,JITSpray) Schwachstelle ausnutzen (Exploit) Eigenen Programmcode ausführen (Shellcode) Überblick

35 Multiple Exploits Bestimmen der Plattform und der Version des Acrobat Reader, um eine auf das Zielsystem angepassten Exploit zu benutzen. Überblick Acrobat JavaScript Rückgabewert app.platform WIN, MAC, UNIX app.viewerVersion Reader Version (zB.: 10 oder 9.3.3)

36 JavaScript: Heapspray
Überblick 64K (Nopsled+Shellcode) * 4096 (Blöcke) => 256MB Heap

37 Heapspray: Speicher Überblick

38 5. Beispiel Exploits

39 Schwachstellenkategorien
Funktionsmissbrauch Acrobat JavaScript Methoden Stream Filter (JBIG2,TIFF) 3D Objekte (U3D) Font Parsing Modulen Eingebettete Flash Files

40 Funktionsmissbrauch: CVE-2010-1240
7 0 obj << /Type /Action /S /Launch /Win /F (cmd.exe) /P (/C 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 Embedded Datei cmd.exe speichern Ändere Text der MessageBox Benutzer führt Datei aus

41 /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

42 JavaScript Methode: CVE-2007-5659

43 Stream Filter (JBIG2): CVE-2009-0658

44 Aufbau JBIG2 Stream Setze segment association size = 1
Page association size: 0 : Segment page association = 1 Byte 1 : Segment page association = 4 Byte Setze segment association size = 1 Wähle großen Wert für segment page association (0x * 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

45 Anmerkungen CVE 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.

46 U3D: CVE-2009-2990 Beispiel Java Script:
U3D CLODProgressiveMesh-Continuation Split Position Index arbitrary dereference

47 U3D: CVE-2009-2990 Fehlende Validierung des Split Position Index
Im Resolution Update des CLOD Progressive Mesh Continuation Block

48 Font Parsing: CVE

49 CVE – Golf Clinic.pdf – Zum ersten Mal bei VirusTotal.com (1/43) – Adobe Advisory – Initiales Metasploit-Modul – Offizieller Adobe-Patch (Regulärer Patch-Zyklus: )

50 Die Schwachstelle Stack based buffer overflow: CoolType.dll
Feld in SING (Smart INdependent Glyphlets) Tabelle von TrueType Fonts uniqueName Spezifikation: (28 byte, 7-bit ASCII, Null Terminiert) Strcat(stack_buf, user_input) => Null Terminierung wird nicht überprüft

51 Übersicht des Angriffs

52 HeapSpray ROP Code Shellcode: calc.exe

53 SING Table Null-Terminierung von uniqueName fehlt!
Bildquelle: Websense Security Labs

54 DEP & ASLR ROP-Code benutzt Instruktionen aus icucnv36.dll
icucnv36.dll unterstützt kein ASLR DEP greift nicht weil Code aus ausführbarem Speicherbereich benutzt wird ROP-Code schreibt leere Datei iso88591 in das Verzeichnis vom PDF ROP-Code mapped die Datei in den Speicher: Reserviert 0x10000 Byte ausführbaren Speicherbereich ROP-Code kopiert Shellcode in den reservierten Speicherbereich und führt ihn aus.

55 Flash: CVE-2007-0071 Tag Handler: DefineSceneAndFrameLabelData
Vergibt Labels für Szenen/Frames Tag Data:

56 Tag Handler (DefineSceneAndFrameLabelID)
int32 scenecount = GetSceneCount(); if (scenecount>swf_upper_limit() || scenecount=0) { // error handling } else char *addressptr=alloc_mem(scenecount, 12); for (int32 i=scenecount; i>0; i--) // never happens char *record = adressptr+(scene_count*12); *(record+8) = record+global_framecount;}

57 Tag Handler (DefineSceneAndFrameLabelID)
int32 scenecount = GetSceneCount(); if (scenecount>swf_upper_limit() || scenecount=0) { // error handling } else char *addressptr=alloc_mem(scenecount, 12); for (int32 i=scenecount; i>0; i--) // never happens char *record = adressptr+(scene_count*12); *(record+8) = record+global_framecount;} SceneCount wird signed interpretiert, obwohl unsigned definiert

58 Tag Handler (DefineSceneAndFrameLabelID)
int32 scenecount = GetSceneCount(); if (scenecount>swf_upper_limit() || scenecount=0) { // error handling } else char *adressptr=alloc_mem(scenecount, 12); for (int32 i=scenecount; i>0; i--) // never happens char *record = adressptr+(scene_count*12); *(record+8) = record+global_framecount;} Setze oberstes Bit: ® SceneCount wird negativ interpretiert großer SceneCount wird nie als Fehler erkannt

59 Tag Handler (DefineSceneAndFrameLabelID)
int32 scenecount = GetSceneCount(); if (scenecount>swf_upper_limit() || scenecount=0) { // error handling } else char *adressptr=alloc_mem(scenecount, 12); for (int32 i=scenecount; i>0; i--) // never happens char *record = adressptr+(scene_count*12); *(record+8) = record+global_framecount;} alloc_mem returned NULL pointer

60 Tag Handler (DefineSceneAndFrameLabelID)
int32 scenecount = GetSceneCount(); if (scenecount>swf_upper_limit() || scenecount=0) { // error handling } else char *adressptr=alloc_mem(scenecount, 12); for (int32 i=scenecount; i>0; i--) // never happens char *record = adressptr+(scene_count*12); *(record+8) = record+global_framecount;} void* alloc_mem(uint32 num_blocks, uint32 blocksize) { if ((uint64)num_blocks*(uint64)blocksize > 0xFFFFFFFF) return NULL; // integer overflow else // malloc routine }}

61 Tag Handler (DefineSceneAndFrameLabelID)
int32 scenecount = GetSceneCount(); if (scenecount>swf_upper_limit() || scenecount=0) { // error handling } else char *adressptr=alloc_mem(scenecount, 12); for (int32 i=scenecount; i>0; i--) // never happens char *record = adressptr+(scene_count*12); *(record+8) = record+global_framecount;} Keine Prüfung auf NULL pointer

62 Tag Handler (DefineSceneAndFrameLabelID)
int32 scenecount = GetSceneCount(); if (scenecount>swf_upper_limit() || scenecount=0) { // error handling } else char *adressptr=alloc_mem(scenecount, 12); for (int32 i=scenecount; i>0; i--) // never happens char *record = adressptr+(scene_count*12); *(record+8) = record+global_framecount;} for-schleife wird nicht durchlaufen (i=SceneCount < 0)

63 Tag Handler (DefineSceneAndFrameLabelID)
int32 scenecount = GetSceneCount(); if (scenecount>swf_upper_limit() || scenecount=0) { // error handling } else char *adressptr=alloc_mem(scenecount, 12); for (int32 i=scenecount; i>0; i--) // never happens char *record = adressptr+(scene_count*12); *(record+8) = record+global_framecount;} Angreifer kann Adressen umschreiben

64 Free Tools PDF Tools (Didier Stevens)
Origami Framework (Sogeti ESEC Lab) Opaflib (Felipe Andres Manzano) Pdfxray (Offensive Computing) PDF Stream Dumper

65 Vorträge/Webseiten PDF Syntax Abuse (Julia Wolf)
How to really obfuscate your PDF Malware (Sebastian Porst) Malicious origami in PDF (Raynal, Delugre, Aumaitre) WEPAWET (UCSB,Webservice) JSUNPACK (Webservice) Contagio Dump (Mila Parkour, ITW Samples)

66 Herzlich Willkommen. Überblick Vielen Dank Fragen? 66


Herunterladen ppt "PDF Exploitation G Data Software AG Karsten Tellmann,"

Ähnliche Präsentationen


Google-Anzeigen