análisis estático de código para detección de vulnerabilidades en aplicaciones web pablo e....

53
Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. [email protected]

Upload: amancio-albarran

Post on 02-Apr-2015

114 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web

Pablo E. (Fidel) Martínez López, [email protected]

Page 2: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

“The study of type systems – and of programming languages form a type-theoretical perspective – has become an energetic field with major applications in software engineering, language design, high-performance compiler implementation, and security.”

Benjamin C. PierceTypes and Programming Languages

Page 3: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Resumen de temas

Proyecto: “Seguridad en aplicaciones web” Problema: Detectando vulnerabilidades La técnica:

Sistemas de tipos estáticosSistemas Hindley-Milner con restriccionesGrammar Based Analysis

Propuesta: GBA y vulnerabilidades Conclusiones

Page 4: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Seguridad en Aplicaciones Web

Page 5: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Seguridad en Aplicaciones Web

Proyecto de investigación conjunta entreLIFIA, Universidad Nacional de La PlataCORE Security Technologies S.A.

FinanciaciónANR de la Agencia de Investigaciones

Científicas y TecnológicasProyecto NA 080/04 “Plataforma híbrida de

seguridad para protección de aplicaciones WEB”

Page 6: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Seguridad en Aplicaciones Web

Equipo6 investigadores por el LIFIA

2 senior 4 juniors

4 investigadores por CORE (más personal de apoyo)

Duración del proyecto1 año

Page 7: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Seguridad en Aplicaciones Web

EtapasConocimiento de los equiposFamiliarización con problemas y técnicasAnálisis de posibles soluciones y elección de

2 alternativas Basadas en análisis estático de código

Diseño e implementación de las elegidas Ejecución Simbólica de código JAVA Grammar-Based Analysis extendido

(sistema de tipos estático especializado)

Page 8: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Detectando Vulnerabilidades

Page 9: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Detectando Vulnerabilidades

¿Qué es una vulnerabilidad en una aplicación web?Un punto donde un atacante puede usar el

sistema en forma no especificada, e.g. tener acceso a información confidencial realizar operaciones privilegiadas, etc.

El proyecto se concentró en inyección de código (source-code injection)

Page 10: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Detectando Vulnerabilidades

Inyección de CódigoSe leen parámetros ingresados por un

usuario en una interface web (como strings)Se componen con otros strings para armar

códigoSe ejecuta el código producido de esta

manera ¿Cómo sabemos que lo ingresado es

siempre lo esperado?

Page 11: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Detectando Vulnerabilidades

Ejemplo

Si el atacante provee en $email

¡se produce un ataque!

get($email); get($pincode);$query = “SELECT * FROM users WHERE email=′”

. $email . “′ AND pincode=” . $pincode;$result = mysql_query($query);

“juan@host′ OR ′0′=′1”

Page 12: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Detectando Vulnerabilidades

Ejemplo (cont.)Notar el uso de las comillas simplesEl atacante puede introducir operadores

lógicos donde sólo se esperaba un email…Query producido:

¡Ignora el PIN!

“SELECT * FROM users WHERE email=′juan@host′

OR ′0′=′1′ AND pincode=123”;

Page 13: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Detectando Vulnerabilidades

Ejemplo (cont.)Otra posibilidad es que provea en $pincode

Query producido:

¡Obtiene todas las filas de la tabla!

“SELECT * FROM users WHERE email=′juan@host′ AND pincode=123

OR 0=0”;

“123 OR 0=0”

Page 14: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistemas de Tipos Estáticos

Page 15: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistemas de Tipos Estáticos

¿Qué son?herramientas para determinar propiedades de

programas sin ejecutarlosasocian información a cada parte de un

programase basan en el texto del programa, teniendo

en cuenta la semántica

Page 16: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistemas de Tipos Estáticos

Características generalesestáticos

no ejecutan el programadecidibles (en general)

hay un algoritmo que calcula la propiedad ALTERNATIVA: tipos dependientes

no decidibles asistentes para la construcción de programas correctos

pueden requerir anotaciones del usuario o no diferentes estilos de programación

Page 17: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistemas de Tipos Estáticos

Estilos de diseño del sistemaA la Curry (pej. PHP)

términos sin tipo semántica sobre ellos el sistema de tipo que elimina (ciertos) programas

erróneosA la Church (pej. JAVA)

términos tipados semántica basada en los tipos

Page 18: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistemas de Tipos Estáticos

Presentaciones del sistema implícita (términos sin anotaciones de tipos)explícita (términos con anotaciones de tipos)

Históricamente los implícitos se presentan a la Curry los explícitos se presentan a la Church

Es común mezclar estilo y presentación

Page 19: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistemas de Tipos Estáticos

Sistemas a la Curry lenguaje de términossemántica sobre este lenguaje lenguaje de tiposrelación entre términos y tipos

Propiedades fundamentalesun término con tipo no tiene ciertos erroresel tipo describe propiedades del término

