75
Fuzzing browsers by generating malformed HTML/HTML5 Florencio Cano Gabarda [email protected] @florenciocano

Fuzzing browsers by generating malformed HTML/HTML5

Embed Size (px)

Citation preview

Page 1: Fuzzing browsers by generating malformed HTML/HTML5

Fuzzing browsers by generating malformed HTML/HTML5

Florencio Cano [email protected]

@florenciocano

Page 2: Fuzzing browsers by generating malformed HTML/HTML5

AGENDA

1. Introducción al fuzzing2. Rationale3. Peach Fuzzer4. Mi fuzzer de navegadores web5. Fuzzeando a las bravas6. Fuzzeando mediante WebSockets

Page 3: Fuzzing browsers by generating malformed HTML/HTML5

INTRODUCCIÓN AL FUZZING

Page 4: Fuzzing browsers by generating malformed HTML/HTML5

¿Qué es fuzzing?

• Es una técnica de testeo de software consistente en pasar datos aleatorios como entrada a un programa.

• Durante este proceso el programa se monitoriza a la espera de “cuelgues” (crashes).

Page 5: Fuzzing browsers by generating malformed HTML/HTML5

Fuzzing

Generación / Mutación

Ejecución monitorizada

Implementación del fuzzer

Page 6: Fuzzing browsers by generating malformed HTML/HTML5

Tipos de fallos que se pueden descubrir con fuzzing

• Buffer overflows• Integer overflows• Format string vulnerabilities• Race condition vulnerabilities• SQL injection• Cross Site Scripting (XSS)• Remote command execution• Filesystem attacks (directory traversal, etc.)• Information leaking vulnerabilities

Page 7: Fuzzing browsers by generating malformed HTML/HTML5

Tipos de fallos que se pueden descubrir con fuzzing

• Buffer overflows• Integer overflows• Format string vulnerabilities• Race condition vulnerabilities• SQL injection• Cross Site Scripting (XSS)• Remote command execution• Filesystem attacks (directory traversal, etc.)• Information leaking vulnerabilities

PRINCIPALMENTE: CORRUPCIONES DE MEMORIA

Page 8: Fuzzing browsers by generating malformed HTML/HTML5

Clasificación según el tipo de fuzzing

• Dumb fuzzing: Generación de datos semi-aleatorios, sin estructura

• Smart fuzzing: Implementación de la especificación. Fuzzing partiendo de estructuras correctas

Page 9: Fuzzing browsers by generating malformed HTML/HTML5

Dumb fuzzing vs Smart fuzzingDumb fuzzing Smart fuzzing

Ventajas Ventajas

- No es necesario definir estructura válida

- Más rápidos

- Pueden llegar donde no llegan los dumb fuzzers

- Más información de los crashes

- Pueden generar ficheros malformados desde cero

Desventajas Desventajas

- Los ficheros malformados pueden filtrarse rápidamente por no cumplir una estructura

- Necesitan una muestra amplia de ficheros base sobre los que hacer las mutaciones

- Más lentos- Hay que definir toda la

estructura

Page 10: Fuzzing browsers by generating malformed HTML/HTML5

Dumb fuzzing vs Smart fuzzing

• Para aplicaciones complejas:– Primero: Dumb fuzzing para identificar qué partes

de la aplicación provocan más crashes– Segundo: Implementación de smart fuzzers para

las partes identificadas con dumb fuzzing

Page 11: Fuzzing browsers by generating malformed HTML/HTML5

Clasificación según el objetivo

• Distintos tipos de fuzzing– De formatos de fichero– De protocolos de red– GUIs– Librerías

Page 12: Fuzzing browsers by generating malformed HTML/HTML5

Fuzzing de formatos de fichero

• Generamos un fichero con un formato que incluye algo malformado

• Preparamos software (debugger) para que monitorice la ejecución del objetivo

• Ejecutamos el objetivo pasándole el fichero generado

Page 13: Fuzzing browsers by generating malformed HTML/HTML5

Ejemplo: Formato WAV

• Generamos un fichero WAV pero con cabeceras que contradicen el estándar (tamaño 0, tamaño muy alto, orden cambiado…)

• Preparamos software (debugger) para que monitorice, por ejemplo, iTunes

• Ejecutamos iTunes pasándole el WAV malformado generado

Page 14: Fuzzing browsers by generating malformed HTML/HTML5

Fuzzing de red

• El fuzzer genera paquetes de red malformados• Preparamos software (debugger) para que

