Upload
navajanegra
View
880
Download
4
Embed Size (px)
Citation preview
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/
Browser’s bounty programs
• Microsoft - Internet Explorer 11 Preview Bug Bounty - http://www.microsoft.com/security/msrc/report/bountyprograms.aspx
• Mozilla - http://www.mozilla.org/security/bug-bounty.html
• Google – Chromimum Vulnerability Reward program - http://www.chromium.org/Home/chromium-security/vulnerability-rewards-program
• http://pentest.netragard.com/netragards-eap/• http://www.zerodayinitiative.com/
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 [email protected]
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@[email protected]