Fuzzing browsers by generating malformed HTML/HTML5

Preview:

Citation preview

Fuzzing browsers by generating malformed HTML/HTML5

Florencio Cano Gabardafcano@seinhe.com

@florenciocano

AGENDA

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

INTRODUCCIÓN AL FUZZING

¿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).

Fuzzing

Generación / Mutación

Ejecución monitorizada

Implementación del fuzzer

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

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

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

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

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

Clasificación según el objetivo

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

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

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

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

RATIONALE

Ventajas del fuzzing

• Podemos probar muchas entradas en poco tiempo

• Automatización• Cobertura• Reutilización

¿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

¿Qué estoy fuzzeado?

¿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

Pwn2own y Pwnium

• En 2013 hasta 3,14159 millones de US $

Bugcrowd.com

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

Mercado

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

¿Por qué HTML/HTML5?

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

FirefoxOS…)

PEACH FUZZER

¿Cómo lo vamos a fuzzear?

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…

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!

Peach Fuzzing Platform

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

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

Peach Fuzzing PlatformData modeling

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…

Peach Fuzzing PlatformMutators

Peach Fuzzing PlatformHints

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

Peach Fuzzing PlatformState modeling

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

Peach Fuzzing PlatformState modeling

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

Peach Fuzzing PlatformMonitors

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

Peach Fuzzing PlatformMonitors

Peach Fuzzing PlatformMonitores para Windows

Peach Fuzzing PlatformMonitores para OS X

Peach Fuzzing PlatformMonitores para Linux

Peach Fuzzing PlatformMonitores multiplataforma

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.

MI FUZZER DE NAVEGADORES WEB

Ejemplo de PIT

DEMO

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

Peach Fuzzing PlatformValidando el PIT

Peach Fuzzing PlatformValidando el PIT

Peach Fuzzing PlatformPeachValidator

FUZZEANDO A LAS BRAVAS

Peach Fuzzing Platform¡Ejecución!

DEMO

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

Algunos problemillas prácticos

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

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

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

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)

FUZZEANDO MEDIANTE WEBSOCKETS

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

¿Qué son WebSockets?

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

• Cambio de paradigma en la comunicación web

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

Nueva estructura

• peach_ws_client.html• peach_ws_template.html

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" }'); }

peach_ws_template.html

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

Mayor rapidez

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

WebSockets support

Peach Fuzzing PlatformDumb fuzzing + WebSocket publisher

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

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>

Peach Fuzzing PlatformDumb fuzzing + WebSocket publisher

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

Peach Fuzzing PlatformDumb fuzzing + WebSocket publisher

DEMO

Trabajo futuro

• Custom mutators• Grammar based generators• Granja de fuzzing

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 Orange@chroot.org

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

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

¿Preguntas?

Florencio Cano GabardaSocio, ingeniero y consultor de seguridad en SEINHECISA, IRCA 27001 Lead Auditor@florenciocanofcano@seinhe.comwww.seinhe.com

Recommended