monitorice la ejecución del servidor• Enviamos paquete de red al servidor

Page 15: Fuzzing browsers by generating malformed HTML/HTML5

RATIONALE

Page 16: Fuzzing browsers by generating malformed HTML/HTML5

Ventajas del fuzzing

• Podemos probar muchas entradas en poco tiempo

• Automatización• Cobertura• Reutilización

Page 17: Fuzzing browsers by generating malformed HTML/HTML5

¿Quién habla de fuzzing?• Adobe - http://blogs.adobe.com/asset/2009/12/fuzzing_reader_-_

lessons_learned.html• Microsoft• Tavis Ormandy – Google Security Team - http://

googleonlinesecurity.blogspot.com.es/2011/08/fuzzing-at-scale.html• Charlie Miller -http://cansecwest.com/csw08/csw08-miller.pdf• Dan Kaminsky - http://

fuzzinginfo.files.wordpress.com/2012/05/showing-how-security-has-improved.pdf

• The Grugq - http://fuzzinginfo.files.wordpress.com/2012/05/ben-nagy-prospecting-for-rootite-2010.pdf

• Sinn3r - http://fuzzinginfo.files.wordpress.com/2012/05/memory-fuzzing.pdf• Aaron Portnoy - http://

fuzzinginfo.files.wordpress.com/2012/05/introducing_sulley.pdf• Dave Aitel - http://

fuzzinginfo.files.wordpress.com/2012/05/advantages_of_block_based_analysis.pdf

Page 18: Fuzzing browsers by generating malformed HTML/HTML5

¿Qué estoy fuzzeado?

Page 19: Fuzzing browsers by generating malformed HTML/HTML5

¿Por qué los estoy fuzzeando?

• Criticidad:– Software más usado– Ahora “OS” basados en browsers– Computación en la nube

• Demanda:– Pwn2own– Bugbounty– Bounties de los distintos fabricantes

Page 20: Fuzzing browsers by generating malformed HTML/HTML5

Pwn2own y Pwnium

• En 2013 hasta 3,14159 millones de US $

Page 21: Fuzzing browsers by generating malformed HTML/HTML5

Bugcrowd.com

https://bugcrowd.com/list-of-bug-bounty-programs/

Page 23: Fuzzing browsers by generating malformed HTML/HTML5

Mercado

http://www.forbes.com/sites/andygreenberg/2012/03/23/shopping-for-zero-days-an-price-list-for-hackers-secret-software-exploits/

Page 24: Fuzzing browsers by generating malformed HTML/HTML5

¿Por qué HTML/HTML5?

• Reciente implementación / En desarrollo• Interacción con el sistema operativo• HTML5 no solo en browsers (Metro,

FirefoxOS…)

Page 25: Fuzzing browsers by generating malformed HTML/HTML5

PEACH FUZZER

Page 26: Fuzzing browsers by generating malformed HTML/HTML5

¿Cómo lo vamos a fuzzear?

Page 27: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing Platform

• Es un framework para el desarrollo de nuestros propios fuzzers, no es un fuzzer

• Integra la interacción con los debuggers, lanzamiento del objetivo, etc.

• Dumb y smart fuzzing (mutación y generación)• Mutators ya desarrollados• Multiplataforma. Originalmente Python (v2.x)

recientemente reprogramado from scratch en C#• Herramientas de apoyo ya desarrolladas:

PeachMinset, PeachValidator, Hotfuzz…

Page 28: Fuzzing browsers by generating malformed HTML/HTML5

Peach Workflow (ejemplo)

• Se especifica el formato válido de lo que queremos fuzzear en un fichero XML (denominado PIT) según los elementos que nos proporciona Peach

• Se indica en el mismo PIT como se lanzará el objetivo, estados, los monitores que se usarán (debuggers, etc.), donde loguear los fallos que se detecten, etc.

• Se comprueba que nuestra definición “parsea” o “crackea” un fichero válido real

• ¡Se lanza el fuzzer!

Page 29: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing Platform

• Data modeling• Mutators• Hints• State modeling• Agents• Monitors• Test & Run• PeachValidator

Page 30: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformData modeling

• Un PIT tiene siempre al menos un data model• Describe la estructura de los datos que

queremos fuzzear: tipos, relaciones (longitudes, counts, offsets)

• La calidad del fuzzer desarrollado con PIT dependerá en gran medida de lo buena que sea la definición que hagamos de los data model

