Le dépassement de tableau dans la pile est une vulnérabilité largement répandue et qui a fait trembler nombre de programmeurs par le passé. Pour pallier les défauts de conception des programmes Windows, Visual Studio 2003 a introduit l’option de compilation /GS et prévient ainsi le programme d’une telle vulnérabilité. Ce mécanisme a été également introduit dans les versions récentes de Windows pour renforcer la sécurité générale. Un précédent article [0] détaille le fonctionnement de ce flag. On s’intéresse ici aux nouveautés introduites par Visual Studio 2005 sur /GS et quelques autres améliorations remarquables.
1. Rappel de /GS sous VS2k3
Sous Intel, lors d’un appel de fonction, l’adresse de retour est stockée dans la pile : elle est généralement la cible d’un débordement de tableau (on préfère parfois cibler les variables locales stockées également dans la pile). Le mécanisme /GS va :
- border cette adresse de retour par une variable au contenu aléatoire (appelée canari) ;
- appeler, avant le « ret » final, une fonction de Visual Studio qui vérifie que la valeur n’a pas été modifiée par un débordement de buffer.
La figure A montre l’état de la pile après la mise en place du canari sous Visual Studio 2003.
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première