5. Aproximación: Firma digital
● Confianza basada en la autoridad certificadora
● No en las propiedades del programa a ejecutar
6.
7. Aproximación: Seguridad basada en el lenguaje fuente
(Compilador de Java)
Produce código independiente de la plataforma (bytecode)
● El consumidor puede verificar el código bytecode antes de su ejecución.
● El verificador de bytecode garantiza propiedades de seguridad básicas de
memoria, flujo de control y tipos.
● JVM sólo interpreta o compila a código objeto si el código pasa el verificador
de bytecode.
DESVENTAJA: Aumento del tiempo de ejecución.
8.
9. PCC
Comprobar que el programa se comporta de manera segura
● El receptor establece un conjunto de reglas de seguridad
● El productor crea una prueba formal para el código que demuestra que el
código cumple las reglas de seguridad
● El receptor mediante un validador verifica que la prueba es válida y por tanto
el código también.
10. PCC
Es a prueba de manipulación
Qué pasa si se hace una modificación accidental o maliciosa
○ La prueba ya no será válida → el programa será rechazada,
○ La prueba será válida, pero no como una prueba de seguridad para el
programa → el programa será rechazada
○ La prueba seguirá siendo válida y seguirá siendo una prueba de
seguridad para el programa → el programa sigue cumpliendo la garantía
de seguridad.
11.
12. Componentes de un sistema PCC
Compilador certificante
● Toma como entrada el código fuente y obtiene como resultado el código, las anotaciones y las
especificaciones tipadas.
El generador de condición de verificación (VCGen)
● Es un analizador simbólico para lenguajes intermedios. Examina el código en busca de operaciones
potencialmente inseguras y emite un predicado de seguridad que debe ser verificado por cada una
de dichas operaciones. (condición de verificación o VC).
El demostrador de teoremas
● Genera la prueba o demostración que demuestra formalmente los predicados de seguridad.
13. Componentes de un sistema PCC
Una lógica formal para especificación y verificación de políticas.
● El lenguaje de especificación es utilizado para expresar requerimientos sobre el componente
entrante y la lógica es utilizada para verificar que el componente cumple con los requisitos
impuestos.
El verificador de pruebas
● Verifica que cada paso del esquema de la prueba es válido y además, que la prueba demuestra la
condición de verificación requerida y no otro predicado.
Una representación formal de pruebas (Certificados).
● Los certificados proveen una representación formal de pruebas y son utilizados para transmitir al
consumidor de código evidencia sencilla de verificar que el código que recibe es seguro.
14.
15.
16.
17. Ventajas
● El consumidor del código sólo tiene que realizar un proceso seguro de comprobación rápido,
simple y fácil.
● Al consumidor de código no le importa cómo se construyen las pruebas.
● La infraestructura del consumidor es automática y de bajo riesgo
● No se necesita criptografía o entidades de confianza porque PCC está comprobando las
propiedades intrínsecas del código y no su origen.
● El PCC es completamente compatible con otros enfoques de la seguridad de código móvil.
● Debido a que el código no confiable se verifica de forma estática, antes de ser ejecutado, no sólo
ahorramos tiempo de ejecución, también se detectan operaciones potencialmente peligrosas antes
de la ejecución
● PCC es flexible: puede utilizarse con un amplio rango de lenguajes y de políticas de seguridad
● Los programas PCC permiten detectar cualquier modificación (accidental o maliciosa) del programa
y/o su prueba, mientras siguen garantizando la seguridad
18. Desventajas
● La arquitectura 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
● La codificaciones triviales de pruebas de propiedades de programas son muy largas
● La generación de predicados acerca de propiedades del código es una tarea difícil
● Probar la condición de verificación es una tarea complicada y costosa
● Verificar la prueba no es una tarea fácil si lo que se quiere es una prueba concisa y que el
chequeador sea pequeño, rápido e independiente de la política de seguridad
● Establecer la política de seguridad es una tarea costosa
● Garantizar la correctitud de la arquitectura es un procedimiento muy costoso
28. Bibliografía
http://www.cs.berkeley.edu/~necula/pcc.html
Un Survey sobre Proof-Carrying Code (Bavera, Francisco; Baum, Gabriel; Medel,
Ricardo; Arroyo, Marcelo; Aguirre, Jorge)
Grupo de Procesadores de Lenguajes - Línea: Código Móvil Seguro (Bavera, Francisco;
Baum, Gabriel; Medel, Ricardo; Arroyo, Marcelo; Aguirre, Jorge; Nordio, Martín)
Certificación Automática de Propiedades de Seguridad de Código fuente Java en
Lógica de Reescritura (Mauricio F. Alba Castro)
Preservación de Obligaciones de Prueba en Entornos H´ıbridos de Verificación (Julián
Samboski-Forlese)