Page 31: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformData modeling

Page 32: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformMutators

• Son los elementos que se encargan de introducir modificaciones en el formato correcto de los datos intentando generar fallos en el programa

• Mutators para números, cadenas, blobs…

Page 33: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformMutators

Page 34: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformHints

• Pistas para el fuzzer y ser más óptimo a la hora de fuzzear o escoger unos mutators frente a otros

Page 35: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformState modeling

• Define la máquina de estados necesaria para lanzar el objetivo y manipularlo durante el fuzzeado.

Page 36: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformState modeling

Page 37: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformAgents

• Los agentes son procesos de Peach que se asocian con los monitores (debuggers, memoria, etc.) para lanzar y monitorizar la ejecución del objetivo

Page 38: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformMonitors

• Monitores son cada uno de los elementos que permite configurar Peach para “vigilar” la ejecución del objetivo

Page 39: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformMonitors

Page 40: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformMonitores para Windows

Page 41: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformMonitores para OS X

Page 42: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformMonitores para Linux

Page 43: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformMonitores multiplataforma

Page 44: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformTest and run

• Es donde especificamos el agente que vamos a usar, la estrategia de fuzzing, el logger, el estado inicial y otros elementos necesarios para comenzar el fuzzing.

Page 45: Fuzzing browsers by generating malformed HTML/HTML5

MI FUZZER DE NAVEGADORES WEB

Page 46: Fuzzing browsers by generating malformed HTML/HTML5

Ejemplo de PIT

DEMO

Page 47: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformValidando el PIT

• Ejecutamos Peach con debug y solo una iteración y vemos el proceso de cracking:

C:\> Peach -1 –debug fuzzpit.xml > peach_crack.txt

Page 48: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformValidando el PIT

Page 49: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformValidando el PIT

Page 50: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformPeachValidator

Page 51: Fuzzing browsers by generating malformed HTML/HTML5

FUZZEANDO A LAS BRAVAS

Page 52: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing Platform¡Ejecución!

DEMO

Page 53: Fuzzing browsers by generating malformed HTML/HTML5

Ejecución única o en paralelo

• Virtualización• En teoría no debería haber diferencia• En la práctica, al no ser el cuello de botella la

CPU, por cada nodo adicional incrementamos la velocidad el 100%

Peach –p 3,1 –debug fuzzpit.xml

Page 54: Fuzzing browsers by generating malformed HTML/HTML5

Algunos problemillas prácticos

• Arranque de los navegadores• Malware detection en Windows 8• Velocidad de los mutators

Page 55: Fuzzing browsers by generating malformed HTML/HTML5

Algunos problemillas prácticosArranque de los navegadores

• Cada navegador se comporta de manera diferente tras forzarse su cierre mediante el fuzzer

• Tuve que buscar las claves de registro de configuración de cada uno para evitar que saliera una pantalla de recuperación o una splash screen

Page 56: Fuzzing browsers by generating malformed HTML/HTML5

Algunos problemillas prácticosMalware detection en Windows 8

• Windows 8 tiene un antivirus por defecto instalado

• Detectada algunos HTML que generaba como malware y los borraba

• Esto interfería con el fuzzing

Page 57: Fuzzing browsers by generating malformed HTML/HTML5

Algunos problemillas prácticosVelocidad de los mutators

• Inicialmente la velocidad del fuzzer era inaceptable

• Se retocó y optimizó el PIT• Use un profiler para ver los cuellos de botella de

