การปฏิเสธบริการโจมตีบนสัญญาอัจฉริยะ: วิธีแก้ไขและหลีกเลี่ยง (คู่มือผู้เชี่ยวชาญ) PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

การปฏิเสธบริการโจมตีสัญญาอัจฉริยะ: วิธีแก้ไขและหลีกเลี่ยง (คู่มือผู้เชี่ยวชาญ)

อ่านเวลา: 6 นาที

เคยเยี่ยมชมไซต์ที่ใช้เวลาในการโหลดนานเพียงเพื่อจะพบว่าไม่สามารถเปิดได้ในขณะนี้? นั่นคือทั้งหมดที่เกี่ยวกับผลกระทบของการโจมตีโดยปฏิเสธการบริการ 

การโจมตีแบบปฏิเสธการให้บริการ (DoS) เป็นหนึ่งในช่องโหว่จำนวนมากที่ต้องระวังอย่างมากเมื่อตรวจสอบสัญญาอัจฉริยะ บล็อกนี้มีจุดมุ่งหมายเพื่อคลี่คลายรายละเอียดของการโจมตี DoS ว่ามันคืออะไร ผลกระทบ ประเภท และอื่นๆ อีกมากมายที่จะเพิ่มเติม

รีบเข้าไปสำรวจพวกมันกันเร็ว 

การโจมตี DoS คืออะไร?

การโจมตี DoS ตั้งใจที่จะขัดขวางความสามารถในการประมวลผลของเครือข่าย เซิร์ฟเวอร์ หรือแอปพลิเคชัน โดยจำกัดไม่ให้รับคำขอจากผู้ใช้ที่ถูกต้องตามกฎหมาย ในกรณีนี้ ผู้โจมตีจะครอบงำเครือข่ายด้วยการส่งทราฟฟิกที่มากขึ้นซึ่งจะทำให้หน่วยความจำและแบนด์วิดท์ของเซิร์ฟเวอร์หมดลง 

เนื่องจากบล็อคเชนมีศักยภาพมหาศาล พวกเขาจึงเป็นเป้าหมายหลักสำหรับการโจมตี DoS เพื่อขโมยความร่ำรวย cryptocurrencies ที่มีชื่อเสียงที่สุดเช่น Bitcoin, Ethereumฯลฯ ก็เคยประสบกับการโจมตีแบบ DoS เช่นกัน 

การปฏิเสธการให้บริการแบบ Distributed (DDoS)

Distributed Denial of Service (DDoS) คือการโจมตี DoS ที่เกี่ยวข้องกับผู้โจมตีที่ควบคุมอุปกรณ์หลายเครื่องเพื่อเริ่มการโจมตีบนโหนดเป้าหมาย

ผู้โจมตีจะสังเกตโหนดเป้าหมายและแชนเนลอุปกรณ์หลายตัวภายใต้การควบคุมของเขาเพื่อส่งข้อมูลจำนวนมากไปยังโหนดเป้าหมาย ทำให้เป้าหมายล้มเหลวและไม่สามารถทำงานที่ระบุได้  

เป้าหมายของการโจมตี DoS ในระบบนิเวศบล็อคเชน

จากการบันทึกเหตุการณ์ที่ผ่านมาของการโจมตี DoS ทุกส่วนของระบบนิเวศบล็อคเชนมีความเสี่ยงต่อการโจมตี DoS และเพื่อชื่อไม่กี่ 

กระเป๋าเงินดิจิตอล: เช่นเดียวกับกระเป๋าเงินใด ๆ กระเป๋าเงิน cryptocurrency ถูกใช้เพื่อจัดเก็บ ส่ง หรือรับ cryptocurrencies และกระเป๋าเงินออนไลน์เหล่านั้นใช้สัญญาอัจฉริยะ ซึ่งมีแนวโน้มที่จะโจมตี DoS ที่ขัดขวางบริการและการโต้ตอบกับ Dapps 

