Attaques par déni de service sur les contrats intelligents : comment réparer et éviter (un guide d'expert) PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Attaques par déni de service sur les contrats intelligents : comment réparer et éviter (un guide d'expert)

Temps de lecture: 6 minutes

Avez-vous déjà visité un site qui a pris beaucoup de temps de chargement pour constater qu'il ne peut pas être ouvert pour le moment ? Il s'agit simplement de l'effet des attaques par déni de service. 

Les attaques par déni de service (DoS) sont l'une des nombreuses vulnérabilités qui sont principalement recherchées lors de l'audit des contrats intelligents. Ce blog vise à découvrir les tenants et les aboutissants de l'attaque DoS - ce qu'elle est, son impact, ses types et bien plus encore.

Entrons rapidement et explorons-les tous. 

Qu'est-ce qu'une attaque DoS ?

L'attaque DoS a l'intention de perturber les capacités de traitement d'un réseau, d'un serveur ou d'une application, empêchant de prendre en charge les demandes d'utilisateurs légitimes. En cela, l'attaquant submerge le réseau en envoyant plus de trafic qui épuise la mémoire et la bande passante des serveurs. 

En raison de l'immense potentiel que détient la blockchain, ils sont la cible principale des attaques DoS pour voler les richesses. Les crypto-monnaies les plus connues, telles que Bitcoin, Ethereum, etc., ont également subi des attaques DoS. 

Déni de service distribué (DDoS)

Le déni de service distribué (DDoS) est une attaque DoS impliquant l'attaquant contrôlant plusieurs appareils pour lancer une attaque sur le nœud cible.

L'attaquant observe le nœud cible et canalise les multiples appareils sous son contrôle pour envoyer une grande quantité d'informations inondant le nœud cible. Cela fait planter la cible et l'empêche d'accomplir la tâche spécifiée.  

Cibles des attaques DoS dans l'écosystème Blockchain

D'après les enregistrements des événements passés d'attaques DoS, chaque partie de l'écosystème de la blockchain est vulnérable aux attaques DoS. Et pour n'en nommer que quelques-uns, 

Portefeuilles de crypto-monnaie : Comme pour tout portefeuille, le portefeuille de crypto-monnaie est utilisé pour stocker, envoyer ou recevoir des crypto-monnaies. Et ces portefeuilles en ligne utilisent des contrats intelligents, qui sont sujets aux attaques DoS qui entravent leurs services et leur interaction avec les Dapps. 

Services d'échange de crypto-monnaie : La plate-forme en ligne sur laquelle les crypto-monnaies sont échangées et l'échange se produit entre les utilisateurs. Ce sont des cibles de choix pour les pirates qui effectuent des attaques DoS qui entraînent l'indisponibilité de la plate-forme et de ses services. 

Ex : Plateforme d'échange Bitcoin, Bifinex a subi à plusieurs reprises des attaques DDoS. 

Pools de mémoire (transaction) : Les transactions sur la blockchain doivent être validées avant d'être ajoutées aux blocs. Jusque-là, les demandes de transaction sont stockées dans le mempool, qui est comme un référentiel de transactions non confirmées en attente d'être récupérées par un mineur. 

La transaction avec des frais élevés est plus susceptible d'être choisie par le mineur. Ainsi, inonder le mempool de nombreuses transactions de petits frais oblige l'utilisateur à payer des frais élevés pour que sa transaction soit traitée. Ainsi, l'attaque DoS a opéré sa magie en augmentant les frais de traitement. 

Participants au consensus : Ce sont les acteurs qui résolvent la logique et décident des blocs à ajouter à la blockchain. Infliger des attaques DoS au leader du consensus arrête tout le système. 

Prestations de mixage : Il utilise un protocole permettant aux utilisateurs d'effectuer des transactions de manière anonyme. Ils subissent des attaques DoS par divers moyens, tels que des demandes de participation excessives au pool de mixage, des entrées incohérentes pour le shuffle, etc. 

Contrats intelligents: Le contrat intelligent est le protocole sous-jacent derrière chaque transaction sur la blockchain. Les attaques DoS sur les contrats intelligents peuvent planter le nœud qui arrête le fonctionnement des Dapps qu'il héberge.

Les attaques DoS sont effectuées sur eux de plusieurs manières possibles, élaborées dans la section suivante.

Analyse des types d'attaques DoS de contrat intelligent 

La vulnérabilité DoS dans les contrats intelligents entraîne une utilisation illimitée des ressources ou une manipulation du contrat. Cela entraîne une suspension dans l'exécution des activités normales ou interrompt et effondre la logique du contrat. 

Ci-dessous se trouve la classification des différentes attaques DoS dans les contrats intelligents

DoS de retour inattendu

Pour étudier cette attaque DoS sur les contrats intelligents, prenons un contrat d'enchères comme exemple. Le contrat d'enchères est mis à jour avec chaque offre la plus élevée reçue et renvoie le montant de l'offre de l'enchérisseur précédent car il est inférieur à l'offre actuelle.

contract Auction {
    address frontRunner;
    uint256 highestBid;

    function bid() public payable {
        require(msg.value > highestBid, "Need to be higher than highest bid");
        // Refund the old leader, if it fails then revert   
        require(payable(frontRunner).send(highestBid), "Failed to send Ether");
 
        frontRunner = msg.sender;
        highestBid = msg.value;
    }
}

