Denial of Service Attacks on Smart Contracts: How to Fix and Avoid (An Expert Guide) PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Denial of Service-attacker på smarta kontrakt: hur man åtgärdar och undviker (en expertguide)

Lästid: 6 minuter

Har du någonsin besökt en sida som tog lång laddningstid bara för att upptäcka att den inte kan öppnas för tillfället? Det handlar helt enkelt om effekten av Denial of Service-attacker. 

Denial of Service (DoS)-attacker är en av de många sårbarheter som man tittar mycket efter när man granskar smarta kontrakt. Den här bloggen syftar till att varva ner alla detaljer i DoS-attacken - vad det är, dess inverkan, typer och mycket mer att lägga till.

Låt oss snabbt gå in och utforska dem alla. 

Vad är en DoS-attack?

DoS-attacken avser att störa bearbetningsförmågan hos ett nätverk, en server eller en applikation, vilket hindrar från att ta emot förfrågningar från legitima användare. I detta överväldigar angriparen nätverket genom att skicka mer trafik som tömmer servrarnas minne och bandbredd. 

På grund av den enorma potential som blockchain har, är de det primära målet för DoS-attacker för att stjäla rikedomarna. De mest kända kryptovalutorna, som Bitcoin, Ethereum, etc., har också upplevt DoS-attacker. 

Distributed Denial of Service (DDoS)

Distributed Denial of Service (DDoS) är en DoS-attack som involverar angriparen som kontrollerar flera enheter för att starta en attack mot målnoden.

Angriparen observerar målnoden och kanaliserar de flera enheterna under hans kontroll för att skicka en stor mängd information som översvämmer målnoden. Detta gör att målet kraschar och inte kan utföra den angivna uppgiften.  

Mål för DoS-attacker i Blockchain-ekosystemet

Från inspelningar av tidigare händelser av DoS-attacker är varje del av blockchain-ekosystemet sårbart för DoS-attacker. Och för att nämna några, 

Kryptovaluta plånböcker: Som med vilken plånbok som helst, används kryptovaluta för att lagra, skicka eller ta emot kryptovalutor. Och dessa onlineplånböcker använder smarta kontrakt, som är benägna för DoS-attacker som hindrar deras tjänster och interaktion med Dapps. 

Utbytestjänster för kryptovaluta: Onlineplattformen där kryptovalutor handlas och utbytet sker mellan användare. De är främsta mål för hackare att utföra DoS-attacker som orsakar otillgänglighet för plattformen och dess tjänster. 

Ex: Bitcoin-utbytesplattform, Bifinex har drabbats av DDoS-attacker flera gånger. 

Minnes(transaktions)pooler: Transaktioner på blockkedjan måste valideras innan de läggs till i blocken. Fram till dess lagras transaktionsförfrågningarna i mempoolen, som är som ett arkiv med obekräftade transaktioner som väntar på att bli plockade av en gruvarbetare. 

Transaktionen med en hög avgift kommer troligen att väljas av gruvarbetaren. Så att översvämma mempoolen med många transaktioner med små avgifter resulterar i att användaren betalar höga avgifter för att få sin transaktion bearbetad. Således har DoS-attacken arbetat sin magi i att höja behandlingsavgiften. 

Konsensusdeltagare: De är spelarna som löser logiken och bestämmer vilka block som ska läggas till blockkedjan. Att tillfoga DoS-attacker mot konsensusledaren stoppar hela systemet. 

Blandningstjänster: Den använder ett protokoll för att användarna ska kunna utföra transaktioner anonymt. De utsätts för DoS-attacker på olika sätt, såsom överdrivna förfrågningar om deltagande till blandningspoolen, inkonsekvent input för shuffle, etc. 

Smarta kontrakt: Smart kontrakt är det underliggande protokollet bakom varje transaktion på blockkedjan. DoS-attacker på smarta kontrakt kan krascha noden som stoppar funktionen hos Dapps som den är värd för.

DoS-attacker utförs på dem på flera möjliga sätt, som beskrivs i följande avsnitt.

Analysera typer av smarta kontrakt DoS-attacker 

DoS-sårbarheten i smarta kontrakt resulterar i obegränsad resursanvändning eller manipulation av kontraktet. Detta leder till avstängning av utförandet av normala aktiviteter eller avbryter och kollapsar kontraktets logik. 

Nedan finns klassificeringen av olika DoS-attacker i smarta kontrakt

Oväntat Återställ DoS

För att studera denna DoS-attack på smarta kontrakt, låt oss ta ett auktionskontrakt som exempel. Auktionskontraktet uppdateras med varje högsta bud som tas emot och returnerar budbeloppet för den tidigare budgivaren eftersom det är lägre än det aktuella budet.

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;
    }
}

