Verificando Cdigo Forneo mediante Anlisis Esttico de Flujo de Control y Datos - PowerPoint PPT Presentation

1 / 34
About This Presentation
Title:

Verificando Cdigo Forneo mediante Anlisis Esttico de Flujo de Control y Datos

Description:

Instituto de Computaci n Facultad de la Republica. Universidad de la Rep blica ... Probador de Teoremas. Prueba. VC. CPU. Productor de C digo. Consumidor de C digo ... – PowerPoint PPT presentation

Number of Views:55
Avg rating:3.0/5.0
Slides: 35
Provided by: martin537
Category:

less

Transcript and Presenter's Notes

Title: Verificando Cdigo Forneo mediante Anlisis Esttico de Flujo de Control y Datos


1
PEDECIBA Informática Instituto de Computación
Facultad de la Republica Universidad de la
República Montevideo - Uruguay
Compilando y Certificando Código mediante
Análisis Estático de Flujo de Control y de Datos
Francisco Bavera
Orientador de Tesis Jorge Aguirre Supervisor
Alvaro Tasistro
2
Scheduling
  • Introducción al Código Móvil y
  • Soluciones al Problema del Código Móvil
  • Proof-Carrying Code
  • PCC-SA Proof-Carrying Code Based on Static
    Analysis
  • CCMini El Prototipo desarrollado
  • Experiencias
  • Conclusiones y Trabajos Futuros

3
Introducción al Código Móvil
Código Móvil
Testing
4
Seguridad Basada en el Lenguaje Fuente
5
Proof-Carrying Code (PCC)
  • El consumidor de código establece un conjunto
    de reglas de seguridad que garantizan el
    comportamiento seguro de los programas.
  • El productor de código crea, junto con el
    programa, una prueba de seguridad formal de que
    el código satisface las reglas de seguridad.
  • El consumidor de código utiliza un validador de
    pruebas simple y veloz para chequear que la
    prueba es válida.

6
Protocolo básico de PCC
Productor de Código
Consumidor de Código
Código Fuente
Código
Política Seguridad
Anotaciones
Espec. Lógica
Compilador Certificante
VCGen
VC
Probador de Teoremas
Chequeador de la Prueba
CPU
Prueba
No Confiable Complejo Más Costoso
Confiable Simple Menos Costoso
7
Proof-Carrying Code Based on Static Analysis
(PCC-SA)
8
Comparación entre PCC-SA y PCC
Similitudes
La arquitectura La infraestructura confiable es
pequeña Basados en la noción de compilación
certificante La carga de garantizar la seguridad
está en el productor Flexibles a cambios de las
políticas de seguridad (proceso costoso y
dificultoso) Permite detectar cualquier
modificación (accidental o maliciosa) del
programa y/o su prueba
Diferencias
En PCC verificación sobre un código móvil de
bajo nivel, en PCC-SA sobre un código
intermedio Representación de las pruebas
9
Comparación entre PCC-SA y PCC (cont.)
PCC-SA mejora a PCC en
Las pruebas de PCC son exponenciales respecto al
tamaño del código, en PCC-SA las pruebas son
lineales respecto al tamaño del código
Permite eliminar mayor cantidad de chequeos
dinámicos
La representación intermedia permite
independencia de plataforma
PCC mejora a PCC-SA en
En PCC, el proceso de verificación es mas simple
que en PCC-SA El consumidor de código debe
generar el código objeto antes de ejecutar la
aplicación
10
Comparación entre PCC-SA yel SandBox de Java
Similitudes
Chequeos en Tiempo de Ejecución
Diferencias
En Java, verificaciones dinámicas sobre todo el
código. En PCC-SA solo se utiliza chequeos en
tiempo de ejecución en algunos puntos del programa
PCC-SA mejora a Java
Performance del Código
11
Comparación entre PCC-SA y el ByteCode Verifier
Diferencias
ByteCode Verifier, ejecución abstracta del código
realizada a nivel de tipos. PCC-SA determina
también el estado del programa en cada punto.
Mejora al ByteCode Verifier
No rechaza programas inseguros cuando en realidad
no lo son Permite trabajar con políticas de
seguridad más amplias que las que permite un
sistema de tipos
ByteCode Verifier mejora a PCC-SA
ByteCode Verifier la verificación es simple.
12
Comparación entre PCC-SA y otros enfoques basados
en análisis de Flujo de Control
Similitudes
Flujo de control y verificaciones dinámicas.
Diferencias
PCC-SA no necesita la asistencia de anotaciones
provistas por el programador
Genera evidencia para ser usada por el consumidor
Algunos trabajos
Splint, CCured, Verificación de Binarios
13
El Prototipo Desarrollado CCMini
El Lenguaje Mini
  • Mini es una extensión de un subconjunto del
    lenguaje C.
  • Mini es una extensión de un subconjunto deC
    porque permite definir cual es el rango permitido
    para parámetros enteros. Para esto, se define el
    valor mínimo y el máximo que puede tomar el
    parámetro. Por ejemplo, el perfil de la siguiente
    función int func(int a(0,10)).

La Política de Seguridad
  • La política de seguridad garantiza seguridad de
    tipos y de memoria, que variables no
    inicializadas no sean leídas y que no se acceda a
    posiciones de arreglos fuera de sus límites

14
El Prototipo Desarrollado CCMini
Código Intermedio
  • El código intermedio es un Arbol Sintáctico
    Abstracto (ASA).
  • Esta es una representación del código fuente que
    permite realizar análsis estáticos, tal como,
    análisis de flujo de control y análisis de flujo
    de datos
  • El ASA utilizado es similar a los tradicionales
    pero además soporta anotaciones
  • Estas anotaciones muestran el estado de los
    objetos del programa (información acerca d
    einicialización de variables, invartiantes de
    ciclos y cotas de las variables).

