Finance décentralisée : vulnérabilités de sécurité courantes et mesures de prévention
Récemment, un expert en sécurité a partagé un cours sur la sécurité DeFi avec les membres de la communauté. Il a passé en revue les événements de sécurité majeurs rencontrés par l'industrie Web3 au cours de l'année écoulée, a exploré les raisons de ces incidents de sécurité et comment les éviter, a résumé les vulnérabilités de sécurité courantes des contrats intelligents et les mesures préventives, et a également donné quelques conseils de sécurité aux équipes de projet et aux utilisateurs ordinaires.
Les types de vulnérabilités DeFi courants comprennent principalement les prêts flash, la manipulation des prix, les problèmes de droits d'accès des fonctions, les appels externes arbitraires, les problèmes de fonction fallback, les failles de logique métier, les fuites de clés privées et les attaques par réentrance. Cet article se concentrera sur les prêts flash, la manipulation des prix et les attaques par réentrance.
Prêt instantané
Le prêt flash est une innovation de la Finance décentralisée, mais lorsqu'il est exploité par des hackers, ils peuvent emprunter d'importants montants sans aucun coût, effectuer des arbitrages et rembourser, ne payant qu'une faible frais de Gas pour réaliser d'énormes bénéfices.
De nombreux projets de Finance décentralisée semblent offrir des rendements élevés, mais en réalité, le niveau des équipes de projet varie considérablement. Certains projets peuvent avoir acheté leur code, même si le code lui-même n'a pas de vulnérabilités, il peut néanmoins y avoir des problèmes logiques. Par exemple, un projet distribue des récompenses à des moments fixes en fonction du nombre de jetons détenus par les détenteurs, mais des attaquants peuvent utiliser des prêts flash pour acheter une grande quantité de jetons et obtenir la majorité des récompenses au moment de la distribution.
De plus, il existe certains projets où le prix est calculé par le biais de jetons, qui peuvent être influencés par des prêts flash. En tant qu'équipe de projet, vous devriez être vigilants face à ces problèmes.
Manipulation des prix
Le problème de manipulation des prix est étroitement lié aux prêts flash, avec principalement deux types courants :
Utilisation de données tierces pour le calcul des prix, mais une mauvaise utilisation ou un manque de vérification entraînent une manipulation malveillante des prix.
Utiliser le nombre de jetons de certaines adresses comme variable de calcul, tandis que le solde en jetons de ces adresses peut être temporairement augmenté ou diminué.
Attaque par réentrance
L'un des principaux dangers d'appeler des contrats externes est qu'ils peuvent prendre le contrôle du flux d'exécution et apporter des modifications inattendues aux données en appelant des fonctions. Par exemple :
function withdrawBalance() public {
uint amountToWithdraw = userBalances[msg.sender];
(bool succès, ) = msg.sender.call.value(montantÀRetirer)("");
require(succès);
userBalances[msg.sender] = 0;
}
Étant donné que le solde de l'utilisateur n'est défini à 0 qu'à la fin de la fonction, le deuxième appel (et les suivants) réussira toujours et retirera le solde encore et encore.
Pour résoudre le problème de réentrance, il est nécessaire de prêter attention aux points suivants :
Pas seulement pour prévenir le problème de réentrée d'une seule fonction.
Suivre le modèle Checks-Effects-Interactions lors du codage
Utiliser un modificateur anti-reentrance éprouvé par le temps
Il existe de nombreuses meilleures pratiques de sécurité dans ce domaine que nous devrions utiliser directement plutôt que de réinventer la roue. Utiliser des solutions matures et éprouvées présente beaucoup moins de risques que de développer de nouvelles solutions par soi-même.
Conseils de sécurité pour les projets
Le développement de contrats respecte les meilleures pratiques de sécurité.
Contrats pouvant être mis à niveau et suspendus : de nombreuses attaques ne consistent pas à transférer l'intégralité des fonds en une seule fois, mais à exécuter plusieurs transactions. S'il existe un mécanisme de surveillance relativement solide, il est possible de détecter rapidement et de suspendre le contrat, ce qui permet de réduire efficacement les pertes.
Utiliser un verrouillage temporel : S'il y a un verrouillage temporel, cela peut donner suffisamment de temps aux gens pour détecter les anomalies et agir.
Augmenter les investissements en sécurité et établir un système de sécurité complet : la sécurité est systématique, elle n'inclut pas seulement l'audit des contrats, mais aussi la gestion des clés privées, les modèles économiques et d'autres aspects.
Élever la sensibilisation à la sécurité de tous les employés : De nombreux problèmes de sécurité peuvent être évités en restant vigilant.
Prévenir les abus internes tout en améliorant l'efficacité et en renforçant le contrôle des risques : l'utilisation de mécanismes tels que les signatures multiples et les verrous temporels peut améliorer la sécurité tout en garantissant l'efficacité.
Sécurité d'introduction par des tiers : il est nécessaire de procéder à des vérifications de sécurité pour l'amont et l'aval, en particulier pour les contrats non open source, où il faut faire preuve de prudence.
Comment les utilisateurs/LP peuvent-ils évaluer la sécurité d'un contrat intelligent ?
Le contrat est-il open source : ne participez pas aux projets qui ne le sont pas.
Le propriétaire utilise-t-il une multisignature, la multisignature est-elle décentralisée.
Vérifiez les transactions existantes du contrat : y compris le temps de déploiement, le nombre d'interactions, etc.
Le contrat est-il un contrat d'agence, peut-il être mis à niveau, y a-t-il un verrouillage temporel.
Le contrat a-t-il été audité par plusieurs institutions, et les droits du propriétaire sont-ils trop étendus ?
Faites attention aux oracles : les projets utilisant des oracles réputés sont relativement plus sûrs, tandis que les oracles auto-construits ou facilement manipulables doivent être traités avec une extrême prudence.
En somme, dans un environnement Web3, rester vigilant et poser quelques questions pourquoi permet d'éviter de nombreux risques potentiels. Que ce soit pour les équipes de projet ou les utilisateurs ordinaires, il est important de prendre au sérieux les questions de sécurité et d'établir une conscience de sécurité et des mécanismes de prévention adéquats.
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.
9 J'aime
Récompense
9
6
Partager
Commentaire
0/400
MEVHunterNoLoss
· Il y a 17h
Ces problèmes de sécurité ne valent pas grand-chose.
Voir l'originalRépondre0
AirdropHustler
· 08-01 17:58
Encore mieux, enseigne-moi comment faire un Airdrop.
Voir l'originalRépondre0
BearMarketBuilder
· 08-01 17:53
Les vulnérabilités ont toutes été publiées par toi, comment les hackers vont-ils jouer maintenant ?
Voir l'originalRépondre0
LightningAllInHero
· 08-01 17:51
Ne dis plus rien, la dernière fois que j'ai tout mis, c'était à cause des Prêts Flash.
Voir l'originalRépondre0
FUD_Whisperer
· 08-01 17:45
Après avoir travaillé sur le defi pendant plus de six mois, un Hacker a une vitesse de main plus rapide.
Guide de sécurité DeFi : stratégies de prévention contre les Prêts Flash, la manipulation des prix et les attaques par réinjection.
Finance décentralisée : vulnérabilités de sécurité courantes et mesures de prévention
Récemment, un expert en sécurité a partagé un cours sur la sécurité DeFi avec les membres de la communauté. Il a passé en revue les événements de sécurité majeurs rencontrés par l'industrie Web3 au cours de l'année écoulée, a exploré les raisons de ces incidents de sécurité et comment les éviter, a résumé les vulnérabilités de sécurité courantes des contrats intelligents et les mesures préventives, et a également donné quelques conseils de sécurité aux équipes de projet et aux utilisateurs ordinaires.
Les types de vulnérabilités DeFi courants comprennent principalement les prêts flash, la manipulation des prix, les problèmes de droits d'accès des fonctions, les appels externes arbitraires, les problèmes de fonction fallback, les failles de logique métier, les fuites de clés privées et les attaques par réentrance. Cet article se concentrera sur les prêts flash, la manipulation des prix et les attaques par réentrance.
Prêt instantané
Le prêt flash est une innovation de la Finance décentralisée, mais lorsqu'il est exploité par des hackers, ils peuvent emprunter d'importants montants sans aucun coût, effectuer des arbitrages et rembourser, ne payant qu'une faible frais de Gas pour réaliser d'énormes bénéfices.
De nombreux projets de Finance décentralisée semblent offrir des rendements élevés, mais en réalité, le niveau des équipes de projet varie considérablement. Certains projets peuvent avoir acheté leur code, même si le code lui-même n'a pas de vulnérabilités, il peut néanmoins y avoir des problèmes logiques. Par exemple, un projet distribue des récompenses à des moments fixes en fonction du nombre de jetons détenus par les détenteurs, mais des attaquants peuvent utiliser des prêts flash pour acheter une grande quantité de jetons et obtenir la majorité des récompenses au moment de la distribution.
De plus, il existe certains projets où le prix est calculé par le biais de jetons, qui peuvent être influencés par des prêts flash. En tant qu'équipe de projet, vous devriez être vigilants face à ces problèmes.
Manipulation des prix
Le problème de manipulation des prix est étroitement lié aux prêts flash, avec principalement deux types courants :
Utilisation de données tierces pour le calcul des prix, mais une mauvaise utilisation ou un manque de vérification entraînent une manipulation malveillante des prix.
Utiliser le nombre de jetons de certaines adresses comme variable de calcul, tandis que le solde en jetons de ces adresses peut être temporairement augmenté ou diminué.
Attaque par réentrance
L'un des principaux dangers d'appeler des contrats externes est qu'ils peuvent prendre le contrôle du flux d'exécution et apporter des modifications inattendues aux données en appelant des fonctions. Par exemple :
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; }
Étant donné que le solde de l'utilisateur n'est défini à 0 qu'à la fin de la fonction, le deuxième appel (et les suivants) réussira toujours et retirera le solde encore et encore.
Pour résoudre le problème de réentrance, il est nécessaire de prêter attention aux points suivants :
Il existe de nombreuses meilleures pratiques de sécurité dans ce domaine que nous devrions utiliser directement plutôt que de réinventer la roue. Utiliser des solutions matures et éprouvées présente beaucoup moins de risques que de développer de nouvelles solutions par soi-même.
Conseils de sécurité pour les projets
Le développement de contrats respecte les meilleures pratiques de sécurité.
Contrats pouvant être mis à niveau et suspendus : de nombreuses attaques ne consistent pas à transférer l'intégralité des fonds en une seule fois, mais à exécuter plusieurs transactions. S'il existe un mécanisme de surveillance relativement solide, il est possible de détecter rapidement et de suspendre le contrat, ce qui permet de réduire efficacement les pertes.
Utiliser un verrouillage temporel : S'il y a un verrouillage temporel, cela peut donner suffisamment de temps aux gens pour détecter les anomalies et agir.
Augmenter les investissements en sécurité et établir un système de sécurité complet : la sécurité est systématique, elle n'inclut pas seulement l'audit des contrats, mais aussi la gestion des clés privées, les modèles économiques et d'autres aspects.
Élever la sensibilisation à la sécurité de tous les employés : De nombreux problèmes de sécurité peuvent être évités en restant vigilant.
Prévenir les abus internes tout en améliorant l'efficacité et en renforçant le contrôle des risques : l'utilisation de mécanismes tels que les signatures multiples et les verrous temporels peut améliorer la sécurité tout en garantissant l'efficacité.
Sécurité d'introduction par des tiers : il est nécessaire de procéder à des vérifications de sécurité pour l'amont et l'aval, en particulier pour les contrats non open source, où il faut faire preuve de prudence.
Comment les utilisateurs/LP peuvent-ils évaluer la sécurité d'un contrat intelligent ?
Le contrat est-il open source : ne participez pas aux projets qui ne le sont pas.
Le propriétaire utilise-t-il une multisignature, la multisignature est-elle décentralisée.
Vérifiez les transactions existantes du contrat : y compris le temps de déploiement, le nombre d'interactions, etc.
Le contrat est-il un contrat d'agence, peut-il être mis à niveau, y a-t-il un verrouillage temporel.
Le contrat a-t-il été audité par plusieurs institutions, et les droits du propriétaire sont-ils trop étendus ?
Faites attention aux oracles : les projets utilisant des oracles réputés sont relativement plus sûrs, tandis que les oracles auto-construits ou facilement manipulables doivent être traités avec une extrême prudence.
En somme, dans un environnement Web3, rester vigilant et poser quelques questions pourquoi permet d'éviter de nombreux risques potentiels. Que ce soit pour les équipes de projet ou les utilisateurs ordinaires, il est important de prendre au sérieux les questions de sécurité et d'établir une conscience de sécurité et des mécanismes de prévention adéquats.