Extraits du 'rapport sur la sécurité des systèmes' de Pierre LASBORDES, remis au premier ministre, Dominique de VILLEPIN, publié fin novembre 2005 :
Les systèmes d'information font désormais partie intégrante du fonctionnement des administrations publiques, de l'activité des entreprises, et du mode de vie des citoyens. Les services qu'ils assurent nous sont tout aussi indispensables que l'approvisionnement en eau ou en électricité.
Si la communication, qui occupe une place de choix dans nos sociétés contemporaines à la recherche d'une productivité sans cesse croissante nécessite la maîtrise de l'information économique, sociale et culturelle, l'explosion mondiale d'Internet a modifié considérablement la donne et conféré aux systèmes dinformation une dimension incontournable au développement même de l'économie et de la société.
C'est dire si la sécurité des systèmes dinformation (SSI) est un enjeu à l'échelle de la Nation toute entière.
L'environnement lié aux technologies de l'information et de la communication est la cible de nombreuses menaces. L'ouverture des réseaux et leur complexité croissante associant des acteurs aux multiples profils, ont renforcé la vulnérabilité des systèmes d'information.
Détruire, altérer, accéder à des données sensibles dans le but de les modifier ou de nuire au bon fonctionnement des réseaux, les motivations sont diverses et fonction de la nature des informations recherchées et de l'organisme visé.
Quelles formes prennent les attaques ? De qui émanent-elles ? Quelle est leur finalité ?
Tous les utilisateurs identifient au quotidien la menace constante des virus et des vers qui submergent Internet. Leur nombre a explosé au cours de ces dernières années et ceux-ci deviennent de plus en plus sophistiqués. Les outils nécessaires aux pirates sont aisément accessibles en ligne et il existe un échange constant d'information et de savoir-faire au sein de la communauté des pirates pour rendre ces attaques de plus en plus efficaces. Cependant, leur désir de performance cède de plus en plus le pas au développement d'entreprises criminelles dont les activités en ligne se sont accrues emphasisllèlement à la dimension économique d'Internet. Le nombre de fraudes se traduit chaque année par des coûts sélevant à des milliards d'euros, en particulier pour les banques et les entreprises.
En tant qu'outil de propagande et de communication, les réseaux terroristes utilisent déjà largement Internet. Plus la lutte contre le terrorisme verrouille les lignes traditionnelles de communication, plus ces réseaux trouvent l'accessibilité et l'anonymat d'Internet attrayants.
La sécurité des systèmes dinformation est un véritable défi, à la fois technologique et économique.
A l'heure actuelle, les politiques de sécurité au niveau d'un système d'exploitation sont faibles, basées sur des vieux concepts, inadaptés pour l'ère Internet.
Une politique de sécurité (security policy) est un ensemble de règles pour autoriser ou refuser un acces à quelquechose. En informatique c'est ce qui va définir les permissions d'un sujet (processus, utilisateur) sur les ressources d'une machines, appelées objets (les fichiers, les connexions réseau, le matériel, ...)
Dans les systèmes de type Unix, le modèle de sécurité employé est le Discretary Access Control (DAC). Un modèle discret ca veut dire que la gestion du contrôle d'accès est décentralisée sur chaque objets. Dans le modèle DAC, chaque sujet a toute autorité sur les objets dont il est le propriétaire.
En fait, DAC est un modèle de sécurité pour des objets dans un système de fichiers. Mais comme dans la philosophie Unix, tout n'est que fichier, nous considérerons que c'est le modèle utilisé dans tout le système.
Prennons par exemple Linux :
A chaque utilisateur sont associés deux identifiants : le UID et le GID. Puis chaque processus bénéficie en plus d'un EUID et EGID ([ug]id effectif), correspondant aux valeurs courantes de leur [UG]ID.
En effet, dans ce système, un utilisateur peut prendre l'identité d'un autre. Le changement d'identité n'est autorisé uniquement lors de l'execution d'un programme ayant le flags setuid ou setgid. Ainsi, le processus est lancé avec les droits du propriétaire du fichier.
Le système, à l'aide de l'EUID et du EGID, va autoriser ou non un acces à un objet. Voici une petite liste des regles qu'il va suivre :
Les acces au système de fichiers : chaque élément appartient à un utilisateur et un groupe (par défaut ceux du créateur), et est associé à un triplet de permissions : Read Write eXecute, pour le propiétaire (owner), pour le groupe, et pour le reste (others).
Les acces réseaux : Les sockets tcp - udp en sortie, et en écoute sur des ports > 1024 sont autorisés.
Les acces au ressources systeme : la majorité des appels systèmes sont autorisés.
Enfin, le fameux uid 0 : root. C'est bien simple, toutes les autorisations lui sont données.
Tous ces mécanismes sont écrits en dur dans le kernel. Afin que les services puissent fournir une sécurité plus granulaire, ils doivent chacun implémenter eux-même leur propre politique de sécurité. Par exemple la directive <directory ".."> d'apache, qui permet par exemple d'autoriser ou non le listing d'un répertoire
Ce qu'on vient de voir là c'est le modèle de sécurité utilisé dans la grande majorité des systèmes d'exploitation. La sécurité apportée est trop rudimentaire. Le fait qu'il y ait un utilisateur ayant les pleins pouvoir représente un gros problème: beaucoup d'opérations se déroulent sous son identité, et il a acces aux données des utilisateurs.
Le sujet root peut restreindre l'acces aux fichiers sensibles, définir les objets apartenant à d'autres sujets (leur /home), mais il ne peut pas se limiter lui même. De plus Les autres sujets ont les pleins pouvoirs sur leurs objets, ils peuvent rendre accessible des données qui ne devrait pas l'être.
Le problème est que la majorité des failles informatiques proviennent d'erreurs de conception dans le code des programmes. C'est à dire qu'il est possible, a cause de certaines erreurs de programmation, de détourner le fonctionnement d'un service afin qu'il éxecute du code malicieux. C'est le cas par exemple lors d'une mauvaise gestion d'un buffer, ou d'une fausse condition avec des valeurs signées... Ainsi la sécurité d'un système dépend d'un grand nombre d'éléments :
le noyau du systeme
les programmes set[ug]id (X, icmp tools, passwd, su, ...)
les programmes en interaction avec l'extérieur (browser, daemon)
La moindre erreur dans une des millions de lignes de codes sources impliqués peut offrir à un intru un acces quasi total à vos données, ou pire, un compte super admin. C'est presque inévitable, un système informatique donné sera un jour ou l'autre vulnérable publiquement. Mais n'ayez pas peur :), nous allons vous montrer comment limiter la casse.
Parenthèse: nous verrons par la suite qu'il existe d'autres modèles que le DAC, basés sur des concepts complètement différents, qui offrent un contrôle beaucoup plus granulaire sur les contrôles d'accés.
Aprés avoir parcouru la sécurité au niveau d'un système, regardons ce qu'il en est au niveau d'un réseau. Là aussi cela ne va pas du tout ! Aucun des protocoles fondamentaux (ethernet - ip - tcp/udp) n'ont été créés en tenant compte des problèmatiques liées à la sécurité. Il fallait que ca marche, c'est tout !
Néanmoins, la majeure partie des protocoles ont bénéficié d'une couche de sécurité avec SSL
Voici quelques problèmes liés au failles protocolaires :
l'intégrité: un paquet émis par une machine doit arriver comme tel à sa destination
la confidentialité: proteger les mots de passe, les informations bancaires, ...
l'authenticité des machines (spoofing)
En plus de ces problèmes de protocoles, des machines en réseau peuvent connaître d'autres problèmes, par exemple :
la disponibilité des services (denial of service)
l'acces 'public' à certaines données
la prise de controle