Finance décentralisée : vulnérabilités de sécurité courantes et mesures préventives
Récemment, un certain expert en sécurité a discuté lors d'une conférence en ligne des événements de sécurité majeurs survenus dans l'industrie Web3 au cours de l'année écoulée, a analysé les raisons de ces événements et comment les éviter, et a résumé les vulnérabilités de sécurité courantes des contrats intelligents et les mesures préventives, tout en donnant quelques conseils de sécurité aux équipes de projet et aux utilisateurs ordinaires.
Les types de vulnérabilités DeFi courants incluent principalement les prêts flash, la manipulation des prix, les problèmes de permissions de fonction, les appels externes arbitraires, les problèmes de fonction fallback, les vulnérabilités logiques d'affaires, la fuite de clés privées et les attaques par réentrée, etc. Parmi ceux-ci, les prêts flash, la manipulation des prix et les attaques par réentrée sont quelques-uns des cas les plus typiques.
Prêt éclair
Le prêt éclair est en soi une innovation de la Finance décentralisée, mais il est également souvent utilisé par des hackers. Les attaquants empruntent d'énormes sommes d'argent via le prêt éclair pour manipuler les prix ou attaquer la logique commerciale. Les développeurs doivent prendre en compte si les fonctions du contrat pourraient être anormales en raison de montants d'argent énormes, ou être utilisées pour interagir avec plusieurs fonctions en une seule transaction afin d'obtenir des gains indus.
Au cours des deux dernières années, de nombreux projets de Finance décentralisée ont été attaqués en raison de problèmes liés aux prêts flash. Certains projets distribuent des récompenses à des moments fixes en fonction des quantités détenues, mais des attaquants exploitent les prêts flash pour acheter de grandes quantités de jetons et obtenir la majeure partie des bénéfices lors de la distribution des récompenses. D'autres projets qui calculent les prix en fonction des jetons sont également susceptibles d'être affectés par les prêts flash.
Manipulation des prix
Les problèmes de manipulation des prix sont étroitement liés aux prêts flash, et il existe principalement deux types :
Utilisation de données tierces pour calculer le prix, mais utilisation incorrecte ou absence de vérification, entraînant une manipulation malveillante du prix.
Utiliser le nombre de jetons à certaines adresses comme variable de calcul, et le solde de jetons de ces adresses peut être temporairement augmenté ou diminué.
Attaque par réentrance
L'un des principaux risques liés à l'appel de contrats externes est qu'ils peuvent prendre le contrôle du flux et apporter des modifications inattendues aux données. Un exemple typique d'attaque par réentrance est le suivant :
function withdrawBalance() public {
uint amountToWithdraw = userBalances[msg.sender];
(bool succès, ) = msg.sender.call.value(montantÀRetirer)("");
require(succès);
userBalances[msg.sender] = 0;
}
En raison du fait que le solde de l'utilisateur n'est réglé à 0 qu'à la fin de la fonction, les appels répétés permettront toujours d'extraire le solde avec succès.
Pour résoudre le problème de ré-invocation, il faut faire attention à :
Empêche non seulement la réentrance d'une seule fonction
Suivre le modèle Checks-Effects-Interactions
Utiliser le modificateur de protection contre les réentrées éprouvé
Conseils de sécurité pour les projets
Suivre les meilleures pratiques de sécurité pour le développement de contrats
Mettre en œuvre des fonctionnalités de mise à niveau et de pause des contrats
Adopter un mécanisme de verrouillage temporel
Augmenter les investissements en sécurité et établir un système de sécurité complet
Sensibiliser tous les employés à la sécurité
Prévenir les actes malveillants internes tout en renforçant le contrôle des risques dans l'amélioration de l'efficacité.
Introduire des tiers avec prudence, par défaut les flux en amont et en aval ne sont pas sûrs.
Méthodes d'évaluation de la sécurité des contrats intelligents par les utilisateurs
Confirmer si le contrat est open source
Vérifiez si le propriétaire utilise un multi-signature décentralisé.
Vérifiez la situation des transactions existantes du contrat
Confirmer si le contrat est évolutif, s'il y a un verrouillage temporel.
Vérifiez si plusieurs organismes ont effectué un audit, si les droits du propriétaire sont trop étendus.
Attention à l'utilisation des oracles
En somme, la sécurité de la Finance décentralisée est un problème systémique qui nécessite l'attention conjointe des équipes de projet et des utilisateurs, ainsi que la mise en œuvre de mesures de sécurité complètes pour réduire efficacement les risques.
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.
20 J'aime
Récompense
20
5
Reposter
Partager
Commentaire
0/400
ForkThisDAO
· 07-12 07:12
L'audit de code est très important.
Voir l'originalRépondre0
NewPumpamentals
· 07-12 05:08
Veuillez établir strictement l'audit des contrats.
Analyse complète des vulnérabilités de sécurité courantes en Finance décentralisée et des mesures préventives
Finance décentralisée : vulnérabilités de sécurité courantes et mesures préventives
Récemment, un certain expert en sécurité a discuté lors d'une conférence en ligne des événements de sécurité majeurs survenus dans l'industrie Web3 au cours de l'année écoulée, a analysé les raisons de ces événements et comment les éviter, et a résumé les vulnérabilités de sécurité courantes des contrats intelligents et les mesures préventives, tout en donnant quelques conseils de sécurité aux équipes de projet et aux utilisateurs ordinaires.
Les types de vulnérabilités DeFi courants incluent principalement les prêts flash, la manipulation des prix, les problèmes de permissions de fonction, les appels externes arbitraires, les problèmes de fonction fallback, les vulnérabilités logiques d'affaires, la fuite de clés privées et les attaques par réentrée, etc. Parmi ceux-ci, les prêts flash, la manipulation des prix et les attaques par réentrée sont quelques-uns des cas les plus typiques.
Prêt éclair
Le prêt éclair est en soi une innovation de la Finance décentralisée, mais il est également souvent utilisé par des hackers. Les attaquants empruntent d'énormes sommes d'argent via le prêt éclair pour manipuler les prix ou attaquer la logique commerciale. Les développeurs doivent prendre en compte si les fonctions du contrat pourraient être anormales en raison de montants d'argent énormes, ou être utilisées pour interagir avec plusieurs fonctions en une seule transaction afin d'obtenir des gains indus.
Au cours des deux dernières années, de nombreux projets de Finance décentralisée ont été attaqués en raison de problèmes liés aux prêts flash. Certains projets distribuent des récompenses à des moments fixes en fonction des quantités détenues, mais des attaquants exploitent les prêts flash pour acheter de grandes quantités de jetons et obtenir la majeure partie des bénéfices lors de la distribution des récompenses. D'autres projets qui calculent les prix en fonction des jetons sont également susceptibles d'être affectés par les prêts flash.
Manipulation des prix
Les problèmes de manipulation des prix sont étroitement liés aux prêts flash, et il existe principalement deux types :
Utilisation de données tierces pour calculer le prix, mais utilisation incorrecte ou absence de vérification, entraînant une manipulation malveillante du prix.
Utiliser le nombre de jetons à certaines adresses comme variable de calcul, et le solde de jetons de ces adresses peut être temporairement augmenté ou diminué.
Attaque par réentrance
L'un des principaux risques liés à l'appel de contrats externes est qu'ils peuvent prendre le contrôle du flux et apporter des modifications inattendues aux données. Un exemple typique d'attaque par réentrance est le suivant :
solidity mapping (address => uint) private userBalances;
function withdrawBalance() public { uint amountToWithdraw = userBalances[msg.sender]; (bool succès, ) = msg.sender.call.value(montantÀRetirer)(""); require(succès); userBalances[msg.sender] = 0; }
En raison du fait que le solde de l'utilisateur n'est réglé à 0 qu'à la fin de la fonction, les appels répétés permettront toujours d'extraire le solde avec succès.
Pour résoudre le problème de ré-invocation, il faut faire attention à :
Conseils de sécurité pour les projets
Méthodes d'évaluation de la sécurité des contrats intelligents par les utilisateurs
En somme, la sécurité de la Finance décentralisée est un problème systémique qui nécessite l'attention conjointe des équipes de projet et des utilisateurs, ainsi que la mise en œuvre de mesures de sécurité complètes pour réduire efficacement les risques.