บริการแลกเปลี่ยนสกุลเงินดิจิตอล: แพลตฟอร์มออนไลน์ที่มีการซื้อขายสกุลเงินดิจิทัล และการแลกเปลี่ยนเกิดขึ้นระหว่างผู้ใช้ เป็นเป้าหมายหลักสำหรับแฮ็กเกอร์ในการโจมตี DoS ที่ทำให้แพลตฟอร์มและบริการไม่พร้อมใช้งาน 

ตัวอย่าง: แพลตฟอร์มแลกเปลี่ยน Bitcoin, Bifinex ได้รับการโจมตี DDoS หลายครั้ง 

พูลหน่วยความจำ (ธุรกรรม): ธุรกรรมบนบล็อคเชนต้องได้รับการตรวจสอบก่อนที่จะถูกเพิ่มเข้าไปในบล็อค ก่อนหน้านั้น คำขอธุรกรรมจะถูกเก็บไว้ใน mempool ซึ่งเหมือนกับที่เก็บของธุรกรรมที่ไม่ได้รับการยืนยันซึ่งรอให้นักขุดเลือก 

ธุรกรรมที่มีค่าธรรมเนียมสูงมักจะถูกเลือกโดยผู้ขุด ดังนั้นการท่วม mempool ด้วยธุรกรรมค่าธรรมเนียมขนาดเล็กจำนวนมากส่งผลให้ผู้ใช้จ่ายค่าธรรมเนียมสูงเพื่อดำเนินการธุรกรรม ดังนั้นการโจมตี DoS ได้ใช้เวทย์มนตร์ในการเพิ่มค่าธรรมเนียมการดำเนินการ 

ผู้เข้าร่วมฉันทามติ: พวกเขาคือผู้เล่นที่แก้ตรรกะและตัดสินใจว่าจะเพิ่มบล็อกใดในบล็อกเชน การทำดาเมจ DoS ต่อผู้นำฉันทามติจะหยุดทั้งระบบ 

บริการผสม: ใช้โปรโตคอลสำหรับผู้ใช้ในการทำธุรกรรมโดยไม่ระบุชื่อ พวกเขาประสบการโจมตี DoS ด้วยวิธีการต่างๆ เช่น การร้องขอการมีส่วนร่วมที่มากเกินไปไปยังกลุ่มผสม การป้อนข้อมูลที่ไม่สอดคล้องกันสำหรับการสับเปลี่ยน เป็นต้น 

สัญญาอัจฉริยะ: สัญญาอัจฉริยะคือโปรโตคอลเบื้องหลังทุกธุรกรรมบนบล็อกเชน การโจมตี DoS บนสัญญาอัจฉริยะสามารถหยุดการทำงานของโหนดที่หยุดการทำงานของ Dapps ที่โฮสต์โดยโหนดนั้น

การโจมตี DoS ทำได้หลายวิธี โดยอธิบายรายละเอียดในส่วนต่อไปนี้

การวิเคราะห์ประเภทของสัญญาอัจฉริยะ DoS Attacks 

ช่องโหว่ DoS ในสัญญาอัจฉริยะส่งผลให้เกิดการใช้ทรัพยากรอย่างไม่จำกัดหรือการจัดการสัญญา สิ่งนี้นำไปสู่การระงับการดำเนินกิจกรรมตามปกติหรือขัดจังหวะและยุบตรรกะของสัญญา 

ด้านล่างนี้เป็นการจำแนกประเภทของการโจมตี DoS ต่างๆ ในสัญญาอัจฉริยะ

DoS . ย้อนกลับโดยไม่คาดคิด

เพื่อศึกษาการโจมตี DoS บนสัญญาอัจฉริยะ เรามาดูตัวอย่างสัญญาการประมูล สัญญาการประมูลจะได้รับการอัปเดตด้วยราคาเสนอสูงสุดทุกรายการที่ได้รับ และส่งคืนจำนวนการประมูลของผู้เสนอราคาครั้งก่อนเนื่องจากต่ำกว่าราคาเสนอปัจจุบัน

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

