sécurité informatique
Un buffer-overflow est une faute d’implémentation consistant à déborder de la mémoire allouée pour une opération. La plus part des BO dus au programmeur ne vérifiant pas les tailles mémoires avant d’effectuer des opérations de copie. Les BO sont très courants dans les programmes écrits en langages dits «bas niveaux» comme le C ou C++.
Ainsi les conséquences d’un BO :
Des informations en mémoire sont potentiellement écrasées ;
Crash du programme ;
Manipulation de cases mémoires importantes et incidences sécurité.
L’exploitation des BO revient à écraser des zones mémoires sensibles, telles que :
Adresses de retour ou pointeurs sur fonctions ;
Variables mémoires importantes (nom d’utilisateur, …) ;
Variables internes du système ou programme.
Pour se protéger contre ce type d’attaque, on peut citer soit des mesures préventives telles qu’une bonne programmation selon une écriture sécurisée, permettant de rendre les BO impossibles de façon inhérente (langages avec vérification). D’autres méthodes sont plus réalistes soit :
1. Auditer le code de manière proactive :
Prévoir de nombreux audits du code source ;
Intégrer dès l’origine la programmation sécurisée, par exemple les projets Open BSD, Sardonix (système Lunix), Windows 2003 Server, XP SP2, Microsoft Visual Studio .NET ;
2. Rendre l’exploitation des BO extrêmement difficile :
Audit de code manuel : inspection des lignes de code par un auditeur ;
Inspection automatisée : logiciels d’analyse du code source. Ex: RATS, LINT ;
Analyse inversée : retrouver le code source à partir du binaire. Ex d’outils debuggers (analyse en ligne) : SoftIce, OllyDbg, IDA (dernières versions) ;
Outils d’analyse en ligne :
Profilers utilisés pour trouver les «fuites» de mémoire. Exemple: Rationale Purify (IBM) permettant de :