• Aucun résultat trouvé

Nous avons examin´e dans ce chapitre le compromis qu’on peut obtenir entre une analyse statique (syst`eme de types) et une analyse dynamique (monitorage ou instrumentation) du flot d’information dans un contexte sensible aux flots. Le besoin d’une analyse sensible aux flots est important dans la pratique. La raison fondamentale r´eside dans le besoin de compatibilit´e avec les logiciels plus anciens. On n’exige pas que les logiciels, pour ˆetre s´ecuritaires soient tous r´e´ecrits ou enrichis d’annotations comme l’exigent les approches non sensibles aux flots. Hunt et Sand [16] avaient ´etabli auparavant qu’avec un moniteur purement dynamique, on ne peut pas appliquer efficacement la non-interf´erence tout en restant aussi permissif que leurs

syst`eme de types sensible aux flots. Russo et Sabelfeld d´emontrent ici qu’en associant l’analyse statique et l’analyse dynamique, on peut r´ealiser un moniteur hybride sˆur et strictement plus permissif que ledit syst`eme de types. Sur le plan pratique, on peut se demander quelle est la proportion des programmes accept´es par le moniteur et rejet´es par le syst`eme de types. Serait-ce assez significatif pour compenser la charge de travail suppl´ementaire que l’approche dynamique implique `a l’ex´ecution du programme ?

Chapitre 4

Contrˆole du flot d’information dans

un programme concurrent

4.1

Introduction

L’informatique est n´ee avec la programmation s´equentielle. L’utilisation d’instruction de r´e- p´etition (boucle) et de branchement (bloc conditionnel) enrichit le pouvoir d’expression. Quelques d´ecennies de recherche ont permis de d´ecouvrir et d’exploiter presque toutes les possibilit´es de la programmation s´equentielle. Cependant, il y a des domaines o`u la program- mation s´equentielle est insuffisante ou non appropri´ee. La programmation s´equentielle repose sur une isolation de chacun des programmes. Il faut maintenant consid´erer la coop´eration entre programmes. En programmation parall`ele, on permet `a plusieurs processus de s’ex´ecu- ter simultan´ement tout en coop´erant entre eux. Un programme concurrent est un programme qui, `a l’ex´ecution, engendre plusieurs processus qui peuvent coop´erer entre eux. La coop´era- tion consiste `a s’´echanger des informations par l’interm´ediaire des variables partag´ees ou par ´

echange de messages et signaux via des canaux de communication. De nombreux syst`emes pour lesquels la confidentialit´e est importante sont concurrents, comme les serveurs internet ou les syst`emes d’exploitation. Pour ex´ecuter les programmes concurrents, les syst`emes ont besoin d’un ordonnanceur. C’est un programme utilis´e pour coordonner les enchaˆınements entre les diff´erents processus d’un programme concurrent.

On distingue diff´erents types de programmes concurrents :

– Les programmes « multicontextes » ou « multiprocessus » : il s’agit d’un seul pro- gramme avec plusieurs processus, utilis´e pour mieux structurer une application et avoir plus de modularit´e. Exemple : les syst`emes d’exploitation multitˆaches et les fureteurs multitˆaches.

– Les programmes parall`eles : chaque processus ou groupe de processus s’ex´ecute sur son propre processeur. Les processus communiquent via une m´emoire partag´ee. Les

programmes parall`eles sont utilis´es pour r´esoudre rapidement un probl`eme ou pour r´esoudre un probl`eme plus gros. Ils sont largement utilis´es dans les programmes de calcul des pr´evisions m´et´eo, de prospection mini`ere, de la physique moderne et de la bio-informatique.

– Les programmes distribu´es : les processus communiquent entre eux par l’interm´ediaire d’un r´eseau (le d´elai de r´eponse est souvent plus long). Ils sont utilis´es pour r´epartir g´eographiquement les donn´ees et les traitements. On les retrouve dans la gestion des serveurs de fichiers ainsi que dans la gestion des acc`es `a distance aux banques de donn´ees. Ces trois cat´egories ne sont pas mutuellement exclusives. Dans la suite de ce chapitre, on ne va consid´erer que les programmes concurrents dont les processus communiquent via une m´emoire partag´ee.

Le probl`eme de s´ecurisation du flot d’information dans un programme concurrent reste un d´efi ouvert. Le flot d’information dans un programme s´equentiel est relativement bien compris. D’une part, les m´ecanismes de sp´ecification et d’application de la s´ecurit´e du flot d’informa- tion dans les programmes s´equentiels ne se g´en´eralisent pas naturellement aux programmes concurrents. Mˆeme les compilateurs sp´ecialis´es dans l’application de la s´ecurit´e du flot d’in- formation comme Jif [7] ou Flow Calm [30] n’offrent pas de support pour les programmes concurrents. D’autre part, la mise en concurrence des programmes fait apparaˆıtre de nou- veaux canaux d’informations qui peuvent ˆetre exploit´es par les attaquants pour acc´eder aux informations sensibles.

Nous allons explorer dans ce chapitre deux mod`eles de s´ecurisation des flots d’information dans un programme concurrent, relativement r´ecents, qui partent de l’id´ee que les nouvelles fuites proviennent d’un entrelacement hasardeux des processus par les ordonnanceurs, et proposent des traitements pour s´ecuriser l’interaction entre les processus et l’ordonnanceur. La suite du chapitre s’organise de la fa¸con suivante. Nous commen¸cons par introduire quelques notions de base de la programmation concurrente. Puis, nous examinons quelques cas de fuites propres `

a la programmation concurrente. Nous ´enon¸cons quelques propri´et´es `a consid´erer pour un mod`ele de s´ecurit´e de flot d’information fiable. Nous explorons le mod`ele de Russo et Sabelfeld [23] et celui de Mantel et Sudbrock [20].

4.2

Quelques notions de base de la programmation