Peach (C#)• Finalmente una versión posterior de PIT era

mucho más rápida• Aun así otros enfoques son más rápidos

(Websockets)

Page 58: Fuzzing browsers by generating malformed HTML/HTML5

FUZZEANDO MEDIANTE WEBSOCKETS

Page 59: Fuzzing browsers by generating malformed HTML/HTML5

Fuzzing browsers con otro enfoque

• Uno de los cuellos de botella existentes es abrir y cerrar el navegador

• Esto se puede evitar usando WebSockets• Peach tiene un Publisher desarrollado de

WebSockets

Page 60: Fuzzing browsers by generating malformed HTML/HTML5

¿Qué son WebSockets?

• Es un protocolo para el intercambio bidireccional de datos entre browser y server

• Cambio de paradigma en la comunicación web

Page 61: Fuzzing browsers by generating malformed HTML/HTML5

Nueva estructura

• Desarrollo un Javascript para el navegador que se conecta al “servidor” que en este caso es el Publisher de Peach

• Intercambian unos datos y Peach envía los datos al navegador

• El Javascript recibe los datos y los abre en una pestaña nueva, espera e indica al fuzzer que ok

Page 62: Fuzzing browsers by generating malformed HTML/HTML5

Nueva estructura

• peach_ws_client.html• peach_ws_template.html

Page 63: Fuzzing browsers by generating malformed HTML/HTML5

peach_ws_client.html

function onMessage(evt) { obj = JSON.parse(evt.data.split("\n")[0]); content = obj.content; fuzzed_window = window.open('about:blank','_blank'); fuzzed_window.document.write(atob(content)); checkLoad(); fuzzed_window.close(); websocket.send('{ "msg" : "Evaluation complete" }'); }

Page 64: Fuzzing browsers by generating malformed HTML/HTML5

peach_ws_template.html

<html><body><img src="data:image/png;base64,##DATA##"></body></html>

Page 65: Fuzzing browsers by generating malformed HTML/HTML5

Mayor rapidez

• Con WebSockets el fuzzing es más rápido ya que no hay que abrir y cerrar el navegador

Page 66: Fuzzing browsers by generating malformed HTML/HTML5

WebSockets support

Page 67: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformDumb fuzzing + WebSocket publisher

<DataModel name="html"> <String> <Analyzer class="StringToken" /> </String> </DataModel>

Page 68: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformDumb fuzzing + WebSocket publisher

<Monitor class="WindowsDebugger">

<Param name="WinDbgPath" value="C:\Program Files\Debugging Tools for Windows (x64)" /> <Param name="CommandLine" value="C:\Program Files (x86)\Mozilla Firefox\firefox.exe C:\Peach\peach_ws_client.html" /></Monitor>

Page 69: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformDumb fuzzing + WebSocket publisher

<Publisher class="WebSocket"> <Param name="Template" value="peach_ws_template.html"/></Publisher>

Page 70: Fuzzing browsers by generating malformed HTML/HTML5

Peach Fuzzing PlatformDumb fuzzing + WebSocket publisher

DEMO

Page 71: Fuzzing browsers by generating malformed HTML/HTML5

Trabajo futuro

• Custom mutators• Grammar based generators• Granja de fuzzing

Page 72: Fuzzing browsers by generating malformed HTML/HTML5

Referencias (I)• Fuzzing: Brute Force Vulnerability Discovery (ISBN 0321446119)• Fuzzing for Software Security Testing and Quality Assurance (ISBN

1596932147)• http://

security.stackexchange.com/questions/6998/best-way-to-triage-crashes-found-via-fuzzing-on-linux

• The Art of File Format Fuzzing. iDEFENSE Labs• http://googleonlinesecurity.blogspot.com.es/2011/08/fuzzing-at-scale.html• Using fuzzing to detect security vulnerabilities. INFIGO-TD-01-04-2006.• Charlie Miller – http://cansecwest.com/csw08/csw08-miller.pdf• http://blogs.adobe.com/asset/2009/12/fuzzing_reader_-_

lessons_learned.html• http://fuzzing.info/papers/• Happy Fuzzing Internet Explorer HITCON [email protected]

Page 73: Fuzzing browsers by generating malformed HTML/HTML5

Referencias (II)

• http://0xffe4.org/browser-fuzzing-bamboo/ • http://redmine.corelan.be/projects/corelanfuzztemplates/rep

ository/revisions/13/entry/peach/• http://www.flinkd.org/• Industrial Bug Mining – Ben Nagy - http://

www.youtube.com/watch?v=S1mBZH9PPCQ• ##peachfuzzer at Freenode• #corelan at Freenode• https://www.corelan.be/index.php/2013/02/26/root-cause-a

nalysis-memory-corruption-vulnerabilities/

• Grammar-based Whitebox Fuzzing by Godefroid, Kiezum and Levin

Page 74: Fuzzing browsers by generating malformed HTML/HTML5

Fotos

• “Playing with a Dell laptop” por FFries Photo• “Personal Income Taxes V8” por StockMonkeys.com• “locking practice block” por insunlight• “Bull Rider Down 2012” por Bill Gracey• “TQFP Socket Enclosure” por rileyporter

Page 75: Fuzzing browsers by generating malformed HTML/HTML5

¿Preguntas?

Florencio Cano GabardaSocio, ingeniero y consultor de seguridad en SEINHECISA, IRCA 27001 Lead Auditor@[email protected]