Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Herzlich Willkommen. Überblick G Data Software AG SecurityLabs Karsten Tellmann, Security Researcher PDF Exploitation."—  Präsentation transkript:

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

2 Gliederung 1.PDF Überblick 2.PDF im WWW 3.PDF Struktur 4.PDF Exploitation 5.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 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 PDF? Weite Verbreitung (-> großes Zielpublikum) Enormer Funktionsumfang (-> Komplexität vs. Sicherheit) Veraltete Versionen (-> Alte Exploits) Browser Plug-ins (-> Drive-by-Downloads) Warum ist PDF so interessant für Malwareautore?

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

8 2. PDF im WWW

9 Generell (FF , Opera 10.63, IE 8.0) Internet Explorer Einbetten in einer Webseite

10 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 Plugin Versionserkennung

11 PluginDetect Beispiel PDF Reader Plugin Detection function check_version(){ adobe = PluginDetect.getVersion("AdobeReader"); version = adobe.split(",").join("."); alert("Adobe Reader Version: "+version); }

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

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 TypWert Booleantrue, false Numeric42, +23, -13, , -2,718 String (literal, oktal, hex)(foo), (/146/157/157), Name/varname Array[42, (/146/157/157), /Name, ] Dictionary >> Stream >stream … endstream Nullnull

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.pdfHello-World.pdf

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

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 Aktionen und Trigger Beispiel: Triggers.pdf

24 Reader Toleranz I Überblick Reader Software reagiert unterschiedlich auf Formatfehler. PDF Header Spezifikation: %PDF- 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,…

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

26 Reader Toleranz III Überblick Quelle:

27 Reader Toleranz Beispiel Überblick by Julia Wolf, FireEye Malware Intelligence Lab %PDF- trailer >/OpenAction<>>>>>

28 PDF Obfuscation I Überblick Name Obfuscation /JavaScript /#4A#61#76#61#53#63#72#69#70#74 Literal String Obfuscation /JS (app.alert(Got Ya!);) /JS (\141\160\160.\\ alert(Go\164 Y\141!);) Hexadecimal String Obfuscation /JS /JS < e 616c f b>

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

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

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

32 4. PDF Exploitation

33 Vorüberlegungen Überblick 1.Szenario (gezielt vs. massenhaft) 2.Exploit(s) wählen (Plattform, Software, Version …) 3.Schutzmaßnahmen (Obfuscation, Anti Emulation) 4.Ziel des Angriffs (Shell, Backdoor, weiterer Schadcode)

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

35 Multiple Exploits Überblick Bestimmen der Plattform und der Version des Acrobat Reader, um eine auf das Zielsystem angepassten Exploit zu benutzen. Acrobat JavaScriptRückgabewert app.platformWIN, MAC, UNIX app.viewerVersionReader 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 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 1.Embedded Datei cmd.exe speichern 2.Ändere Text der MessageBox 3.Benutzer führt Datei aus

41 /Action /Launch %PDF- trailer >/OpenAction 2 0 R>>>>>> 2 0 obj <> >>endobj

42 JavaScript Methode: CVE

43 Stream Filter (JBIG2): CVE

44 Aufbau JBIG2 Stream 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 Beispiel Java Script: U3D CLODProgressiveMesh-Continuation Split Position Index arbitrary dereference

47 U3D: CVE 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 Tag Handler: DefineSceneAndFrameLabelData Vergibt Labels für Szenen/Frames Tag Data: Flash: CVE

56 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;} Tag Handler (DefineSceneAndFrameLabelID)

57 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 Tag Handler (DefineSceneAndFrameLabelID)

58 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 Tag Handler (DefineSceneAndFrameLabelID)

59 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 Tag Handler (DefineSceneAndFrameLabelID)

60 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 }} Tag Handler (DefineSceneAndFrameLabelID)

61 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 Tag Handler (DefineSceneAndFrameLabelID)

62 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) Tag Handler (DefineSceneAndFrameLabelID)

63 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 Tag Handler (DefineSceneAndFrameLabelID)

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?


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

Ähnliche Präsentationen


Google-Anzeigen