Vulnérabilité de débordement d'entier des smart contracts : Détails des mesures de protection

robot
Création du résumé en cours

Vulnérabilité de dépassement d'entier et ses protections

Le dépassement d'entier est un problème courant en programmation. Dans la plupart des langages de programmation, les valeurs entières sont stockées dans une mémoire de longueur fixe. Les entiers sont divisés en deux types : les nombres non signés et les nombres signés, la différence résidant dans l'utilisation ou non du bit de poids fort comme bit de signe. Par exemple, une mémoire de 32 bits peut stocker des entiers non signés allant de 0 à 4 294 967 295, ou des entiers signés allant de -2 147 483 648 à 2 147 483 647.

Lorsqu'un résultat de calcul dépasse la portée d'un type entier, un débordement se produit. La plupart des langages de programmation et des compilateurs ne vérifient pas ce type d'erreur, mais exécutent simplement une opération de modulo ou produisent un comportement indéfini. Cela peut entraîner des résultats de programme inattendus. Dans la rédaction de contrats intelligents sur la blockchain, en particulier dans le domaine de la finance décentralisée, le calcul entier est courant, il est donc nécessaire de faire particulièrement attention aux vulnérabilités de débordement d'entier.

Le dépassement d'entier peut être divisé en deux cas : dépassement supérieur et dépassement inférieur.

  1. Débordement : le résultat du calcul dépasse la valeur maximale que le type peut représenter. Par exemple, 0xFFFFFFFF de uint32 plus 1 devient 0x00000000.

  2. Sous-flux : le résultat du calcul est inférieur à la valeur minimale que le type peut représenter. Par exemple, 0 moins 1 en uint32 deviendra 0xFFFFFFFF.

En avril 2018, le contrat de jetons BeautyChain(BEC) a été attaqué en raison d'une vulnérabilité de débordement entier, permettant à l'attaquant d'obtenir une grande quantité de jetons. Cette vulnérabilité se trouvait dans la fonction batchTransfer, où l'absence de vérification du débordement de multiplication a permis de retirer un grand nombre de jetons avec un faible solde de jetons.

Pour éviter les débordements d'entiers, vous pouvez prendre les mesures suivantes:

  1. Configure les options de compilation Rust pour vérifier les dépassements d'entiers en mode release et déclencher un panic.

  2. Utiliser le crate uint pour prendre en charge des types d'entiers plus grands, comme U256, U512, etc.

  3. Utilisez des fonctions de conversion de type uint pour détecter les débordements, comme as_u128().

  4. Utilisez des fonctions Safe Math comme checked_add() pour vérifier si le calcul déborde.

Grâce à ces méthodes, il est possible d'éviter efficacement les vulnérabilités de dépassement d'entier et d'améliorer la sécurité des contrats intelligents. Lors de la rédaction de contrats impliquant des calculs de grands nombres, il est impératif de traiter avec prudence le problème de dépassement d'entier.

SAFE-1.53%
MATH-6.99%
Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
  • Récompense
  • 6
  • Partager
Commentaire
0/400
PensionDestroyervip
· Il y a 3h
Avec les Prêts Flash, il y a une bataille.
Voir l'originalRépondre0
AirdropHunterXiaovip
· Il y a 18h
Débordement ? On va couper les coupons.
Voir l'originalRépondre0
gas_guzzlervip
· Il y a 18h
N'oubliez pas de régler le débordement avant de développer, les frères.
Voir l'originalRépondre0
0xInsomniavip
· Il y a 19h
L'overflow a causé des dégâts à tant de pigeons.
Voir l'originalRépondre0
AirdropHunterZhangvip
· Il y a 19h
Les vagues, les profiteurs ont mal à la tête.
Voir l'originalRépondre0
0xOverleveragedvip
· Il y a 19h
La femme de l'aiguille est encore partie.
Voir l'originalRépondre0
  • Épingler
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)