Angriparkontraktet initieras med auktionskontraktet i konstruktören, som får tillgång till auktionskontraktet. I detta, genom att anropa 'attack()'-funktionen, låser angriparen beloppet och därmed misslyckas den med att returnera budbeloppet till angriparen även om han får ett högre bud än så. 

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

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

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

}

Det beror på att 'angriparen'-kontraktet inte innehåller någon 'receive()'- eller reservfunktion för att återbetala Ether, vilket resulterar i en oväntad återgång. Detta gör att angriparen alltid är högstbjudande. 

Blockera gasgräns DoS 

Blocket har en maximal gräns för gas som ska användas som är proportionell mot mängden beräkningsarbete som ska utföras. Om gasgränsen överskrids leder det till två typer av DoS-attacker.

Gas Limit DoS – Obegränsad kontraktsdrift

Det finns en fastställd gasgräns, och om transaktionerna når en högre gasgräns än den fastställda gränsen resulterar det i transaktionsmisslyckande. 

Ännu värre blir det när angriparen manipulerar gasen som behövs. Det är då angriparen lägger till några adresser för en mycket liten återbetalning. Varje återbetalning kostar en gasavgift; sålunda överskrider gaskostnaden gränsen som hindrar återbetalningstransaktionerna från att ske. 

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;
}

Därför måste nödvändiga steg övervägas när man implementerar en loop över en array. 

Blockfyllning

Angriparen initierar denna attack för att hindra transaktioner från att läggas till i blocken genom att skicka beräkningsintensiva transaktioner med höga gaspriser. Flera transaktioner görs på liknande sätt för att förbruka hela gasgränsen. 

Genom att betala den höga gasavgiften säkerställer angriparen att endast de avsedda transaktionerna läggs till blocken och resten av dem utelämnas. 

Ägaråtgärd

Varje kontrakt har en ägaradress som har befogenhet att öppna eller avbryta transaktioner. Hela operationen beror på ägarens adress, så om den försvinner kan användaren inte skicka tokens alls, och kontraktsfunktionen kommer att kollapsa.

Effekten av DoS-attack

Blockfyllning är en av de många effekterna som förhindrar att legitima transaktioner läggs till i blocken. Det finns dock flera andra effekter av DoS-attacker. 

Uppsvälld huvudbok: Blockchain-reskontran är där transaktionerna registreras permanent. Blockkedjenoderna lagrar en kopia av transaktionerna för att verifiera dubbla utgifter. En DoS-attack kan blåsa upp huvudboken med skräpposttransaktioner.

Nätverkstrafik: Vi känner till blockchain-funktioner baserade på peer-to-peer-läge. Varje nod i blockkedjan får en kopia av transaktionen. En DoS-översvämning kan resultera i en stor transaktionsvolym som förbrukar nätverkets bandbredd. 

Nodfel: Blockchain fungerar på de noder som kräver stöd av programvaran för att hantera stora datamängder. Under transaktionsöversvämning kan noderna få slut på minne, vilket stoppar operationerna.

Programkrasch: Som vi diskuterade kommer mempoolen eller blocken med vissa begränsningar för minnet som tilldelats dem. Programvaran tar emot, bearbetar och lagrar transaktioner inom den angivna gränsen. När de inkommande transaktionerna överskrider de inbyggda gränserna kraschar programvaran.  

Begränsa smarta kontrakt från DoS-attacker 

Från analysen av DoS-attacker kan följande sätt användas för att mildra attacken. 

pussel: Servrarna kan generera pussel som minnespussel, tidslåsningspussel, CPU-bundna pussel etc. För att en användare ska få tillgång till en tjänst måste pusslen lösas, vilket bekämpar spamattackerna.

Avgiftsbaserat tillvägagångssätt: En extra avgift kan läggas på blockkedjan, såsom gruvavgifter för gruvpooler, transaktionsavgifter etc. Detta gör att DoS-hacket blir kostsamt för angriparna och får därmed ned sådana attacker. 

Avslutande anmärkning

En smart kontraktsrevision utförd kl QuillAudits ser efter de potentiella sårbarheter som ligger i kodningen. Några av dem inkluderar sårbarhet för återinträde, lagringskollision, slumpmässig attack, Denial of Service och så vidare. 

Detta betyder helt klart smarta kontrakt är noggrant testade för att vara fria från Denial of Service-attackshot. Detta säkerställer att ditt projekt är skyddat från möjliga sårbarheter i Web3-utrymmet.

Se upp för vår Telegram-kanal för att samla de senaste insikterna om våra tjänster: https://t.me/quillhash

13 Visningar

Tidsstämpel:

Mer från Pilbåt