Page 20: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistemas de Tipos Estáticos

Método para especificar la relación juicios(esquemas de) reglas de derivación árboles de derivación

Propiedad básica juicio válido árbol de derivación para él

Page 21: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistemas de Tipos Estáticos

Características de un sistema dado1. relaciones funcionales (o no)

a cada término le corresponde un único tipo

2. relaciones dirigidas por sintaxis (o no) hay una regla por cada construcción del lenguaje

ImplicacionesPara 1. los algoritmos son casi trivialesPara 2. los algoritmos son recursivos

Page 22: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistemas de Tipos Estáticos

¿Y si el sistema no es funcional o dirigido por sintaxis?Diseñamos uno equivalente que lo sea¡Debe demostrarse en qué sentido son

equivalentes!Típicamente:

relación entre diferentes tipos para un término, establecer la relación entre la

salida del algoritmo y sus tipos

Page 23: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistemas de Tipos Estáticos

Importanciaventajas para los programadores

chequeo de errores comunes documentación rudimentaria posibilidades de optimización al compilar

desarrollos posteriores basados en ellos Types & Effects Type Specialization Grammar Based Analysis

Page 24: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistema Hindley-Milner

Page 25: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistema Hindley-Milner

Para lenguajes funcionalesSistema de tipado implícito

Tipos básicos Tipos compuestos (¡funciones!) Polimorfismo paramétrico

Cuantificación universal de variables de tipo en el nivel más externo, e.g.

id :: a.aa map :: a.b.(ab)[a] [b]id x = x map f [] = []

map f (x:xs) = f x : map f xs

Page 26: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Sistema Hindley-Milner

Las reglas fundamentales son 4:

Funciones Aplicación

Generalización Instanciación

e :: 21e’ :: 2

e e’ :: 1

, x :: 2e ::

1

x.e :: 2 1

e :: FV()

e :: .

e :: . e :: [:=’]

Page 27: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Hindley-Milner con Restricciones

Diversas extensiones usan restriccionesRegistrosOverloading (polimorfismo ad-hoc)Subtyping

Todas estas extensiones desarrollanTeorías de restricciones similaresAlgoritmos de inferencia similares

Page 28: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Hindley-Milner con Restricciones

Sistema HM(X) Marco general para estas extensionesEnriquece el sistema HM con un parámetro X

X es un álgebra (cilíndrica) de restricciones(con un operador de proyección)

Ejemplos X = álgebra de Herbrand Hindley-Milner X = sistema de subtipos HM con subtipos Otros: overloading, records, BTA, GBA, etc.

Page 29: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Hindley-Milner con Restricciones

Los juicios tienen restricciones La regla de generalización es ahora

Simplificaciones posiblesDependen del álgebra XE.g.

CD, e :: FV(C)FV()

Ca.D, e :: .D

.< < se puede simplificar a <

Page 30: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Hindley-Milner con Restricciones

El trabajo se divide en 2 partes: Inferencia de tipos

Colectar restricciones Similar a dar una especificación del problema

Resolución de restricciones Similar a implementar una solución que satisfaga la

especificación El algoritmo de resolución depende de qué

restricciones se usan

Page 31: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Hindley-Milner con Restricciones

Gráficamente: Parte 1 Parte 2

Inferencia de tipos

programa

Tipo (con restricciones)

Resoluciónde restricciones

restricciones

Solución

Page 32: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

Page 33: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

MotivaciónStrings usados en contextos inapropiados

(e.g. sustituyendo a tipos en lenguajes de scripts) Descriptores de estilos HTML y XML Expresiones Xpath Sentencias SQL

Page 34: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

¿Cuál es el problema?¡El mantenimiento!Los strings con semántica

Pueden conducir a errores en runtime Constituyen puntos de ataque para crackers No son prevenidos por los sistemas de tipos

tradicionales Son difíciles de testear exahaustivamente

Page 35: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

Peter Thiemann desarrolló una instancia de HM(X)

Propósito original de Thiemann:Aliviar mantenimiento y debugging de

programas existentesNO un framework para construir programas

Se lo puede adaptar para detección de vulnerabilidades en aplicaciones web

Page 36: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

Enfoque:Se enriquece el sistema de tipos

Con tipos String() tq es una variable de lenguaje Con un álgebra de restricciones que predican sobre

dichas variablesLa inferencia provee las restricciones que

satisfacen los strings producidos por el programaLa resolución es paramétrica respecto de un

lenguaje dado

Page 37: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

Resolución de restricciones en GBASe provee una gramática de referencia GSe determina cuáles de las asignaciones de los

no-terminales de G a variables de lenguaje satisfacen las restricciones

Estos no-terminales aproximan la forma de los strings producidos

Page 38: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

Las restricciones tienen la forma:

C ::= true -- siempre verdadera

| -- relación de subtipado

| r -- relación de derivación

| CC -- conjunción de restricciones

r ::= | | a | r++r -- similar a producciones

-- (siendo a un terminal)

Page 39: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

Algunas reglas de tipado

y de simplificación

e1 :: String(1) e2 :: String(2)

e1++e2 :: 12.(1++2)String()

w :: .(w)String()

12

String(1)String(2)

Page 40: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

GBA gráficamente: Parte 1 Parte 2

Inferenciade tipos

programa

Tipo (con restricciones

sobre ’s)

Resoluciónde restricciones

Restricciones sobre ‘s

Asignaciones válidas de no-terminales de G a ‘s

Gramática de referencia G

Page 41: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

Ejemplo (en Haskell)

¿Produce render código HTML válido?¡El tipo en Haskell no lo indica!

data ForkTree = Tip Int | Fork ForkTree ForkTreerender :: ForkTree -> Stringrender t = case t of

Tip s -> int2string s Fork l r -> “<ul><li>” ++ render l ++ “</li>”

++ “<li>” ++ render r ++ “</li></ul>”

Page 42: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

Ejemplo (cont.) Asumiendo que el tipo GBA de int2string es

Con GBA, el tipo asignado para cada t fijo es

C2 = (<ul><li>++++</li><li>++++</li></ul>1)

render t :: 12.(C2C1)String()

C1 = (0++21 1++21 … 1 12)

int2string :: 12.(C1) Int String(1)

Page 43: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

Pero… ¿render t produce código HTML? ¡Usamos resolución de restricciones!

Se usa la gramática GHTML de HTML como gramática de referencia

Se realiza la resolución (cuyo mecanismo es similar al parsing)

Si todas las variables de lenguaje pueden asignarse a algún no-terminal de GHTML, entonces la respuesta es sí. Si no, es no.

Page 44: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Grammar-Based Analysis

Algunas deficiencias¿Por qué tener una gramática de referencia?

Decidir cuáles lenguajes satisfacen las restricciones es indecidible en general

Las gramáticas de referencia tienen que ser orientadas a caracteres (y no a tokens)

Es preferible que sean ambiguasAún no manejan operaciones de

deconstrucción de strings

Page 45: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

GBA y Vulnerabilidades

Page 46: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

GBA y Vulnerabilidades

¿Cómo usar GBA para detectar injections?Enriquecer el lenguaje

Para poder escribir programas con vulnerabilidades ¡Implica extender la teoría!

Luego, se usan dos copias de los terminales Terminales seguros – utilizados en el programa Terminales inseguros – provistos por el atacante

Y se provee una gramática GV por cada tipo de vulnerabilidad V

Page 47: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

GBA y Vulnerabilidades

Terminales seguros e inseguros – ejemplo

“SELECT * FROM users WHERE email=′juan@host′

OR ′0′=′1′ AND pincode=123”;

“SELECT * FROM users WHERE email=′juan@host′ AND pincode=123

OR 0=0”;

Terminalesseguros Terminales

inseguros

Page 48: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

GBA y Vulnerabilidades

¿Cómo usar GBA para detectar esto? (2)La inferencia provee información sobre cómo

se forman los strings usados para queries u otros tipos de ejecuciones no seguras

La resolución contra GV establece si el programa tiene la vulnerabilidad V

¡Podría extenderse para extraer instancias de ataques a partir de la gramática!

Page 49: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

GBA y Vulnerabilidades

VentajasFramework único, no dependiente del

conjunto de vulnerabilidadesPosibilidad de armar instancias de ataques

DesventajasLa extensión a lenguajes orientados a objetos

(e.g. JAVA) es complejaAún en etapa experimental

Page 50: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Conclusiones y Bibliografía

Page 51: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Conclusiones

Los sistemas de tipos son una herramienta muy versátil para diversos propósitos

La investigación en este área está en auge y hay interés creciente en estos sistemas

La industria y la academia pueden colaborar con éxitoRequiere resignificar muchos códigos

implícitos de comunicación…

Page 52: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Bibliografía

Benjamin C. Pierce. Types & Programming Languages. The MIT Press, 2002

John C. Reynolds. Theories of Programming Languages. Cambridge University Press, 1998.

Pablo E. Martínez López. Static type systems: from specification to implementation. Chapter 11 of Verification, Validation and Testing in Software Engeneering. Aristides Dasso and Ana Funes (eds.). Idea Group Publishing, 2005.

Page 53: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web Pablo E. (Fidel) Martínez López, Dr. fidel@lifia.info.unlp.edu.ar

Bibliografía

M. Odersky, M. Sulzmann, and M. Wehr. Type inference with constrained types. Theory and Practice of Object Systems, 5(1):35-55, 1999.

Peter Thiemann. Grammar-based analysis of string expressions. In Proceedings of the 2005 ACM SIGPLAN international workshop on Types in languages design and implementation, pp. 59-70. ACM Press, 2005.