Même les aspects les plus modestes d'un programme peuvent présenter des menaces de sécurité . Saisie de l'utilisateur de base peut court-circuiter le code intérieure d'un programme de diverses façons. L'entrée peut utiliser les rouages de fonctions d'impression accéder au flux du programme de contrôle en substituant les limites de la fonction . Or , il peut envahir les frontières de tampon qui lui sont fixés par le programmeur pour modifier les données en dehors de son espace programmeur - désignés. De toute façon, l'entrée de l' utilisateur affecte la façon dont le programme s'exécute , potentiellement vers des fins malveillantes. Chaînes de format
chaînes de mise en forme en C et C + + font partie d' entrée et fonctions de sortie . La chaîne de format contenant des données à des données de sortie à l'écran . Les chaînes de format ont deux composantes principales. Le premier est la chaîne de base à imprimer, contenant des caractères et des signes de ponctuation. Le deuxième volet comprend un caractère spécial marqué par des signes de pourcentage qui servent d' espaces réservés pour les données variables . Ces symboles existent dans la chaîne, et sont remplacées lors de la sortie des valeurs détenues dans des variables . L'exemple suivant illustre une déclaration printf de base avec une chaîne de format :
caractères x = "C " ; int y = 10 ;
printf ( " % c impression de caractères et les décimales % d" ; , x, y);
Chaîne de Format Attaques
l'insécurité des chaînes de format réside dans la façon dont les symboles intégrés dans la chaîne de référence à d'autres parties du programme . Par exemple , un attaquant entrer des données dans une variable utilisée dans une chaîne de format peut injecter des symboles qui lui permettent d' accéder à d'autres cadres de l'exécution du programme. Ce faisant, l'attaquant peut modifier les valeurs des variables en dehors de la portée de la fonction d'impression. Par ailleurs , l'attaquant pourrait éventuellement accéder à des valeurs dans la mémoire qui représentent l'emplacement de fonctions. L'attaquant pourrait alors changer cette valeur pour pointer vers une fonction différente , modifiant ainsi le flux d'exécution et le détournement essentiellement le programme.
Tampons d'entrées
entrée tampons sont des espaces de stockage des données créées par le programmeur pour contenir des données saisies par l'utilisateur . Le plus souvent, les tampons d'entrée gérer les entrées de l'utilisateur de se connecter à des noms et des mots de passe. Spécifiquement pour le langage de programmation C , qui ne comprend pas la gestion de chaînes d'origine, tampons d'entrée existent sous forme de tableaux de caractères avec une taille définie . Dans ce cas , il appartient au programmeur d'allouer des données pour la saisie de l'utilisateur .
Buffer Overflow
Un attaquant pourrait tirer parti des limites de ces tampons par inondant de données. Dans l' exemple le plus simple , un tableau de caractères destiné à tenir un journal dans le nom aurait 20 espace alloué , mais un attaquant donne plus de vingt personnages à traiter. Dans ce cas, les caractères supplémentaires remplacent des emplacements de mémoire immédiatement après le tableau. Ces lieux de mémoire peut-être contiennent des données relatives à l'exécution du programme , comme les variables conditionnelles pour les instructions de contrôle de flux ou des références à des fonctions dans la pile. Comme l'attaque de chaîne de format, ce qui permet essentiellement à l'attaquant de détourner le programme.