Атаки на відмову в обслуговуванні на смарт-контракти: як виправити та уникнути (посібник для експертів) PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Атаки з відмовою в обслуговуванні на смарт-контракти: як виправити та уникнути (посібник експерта)

Час читання: 6 протокол

Ви коли-небудь відвідували сайт, який довго завантажувався, щоб виявити, що його зараз неможливо відкрити? Це просто все про вплив атак на відмову в обслуговуванні. 

Атаки на відмову в обслуговуванні (DoS) є однією з багатьох вразливостей, на які в основному звертають увагу під час аудиту смарт-контрактів. Цей блог має на меті розкрити тонкощі DoS-атаки – що це таке, її вплив, типи та багато іншого, що можна додати.

Давайте швидко зайдемо та дослідимо їх усі. 

Що таке DoS-атака?

DoS-атака має на меті порушити можливості обробки мережі, сервера або програми, утримуючи запити від законних користувачів. У цьому випадку зловмисник переповнює мережу, надсилаючи більше трафіку, який виснажує пам’ять і пропускну здатність серверів. 

Через величезний потенціал блокчейну вони є основною мішенню для DoS-атак, спрямованих на крадіжку багатств. Найвідоміші криптовалюти, такі як Bitcoin, Ethereum, тощо, також зазнали DoS-атак. 

Розподілений відмова в обслуговуванні (DDoS)

Розподілена відмова в обслуговуванні (DDoS) — це DoS-атака, у якій зловмисник контролює кілька пристроїв для здійснення атаки на цільовий вузол.

Зловмисник спостерігає за цільовим вузлом і направляє кілька пристроїв під його контролем, щоб надіслати велику кількість інформації, що переповнює цільовий вузол. Це призводить до збою цільової програми та неможливості виконати вказане завдання.  

Цілі DoS-атак в екосистемі блокчейн

Судячи з записів минулих подій DoS-атак, кожна частина екосистеми блокчейну вразлива до DoS-атак. І, щоб назвати декілька, 

Криптовалютні гаманці: Як і будь-який гаманець, криптовалютний гаманець використовується для зберігання, надсилання та отримання криптовалют. І ці онлайн-гаманці використовують смарт-контракти, які схильні до DoS-атак, які перешкоджають їх послугам і взаємодії з Dapps. 

Сервіси обміну криптовалюти: Онлайн-платформа, на якій торгують криптовалютами та здійснюють обмін між користувачами. Вони є основними цілями для хакерів для здійснення атак DoS, які призводять до недоступності платформи та її сервісів. 

Наприклад: платформа обміну біткойнами Bifinex кілька разів зазнавала DDoS-атак. 

Пули пам'яті (транзакції): Транзакції в блокчейні потребують перевірки перед додаванням до блоків. До того часу запити на транзакції зберігаються в mempool, який схожий на сховище непідтверджених транзакцій, які очікують на вибір майнером. 

Транзакція з високою комісією, швидше за все, буде обрана майнером. Таким чином, заповнення mempool великою кількістю транзакцій з невеликими комісіями призводить до того, що користувач платить високі комісії за обробку своєї транзакції. Таким чином, DoS-атака спрацювала чудово, піднявши комісію за обробку. 

Учасники консенсусу: Вони є гравцями, які розгадують логіку та вирішують, які блоки потрібно додати до блокчейну. Нанесення DoS-атак на лідера консенсусу зупиняє всю систему. 

Послуги змішування: Він використовує протокол для анонімного виконання транзакцій користувачами. Вони зазнають DoS-атак різними способами, як-от надмірна кількість запитів на участь у пулі змішування, непослідовний вхід для перемішування тощо. 

Розумні контракти: Смарт-контракт — це основний протокол, що лежить в основі кожної транзакції в блокчейні. DoS-атаки на смарт-контракти можуть привести до збою вузла, що зупинить функціонування Dapps, розміщених на ньому.

DoS-атаки здійснюються на них декількома можливими способами, детально описаними в наступному розділі.

Аналіз типів DoS-атак смарт-контрактів 

Уразливість 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-атаки

Наповнення блоками є одним із багатьох впливів, які перешкоджають додаванню законних транзакцій до блоків. Однак існує кілька інших наслідків DoS-атак. 

Роздута книга: У книзі блокчейну транзакції постійно реєструються. Вузли блокчейну зберігають копію транзакцій для перевірки подвійних витрат. Атака DoS може призвести до роздуття книги через спам-транзакції.

Мережевий трафік: Ми знаємо функції блокчейну, засновані на одноранговому режимі. Кожен вузол у блокчейні отримує копію транзакції. Затоплення DoS може призвести до великого обсягу транзакцій, споживаючи пропускну здатність мережі. 

Збої вузла: Блокчейн працює на вузлах, яким потрібна підтримка програмного забезпечення для обробки великих обсягів даних. Під час затоплення транзакцій на вузлах може вичерпатися пам’ять, що призупинить виконання операцій.

Збій програмного забезпечення: Як ми обговорювали, mempool або блоки мають певні обмеження на виділену їм пам’ять. Програмне забезпечення отримує, обробляє та зберігає транзакції в межах встановленого ліміту. Коли вхідні транзакції перевищують встановлені обмеження, програмне забезпечення виходить з ладу.  

Стримуйте смарт-контракти від DoS-атак 

Виходячи з аналізу DoS-атак, для пом’якшення атаки можна застосувати наступні способи. 

Пазли: Сервери можуть генерувати головоломки, такі як головоломки пам’яті, головоломки блокування часу, головоломки, пов’язані з процесором тощо. Щоб користувач отримав доступ до служби, головоломки мають бути розв’язані, що бореться з атаками спаму.

Платний підхід: На блокчейн може накладатися додаткова комісія, наприклад комісія за майнінг для пулів майнінгу, комісія за транзакції тощо. Це робить злом DoS дорогим для зловмисників, тим самим пригнічуючи такі атаки. 

Заключна примітка

Аудит смарт-контракту, проведений у QuillAudits шукає потенційні вразливості, які лежать у кодуванні. Деякі з них включають вразливість повторного входу, колізію зберігання, випадкову атаку, відмову в обслуговуванні тощо. 

Це явно означає розумні контракти ретельно перевіряються на відсутність загроз атак типу «відмова в обслуговуванні». Це гарантує, що ваш проект захищено від можливих вразливостей простору Web3.

Слідкуйте за нашим каналом Telegram, щоб отримати останню інформацію про наші послуги: https://t.me/quillhash

13 думки

Часова мітка:

Більше від Квілхаш