• Aucun résultat trouvé

Dans cette section, nous présentons le formalisme utilisé pour spécifier les programmes, ainsi que les automates d’édition spécifiant les propriétés de sécurité. Plus précisément, nous commençons par définir les MEFEs ( Extended Finite State Machines) puis nous décrivons comment elles peuvent être utilisées afin de spécifier les automates d’édition.

5.3.1

Machines à états finis étendues MEFEs

Afin de capter formellement le comportement des programmes ainsi que celui des auto- mates d’édition, nous avons opté pour les machines à états finis étendues MEFEs. Nous avons adopté ce modèle de spécification, vu la grande expressivité dont jouit une MEFE notamment pour la représentation des actions conditionnées (actions munies de gardes) qui manipulent souvent des variables. Il est à noter que même s’il n’y a pas une définition standard des MEFEs, la définition adoptée dans cette contribution partagent plusieurs points communs avec les différentes variétés de MEFEs qu’on peut trouver dans la littérature1.

Définition 5.3.1 (Machine à états finis étendue). SoientΣ un ensemble d’actions, V un en- sembles de variables,E un ensemble d’expressions arithmétiques définis sur V, et soient G un ensemble d’expressions boolééennes (gardes ou conditions) définies surΣ et E. Une machine à états finis étendue définie surΣ∗,V et G est un triplet (S, i, ∆) tel que :

S est un ensemble fini d’états ;

i est l’état initial ;

∆ ⊆ (S × (G × Σ) × S) est la fonction de transition.

La fonction de transition ∆ est constituée de triplets de la forme (s1, (g, σ), s2) dont la

notation ests1 (g,σ)

−→ s2. Ceci représente une transition de l’états1 vers l’états2 conditionnée

par l’expressiong et exécutant la séquence d’actions σ.

1. Notre extension des machines à états finis n’inclut pas la distinction entre actions d’entrées et actions de sorties (input/output actions) souvent utilisée dans le contexte de test de conformité.

5.3.2

Automates d’édition

Les automates d’édition (AEs) ont été proposés par Ligatti et al. [11, 74]. Dans ce type d’automates, étant donné un état et et une action en entrée, la fonction de transition spécifie le nouvel état à engendrer ainsi que la nouvelle séquence d’actions à exécuter. C’est ainsi que la fonction de transition précise la procédure d’intervention à adopter afin d’appliquer une propriété de sécurité. Cette procédure varie en fonction de la nature de l’action interceptée, elle peut accepter l’action en entrée, la simuler (supprimer), insérer une séquence d’actions ou bien arrêter tout simplement le programme. Un automate d’éditionA appliquant une propriété φ peut être spécifié par une MEFE notée Eφ. Pour chaque transitions−→ d de Eφg,σ :

– Le prédicat g spécifie l’ensemble d’actions qui peuvent être interceptées par la transi-

tion ainsi qu’une condition sur les paramètres de ces actions ;

– La séquence σ spécifie l’intervention qu’un automate d’édition devrait entreprendre

comme réponse vis à vis de l’action interceptée.

Usuellement, dans le contexte d’une MEFE spécifiant un automate d’édition A, la condition g est de la forme α = Act | α 6= Act où α désigne la variable se rapportant

à l’action interceptée par l’automate d’édition A et Act étant n’importe quelle action du

programme. Si l’action α devrait être acceptée par l’automate d’édition A alors σ = α, ce

qui signifie que l’actionα va être réellement exécutée par la machine Eφ. Dans le cas oùα

devrait être simulée par l’automate d’éditionA alors σ = ε ce qui signifie que la MEFE Eφ ne va émettre aucune réponse par rapport à la tentative d’exécution de l’actionα. Dans le

cas où une séquence d’actions σdevrait être insérée par l’automate d’éditionA alors nous

auronsσ = σ, ce qui signifie que la séquenceσva être exécutée par la MEFEE

φau lieu de l’actionα.

Les trois transitions de la MEFE représentées dans la figure5.5sont des exemples illus- trant les trois cas que nous venons de décrire. La MEFE de la figure5.5spécifie un automate d’éditionA1 spécifiant la propriétéφ1 définie par l’expression régulière suivante :

1 = {((¬inc(x))

inc(x).send(x))}

La propriétéφ1 décrit le fait que toute action inc incrémentant la valeur de la variable x

devrait être suivie immédiatement par l’actionsend consistant à envoyer la valeur de x. Les

S1

S1 S2

α = inc(x), ε α 6= inc(x), α

α = send(x), inc(x).send(x)

FIGURE 5.5 – MEFE1 spécifiant l’automate d’édition spécifiant la propriétéφ1.

– La transitionS1

α6=inc(x),α

−−−−−−−−→ S1 permet au programme contrôlé d’exécuter n’importe

quelle action α qui est différente d’une incrémentation. Il est à noter que α est une

variable dont le domaine est l’ensemble des actionsΣ alors que x est une variable dont le domaine est l’ensemble des variablesV (Voir définition5.3.1).

– La transitionS1

α=inc(x),ε

−−−−−−−−→ S2 spécifie le fait que si le programme contrôlé est sur le

point d’exécuter une actionα représentant une incrémentation d’une variable x, alors le

moniteur doit empêcher l’exécution deα. Par conséquent, il supprime l’action inc(x),

en émettant l’action videε.

– La transitionS2

α=send(x),inc(x).send(x)

−−−−−−−−−−−−→ S1 spécifie le fait que si le programme contrôlé

est sur le point d’effectuer l’envoi de la variable x (send(x)), alors que le moniteur

vient de l’empêcher d’effectuer l’incrémentation de cette même variable (dans l’état

S2), alors le moniteur doit exécuter l’action incrémentant la valeur de la variable x

avant d’autoriser l’envoi de sa nouvelle valeur. Par conséquent, le moniteur insère la séquenceinc(x).send(x).

5.3.3

Démarche

L’objectif principal de cette contribution est d’appliquer effectivement aux programmes n’importe quelle propriété de sécurité portant sur des séquences finies d’exécution. Une appli- cation effective des propriétés de sécurité consiste à générer des exécutions valides conformes à la spécification d’origine du programme tout en conservant toutes les exécutions initiale- ment valides de celui-ci. Formellement, la classe de propriétés de sécurité que nous avons ciblé consiste en la classe des propriétés spécifiables par les automates d’édition. Pour appli- quer ces propriétés, nous avons procédé par réécriture de programmes, en adoptant le même principe que celui de notre application des propriétés de sûreté. Néanmoins, contrairement

aux automates de sécurité, intégrer des automates d’édition entraîne de nouvelles contraintes qui nécessitent une approche un peu plus complexe. Pour aboutir à notre nouvelle version de l’opérateur de composition, nous avons dû principalement répondre aux questions suivantes : – Formaliser le principe d’édition d’actions, particulièrement la suppression des actions

et la simulation de leur effet sur les conditions du programme.

– Trouver un moyen pour conserver et mettre à jour les informations antérieures relatives aux interventions de l’automate d’édition sur les actions du programme.

– Effectuer les tâches précédentes d’une manière synchrone et cohérente.

– Prouver que la spécification du programme résultat satisfait la propriété de sécurité en question, qu’elle n’introduit aucun nouveau comportement par rapport à la version d’origine et qu’elle conserve tous les comportements initialement valides de celle-ci. Dans les prochaines sections, nous détaillons les composantes qui nous ont permis d’at- teindre notre objectif.