Загрузка...

Взлом смарт-контрактов: руководство для начинающих ($амых начинающих)

Тема в разделе Криптовалюты создана пользователем Bully_inactive4972529 7 июн 2022. 2812 просмотров

  1. Bully_inactive4972529
    Bully_inactive4972529 Автор темы 7 июн 2022 Заблокирован(а) 159 1 фев 2022
    [IMG]
    Проще говоря, смарт-контракт — это не что иное, как компьютерная программа, работающая на блокчейне. Хотя основная цель выполнения реальных контрактов с помощью кода состояла в том, чтобы сократить затраты и время, необходимые для преобразования контрактов на естественном языке в исполняемый код, количество вариантов использования, связанных со смарт-контрактами, значительно увеличилось.

    Если вы новичок во всей этой идее смарт-контрактов и не знаете, с чего начать, вот кое-что, что может вам помочь!
    Смарт-контракт можно определить как соглашение в блокчейне между двумя людьми. Самая важная часть этого соглашения заключается в том, что оно самоисполнимо, безопасно и не требует участия третьих лиц, таких как юристы или банки. Это также устраняет риск контрагента, позволяя пользователям проверять свои балансы в любой момент времени и следить за тем, чтобы никто не изменил их балансы без взаимного согласия. Лучший способ понять, что мы имеем в виду, когда говорим «умные контракты», — это разобрать его название по частям:

    1. Контракты: после того, как различные законы были добавлены друг к другу с течением времени по разным причинам, контракт стал больше, чем просто обмен обещаниями между двумя людьми. Хорошо составленное соглашение должно содержать всевозможные заверения, гарантии и оговорки, призванные защитить обе стороны от непредвиденных событий, происходящих в ходе сделки.
    2. СМАРТ: это относится к тому, насколько хорошо эти соглашения самоисполняются в реальных жизненных ситуациях по сравнению с тем, когда они действительно необходимы. Теперь мы знаем, что представляют собой смарт-контракты, давайте посмотрим на некоторые примеры из реального мира! Простым примером может быть перевод денег из вашего банка в учетную запись непосредственно в учетную запись вашего друга каждый месяц, не требуя от вас (или вашего друга) ручного перевода.
    Из-за того, как разработаны смарт-контракты, они допускают ненадежное выполнение кода. Это означает, что мы можем создавать автономные организации, которые не должны контролироваться центральной властью. Они снижают транзакционные издержки и устраняют необходимость в доверенных третьих сторонах. Почему это важно? Потому что это позволяет нам автоматизировать транзакции друг с другом и гарантировать, что они происходят в порядке, согласованном всеми сторонами (нужная сумма денег, отправка в нужное время и т. д.). Это также снижает потребность в третьих лицах, которые управляют этим процессом вручную (например, в банках или юристах).
    [Смарт-контракт — это компьютерный протокол, предназначенный для цифрового облегчения, проверки или обеспечения выполнения переговоров или исполнения контракта. Смарт-контракты позволяют выполнять надежные транзакции без участия третьих лиц. Эти транзакции отслеживаются и необратимы. Смарт-контракты состоят из программного кода, работающего на технологии блокчейн. Этот код взаимодействует с собственным реестром блокчейна для выполнения определенных функций при выполнении определенных условий. Код может быть написан на различных языках программирования, таких как Solidity (используется Ethereum), Simplicity (используется Blockstream) и других, в зависимости от типа блокчейна, используемого для развертывания смарт-контракта.

    Вообще говоря, смарт-контракт создается по двум основным причинам:
    • Хранить данные о соглашении между двумя людьми прозрачным и бесконфликтным способом, избегая услуг посредника
    • Для автоматического запуска приложения на основе этого соглашения

      Solidity — самый популярный язык для написания смарт-контрактов Ethereum. Это язык, ориентированный на контракты, что означает, что он был создан для написания смарт-контрактов и имитирует концепции контрактов реального мира, такие как класс, переменные состояния, функции, наследование и библиотеки. Solidity также наследует некоторый синтаксис от языков JavaScript и Python.

      Код Solidity написан на ECMAScript (или JavaScript) и скомпилирован в байт-код для EVM. Он статически типизирован, поддерживает наследование и библиотеки.
    /SPOILER]
    Чтобы начать взлом смарт-контрактов, вам необходимо сделать следующее:
    В смарт-контрактах существует несколько уязвимостей, которыми могут воспользоваться злоумышленники. Эти атаки могут позволить злоумышленнику получить контроль над выполнением кода и украсть средства, удалить данные или изменить состояние контракта (например, изменить правила, для применения которых он был запрограммирован).

    Самая заметная уязвимость называется «атакой воспроизведения», потому что она позволяет злоумышленнику многократно выполнять действия со смарт-контрактом (например, отправлять транзакции), не тратя никаких денег из собственных средств, что противоречит цели использования платформы! Если вы отправляете транзакцию, а код вашего контракта принимает эту транзакцию для какой-либо цели (например, для выпуска токенов), то любая последующая транзакция с другими входными данными должна быть отклонена логикой вашего контракта как недействительная, поскольку между этими счетами не было перевода средств. ! К сожалению, это происходит не всегда, поскольку злоумышленники часто могут написать собственные контракты, которые не проверяют наличие повторных транзакций.

    Другой серьезной проблемой является целочисленное переполнение и потеря значимости. Целочисленное переполнение происходит, когда функция выходит за пределы своего ограниченного диапазона доступных чисел (т. е. добавление одного миллиона долларов к $0 оценивается в $1 миллион). Потеря значимости происходит при попытке преобразовать одно большое число в другое большое число (например, преобразование 1 миллиарда долларов в 4 миллиарда долларов).

    Повторный вход — еще один распространенный механизм атаки: злоумышленник, получивший контроль над вашим кодом, может использовать этот доступ для самостоятельного выполнения дальнейших действий, чтобы использовать другие части вашего кода или даже получить доступ к другим учетным записям, контролируемым вами на этой платформе! Такого рода проблемы возникают при использовании функций, разработанных таким образом, что они могут принимать несколько аргументов для выполнения дополнительного кода — обычно называемых функциями обратного вызова.
    Атака с повторным воспроизведением — это когда транзакция передается в сеть злоумышленником, а затем повторяется тем же субъектом после того, как она была изначально преобразована в блок.

    Атаки повторного воспроизведения происходят, когда злоумышленник транслирует транзакцию в сеть, а затем пытается ретранслировать ту же транзакцию до того, как майнеры успеют преобразовать ее в блок. Это может привести к отмене первой трансляции этой транзакции, поскольку майнеры будут игнорировать дополнительные транзакции с идентичными одноразовыми номерами и отправителями.

    Этого можно избежать, убедившись, что учетная запись отправителя и одноразовый номер каждой транзакции уникальны.

    Примером такой атаки может быть ситуация, когда Алиса отправляет Бобу 10 эфиров, но Ева (у которой есть доступ к секретному ключу Алисы) ретранслирует Алисе еще раз отправку Бобу 10 эфиров, прежде чем они будут добыты в блок. В этом случае успешно пройдет только одна из двух попыток Евы передать эфир. Если бы оба были приняты, мы могли бы сказать, что Ева дважды потратила свой эфирный перевод.
    Важно начать с рассмотрения того, что такое целочисленное переполнение и потеря значимости. Эти две функции допускают переполнение и потеря значимости — это невозможные результаты, которые могут привести к плохим последствиям. Целое число — это обычно целое число, например 1, 5 или 45; это основная единица компьютерных данных. И переполнение, и потеря значимости приведут к тому, что целочисленное значение будет больше или равно исходному числу и меньше исходного числа — другими словами, оба они представляют невозможность!
    Что такое повторная атака? Повторная атака — это ошибка блокчейна, которая позволяет хакерам украсть баланс смарт-контракта. Это происходит, когда смарт-контракт вызывает ненадежный внешний адрес, и этот внешний адрес может снова вызвать исходный контракт до завершения первой транзакции. Это может позволить вредоносному коду злоумышленника слить средства с первой учетной записи до того, как он завершит выполнение.

    Как вы можете защититься от этого? Вот два способа защитить ваши контракты от уязвимости:

    • Вы должны использовать статусы require() или assert() каждый раз, когда ваша функция переводит эфир, и убедитесь, что нет ожидающих снятия средств с той же учетной записи. Однако имейте в виду что это не распространяется на все случаи, поскольку снятие части вашего баланса может позволить злоумышленнику снять больше с помощью повторного входа.
    • Лучший способ защитить себя от атак с повторным входом — тщательная проработка кода. Например, в некоторых случаях может быть лучше использовать такие механизмы, как шаблоны вывода средств, вместо прямой передачи эфира из ваших контрактов
    Смарт-контракты — это код. А код, как мы все знаем, можно взломать. Учитывая то количество внимания, которое уделяется смарт-контрактам в публичной сфере, никто не должен удивляться, если хакеры попытаются использовать уязвимости безопасности в смарт-контрактах.

    Имея это в виду, важно, чтобы вы не воспринимали безопасность смарт-контрактов как должное. Вам необходимо протестировать свой смарт-контракт с помощью инструментов автоматизации тестирования и проверить его безопасность с помощью опытных инженеров и других экспертов, специализирующихся на технологии блокчейн.

    Для вас также важно понимать инструменты, которые вы используете, и даже то, как работает код других людей, чтобы вы могли выявлять потенциальные проблемы до того, как они возникнут во время выполнения транзакций.


    Технология смарт-контрактов никуда не денется.

    Надеюсь, вам понравилось это краткое введение в смарт-контракты, и теперь вам интересно, как вы можете принять участие в этой области. Если да, то у меня для вас хорошие новости! Вы уже обладаете некоторыми необходимыми навыками.

    Если вы хорошо разбираетесь в Javascript или разбираетесь в C++/Python(Ruby)/GoLang и Linux, то это определенно то, что стоит изучить дальше. Это основные языки, используемые большинством блокчейн-проектов для написания смарт-контрактов. Кроме того, если у вас есть опыт работы с языком Solidity Ethereum, то это еще лучше! Если нет, то не беспокойтесь! Существует множество онлайн-ресурсов, которые помогут вам быстро освоить основы. Вы также можете присоединиться к различным каналам сообщества, где люди будут готовы ответить на любые вопросы, которые могут возникнуть, когда вы начнете больше узнавать об этой захватывающей новой технологии.
     
  2. kira35
    kira35 7 июн 2022 11 18 янв 2017
    Очень познавательно :finger_up:
     
  3. ar1kul
    ar1kul 7 июн 2022 Заблокирован(а) 30 10 ноя 2021
    Такое чувство что это откуда-то скопировано.
    Человек в здравом уме не напишет столько для статьи, какой-то шаблонный текст:roflanOld:
     
    1. kira35
      Так в спойлере "ВАЖНО" написано откуда статья.
  4. GregIn
    GregIn 8 июн 2022 Заблокирован(а) 2520 4 авг 2021
    Интересно было ознакомиться :finger_up:
     
  5. oshieteyo
    oshieteyo 11 июн 2022 Точка невозврата 446 11 мар 2018
    [IMG] Я люблю такие туториалы :fallout_cool:
     
Загрузка...
Top