71 votes

Pourquoi est-strncpy d'insécurité?

Je suis à la recherche pour savoir pourquoi strncpy est considéré comme précaire. Quelqu'un at-il de toute sorte de documentation sur ce sujet ou des exemples d'un exploit de l'utiliser?

47voto

Tim Points 33042

Jetez un oeil à ce site; c'est une explication assez détaillée. Fondamentalement, strncpy() ne nécessite pas de NUL résiliation, et donc sensibles à une variété d'exploits.

41voto

stack programmer Points 1678

Ce lien explique les exploits de l'aide stncpy.

12voto

DigitalRoss Points 80400

Le problème d'origine est de toute évidence que la fonction strcpy(3) n'a pas été une mémoire sécurité de l'exploitation, de sorte qu'un attaquant pourrait fournir une chaîne de plus de la mémoire tampon qui serait de remplacer le code sur la pile, et si bien organisé, pourrait exécuter du code arbitraire à partir de l'attaquant.

Mais strncpy(3) a un autre problème en ce qu'elle ne fournit pas de fin null dans tous les cas à la destination. (Imaginez une source de la chaîne de plus que le tampon de destination.) Les opérations futures peuvent s'attendre conforme C nul de terminaison de chaînes entre également tampons de taille et de dysfonctionnement en aval lorsque le résultat est copié dans une troisième mémoire tampon.

À l'aide de strncpy(3) est mieux que strcpy(3), mais des choses comme strlcpy(3) sont mieux.

7voto

supercat Points 25534

À utiliser en toute sécurité strncpy, on doit, soit (1) à la main le bâton de caractère nul sur le résultat de la mémoire tampon, (2) à savoir que le tampon se termine par un nul à l'avance, et de les passer (longueur-1) à strncpy, ou (3) à savoir que la mémoire tampon ne sera jamais être copiés à l'aide de toute méthode qui ne sera pas lié à la longueur de la longueur de la mémoire tampon.

Il est important de noter que strncpy sera zéro-complétez le tout dans le buffer passé le copié chaîne, tandis que d'autres de la longueur limitée de la fonction strcpy les variantes ne sont pas. Cela peut dans certains cas être une performance de vidange, mais dans d'autres cas, un avantage de sécurité. Par exemple, si on a utilisé des strlcpy à la copie "supercalifragilisticexpalidocious" dans un tampon, puis à la copie "il", le volant conserver "^ercalifragilisticexpalidocious^" (à l'aide de "^" pour représenter un zéro octet). Si la mémoire tampon est copié sur une taille fixe de format, les données supplémentaires pourraient tag avec elle.

1voto

Otávio Décio Points 44200

Obtenez le livre de Windows Via C/C++ par Jeffrey Richter, il a une très bonne explication sur ce sujet et sur d'autres méthodes d'insécurité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X