15
CCMini
16
Un Ejemplo
int bubble_sort (int limit (0,99)) int 100
a int t,j, one365-364, i0 while
(iltlimit) jlimit while (jgti)
if (ajltaj-1)
taj ajaj-one aj-onet
jj-one iione
return 0
17
Un Ejemplo de ASA
18
Un Ejemplo de Esquema de Prueba
19
Demo del Prototipo Desarrollado
i0 / ordena el arreglo... / while
(ilt99) / ...usando el metodo de select sort
/ j99 auxij minj while
(jgti) if (ajltamin) minj
jj-1
auxai aiamin aminaux ii1

20
Demo del Prototipo Desarrollado (cont.)
i0 / ordena el arreglo... / while
(ilt99) j99 / ...usando el metodo
de burbujas / while (jgti) if
(ajltaj-1) taj /y haciendo swapping
con una vble temporaria / ajaj1
aj-1t jj-1
ii1
21
Demo del Prototipo Desarrollado (cont.)
i0 while (ilt99) a i
a i1 ii1
22
Experiencias
23
Demostración de la Complejidad
Se caracterizó una familia de programas para los
cuales se demostró la complejidad de la
certificación y de la verificación es lineal con
respecto a la longitud del programa de
entrada. Existen fuertes evidencias de que dicha
familia coincide con los programas reales. Se
demostró que para programas que no corresponden a
dicha familia el comportamiento es cuadrático.
24
Conclusiones
  • Se desarrolló un framework para la ejecución
    segura de código móvil Proof-Carrying Code
    based-on Static Analysis (PCC-SA).
  • Se presentó evidencia de los beneficios de
    utilizar análisis estático de flujo de control
    para garantizar la ejecución segura de código
    móvil.
  • Principales características de PCC-SA
  • seguridad, independencia de la plataforma,
  • verificaciones de seguridad simples,
  • generación de pruebas de manera automática,
  • provisión de la información necesaria para
    efectuar optimizaciones sobre el código.
  • Características más importantes tamaño lineal de
    las pruebas (con
  • respecto al programa producido) y complejidad
    de la verificación
  • de seguridad.

25
Conclusiones
Se presento un Compilador Certificante
Certifying Compiler for Mini (CCMini) basado en
análisis de flujo de control y datos. Se
implementó un prototipo del compilador
certificante. CCMini es un Compilador
Certificante pequeño y simple que provee un
ambiente para la ejecución segura de código
móvil. Sin embargo, CCMini puede ser usado en
aplicaciones (y ambientes) que no requieran
mobilidad del código. El diseño del prototipo
asegura que solo serán descartados aquellos
programas que son ciertamente inseguros.
26
Conclusiones
Se demostró que la generación y la verificación
de seguridad, realizada por el prototipo, es
lineal para una gran familia de programas
(parecería que concuerda con los programas
reales). Un estudio sobre un número razonable de
programas seleccionados mostró que la mayoría de
los accesos a arreglos se realiza mediante
variables inductivas. Sin embargo, para
confirmar esto se debería realizar estos estudios
sobre librerias existentes. Esto solo puede ser
factible si se extiende CCMini a un lenguaje
estandar. Se diseñaron extensiones y
optimizaciones para CCMini.
27
Trabajos Futuros
Extensión del prototipo de modo que pueda ser
usado para aplicaciones reales".
Trabajar en la extensión de la política de
seguridad incluyendo por ejemplo el tratamiento
de punteros, y la incorporación de nuevos
análisis estáticos.
Especificar las políticas de seguridad por medio
de autómatas.
Incorporar análisis de punto fijo para acotar los
ciclos.
Incorporando un lenguaje ensamblador tipado se
espera poder definir un entorno basado en
análisis estático (de control de flujo y datos) y
en un sistema de tipos formal.
28
(No Transcript)
29
Soluciones al Problema del Código Móvil
Ventaja veloz, simple, seguro. Desventaja no
existe ninguna garantía de la corrección del
código
30
Soluciones al Problema del Código Móvil (cont.)
Server
Server
Ventaja de propósito general. Desventaja JBV
limitado en las verificaciones JIT costoso y
grande.
31
Soluciones al Problema del Código Móvil (cont.)
Server
Server
Ventaja potente. Desventaja difícil de
implementar.
32
Ventajas de PCC-SA
La infraestructura del consumidor es automática y
de bajo riesgo
El esfuerzo reside en el productor
No se requieren relaciones productor/consumidor
confiables
Es flexible, dado que puede utilizarse con un
amplio rango de lenguajes y de políticas de
seguridad
El código se verifica estáticamente
Permite detectar cualquier modificación
(accidental o maliciosa) del programa y/o su
prueba
33
Ventajas de PCC-SA (cont.)
El tamaño de las pruebas es lineal al programa
producido
Permite ampliar el rango de las propiedades de
seguridad que pueden ser demostradas
Permite eliminar una mayor cantidad de chequeos
en tiempo de ejecución que en PCC
Manipular una representación intermedia permite
independencia de plataforma
34
Desventajas de PCC-SA
Al igual que PCC, es muy sensible a los cambios
de las políticas de seguridad
Dado que PCC es un proceso cooperativo, el
productor de código debe estar involucrado en la
definición de la seguridad del consumidor de
código
Establecer la política de seguridad es una tarea
costosa
Garantizar la correctitud de la arquitectura es
un procedimiento muy costoso
Traducir una propiedad de seguridad al análisis
estático que la verificará no es trivial
Write a Comment
User Comments (0)
About PowerShow.com