สัญญาโจมตีเริ่มต้นด้วยสัญญาการประมูลในตัวสร้าง ซึ่งเข้าถึงสัญญาการประมูลได้ ในกรณีนี้ โดยการเรียกใช้ฟังก์ชัน 'attack()' ผู้โจมตีจะล็อกจำนวนเงินและด้วยเหตุนี้ จึงไม่สามารถส่งเงินคืนจำนวนที่เสนอให้แก่ผู้โจมตีได้แม้จะได้รับการเสนอราคาที่สูงกว่านั้นก็ตาม 

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

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

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

}

เป็นเพราะสัญญา 'ผู้โจมตี' ไม่ได้รวมฟังก์ชัน 'receive()' หรือฟังก์ชันทางเลือกในการคืนเงิน Ether ส่งผลให้เกิดการย้อนกลับโดยไม่คาดคิด ทำให้ผู้โจมตีทำสัญญาเป็นผู้เสนอราคาสูงสุดเสมอ 

บล็อกแก๊สจำกัด DoS 

บล็อกมีขีดจำกัดการใช้ก๊าซสูงสุดซึ่งเป็นสัดส่วนกับปริมาณงานคำนวณที่ต้องทำ ในกรณีที่เกินขีดจำกัดของก๊าซ จะนำไปสู่การโจมตี DoS สองประเภท

Gas Limit DoS – การดำเนินการตามสัญญาที่ไม่มีขอบเขต

มีขีดจำกัดของก๊าซที่กำหนดไว้ และหากธุรกรรมถึงขีดจำกัดของก๊าซที่สูงกว่าขีดจำกัดที่ตั้งไว้จะส่งผลให้เกิดความล้มเหลวในการทำธุรกรรม 

มันจะยิ่งแย่ลงไปอีกเมื่อผู้โจมตีควบคุมก๊าซที่จำเป็น นั่นคือเมื่อผู้โจมตีเพิ่มที่อยู่สองสามแห่งเพื่อขอเงินคืนเพียงเล็กน้อย การคืนเงินแต่ละครั้งต้องเสียค่าธรรมเนียมน้ำมัน ดังนั้นค่าน้ำมันจึงเกินขีดจำกัดที่ทำให้ไม่สามารถทำธุรกรรมการคืนเงินได้ 

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

ดังนั้นจึงต้องพิจารณาขั้นตอนที่จำเป็นในขณะที่ใช้การวนซ้ำบนอาร์เรย์ 

บล็อกการบรรจุ

ผู้โจมตีเริ่มการโจมตีนี้เพื่อกักธุรกรรมจากการเพิ่มไปยังบล็อกโดยส่งธุรกรรมที่เข้มข้นด้วยการคำนวณด้วยราคาก๊าซที่สูง มีการออกธุรกรรมหลายรายการในลักษณะเดียวกันเพื่อใช้ขีดจำกัดก๊าซทั้งหมด 

โดยการจ่ายค่าธรรมเนียมน้ำมันที่สูง ผู้โจมตีจะตรวจสอบให้แน่ใจว่ามีการเพิ่มเฉพาะธุรกรรมที่ตั้งใจไว้ในบล็อกโดยไม่ทิ้งส่วนที่เหลือ 

การดำเนินการของเจ้าของ

ทุกสัญญามีที่อยู่ของเจ้าของที่มีอำนาจในการเปิดหรือระงับการทำธุรกรรม การดำเนินการทั้งหมดขึ้นอยู่กับที่อยู่ของเจ้าของ ดังนั้นหากสูญหาย ผู้ใช้จะไม่สามารถส่งโทเค็นได้เลย และการทำงานของสัญญาจะล่มสลาย

ผลกระทบของ DoS Attack

การบรรจุบล็อกเป็นหนึ่งในผลกระทบมากมายที่ป้องกันไม่ให้มีการเพิ่มธุรกรรมที่ถูกต้องลงในบล็อก อย่างไรก็ตาม การโจมตี DoS ยังมีผลกระทบอื่นๆ อีกหลายประการ 

