Lisex  
 
 

 

Verificación formal del modelo

Como se explica en la sección Especificación formal, se cuenta con una especificación formal de cada una de las operaciones del modelo de cómputo y con una especificación formal de cada una de las propiedades que se espera que el modelo verifique.

El modelo verifica una propiedad si tal propiedad es un invariante del modelo. Un predicado es un invariante de un modelo si cada una de las operaciones del modelo preserva el predicado. Una operación preserva un predicado si, partiendo de un estado donde el predicado es cierto, la operación deja al sistema en un estado donde el predicado también es cierto.

En consecuencia, verificar que el modelo cumple con una propiedad implica, por lo general, probar que cada operación preserva esa propiedad. Más técnicamente, el trabajo de verificación consiste en probar que

s,t:Estado · P(s) /\ TR(s,Op,t) -> P(t)

para cada operación Op, donde

Estado
es el conjunto o tipo de todos los estados posibles en los que puede estar el sistema; s y t están cuantificadas universalmente sobre ese conjunto.
P
es la propiedad o predicado que se espera que la operación preserve; notar que es un predicado que depende de un estado.
TR
es la relación de transición de estados que relaciona dos estados (s y t) y una operación (Op). La interpretación es que la operación Op lleva el sistema del estado s al estado t.

Luego, se prueba que

n:Nat; s1,...,sn:Estado · 

   P(s1) /\ (i:Nat · i < n -> (EX Op:Operacion · TR(si,Op,si+1))) -> P(sn)

donde

Nat
es el conjunto o tipo de los números naturales.
EX
es el operador lógico de cuantificación existencial.
Operacion
es el conjunto o tipo de todas las operaciones del sistema.

En Lisex los lemas enunciados más arriba toman una forma ligeramente diferente. Lisex Security Model define cuatro propiedades de interés que se espera que el modelo preserve:
Seguridad discrecional
Seguridad simple
Confinamiento
Cambio de atributos de seguridad

Las dos primeras se combinan en un único predicado (SecureState), y la última es una propiedad de transición (no de estado) por lo que no debe asumirse que vale en el estado de partida. Por lo tanto, se deben probar tres lemas por cada operación del sistema:

OpPSS
acrónimo de Op Preserves Secure State (por ejemplo, ChmodPSS); los lemas de esta forma prueban que cada operación preserva la dos primeras propiedades (DACSecureState y SimpleSecurity)
OpPSP
acrónimo de Op Preserves Star Property (por ejemplo, AddUsrGrpToAclPSP); los lemas de esta forma prueban que cada operación preserva la propiedad de confinamiento (recordar que star property, *-property y confinamiento son sinónimos).
OpPCP
acrónimo de Op Preserves Control Property (por ejemplo, ClosePCP); los lemas de esta forma prueban que cada operación preserva la propiedad de cambio de atributos de seguridad.

Por ejemplo, en lenguaje Coq el lema OpenPSP se escribe de la siguiente forma:

Lemma OpenPSP:
 (s,t:SFSstate; u:SUBJECT)
  (FuncPre5 s)
  ->(StarProperty s)->(TransFunc u s Open t)->(StarProperty t).

donde (FuncPre5 s) es un predicado que asegura que secmat es una función parcial finita, lo cual es un requisito para poder probar que open preserva confinamiento. Observar que, con respecto a la forma general que tienen estos lemas, se cambia /\ por -> lo que es lógicamente correcto. Además, la relación de transición captura el sujeto (proceso) que efectúa la llamada o ejecuta la operación por lo que es necesario cuantificar universalemente sobre todos los posibles sujetos que pueden ejecutar la operación. De esta forma, se puede estar seguro de que sin importar el estado de cual se parta ni el sujeto que ejecuta la operación, si el estado de partida es ``seguro'' el estado de llegada también lo será.

Los tres lemas se agruparon en un archivo por cada operación:
aclstat
addUsrGrpToAcl
chmod
chobjsc
chown
chsubsc
close
create
delUsrGrpFromAlc
mkdir
open
oscstat
owner_close
read
readdir
rmdir
sscstat
stat
unlink
write

Finalmente se probó un lema que asegura que el sistema preserva DACSecureState, SimpleSecurity y StarProperty. En la teoría de seguridad, a este lema se lo conoce como Basic Security Theorem (BST). Notar que en ese mismo módulo se prueba que el estado inicial del sistema es seguro.

El código fuente de la especificación y verificación formal listo para ser compilado en Coq 7.3 está en el archivo LSM00.tar.gz.

La verificación formal presentada en esta página sólo asegura que el modelo es correcto con respecto a varias propiedades. Esto no da ninguna seguridad que la implementación del modelo sobre el núcleo de Linux sea correcta con respecto al modelo. El testing funcional efectuado apunta a comprobar la corrección de la implementación con respecto a la especificación.

   
© 2003 por Grupo Gidis. Todos los derechos reservados.
Sitio diseñado por Lorena Cantarini [mailto]