|
|
Sécurité |
OpenBSD
s'attaque au buffer overflow |
La prochaine version de l'Unix libre, axé autour de la sécurité, entend limiter voire supprimer ce type d'erreurs qui constituent la faille la plus fréquente des logiciels. L'occasion de revenir sur les fondements techniques du problème. (Mardi 15 avril 2003) |
|
La très grande majorité
des failles découvertes ou exploitées ces
dernières années concerne le dépassement
de "buffer", que l'on peut traduire littéralement
par "mémoire tampon". Il suffit pour
s'en convaincre de consulter le dossier
que nous y consacrons. Une technique qui semble se répéter
à l'envi, sorte de talon d'Achille de la sécurité
informatique dans lequel s'engouffrent nombre de pirates.
L'OpenBSD
Project - système d'exploitation libre et multi-plates-formes
dérivé d'Unix et particulièrement porté sur la sécurité
- vient d'annoncer de son côté que sa nouvelle
version prévue le premier mai prochain supprimera
purement et simplement les dépassements de buffer
!
Une
histoire de tampon et de pile
Le principe du
"dépassement de tampon" est le suivant:
sont écrites, dans la zone mémoire utilisée
par une application, plus de données que prévu.
Cet excès provoque une sorte de détournement
d'aiguillage au niveau d'une zone mémoire particulière
: la "pile". Cette zone est appelée par
les fonctions de l'application pour obtenir les données
locales dont elle ont besoin pour s'exécuter.
Or, la pile fonctionne selon le principe - bien connu
des logisticiens - du LIFO (last in, first out), qui veut
que la dernière information entrée soit
rangée avant toutes les autres et soit la première
à sortir. Cela provoque, quand une chaîne
de caractère trop longue est soumise au buffer,
l'écrasement des dernières données
enregistrées dans la pile et sème la confusion
et l'anarchie dans le système qui assure alors
une redirection royale vers une "adresse" qui
n'est pas celle normalement prévue, mais bien celle
du code malveillant. Dès lors, la prise de contrôle
des fichiers 'racine" est facilitée et la
chute du système assurée.
Quelles mesures prendre pour s'en prémunir ?
La première
réaction est bien sûr, côté
développeur, de ne pas utiliser de fonctions susceptibles
d'ouvrir la voie au dépassement de buffer. En langage
C, par exemple, les fonctions strcpy() et strcat() sont
particulièrement "dangereuses" car elles
ne permettent pas de contrôler les limites du buffer.
Des librairies de fonctions développées
pour pallier à ce manque sont par ailleurs disponibles.
Autre vérification
: s'assurer qu'aucune instruction ne peut exécuter
aucune autre instruction contenue dans la pile. L'utilisation
d'outils de compilation de code permet par ailleurs de
détecter et de supprimer la présence de
fonctions sensibles, les versions les plus récentes
prévoyant ce genre de problèmes. C'est particulièrement
vrai pour les logiciels et applications Open Source car
le code doit nécessairement passer par une phase
de recompilation.
Des prometteuses
annonces chez OpenBSD Project
Sans dévoiler
précisément les détails techniques
de la nouvelle mouture d'OpenBSD, la parade choisie semble
s'organiser autour de la place de la pile dans la mémoire,
une place qui sera déterminée au hasard,
de sorte que le code malicieux devra être adapté
au système visé pour être efficace.
De plus, la nouvelle version réorganisera la structure
selon laquelle les données sont stockées
dans la pile afin de vérifier si la dernière
information rentrée a été modifiée
ou non.
|
|
|