บัญชีแยกประเภทป่อง: บัญชีแยกประเภทบล็อคเชนเป็นที่ที่บันทึกธุรกรรมอย่างถาวร โหนดบล็อคเชนจะเก็บสำเนาของธุรกรรมเพื่อตรวจสอบการใช้จ่ายซ้ำซ้อน การโจมตี DoS สามารถขยายบัญชีแยกประเภทด้วยธุรกรรมสแปม

ปริมาณการใช้เครือข่าย: เรารู้จักฟังก์ชันบล็อคเชนตามโหมดเพียร์ทูเพียร์ ทุกโหนดในบล็อคเชนจะได้รับสำเนาของธุรกรรม น้ำท่วม DoS อาจส่งผลให้มีปริมาณธุรกรรมมาก ใช้แบนด์วิดท์เครือข่าย 

ความล้มเหลวของโหนด: ฟังก์ชันบล็อคเชนบนโหนดที่ต้องการการสนับสนุนจากซอฟต์แวร์เพื่อจัดการข้อมูลปริมาณมาก ในระหว่างการน้ำท่วมธุรกรรม โหนดอาจไม่มีหน่วยความจำ หยุดการดำเนินการ

ซอฟต์แวร์ล่ม: ดังที่เราได้กล่าวไปแล้ว mempool หรือ block นั้นมาพร้อมกับข้อจำกัดบางอย่างในหน่วยความจำที่จัดสรรให้กับพวกมัน ซอฟต์แวร์รับ ประมวลผล และจัดเก็บธุรกรรมภายในขีดจำกัดที่กำหนด เมื่อธุรกรรมที่เข้ามาเกินขีดจำกัดในตัว ซอฟต์แวร์จะขัดข้อง  

ยับยั้งสัญญาอัจฉริยะจากการโจมตี DoS 

จากการวิเคราะห์การโจมตี DoS คุณสามารถใช้วิธีต่อไปนี้เพื่อบรรเทาการโจมตี 

ปริศนา: เซิร์ฟเวอร์สามารถสร้างปริศนาต่างๆ ได้ เช่น ตัวต่อหน่วยความจำ ตัวต่อล็อคเวลา ตัวต่อที่ผูกกับ CPU ฯลฯ เพื่อให้ผู้ใช้สามารถเข้าถึงบริการได้ ปริศนาจะต้องได้รับการแก้ไข ซึ่งต่อสู้กับการโจมตีของสแปม

วิธีการคิดค่าธรรมเนียม: สามารถเรียกเก็บค่าธรรมเนียมเพิ่มเติมในบล็อคเชน เช่น ค่าธรรมเนียมการขุดสำหรับพูลการขุด ค่าธรรมเนียมการทำธุรกรรม ฯลฯ สิ่งนี้ทำให้แฮ็ค DoS มีค่าใช้จ่ายสูงสำหรับผู้โจมตี ซึ่งจะทำให้การโจมตีดังกล่าวลดลง 

สรุปหมายเหตุ

การตรวจสอบสัญญาอัจฉริยะดำเนินการที่ QuillAudits มองหาช่องโหว่ที่อาจอยู่ในการเข้ารหัส บางส่วนรวมถึงช่องโหว่ในการกลับเข้ามาใหม่ การชนกันของการจัดเก็บ การจู่โจมแบบสุ่ม การปฏิเสธบริการ และอื่นๆ 

ซึ่งหมายความอย่างชัดเจนว่า สัญญาสมาร์ท ได้รับการทดสอบอย่างละเอียดถี่ถ้วนว่าปราศจากภัยคุกคามการโจมตีแบบปฏิเสธการให้บริการ เพื่อให้แน่ใจว่าโครงการของคุณได้รับการปกป้องจากช่องโหว่ที่เป็นไปได้ของพื้นที่ Web3

ระวังช่องโทรเลขของเราเพื่อรวบรวมข้อมูลเชิงลึกล่าสุดเกี่ยวกับบริการของเรา: https://t.me/quillhash

13 เข้าชม

ประทับเวลา:

เพิ่มเติมจาก ควิลแฮช