Смарт-контракты — это самоисполняющиеся контракты на блокчейне. Они устраняют необходимость в посредниках, таких как юристы или банки, автоматизируя процесс исполнения и соблюдения положений контракта. Смарт-контракты могут работать автоматически без участия человека, они безопасны и невосприимчивы к вмешательству. Они привлекательны для людей, компаний и правительств, стремящихся автоматизировать процедуры и сократить транзакционные издержки из-за этой возможности.
Способность смарт-контрактов устранять необходимость в посредниках может снизить транзакционные издержки, ускорить транзакции и повысить прозрачность, что является одним из их главных преимуществ. Поскольку данные записываются в децентрализованный, непроницаемый реестр, смарт-контракты также могут обеспечить большую безопасность и конфиденциальность, чем обычные контракты.
В этой статье мы более подробно рассмотрим смарт-контракты, объясним, как они работают и могут быть взломаны. Читатели могут узнать следующее:
Как работают смарт-контракты
Как можно взломать смарт-контракты
Атаки повторного входа
Переполнение/Недополнение
Зависимость от временных меток
Чеканка и внесение токенов в черный список
Неправильные расчеты
Вредоносные библиотеки и зависимости
Фронтальный ход
Примеры реальных взломов
Стратегии предотвращения и смягчения последствий
Давайте начнем прямо сейчас!
Как работают смарт-контракты
Смарт-контракты работают с использованием кодирования для обеспечения соблюдения условий соглашения. Контракт автоматически запустится, когда будут выполнены предустановленные обстоятельства после публикации кода в блокчейне. После этого момента его нельзя будет изменить.
Например, если две стороны заключают смарт-контракт на продажу дома, то после осуществления платежа и его проверки блокчейном договор немедленно передаст право собственности на дом покупателю.
Многочисленные отрасли, включая финансы, управление цепочками поставок, недвижимость и другие, могут использовать смарт-контракты. Технология способна изменить способ ведения бизнеса и общения друг с другом по мере ее развития и более широкого использования.
Как можно взломать смарт-контракты
Поскольку они могут автоматизировать договорные соглашения без использования посредников, смарт-контракты были объявлены технологией, меняющей парадигму. Как и любая технология, они не защищены от недостатков, и хакеры постоянно ищут новые методы, чтобы воспользоваться ими. Ниже приведены некоторые из наиболее типичных взломов смарт-контрактов:
1. Атаки повторного входа
Атаки с повторным входом может быть сложно обнаружить, поскольку код, кажется, работает правильно, что позволяет злоумышленнику многократно эксплуатировать уязвимость, пока он не добьется успеха. Взлом DAO, в ходе которого злоумышленник украл эфир на сумму 50 миллионов долларов, неоднократно изымая деньги из контракта DAO, является одним из хорошо известных примеров атаки с повторным входом.
Разработчики могут использовать различные методы для снижения опасности атак повторного входа. Например, они могут создавать блокировки мьютекса, чтобы запретить одновременное выполнение одного и того же контракта, или устанавливать ограничения на потребление газа, чтобы остановить длинные рекурсивные функции.
2. Переполнение/недополнение
Когда результат математической операции выходит за пределы типа данных, происходит целочисленное переполнение и потеря значимости.
Последствия целочисленного переполнения и недополнения могут быть катастрофическими. Например, пользователь может снять деньги и остаться с отрицательным балансом. Злоумышленник также может создать чрезвычайно большое значение, чтобы обойти ограничение или запустить атаку типа «отказ в обслуживании».
Разработчики могут предотвратить переполнение и опустошение целых чисел, используя такие типы данных, как BigInt или uint256, которые могут обрабатывать огромные целые числа. Чтобы гарантировать, что входные значения находятся в допустимом диапазоне, они могут дополнительно включать проверки граничных условий.
3. Зависимость от временных меток
Зависимость от временной метки — еще одна проблема, которая может привести к неожиданному поведению. Смарт-контракты могут использовать временные метки для проверки обстоятельств, чувствительных ко времени, включая то, имеет ли пользователь право на выплату. Злоумышленники могут воспользоваться этой слабостью, изменив временную метку или начав транзакцию в определенный момент, чтобы вызвать возникновение условия раньше, чем оно должно произойти.
Разработчики могут подтвердить действительность определенных обстоятельств, не полагаясь на временные метки, используя вместо этого номера блоков. Они также могут установить временные ограничения, чтобы предотвратить выполнение контракта после определенного периода времени. Разработчики также могут получить точные временные метки из надежных внешних источников времени.
4. Чеканка и внесение токенов в черный список
Хакеры могут использовать функции чеканки и черного списка в смарт-контрактах для добавления, удаления или ограничения доступа пользователей к токенам. Например, хакер может создать бесконечное количество токенов с помощью функции чеканки, которые он затем может продать с прибылью.
В качестве альтернативы злоумышленник может использовать функцию черного списка, чтобы запретить доступ к токенам определенных пользователей, что подорвет доверие пользователей. Чтобы остановить подобные атаки, разработчики смарт-контрактов должны правильно сконструировать механизмы чеканки и черного списка и тщательно их протестировать.
5. Неверные расчеты
Для корректной работы смарт-контракты требуют точных расчетов. Неточные оценки могут иметь неожиданные результаты. Например, владелец контракта может потерять деньги, если смарт-контракт содержит ошибку в расчетах, которая позволяет злоумышленнику обойти определенные ограничения или получить доступ к деньгам, на которые у него нет прав. Кроме того, потребители могут запутаться и потерять доверие к смарт-контракту, если ошибка в расчетах приведет к неточным балансам токенов.
6. Вредоносные библиотеки и зависимости
Смарт-контракты часто используют библиотеки и зависимости из других источников. Эти зависимости или библиотеки могут предоставить злоумышленнику доступ к контракту или его средствам, если они вредоносны или скомпрометированы. Злоумышленник может воспользоваться использованием смарт-контрактом библиотеки с бэкдором, например, чтобы захватить контракт. Кроме того, если библиотека уязвима, злоумышленник может использовать смарт-контракт в своих интересах.
7. Фронтальный бег
Действие по продвижению вперед в очереди выполнения транзакции для ее погашения до того, как произойдет известная будущая транзакция, известно в сфере блокчейна и криптовалют как опережение. Чтобы извлечь возможную прибыль и отсечь наличные, это часто делается путем изучения инструкций и функций смарт-контракта, которые ранее никогда не использовались в смарт-контракте.
Когда злоумышленник наблюдает за транзакцией обмена после ее трансляции, но до ее завершения, он совершает атаку с опережением. Затем он переупорядочивает транзакции в своих интересах. Это часто достигается путем добавления майнером или ботом своей новой транзакции перед существующей. Вредоносная транзакция выполняется до того, как существующая транзакция будет завершена.
Примеры реальных взломов смарт-контрактов
Хотя смарт-контракты разработаны так, чтобы быть безопасными, они время от времени нарушались или использовались в вредоносных целях. Ниже приведены некоторые примеры реальных взломов смарт-контрактов:
Взлом KingDice
KingDice — это децентрализованная игровая сеть на основе блокчейна Ethereum. В августе 2017 года хакер похитил Ether на сумму около 300 000 долларов, воспользовавшись уязвимостью в коде смарт-контракта.
Эксплуатация Uniswap V2
В ноябре 2020 года хакер воспользовался уязвимостью смарт-контракта Uniswap V2, чтобы украсть биткоины на сумму почти $300 000. Чтобы манипулировать ценой токена и воспользоваться арбитражной возможностью, злоумышленник использовал мгновенный кредит.
Атака DAO
Разработанная на блокчейне Ethereum, DAO (Decentralized Autonomous Organization) была инвестиционным фондом, основанным на смарт-контрактах. В июне 2016 года хакер украл Ethereum на сумму почти 50 миллионов долларов из DAO, воспользовавшись уязвимостью в программировании. Взлом привел к хард-форку блокчейна Ethereum, что дало начало Ethereum Classic.
Взлом кошелька Parity
В июле 2017 года хакер похитил Ethereum на сумму почти $30 млн, воспользовавшись уязвимостью в кошельке Parity multi-sig. Из-за ошибки в программировании смарт-контракта хакер смог получить контроль над кошельком и перевести все деньги на другой счет.
Стратегии предотвращения и смягчения последствий
Разработчики могут использовать следующие рекомендуемые практики для создания безопасных смарт-контрактов:
Использование проверенных и проверяемых библиотек и зависимостей. Использование проверенных и проверяемых библиотек и зависимостей может помочь снизить риск внедрения уязвимостей в смарт-контракт. Следует избегать использования непроверенного или ненадежного кода, и разработчикам следует тщательно проверять безопасность любого стороннего кода, который они используют.
Реализация проверок граничных условий. Смарт-контракты должны реализовывать проверки граничных условий, включая максимальные и минимальные значения входных параметров. Благодаря этому можно снизить количество атак переполнения и потери значимости целочисленных значений. Эффективность и широкое использование технологий смарт-контрактов зависят от предотвращения и смягчения атак смарт-контрактов.
Использование хорошо зарекомендовавших себя и проверенных библиотек и зависимостей может помочь снизить риск внедрения уязвимостей в смарт-контракт. Следует избегать использования непроверенного или ненадежного кода, и разработчикам следует тщательно проверять безопасность любого стороннего кода, который они используют.
Избегание зависимостей от временных меток. Чтобы снизить вероятность манипуляции временными метками, разработчикам следует воздержаться от использования временных меток в качестве единственной основы для реализации логики смарт-контракта. При выполнении определенных требований они могут использовать альтернативные методы, такие как номера блоков или хэши блоков.
Всестороннее тестирование. Поиск и устранение уязвимостей смарт-контрактов зависит от всестороннего тестирования. Разработчики должны проводить модульные и интеграционные тесты, чтобы подтвердить, что контракт работает так, как задумано, и выявить любые потенциальные проблемы на ранней стадии.
Правильная реализация функций чеканки и черного списка. Разработчики должны быть осторожны при реализации функций чеканки и черного списка, чтобы предотвратить нежелательный доступ и манипуляции.
Обеспечение точности расчетов. Правильная работа смарт-контрактов зависит от точности расчетов. При выполнении сложных математических операций разработчики должны использовать проверенные библиотеки и следить за точностью своих расчетов.
Аудиты безопасности. Аудиты безопасности — полезный метод обнаружения слабых мест в смарт-контрактах. Перед развертыванием смарт-контрактов разработчики могут нанять компании, проводящие аудит смарт-контрактов, чтобы провести аудит. Такие аудиты могут помочь командам найти и устранить любые потенциальные проблемы до того, как код будет запущен в производство.
Формальная проверка. Это математический метод подтверждения точности смарт-контракта. Этот метод может помочь в обеспечении того, что смарт-контракт работает так, как запланировано, и является безопасным.
Премии за обнаружение ошибок. Исследователи безопасности поощряются к обнаружению и сообщению о недостатках смарт-контрактов, предлагая премии за обнаружение ошибок. Чтобы найти и устранить потенциальные проблемы, разработчики могут получить доступ к обширному пулу экспертов по безопасности, заплатив им за поиск уязвимостей.
Заключение
В заключение, хотя смарт-контракты предлагают революционный способ автоматизации транзакций в блокчейне, они уязвимы для взлома и нарушений безопасности. Разработчики должны придерживаться рекомендуемых практик, таких как аудит смарт-контрактов и тестирование безопасности, чтобы предотвратить взлом смарт-контрактов.
Разработчики могут обеспечить долгосрочное здоровье технологии блокчейна и создать надежную экосистему для всех пользователей, свободную от опасностей взлома смарт-контрактов. Они могут достичь такого результата, внедрив такие процедуры, как вознаграждение за ошибки, формальная проверка и аудит безопасности. В конечном итоге, приоритет безопасности имеет важное значение для разработки смарт-контрактов и сектора блокчейна.
Публикация «Как можно взломать смарт-контракт?» впервые появилась на Coinfomania.