Le contrat de l'attaquant est initialisé avec le contrat d'enchères dans le constructeur, qui accède au contrat d'enchères. En cela, en appelant la fonction 'attack ()', l'attaquant verrouille le montant et, par conséquent, il ne parvient pas à renvoyer le montant de l'enchère à l'attaquant même s'il reçoit une offre plus élevée que cela. 

import "./Auction.sol";   
contract Attacker{
    Auction auction;

    constructor(Auction _auctionaddr){
        auction = Auction(_auctionaddr);
    }

    function attack (){
        auction.bid{value: msg.value}();
    }

}

C'est parce que le contrat "attaquant" n'inclut aucune fonction "receive()" ou de secours pour rembourser Ether, ce qui entraîne un retour inattendu. Cela oblige l'attaquant à toujours être le plus offrant. 

Bloquer la limite de gaz DoS 

Le bloc a une limite maximale de gaz à dépenser qui est proportionnelle à la quantité de travail de calcul à effectuer. En cas de dépassement de la limite de gaz, cela conduit à deux types d'attaques DoS.

Limite de gaz DoS - Opération contractuelle illimitée

Il existe une limite de gaz définie et si les transactions atteignent une limite de gaz supérieure à la limite définie, la transaction échoue. 

Cela devient encore pire lorsque l'attaquant manipule le gaz nécessaire. C'est alors que l'attaquant ajoute quelques adresses pour un très petit remboursement. Chaque remboursement coûte des frais d'essence ; ainsi, le coût du gaz dépasse la limite qui empêche les transactions de remboursement de se produire. 

struct Payee {
    address addr;
    uint256 value;
}

Payee[] payees;
uint256 nextPayeeIndex;

function payOut() {
    uint256 i = nextPayeeIndex;
    while (i < payees.length && msg.gas > 200000) {
      payees[i].addr.send(payees[i].value);
      i++;
    }
    nextPayeeIndex = i;
}

Par conséquent, les étapes nécessaires doivent être prises en compte lors de la mise en œuvre d'une boucle sur un tableau. 

Farce de bloc

L'attaquant lance cette attaque pour empêcher les transactions de s'ajouter aux blocs en envoyant des transactions intensives en calcul avec des prix du gaz élevés. Plusieurs transactions sont émises de manière similaire pour consommer la totalité de la limite de gaz. 

En payant les frais de gaz élevés, l'attaquant s'assure que seules les transactions prévues sont ajoutées aux blocs en excluant le reste d'entre eux. 

Action du propriétaire

Chaque contrat a une adresse de propriétaire qui a le pouvoir d'ouvrir ou de suspendre des transactions. Toute l'opération dépend de l'adresse du propriétaire, et donc si elle est perdue, l'utilisateur ne peut pas du tout envoyer de jetons et le fonctionnement du contrat s'effondrera.

Impact de l'attaque DoS

Le bourrage de blocs est l'un des nombreux impacts qui empêchent les transactions légitimes d'être ajoutées aux blocs. Cependant, il existe plusieurs autres impacts des attaques DoS. 

Registre gonflé : Le registre blockchain est l'endroit où les transactions sont enregistrées en permanence. Les nœuds de la blockchain stockent une copie des transactions pour vérifier les doubles dépenses. Une attaque DoS peut gonfler le registre avec des transactions de spam.

Trafic réseau : On connaît les fonctions blockchain basées sur le mode peer-to-peer. Chaque nœud de la blockchain reçoit une copie de la transaction. Une inondation DoS peut entraîner un grand volume de transactions, consommant la bande passante du réseau. 

Échecs de nœud : La blockchain fonctionne sur les nœuds qui nécessitent le support du logiciel pour gérer de gros volumes de données. Pendant l'inondation des transactions, les nœuds peuvent manquer de mémoire, interrompant les opérations.

Crash logiciel : Comme nous en avons discuté, le mempool ou les blocs sont livrés avec certaines limites sur la mémoire qui leur est allouée. Le logiciel reçoit, traite et stocke les transactions dans la limite définie. Lorsque les transactions entrantes dépassent les limites intégrées, le logiciel se bloque.  

Empêcher les contrats intelligents des attaques DoS 

À partir de l'analyse des attaques DoS, les moyens suivants peuvent être utilisés pour atténuer l'attaque. 

énigmes : Les serveurs peuvent générer des puzzles tels que des puzzles de mémoire, des puzzles de verrouillage temporel, des puzzles liés au processeur, etc. Pour qu'un utilisateur accède à un service, les puzzles doivent être résolus, ce qui combat les attaques de spam.

Approche payante : Des frais supplémentaires peuvent être imposés à la blockchain, tels que des frais de minage pour les pools de minage, des frais de transaction, etc. Cela rend le piratage DoS coûteux pour les attaquants, ce qui réduit ces attaques. 

Note de conclusion

Un audit de smart contract réalisé à Audits de plume recherche les vulnérabilités potentielles qui résident dans le codage. Certains d'entre eux incluent la vulnérabilité de réentrance, la collision de stockage, l'attaque aléatoire, le déni de service, etc. 

Cela signifie clairement la contrats intelligents sont soigneusement testés pour être exempts de menaces d'attaque par déni de service. Cela garantit que votre projet est protégé des éventuelles vulnérabilités de l'espace Web3.

Surveillez notre chaîne Telegram pour recueillir les dernières informations sur nos services : https://t.me/quillhash

13 Vues

Horodatage:

Plus de Quillhasch