Monday, November 24, 2008

El caos en la Seguridad Informatica.

Un poco de historia

Alguno recordara la película Jurassic Park cuando el matemático explica que la Teoría del Caos habla sobre la imprevisibilidad de sistemas complejos. O aquel ejemplo que habla del efecto mariposa. Una mariposa que aletea en Japon causa un tsunami en New York.

En la mitología china, el dragon representa el principio del orden,yang, que emerge del caos. En algunos relatos chinos de la creacion, un rayo de luz pura, yin, emerge del caos y construye el cielo. Pero incluso despues de emerger del caos, el yin y el yan aun conservan las caracteristicas de aquel. Un exceso de uno u otro lleva de nuevo al caos.

Hesiodo, escribio la Teogonia, un poema cosmologico que afirma "en el principio fue el caos" y despues la Tierra y todo lo estable.

Una caracteristica distintiva de los sistema estudiados por la teoria del caos es que el comportamiento aperiodico inestable puede encontrarse en sistemas matematicamente simples. Modelos matematicos muy simples y rigurosamente definidos pueden exhibir comportamientos sorprendentementes complejos.

Otra caracteristica distintiva de los sistemas caoticos es su dependencia muy sensible de las condiciones iniciales; cambios que al principio son infinitesimales despues producen cambios mas grandes. Este comportamiento se describe como la firma del caos.

Este video explica muy bien un sistema caotico.




Un ejemplo de la Teoria del Caos en la seguridad informatica, lo podemos ver en este trabajo sobre cryptografia caotica

Pero no es a este tipo de utilizacion del caos al cual me queria referir en este post.

Fuzzing

Fuzz testing o Fuzzing es una tecnica de testing de tipo Black Box, que basicamente consiste en encontrar bugs en implementaciones, usando o injectando datos malformados , semi-maformados o datos "caoticos" de forma automatizada.

El proposito del fuzzing radica en la creencia que hay bugs en cada programa, que esperan a ser descubiertos. Por lo tanto un trabajo sistematico, puede encontrarlos, tarde o temprano.

Esta tecnica fue desarrollada en la Universidad de Wisconsin , Madison en 1989 por el profesor Barton Miller y sus estudiantes. El trabajo puede ser encontrado en el siguiente link http://www.cs.wisc.edu/~bart/fuzz/ ; esta principalmente orientado a fuzzing contra lineas de comando y a interfaces de usuarios y muestra que aun los sistemas operativos actuales son vulnrables a simple fuzzing.

Tipos de ataques

Un fuzzer debe intentar diferentes combinaciones de ataques en :

- numeros (signed/unsigned integers/float...)

- caracteres (urls, command-line inputs)

- metadata : user-input text (id3 tag)

- sequencias binarias

Un metodo es definir una lista de "valores peligrosos conocidos" " (fuzz vectors) para cada tipo e injectarlos o su combinacion.

- Para enteros: cero, negativos o o numeros muy grandes

- Para caracteres: escape , caracteres interpretables ( comas, numeral,...)

- Para binarios: Unos al azar


Veamos una herramienta interesante llamada Webslayer

Webslayer es una herramienta diseñada para realizar ataques de fuerza bruta en aplicaciones web, tambien puede ser utilizada para encontrar recursos no linkeados ( directorios, servlets,scritps ), realizar ataques de fuerza bruta sobre parametros de GET y POSTS, passwords...etc. La herramienta tiene un generador de payloads y un analizador de resultados.

Se pueden realizar los siguientes tipos de ataques:

  • Predictable resource locator: it can find directories and scripts based on well known dictionaries, recursion supported
  • Login forms brute force
  • Session brute force
  • Parameter brute force
  • Parameter Injection (XSS, SQL, etc)
  • Basic and Ntml Bruteforcing
Algunos de sus features son:
  • Encodings: 15 encodings supported
  • All parameters attack: the tool will inject the payload in every parameter
  • Authentication: supports Ntml and Basic
  • Multiple payloads: you can use 2 paylods in different parts
  • Proxy support (authentication supported)
  • For predictable resource location it has: Recursion, common extensions, non standard code detection
  • Multiple filters for improving the performance and for producing cleaner results
  • Live filters
  • Threads
  • Session export
  • Integrated browser (webKit)
  • Predefined dictionaries for predictable resource location, based on known servers (Thanks to Dark Raver, www.open-labs.org)

Generador de Payloads

Este creo que es una de las herramientas mas poderosas con las que cuenta.
Se pueden cargar payloads de archivos ( por ejemplo diccionarios ) o se puden crear payloads
en forma personalizada.
  • Numeric ranges
  • User Names
  • Credit cards numbers
  • Characters blocks
  • And wathever you can imagine..





























Veamos algunos ejemplos

Predictable resource locator:

  1. Setear el URL con la palabra FUZZ al final
  2. Seleccionar el diccionario
  3. Setear el nivel de recursividad
  4. Setear el numero de threads
  5. Setear las extensiones
  6. Se puede setear si el server responde con otros codigos de error que los reconozca.
  7. Se puede setear el User-Agent.
  8. Ejecutar



























Login form bruteforce:

Se debe setaer la URL completa a la cual se le hara Bruteforce, en la ventana de Post se debe pegar el contenido de los campos POST.

En este ejemplo tenemos

login=FUZZ&password=FUZ2Z

Se estaran usando dos payloads, para el primero se usara el diccionario de nombres names.txt, para el segundo el archivo common_pass.txt. La cantidad de request estara dada por la multiplicacion de las entradas que tenga cada archivo.

Luego de esto se ejecutara el ataque.




























El resultado se vera enla pantalla attacks results

























Otras herramientas para Fuzzing



Una lista ( un tanto antigua ) de programas que realizan fuzzing se encuentra en este link

Fuzzers - The ultimate list


Otra lista sacada de un interesante articulo sobre Fuzzing

Tools for web browsers
AXmanActive X
COMbustCommon Object Model
CSS-DieStylesheet support
DOM-HanoiData Object Model
HamachiDHTML code
jsparsefuzzJavaScript
MangleMeHTML tags
Tools for operating systems
ISICIP stacks
SfuzzUnix sockets
Stress2FreeBSD kernel
Sysfuzzsyscall() functions
Tools for network services
DHCPfuzzDHCP clients
FTPStressFTP servers
Fuzzball2TCP/IP headers
IRCfuzzIRC clients
ProtosTool collection for SIP, SNMP, DNS and others
SSHredderCollection of mutated SSH packets
Other tools
Manglemutates file header
Buggermutates data in the memory of running programs
CFG9000intelligent mutation of unknown input data
Frameworks
AutodafeNetwork logs, with runtime analysis
BedNetwork log, language: Perl
Peachuniversally applicable, language: Python
Smudgenetwork logs
SpikeNetwork log, language: C
SpikefileFile formats, language: C

fuentes :

http://www.owasp.org/index.php/Fuzzing

http://www.edge-security.com/webslayer.php

No comments: