análisis estático de código para detección de vulnerabilidades en aplicaciones web
DESCRIPTION
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]. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/1.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/2.jpg)
“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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/3.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/4.jpg)
Seguridad en Aplicaciones Web
![Page 5: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/5.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/6.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/7.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/8.jpg)
Detectando Vulnerabilidades
![Page 9: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/9.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/10.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/11.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/12.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/13.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/14.jpg)
Sistemas de Tipos Estáticos
![Page 15: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/15.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/16.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/17.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/18.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/19.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/20.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/21.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/22.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/23.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/24.jpg)
Sistema Hindley-Milner
![Page 25: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/25.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/26.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/27.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/28.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/29.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/30.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/31.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/32.jpg)
Grammar-Based Analysis
![Page 33: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/33.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/34.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/35.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/36.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/37.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/38.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/39.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/40.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/41.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/42.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/43.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/44.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/45.jpg)
GBA y Vulnerabilidades
![Page 46: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/46.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/47.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/48.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/49.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/50.jpg)
Conclusiones y Bibliografía
![Page 51: Análisis Estático de Código para Detección de Vulnerabilidades en Aplicaciones Web](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/51.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/52.jpg)
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](https://reader037.vdocuments.us/reader037/viewer/2022110404/56813115550346895d976852/html5/thumbnails/53.jpg)
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.